T
T
R
R
N
N
G
G
I
IH
H
C
CC
H
C
C
M
MT
T
R
R
U
U
N
N
G
GT
T
Â
Â
M
M
C
T
T
I
I
N
N-
-
o
o
0
0
o
o
-
-
P
P
H
H
N
N
G
GP
P
H
H
Á
Á
P
PL
L
T
T
H
H
Á
3. Các bc trong chu trình phát trin chng trình 5
4. Kho sát mt chng trình C/C++ n gin 7
5. Các chú thích (comments) 9
6. Cu trúc ca mt chng trình C/C++ 10
7. Các tp tin th vin thông dng 11
Chng 2: BIU THC 12
1. Kiu d liu (data types) 12
2. Các nh danh (Identifier names) 13
3. T khóa (keywords) 14
4. Bin (variables) 14
5. T khóa const 17
6. Hng (constants) 17
7. Hng chui ký t (string constants) 18
8. Hng ký t c bit (escape sequences) 18
9. Toán t (operators) 19
10. Các toán t s hc (arithmetic operators) 22
11. Toán t ++ và (increment and decrement operators) 23
12. Toán t quan h & lun lý 24
13. Toán t ? (? operator) 26
14. Toán t sizeof 26
15. Toán t du phy (comma operator) 27
16. Biu thc (expressions) 29
17. Chuyn i kiu trong các biu thc 29
18. Ép kiu (casting) 30
19. Dng vit tt ca câu lnh gán (shorthand assignments) 31
Chng 3: CÁC CU TRÚC IU KHIN 34
1. Gii thiu 34
2. Cu trúc la chn if 35
3. Cu trúc la chn switch case 39
4. Các cu trúc lp (Loop structures) 44
3. Nhp chui 97
4. Xut chui 97
5. Mt s hàm th vin thao tác trên chui 97
6. Mt s ví d v chui 98
7. Mng các chui 99
8. Mng con tr n các chui 101
Chng 8: STRUCTURES – ENUM - typedef 105
1. Structures 105
2. Kiu lit kê (Enumerations, enum) 111
3. typedef 112
Chng 9: TP TIN 114
1. Streams và Files 114
2. Streams (dòng nhp xut) 114
3. Files 115
4. Truy xut file ng!u nhiên 124
5. Các stream chun 124
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 4/127
Chng 1
TNG QUAN V NGÔN NG LP TRÌNH C/C++
1. Lch s ca ngôn ng lp trình C/C++
C #c to b"i Dennis Ritchie " Bell Telephone Laboratories vào
n$m 1972 cho phép lp trình viên phát trin các ng dng hiu
qu hn các ngôn ng lp trình hin có ti th%i im ó.
im mnh và mm d&o ca C cho phép các nhà phát trin " Bell
Labs to nên các ng dng phc tp nh h iu hành Unix. Vào
n$m 1983, hc vin chun quc gia M' (American National
Standards Institute - ANSI) thành lp mt tiu ban chun hóa C
#c bit n nh ANSI Standard C. Ngày nay, tt c trình biên
i t#ng #c liên kt (link) to nên tp tin có th thc thi
(executable file). 4. Thc hin (run) chng trình ch, ra chng
trình có làm vic úng nh ã nh không. Use
editor
Source
code
Compile
source file
Object
code
Link
object file
Library
files
3.3. T!o tp tin th#c thi (executable files)
C/C++ có mt th vin hàm cha mã i t#ng cho nhng hàm ã
#c to s.n. Nhng hàm này thc hin các tác v th%ng dùng
nh xóa màn hình (clrscr()), nhp mt chui ký t t bàn phím
(gets()), tính c$n bc hai (sqrt()), mà chng trình #c vit có
th s dng mà không phi vit li.
Tp tin i t#ng #c to ra b"i trình biên dch s kt h#p vi mã
i t#ng ca các hàm th vin to nên tp tin thc thi. Quá
trình này #c gi là liên kt (linking), #c thc hin b"i mt
chng trình gi là b liên kt (linker).
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 7/127
3.4. Th#c thi chng trình
Khi chng trình ngu*n #c biên dch và liên kt to nên tp
tin thc thi (có ph(n phân loi .exe), nó có th thc thi trên máy
tính ti du nhc h thng.
Nu chng trình hot ng không úng nh yêu c(u, vn có
th là do li lp trình. Trong tr%ng h#p này, ch,nh sa chng
trình ngu*n, biên dch li và liên kt li to nên phiên bn mi
ca tp tin chng trình.
Quá trình bn bc này #c lp i lp li cho n khi tp tin thc
thi thc hin úng yêu c(u ca bài toán.
4. Kho sát mt chng trình C/C++ n gin
Kho sát mt chng trình n gin dùng xut ra màn hình
dòng ch Hello World!
// my first program in C/C++
#include <conio.h>
#include <iostream.h>
trong cp du ngoc { }.
cout << "Hello World!";
ây là mt lnh nm trong ph(n thân ca hàm main. cout là mt
dòng (stream) xut chun trong C/C++ #c nh ngh+a trong th
vin iostream.h. Khi dòng lnh này #c thc thi, kt qu là chui
"Hello World!" #c xut ra màn hình. Dòng lnh #c kt thúc
bng du chm phy (;).
getche();
ây là mt hàm th vin dùng ch% nhp mt ký t t bàn phím.
return 0;
Lnh return kt thúc hàm main và tr v giá tr biu thc i sau
nó, trong tr%ng h#p này là 0. ây là mt kt thúc bình th%ng ca
mt chng trình không có li trong quá trình thc hin.
Chng trình trên có th vit li nh sau:
int main() { cout << " Hello World! "; getch(); return 0;}
c)ng cho cùng mt kt qu.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 9/127
5. Các chú thích (comments)
Các chú thích #c các lp trình viên s dng ghi chú hay mô t
trong các ph(n ca chng trình. Trong C/C++ có hai cách chú
thích:
Chú thích dòng: dùng cp du //. T v trí // n cui dòng #c
xem là chú thích
Chú thích khi (chú thích trên nhiu dòng) dùng cp /* */.
Author: Mr.Beginner
Date: 01/01/2008
*/
#include <iostream.h>
int factorial(int n);
int main()
{
int i;
for(i=0; i<=10; i++)
cout<<i<<“!=“<<factorial(i);
return 0;
}
/* This function computes the
factorial of its parameter, returning it */
int factorial(int n)
{
int i, product;
product = 1;
for (i=2;i<=n;i++) prod *= i;
return product;
}
sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(),
exp(), …
alloc.h: Tp tin nh ngh+a các hàm liên quan n vic qun lý b
nh g*m các hàm calloc(), realloc(), malloc(), free(), farmalloc(),
farcalloc(), farfree(), …
io.h: Tp tin nh ngh+a các hàm vào ra cp thp g*m các hàm
open(), _open(), read(), _read(), close(), _close(), creat(), _creat(),
creatnew(), eof(), filelength(), lock(), …
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 12/127
Chng 2
BIU THC
(Expressions)
Biu thc #c to thành t nhng thành t nh d liu và toán t.
D liu có th cha trong bin hoc hng. Toán t trong các ngôn
ng lp trình có cùng ý ngh+a nh trong toán hc. Có nhiu loi
toán t nh toán t gán (=), toán t s hc (+ - * / %), toán t quan
h (== < <= > >= !=), toán t lun lý (&& || !),
1. Kiu d li%u (data types)
C/C++ có n$m kiu d liu c s": ký t (char), s nguyên (int), s
thc (float), s thc có chính xác gp ôi (double), và kiu vô
nh (void). Tt c nhng kiu d liu khác u da trên 5 kiu c
s" này. Kích thc và phm vi ca nhng kiu d liu này có th
thay i tùy theo loi CPU và trình biên dch.
Kiu char #c dùng gi các giá tr ca b mã ASCII
(Amercican Standard Code for Information Interchange). Kiu
char chim 1 byte b nh.
long int hoc long 32 -2,147,483,647 to 2,147,483,647
signed long int 32 ging nh long int
unsigned long int 32 0 to 4,294,967,295
float 32 chính xác là 6 ký s
double 64 chính xác là 10 ký s
long double 80 chính xác là 10 ký s
2. Các nh danh (Identifier names)
Trong C/C++, tên ca các bin, hng, hàm, #c gi là nh
danh. Nhng nh danh này có th là 1 hoc nhiu ký t. Ký t (u
tiên phi là mt ch cái hoc du _ (underscore), nhng ký t theo
sau phi là ch cái, ch s, hoc du _. Sau ây là nhng nh
danh úng và sai:
úng Sai
count 1count
test23 hi!there
high_balance high balance
C/C++ phân bit ký t HOA và th%ng. Vì vy, count, Count, và
COUNT là 3 danh nh khác nhau.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 14/127
nh danh không #c trùng vi các t khóa (keywords) và không
nên có cùng tên nh các hàm th vin ca C/C++.
3. T) khóa (keywords)
TT.Công Ngh Thông Tin 15/127
char ch; // khai báo bin ch kiu ký t
// khai bao 4 bien kieu float, gán average giá tr 0
float mark1, mark2, mark3, average = 0;
Lu ý: Khi khai báo bin nu không cung cp giá tr khi to thì giá tr
ca bin là cha xác nh. Do ó, vic dùng nhng bin này trong các
biu thc là vô ngha.
Bin #c khai báo ti ba ni: bên trong hàm, trong nh ngh+a
tham s ca hàm, và bên ngoài tt c hàm. Nhng bin này #c
gi l(n l#t là bin cc b, các tham s hình thc, và bin toàn cc.
4.1. Bin c&c b (local variables)
Nhng bin #c khai báo bên trong mt hàm gi là bin cc b.
Các bin cc b ch, #c tham chiu n ch, b"i nhng lnh nm
trong khi (block) có khai báo bin. Mt khi bt (u vi du { và
kt thúc vi du }.
Bin cc b ch, t*n ti trong khi khi cha nó ang thc thi và b
hy khi khi cha nó thc thi xong.
Ví d: Xem xét hai hàm sau:
void func1(void)
{
int x;
x = 10;
}
void func2(void)
{
int x;
cc. Bin toàn cc #c khai báo bên ngoài tt c hàm.
Kho sát chng trình sau:
#include <iostream.h>
void increase();
void decrease();
int gVar = 100;
void main()
{
cout << “Value of gVar= “ << gVar;
increase();
cout << “\nAfter increased, gVar= “ << gVar;
decrease();
cout << “\nAfter decreased, gVar= “ << gVar;
}
void increase()
{ gVar = gVar + 1;}
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 17/127
void decrease()
{ gVar = gVar -1;}
Sau khi thc thi chng trình trên, kt qu xut trên màn hình là:
Value of gVar= 100
After increased, gVar= 101;
After decreased, gVar= 100;
5. T) khóa const
Giá tr ca bin có th thay i trong sut quá trình thc thi
chng trình. giá tr ca bin không b thay i, ta t trc
khai báo bin t khóa const. T khi bin ã có giá tr, giá tr này s
ký t bao quanh b"i cp du nháy n. Do ó, 'a' là hng ký t
nhng "a" là hng chui.
8. H'ng ký t# -c bi%t (escape sequences)
C/C++ có nhng hng ký t c bit mà không th biu di-n nh
nhng hng ký t thông th%ng. Nhng hng này còn gi là escape
sequences. Sau ây là danh sách các hng c bit ó:
Mã Ý ngh.a
\b Lùi sang trái 1 ký t
\f V (u dòng
\n Sang dòng mi
\r Xung dòng
\t Tab theo chiu ngang
\" Du nháy ôi
\' Du nháy n
\0 Null
\\ Du \
\v Tab theo chiu ng
\a Cnh báo
\? Du hi
\N Hng bát phân (vi N là mt hng bát phân)
\xN Hng thp lc phân (vi N là mt hng thp lc phân)
Xem xét ví d sau:
#include <iostream.h>
void main(void)
{
cout <<"Items:\n";
cout <<”\tItem1\n”;
cout <<”\tItem2\n”;
cout <<”\tItem3\n”;
}
Lu ý, phía bên trái du bng phi là mt bin hay con tr và
không th là hàm hay hng.
Ví d:
total = a + b + c + d;
9.2. Chuyn /i kiu trong câu l%nh gán
Khi nhng bin ca mt kiu kt h#p vi nhng bin ca mt kiu
khác thì mt s chuyn i kiu xy ra. i vi câu lnh gán, giá
tr ca biu thc bên phi du bng #c t ng chuyn thành
kiu d liu ca bin bên trái du bng.
Ví d:
int i=100;
double d = 123.456;
Nu thc thi lnh
i = d;
thì i s có giá tr là 123 vì 123.456 s t ng chuyn thành s
nguyên nên b ct b ph(n thp phân. S chuyn i kiu này gi
là chuyn i kiu b mt mát thông tin.
Nu thc thi lnh
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 20/127
d = i;
thì d s có giá tr là 100.0. S chuyn i kiu này gi là chuyn
i kiu không mt mát thông tin.
Tóm li, khi chuyn i kiu t kiu d liu có min giá tr nh
sang kiu d liu có min giá tr ln hn thì vic chuyn i kiu
này là an toàn vì không b mt mát thông tin. Th t t$ng d(n t
Kho sát các lnh gán sau:
int n; long m; float p; double q;
n = i + l + f + d; // (1)
m = i + l + f + d; // (2)
p = i + l + f + d; // (3)
q = i + l + f + d; // (4)
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 21/127
100.0
200.0
123.456
1.23456789
424.69056789
int
n có giá tr là 424
(1)
100
200
123.456
1.23456789
i
l
f
d
Kt lun: Tr%ng h#p (1) và (3): mt mát thông tin. Tr%ng h#p
(4) không mt mát thông tin.
10. Các toán t s( h0c (arithmetic operators)
Các toán t s hc g*m: + (cng), - (tr), * (nhân), / (chia), và %
(ly ph(n d ca phép chia nguyên).
Khi t s và m!u s ca phép chia là s nguyên thì ó là phép chia
nguyên nên ph(n d ca phép chia nguyên b ct b. Ví d, 5/2 thì
kt qu là 2.
Toán t ly ph(n d % (modulus operator) ch, áp dng vi s
nguyên và tr v ph(n d. Ví d, 7%2 thì kt qu là 1.
100
424.69056789
q có giá tr là 424.69056789
(
4
)
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 23/127
11. Toán t ++ và (increment and decrement operators)
C/C++ có hai toán t rt th%ng dùng là ++ và Toán t ++
cng 1 n toán hng ca nó và toán t thì tr 1 t toán hng
ca nó.
Ví d:
x++; // tuong duong x = x + 1;
x ; // tuong duong x = x - 1;
Toán t ++ và có th t phía trc (prefix) hoc phía sau
(postfix) toán hng. S khác nhau ca 2 tr%ng h#p này là khi toán
t ++ và ng trc toán hng, hành ng t$ng và gim trên
toán hng #c thc hin trc, sau ó giá tr mi ca toán hng s
dùng tham gia vào vic nh tr ca biu thc.
Ví d: Kho sát on lnh sau
int x = 100;
int n,m;
Nu thc hin lnh:
n = ++x + 1; // n s có giá tr là 102 (1)
#c xem là false và giá tr khác 0 (non-zero) #c xem là true.
Các toán t quan h g*m:
Toán t Ý ngh.a
> Ln hn
>= Ln hn hay bng
< Nh hn
<= Nh hn hay bng
== Bng (có 2 du =)
!= Không bng
Ví d v toán t quan h:
100 < 200 // true
200 == 300 // false
300 != 400 // true
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 25/127
400 >= 500 // false
Các toán t lun lý:
Operator Action Ý ngh.a
&& AND Và
|| OR Hoc (có 2 du |)
! NOT Ph nh
Bng chân tr ca các toán t lun lý
p q p && q p || q !p
0 0 0 0 1
0 1 0 1 1
1 1 1 1 0
1 0 0 1 0
C hai toán t quan h và lun lý có u tiên thp hn toán t s
hc. Trong mt biu thc có th có nhiu loi toán t, th t
1
1
1