ThànhThành
phầnphần
cơcơ
bảnbản
củacủa
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
ThànhThành
phầnphần
cơcơ
bảnbản
củacủa
chươngchương trìnhtrình
1Nhập môn lập trình - Nguyễn Minh Huy
NộiNội dungdung
GiớiGiới thiệuthiệu ngônngôn ngữngữ C.C.
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
2Nhập môn lập trình - Nguyễn Minh Huy
NộiNội dungdung
GiớiGiới thiệuthiệu ngônngôn ngữngữ C.C.
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
3Nhập môn lập trình - Nguyễn Minh Huy
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC
LịchLịch sửsử phátphát triểntriển::
NămNăm rara đờiđời??
TácTác
giảgiả
??
TácTác
giảgiả
??
TiềnTiền thânthân??
HậuHậu duệduệ??
ĐặcĐặc điểmđiểm??
SáchSách thamtham khảokhảo??
Dennis Ritchie, Brian Kernighan, 1973
4Nhập môn lập trình - Nguyễn Minh Huy
K&R C, 1978
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC
CấuCấu trúctrúc chươngchương trìnhtrình C:C:
Chương trình Các phần của chương trình
#include
<
stdio.h
>
1.
Phần
khai
báo
thư
viện
.
#include
<
stdio.h
>
#include <math.h>
1.
Phần
khai
báo
thư
viện
.
int a, b, c;
void nhap();
2. Phần khai báo biến
và hàm dùng chung.
void main()
{
3. Phần chương trình chính.
5Nhập môn lập trình - Nguyễn Minh Huy
{
}
void nhap()
{
}
4. Phần cài đặt các hàm dùng chung.
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC
CácCác kýký tựtự sửsử dụngdụng trongtrong chươngchương trìnhtrình C:C:
Bảng chữ cái Latin A Z, a z
Bộ chữ số thập phân 0 9
Phép toán số học +, -, *, /, %, =, (, )
Phép toán so sánh >, <, >=, <=, ==, !=
Phép toán logic !, &&, ||
Phép toán trên bit &, |, >>, <<
Ký tự đặc biệt #, {, }, ;, ., ->, :
Dấu
gạch
dưới
,
khoảng
trắng
_, ‘ ‘
6Nhập môn lập trình - Nguyễn Minh Huy
Dấu
gạch
dưới
,
khoảng
trắng
_, ‘ ‘
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC
CâuCâu lệnhlệnh vàvà khốikhối lệnhlệnh::
CâuCâu lệnhlệnh::
ChỉChỉ
thịthị
rara
lệnhlệnh
void void mainmain()()
{{
;;
ChỉChỉ
thịthị
rara
lệnhlệnh
YêuYêu cầucầu máymáy tínhtính thựcthực hiệnhiện
KếtKết thúcthúc bằngbằng dấudấu chấmchấm phẩyphẩy ;.;.
TrìnhTrình biênbiên dịchdịch bỏbỏ qua qua dấudấu cáchcách
vàvà xuốngxuống dòngdòng chenchen ngangngang
KhốiKhối lệnhlệnh::
GồmGồm
nhiềunhiều
câucâu
lệnhlệnh
liênliên
tiếptiếp
nhaunhau
intint a, b, ca, b, c
;;
a = 100a = 100;;
b = b =
a / a /
22;;
{{
b = b + 5;b = b + 5;
GồmGồm
nhiềunhiều
câucâu
lệnhlệnh
liênliên
tiếptiếp
nhaunhau
BaoBao giữagiữa dấudấu ngoặcngoặc { }.{ }.
CâuCâu lệnhlệnh phứcphức hợphợp
HàmHàm main main làlà khốikhối lệnhlệnh khổngkhổng lồlồ
7Nhập môn lập trình - Nguyễn Minh Huy
b = b + 5;b = b + 5;
c = a * b;c = a * b;
}}
printfprintf(“%d”, a, b)(“%d”, a, b);;
}}
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC
CâuCâu chúchú thíchthích::
GhiGhi chúchú, , giảigiải thíchthích chươngchương trìnhtrình
TrìnhTrình
biênbiên
dịchdịch
bỏbỏ
qua qua
khikhi
dịchdịch
/* /* ChươngChương trìnhtrình tínhtính
cườngcường độđộ dòngdòng điệnđiện
TrìnhTrình
biênbiên
dịchdịch
bỏbỏ
qua qua
khikhi
dịchdịch
LàmLàm rõrõ nghĩanghĩa chươngchương trìnhtrình
KhôngKhông ảnhảnh hưởnghưởng tínhtính toántoán
BaoBao giữagiữa dấudấu /* /* vàvà */ (*/ (trongtrong C).C).
BắtBắt đầuđầu bằngbằng dấudấu // (// (trongtrong C++).C++).
*/*/
void main()void main()
{{
intint U, I, R;U, I, R;
// // TínhTính CĐDĐCĐDĐ
I = U / R;I = U / R;
}}
8Nhập môn lập trình - Nguyễn Minh Huy
NộiNội dungdung
GiớiGiới thiệuthiệu ngônngôn ngữngữ C.C.
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
9Nhập môn lập trình - Nguyễn Minh Huy
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
BiếnBiến vàvà hằnghằng::
NhữngNhững đơnđơn vịvị chứachứa giágiá trịtrị
DùngDùng
đểđể
nhậpnhập
, ,
xuấtxuất
, ,
tínhtính
toántoán
DùngDùng
đểđể
nhậpnhập
, ,
xuấtxuất
, ,
tínhtính
toántoán
BiếnBiến: : giágiá trịtrị cócó thểthể thaythay đổiđổi
HằngHằng: : giágiá trịtrị khôngkhông đổiđổi
Nhập N
S = 1
N > 1
S = S * N
đúng
sai
10Nhập môn lập trình - Nguyễn Minh Huy
N = N - 1
Xuất S
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
KhaiKhai báobáo biếnbiến vàvà hằnghằng::
ĐặtĐặt têntên chocho biếnbiến vàvà hằnghằng
PhảiPhải
khaikhai
báobáo
tấttất
cảcả
biếnbiến
trướctrước
khikhi
dùngdùng
!!
PhảiPhải
khaikhai
báobáo
tấttất
cảcả
biếnbiến
trướctrước
khikhi
dùngdùng
!!
CâuCâu lệnhlệnh khaikhai báobáo biếnbiến trongtrong C:C:
<<kiểukiểu dữdữ liệuliệu> <> <têntên biếnbiến>;>;
intint a, b, a, b, tuoituoi;;
float x, y, float x, y, diemTBdiemTB;;
CâuCâu lệnhlệnh khaikhai báobáo hằnghằng trongtrong C:C:
constconst <<kiểukiểu dữdữ liệuliệu> <> <têntên hằnghằng> = <> = <giágiá trịtrị>;>;
#define#define <<têntên hằnghằng> <> <giágiá trịtrị>>
const float PI = 3.14;const float PI = 3.14;
#define NAM_HIEN_TAI #define NAM_HIEN_TAI 20112011
11Nhập môn lập trình - Nguyễn Minh Huy
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
QuyQuy tắctắc đặtđặt têntên biếnbiến vàvà hằnghằng trongtrong C:C:
CácCác kýký tựtự đượcđược phépphép sửsử dụngdụng::
A A
Z, a Z, a
z, 0 z, 0
9.9.
A A
Z, a Z, a
z, 0 z, 0
9.9.
DấuDấu gạchgạch dướidưới ‘_’.‘_’.
KýKý tựtự đầuđầu tiêntiên khôngkhông đượcđược làlà sốsố!!
KhôngKhông đượcđược trùngtrùng cáccác từtừ khóakhóa::
while, if, new, delete, while, if, new, delete, gotogoto, , intint, float, namespace, return, , float, namespace, return,
NênNên đặtđặt têntên cócó nghĩanghĩa!!
intint aa, , bb;; // // TênTên hợphợp lệlệ, , khôngkhông cócó nghĩanghĩa
float float diem1diem1, , diem2diem2;; // // TênTên hợphợp lệlệ, , cócó nghĩanghĩa
char char _ky_tu123_ky_tu123;; // // TênTên hợphợp lệlệ, , cócó nghĩanghĩa
intint 123so123so, , newnew;; // // TênTên KHÔNG KHÔNG hợphợp lệlệ
12Nhập môn lập trình - Nguyễn Minh Huy
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
KiểuKiểu dữdữ liệuliệu::
ĐiềuĐiều gìgì xảyxảy rara trongtrong máymáy khikhi khaikhai báobáo biếnbiến vàvà hằnghằng??
MộtMột
vùngvùng
nhớnhớ
đượcđược
cấpcấp
phátphát
vàvà
đặtđặt
têntên
MộtMột
vùngvùng
nhớnhớ
đượcđược
cấpcấp
phátphát
vàvà
đặtđặt
têntên
intint a; a;
VùngVùng nhớnhớ a:a:
charchar kytukytu;;
VùngVùng nhớnhớ kytukytu::
KíchKích
thướcthước
vùngvùng
nhớnhớ
??
0010 1101 1010 0111
0010 1101
Bộ nhớ máy tính
KíchKích
thướcthước
vùngvùng
nhớnhớ
??
GiáGiá trịtrị chứachứa trongtrong vùngvùng nhớnhớ??
Do Do kiểukiểu dữdữ liệuliệu quyếtquyết địnhđịnh
13Nhập môn lập trình - Nguyễn Minh Huy
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
CácCác kiểukiểu dữdữ liệuliệu cơcơ sởsở trongtrong C:C:
Kiểu dữ liệu Ý nghĩa Kích thước Miền giá trị
int
Số
nguyên
đơn
4 bytes
-
2147483648 2147483647
int
unsigned int
Số
nguyên
đơn
4 bytes
-
2147483648 2147483647
0 4,294,967,295
long
unsigned long
Số nguyên kép 8 bytes
–9,223,372,036,854,775,808
9,223,372,036,854,775,807
0 18,446,744,073,709,551,615
short
unsigned short
Số nguyên ngắn 2 bytes -32768 32767
float Số thực chính xác đơn 4 bytes 3.4E +- 10
38
(7
chữ
số
thập
phân
)
14Nhập môn lập trình - Nguyễn Minh Huy
(7
chữ
số
thập
phân
)
double Số thực chính xác kép 8 bytes 1.7E +- 10
308
(15 chữ số thập phân)
char Ký tự 1 byte -128 127
bool Logic 1 byte true, false
NộiNội dungdung
GiớiGiới thiệuthiệu ngônngôn ngữngữ C.C.
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
15Nhập môn lập trình - Nguyễn Minh Huy
LậpLập nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh nhậpnhập trongtrong C:C:
ThưThư việnviện: : ##includeinclude <<stdio.hstdio.h> (> (ststananddard ard iinput/nput/ooutpututput).).
CúCú
pháppháp
::
CúCú
pháppháp
::
scanfscanf(“<(“<ĐịnhĐịnh dạngdạng kkiểuiểu>”[, &bien1, &bien2, ]);>”[, &bien1, &bien2, ]);
ĐĐịnhịnh dạngdạng kiểukiểu::
XXácác địnhđịnh kiểukiểu dữdữ liệuliệu chocho biếnbiến cầncần nhậpnhập
Định dạng kiểu Ý nghĩa
%
d,
%
ld
Số
nguyên
có
dấu
:
int
, long, short
16Nhập môn lập trình - Nguyễn Minh Huy
%
d,
%
ld
Số
nguyên
có
dấu
:
int
, long, short
%f, %lf Số thực: float, double
%u Số nguyên không dấu: unsigned int/long/short
%c Ký tự: char
%s Chuỗi ký tự: char [ ], char *
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh nhậpnhập trongtrong C:C:
#include#include <<stdio.hstdio.h>>
void void mainmain()()
{{
intint a, b, c;a, b, c;
float diem;float diem;
char char kytukytu;;
char ten[30];char ten[30];
scanfscanf(“%d”, &a);(“%d”, &a); // // NhậpNhập sốsố nguyênnguyên a.a.
scanfscanf
(“%d %d”, &b, &c);(“%d %d”, &b, &c);
// //
NhậpNhập
2 2
sốsố
nguyênnguyên
b, c.b, c.
scanfscanf
(“%d %d”, &b, &c);(“%d %d”, &b, &c);
// //
NhậpNhập
2 2
sốsố
nguyênnguyên
b, c.b, c.
scanfscanf(“%f”, &diem);(“%f”, &diem); // // NhậpNhập sốsố thựcthực diem.diem.
scanfscanf(“%c”, &(“%c”, &kytukytu);); // // NhậpNhập kýký tựtự. .
scanfscanf(“%s”, &ten);(“%s”, &ten); // // NhậpNhập têntên
}}
17Nhập môn lập trình - Nguyễn Minh Huy
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh xuấtxuất trongtrong C:C:
ThưThư việnviện: : #include#include <<stdio.hstdio.h> (> (ststananddard ard iinput/nput/ooutput)utput)
CúCú
pháppháp
::
CúCú
pháppháp
::
printfprintf(“<(“<ĐịnhĐịnh dạngdạng xuấtxuất>”[, >”[, biếnbiến 1, 1, biếnbiến 2, ]);2, ]);
ĐĐịnhịnh dạngdạng xuấtxuất::
CáchCách trìnhtrình bàybày thôngthông tin tin cầncần xuấtxuất
BaoBao gồmgồm::
ChuỗiChuỗi kýký tựtự cầncần xuấtxuất
ĐịnhĐịnh
dạngdạng
kiểukiểu
: :
xácxác
địnhđịnh
kiểukiểu
dữdữ
liệuliệu
chocho
biếnbiến
cầncần
xuấtxuất
ĐịnhĐịnh
dạngdạng
kiểukiểu
: :
xácxác
địnhđịnh
kiểukiểu
dữdữ
liệuliệu
chocho
biếnbiến
cầncần
xuấtxuất
KýKý tựtự điềuđiều khiểnkhiển
18Nhập môn lập trình - Nguyễn Minh Huy
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh xuấtxuất trongtrong C:C:
KýKý tựtự điềuđiều khiểnkhiển::
XuấtXuất
rara
mànmàn
hìnhhình
cáccác
kýký
tựtự
đặcđặc
biệtbiệt
XuấtXuất
rara
mànmàn
hìnhhình
cáccác
kýký
tựtự
đặcđặc
biệtbiệt
Ký tự điều khiển Ý nghĩa
\a Tiếng chuông
\b Lùi một bước
\n Xuống dòng
\t Ký tự tab
19Nhập môn lập trình - Nguyễn Minh Huy
\\ Dấu ‘\’
\” Dấu nháy kép ‘“’
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh xuấtxuất trongtrong C:C:
ĐịnhĐịnh dạngdạng sốsố nguyênnguyên: %: %nndd
intint
a = 123;a = 123;
intint
a = 123;a = 123;
printfprintf(“(“GiaGia tri a = %d”, a);tri a = %d”, a); // // XuấtXuất GiaGia tri a = tri a =
printfprintf(“(“GiaGia tri a = %5d”, a);tri a = %5d”, a); // // XuấtXuất GiaGia tri a = tri a =
ĐịnhĐịnh dạngdạng sốsố thựcthực: %: %n.kn.kdd
float x = 15.62;float x = 15.62;
printfprintf(“(“GiaGia tri x = %f”, x);tri x = %f”, x); // // XuấtXuất GiaGia trịtrị x =x =
printfprintf
(“(“
GiaGia
tri x = %7.3f”, x);tri x = %7.3f”, x);
// //
XuấtXuất
GiaGia
tri x =tri x =
1 2 3
1 2 3
1
5
.
6
2
0
1 5 . 6 2
printfprintf
(“(“
GiaGia
tri x = %7.3f”, x);tri x = %7.3f”, x);
// //
XuấtXuất
GiaGia
tri x =tri x =
20Nhập môn lập trình - Nguyễn Minh Huy
1
5
.
6
2
0
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
LệnhLệnh xuấtxuất trongtrong C:C:
#include#include <<stdio.hstdio.h>>
void void mainmain()()
{{
intint a = 5;a = 5;
char *ten = “Minh”;char *ten = “Minh”;
printfprintf(“Hello World”);(“Hello World”); // // XuấtXuất Hello WorldHello World
printfprintf(“Hello “);(“Hello “); // // XuấtXuất HelloHello
printfprintf(“World”);(“World”); // // XuấtXuất World World tiếptiếp theotheo
printfprintf
(“Hello(“Hello
\\
nWorldnWorld
“);“);
// //
XuấtXuất
Hello Hello
xuốngxuống
dòngdòng
WorldWorld
printfprintf
(“Hello(“Hello
\\
nWorldnWorld
“);“);
// //
XuấtXuất
Hello Hello
xuốngxuống
dòngdòng
WorldWorld
printfprintf(“(“GiaGia tri a = %d”, a);tri a = %d”, a); // // XuấtXuất GiáGiá trịtrị a = 5a = 5
printfprintf(“Ten hoc (“Ten hoc sinhsinh la %s”, ten);la %s”, ten); // // XuấtXuất Ten hoc Ten hoc sinhsinh la Minhla Minh
}}
21Nhập môn lập trình - Nguyễn Minh Huy
LệnhLệnh nhậpnhập, , xuấtxuất, , tínhtính toántoán
CácCác lệnhlệnh tínhtính toántoán trongtrong C:C:
ThưThư việnviện: : #include#include <<math.hmath.h>>
Hàm tính toán Ý nghĩa Ví dụ
sin, cos, tan, atan Hàm lượng giác float x = sin(30 * 3.14 / 180);
log, log10, exp Hàm logarithm float y = log(exp(5.0));
sqrt Hàm lấy căn float z = sqrt(2.0);
pow Hàm tính lũy thừa float a = pow(2.0, 5);
ceil, floor Hàm làm tròn float b = ceil(2.4);
22Nhập môn lập trình - Nguyễn Minh Huy
abs, fabs Hàm lấy trị tuyệt đối float c = fabs(a);
TómTóm tắttắt
GiớiGiới thiệuthiệu ngônngôn ngữngữ CC::
Kernighan & Ritchie, 1973.Kernighan & Ritchie, 1973.
PhânPhân
biệtbiệt
hoahoa
thườngthường
PhânPhân
biệtbiệt
hoahoa
thườngthường
CâuCâu lệnhlệnh: : chỉchỉ thịthị rara lệnhlệnh, , kếtkết thúcthúc bằngbằng ;.;.
KhốiKhối lệnhlệnh: : câucâu lệnhlệnh phứcphức, , baobao giữagiữa { }.{ }.
BiếnBiến, , hằnghằng, , kiểukiểu dữdữ liệuliệu::
BiếnBiến, , hằnghằng: : đơnđơn vịvị chứachứa giágiá trịtrị trongtrong chươngchương trìnhtrình
KhaiKhai
báobáo
biếnbiến
, ,
hằnghằng
::
KhaiKhai
báobáo
biếnbiến
, ,
hằnghằng
::
ĐĐặtặt têntên chocho biếnbiến, , hằnghằng
BiếnBiến: <: <kiểukiểu dữdữ liệuliệu> <> <têntên biếnbiến>;>;
HằngHằng: #define <: #define <têntên hằnghằng> <> <giágiá trịtrị>>
const <const <kiểukiểu dữdữ liệuliệu> <> <têntên hằnghằng> = <> = <giágiá trịtrị>;>;
23Nhập môn lập trình - Nguyễn Minh Huy
TómTóm tắttắt
LệnhLệnh nhậpnhập, , xuấtxuất::
ThưThư việnviện: #include <: #include <stdio.hstdio.h>>
scanfscanf
(“<(“<
địnhđịnh
dạngdạng
kiểukiểu
>”[, &>”[, &
biếnbiến
1, &1, &
biếnbiến
2, ]);2, ]);
scanfscanf
(“<(“<
địnhđịnh
dạngdạng
kiểukiểu
>”[, &>”[, &
biếnbiến
1, &1, &
biếnbiến
2, ]);2, ]);
printfprintf(“<(“<địnhđịnh dạngdạng xuấtxuất>”[, >”[, biếnbiến 1, 1, biếnbiến 2, ]);2, ]);
LệnhLệnh tínhtính toántoán::
ThưThư việnviện: #include <: #include <math.hmath.h>>
CácCác hàmhàm tínhtính toántoán::
sin, sin,
coscos
, tan, , tan,
atanatan
sin, sin,
coscos
, tan, , tan,
atanatan
log, log10, exp.log, log10, exp.
sqrtsqrt, , powpow
ceil, floor, abs.ceil, floor, abs.
24Nhập môn lập trình - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 3.1:3.1:
ViếtViết chươngchương trìnhtrình C C chocho phépphép::
NhậpNhập
vàovào
têntên
vàvà
nămnăm
sinhsinh
củacủa
mộtmột
ngườingười
NhậpNhập
vàovào
têntên
vàvà
nămnăm
sinhsinh
củacủa
mộtmột
ngườingười
TínhTính tuổituổi chocho ngườingười đóđó vàvà xuấtxuất kếtkết quảquả nhưnhư sausau::
“Chao ban “Chao ban <ten><ten>, , namnam nay ban nay ban <<tuoituoi>> tuoituoi”.”.
GhiGhi chúchú::
<ten>: <ten>: têntên nhậpnhập vàovào
<<tuoituoi>: >: tuổituổi tínhtính đượcđược
25Nhập môn lập trình - Nguyễn Minh Huy