Professional Documents
Culture Documents
MC LC
CHNG 1. GII THIU ............................................................... 7
1.1. Ngun gc ca ngn ng C ..................................................................... 7
1.2. C l ngn ng bc trung........................................................................... 7
1.3. C l ngn ng c cu trc ........................................................................ 8
1.4. Cu trc ca mt chng trnh C ............................................................. 9
1.5. Chng trnh u tin ............................................................................ 10
1.6. Bi tp ................................................................................................... 13
2.9. Mt s v d c bn ............................................................................... 30
2.9.1. V d 1 ..................................................................................................... 30
Dng Hong Huyn
Ngn ng lp trnh C
2.9.2. V d 2 .................................................................................................... 30
2.9.3. V d 3 .................................................................................................... 31
Mc lc
Ngn ng lp trnh C
Mc lc
Bc trung
Ada
Modula-2
Pascal
COBOL
FORTRAN
BASIC
Java
Ngn ng lp trnh C
Bc thp
C++
C
FORTH
Macro-assembler
Assembler
vit chng trnh con v vy nhng s kin pht sinh bn trong chng trnh con ny
khng c tc ng n cc phn khc ca chng trnh. Kh nng ny cho php
chng trnh d dng chia s cc on m trong chng trnh. Nu pht trin mt hm
c chia ngn, ta ch cn bit hm lm g, khng cn bit hm lm nh th no.
Nh rng, nu lm dng qu nhiu bin ton cc s pht sinh nhng li khng mong
mun.
Ngn ng lp trnh c cu trc cung cp kh nng lp trnh a dng. N h tr
trc tip trong mt vi cu trc lp: do-while, while, for. Trong ngn ng cu
trc, cm hoc hn ch s dng ton t goto.
Thnh phn c cu trc chnh ca C l hm, l chng trnh con c lp ca
C. Trong C, hm c xy dng thnh mt khi. Hm c nh ngha v vit m
ring phc v mt nhim v ring, v vy chng trnh c chia nh thnh cc
chng trnh khc c lp. Sau khi to mt hm ta c th da vo lm vic vi
nhiu tnh hung m khng tc ng n nhng phn khc ca chng trnh.
Mt cch khc cu trc v chia ngn m trong C l dng khi lnh. Khi
lnh trong C c t gia cp du ngoc nhn {}.
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Ngn ng lp trnh C
10
11
Thanh menu
Thanh cng c
Ngn ng lp trnh C
12
V tr thng bo li
V tr lu chng trnh
V tr t tn file
13
1.6. Bi tp
Bi 1. Vit chng trnh in ra mn hnh 2 dng:
Day la ngon ngu lap trinh C
Duoc viet bang phan mem Visual C++ 6.0
Cua hang phan mem Microsoft
15
Ngn ng lp trnh C
16
long int
signed long int
unsigned long int
32
32
32
float
32
double
64
long double
80
2.147.483.648 ->2.147.483.647
Ging kiu long int
0 -> 4.294.967.295
3,4x10-38 -> 3,4x1038
chnh xc 7 ch s
1,7x10-308 -> 1,7x10308
chnh xc 17 ch s
3,65x10-4951 -> 1,18x104932
chnh xc 18 ch s
Khng hp l
Count
Test23
Hight_balance
1count
hi!there
hightbalance
17
V d
int
long int
unsigned int
float
double
long double
1
123
-234
35000L -34L
1000U 234U
123.23f
1.0f
123.23
1.2L
Ngn ng lp trnh C
18
ngha
Khong trng (Backspace)
xung dng (Form feed)
Dng mi (New line)
V u dng (Carriage return)
t Tab theo chiu ngang (Horizontal tab)
Du nhy kp (Double quote)
Du nhy n (Single quote)
K t rng (Null)
Du gch cho (Backslash)
t tab theo chiu dc (Vertical tab)
Pht mt m thanh (Alert)
Du chm hi (Question mark)
Hnh 2-2. Cc hng k t c bit.
Kiu
biu thc
char
Thng tin c th mt
gi tr > 127chuyn sang s m
Khoa Cng ngh thng tin Trng i hc Quy Nhn
char
char
char
short int
int
int
float
double
19
short int
int
long int
int
long int
float
double
long double
8 bit cao b mt
24 bit b mt
24 bit b mt
16 bit b mt
Khng
Phn thp phn v phn khc
chnh xc, kt qu lm trn
chnh xc, kt qu lm trn
2.6.2. Ton t s hc
Bng sau lit k cc php ton s hc:
Ton t
+
*
/
%
++
ngha
Tr, tr mt ngi
Cng
Nhn
Chia
Chia ly d
Gim 1
Tng 1
Ngn ng lp trnh C
20
ngha
AND
OR
NOT
2.6.4. Ton t ?
C php:
Exp1 ? Exp2 : Exp3;
Nu Exp1 cho gi tr l ng, Exp2 s c tnh ton v tr v. Nu Exp1 sai,
Exp3 s c tnh v tr v. V d: a>b?:a:b, chng trnh s kim tra biu thc
a>b nu ng tr v gi tr a, nu sai tr v gi tr b.
21
Ton t
ngha
&
AND
OR
Exclusive OR(XOR)
Phn b ca 1(NOT)
>>
y phi
<<
y tri
Hnh 2-6. Ton t bit.
00000111
x = x<<1;
00001110
14
x = x<<3;
01110000
112
x = x<<2;
11000000
192
x = x>>1;
01100000
96
x = x>>2;
00011000
24
Ngn ng lp trnh C
22
2.6.7. Ton t () v []
Ton t () dng tng th t u tin ca biu thc con trong mt biu thc
khc. Ton t [] xc nh phn t ca mng. Khi a mt mng, biu thc bn trong
du ngoc vung s cung cp ch s ca mng.
2.6.8. p kiu
Ta c th bt buc mt biu thc no sang mt kiu mong mun. Tnh
hung ny gi l p kiu. Dng tng qut ca p kiu l: (type)E; trong type l
kiu d liu cn chuyn sang, E l biu thc cn chuyn.
V d: thng thng biu thc x/2 l kiu s nguyn nu x l s nguyn, nu
mun x/2 l mt kiu s thc ta dng biu thc sau: (float) x/2;
() [] > .
! ~ ++ (type) * & sizeof
* / %
+
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += = *= /= etc.
Thp nht ,
Hnh 2-8. Th t u tin ca cc php ton.
Ch , trong bng trn, cn nhiu php ton cha c trnh by chi tit v d
nh cc php ton * & . -> Nhng php ton ny s c trnh by cc mc
sau khi cp nhng vn lin quan nh con tr, cu trc.
Khoa Cng ngh thng tin Trng i hc Quy Nhn
23
(127 / x);
Gim hoc tng du ngoc n khng pht sinh ra li v lm chm vic tnh
ton. Do ta s dng du ngoc n lm r rng th t u tin ca cc php ton
trong biu thc. V d: x=y/334*temp+127; ta c th vit x=(y/3)
(34*temp)+127;
Ngn ng lp trnh C
24
Khi vit x=x+10; ta c th vit x+=10; ton t += thng bo cho trnh bin
dch bit gn x bng gi tr x cng 10. Php ton gn nhanh ny lm vic trn cc
php ton hai ngi. Tng qut, biu thc dng v=vOe ta c th vit li vO=e.
2.7.4. Cc hm ton hc c bn
Tn hm
ngha
exp(x)
ex
log(x)
logaric c s e ca x
log10(x)
logaric c s 10 ca x
abs(x)
tr tuyt i ca x (s nguyn)
fabs(x)
tr tuyt i ca x (s thc)
pow(a,x)
ax
sqrt(x)
cn bc 2 ca x
sin(x)
sin(x)
cos(x)
cos(x)
acos(x)
arccos(x)
asin(x)
arcsin(x)
ceil(x)
s nguyn nh nh nht x
floor(x)
tm s nguyn ln nht x
modf(x, y)
chia s thc x thnh 2 phn, phn
nguyn t vo bin y, tr v phn
thp phn.
s dng c cc hm ny, phi khai bo th vin math.h u chng
trnh. Cc hm lng gic nhn tham s o Radian, mun chuyn sang ta dng
cng thc radian = ./180. V d mun tnh cos(600), ta s dng hm nh
sau: cos(60* /180).
2.8. Vo ra d liu c bn
2.8.1. In gi tr ra mn hnh (hm printf())
C php:
printf(Chui nh dng,danh sch cc biu thc);
Hm in ra mn hnh danh sch cc biu thc cng vi khun dng d liu ra
mn hnh. Chui nh dng c ba loi k t: 1. K t hin th ra mn hnh; 2. K t nh
25
Kiu d liu
char
int
foat
float
unsigned int (s hin th h m c s 8)
Chui k t
unsigned int (s hin th h m c s 10)
unsigned int (S hin th h m c s 16)
long int
unsigned long int
double
long double
Hnh 2-10. Cc k t m t kiu d liu trong hm printf().
Ngn ng lp trnh C
26
printf("%012f\n", item);
}
Kt qu xut hin nh sau:
10.123040
10.123040
00010.123040
in mt gi tr vi chnh xc cho trc ta s dng nh dng x.y vi x, y
l cc gi tr nguyn, ngha ca n dnh x v tr in mt s thc, trong y v tr
hin th phn sau du thp phn.
c. In mt gi tr vi chnh xc cho trc
in mt gi tr vi chnh xc cho trc ta s dng nh dng x.y vi x, y
l cc gi tr nguyn, ngha ca n ph thuc vo kiu d liu.
i vi s thc, khi ta s dng nh dng %f, %E, %e, x s xc nh s v tr
hin th s thc v y xc nh s ch s sau du thp phn. Nu khng c nh dng y,
chng trnh s in 6 ch s sau du thp phn. V d %10.4f s in ra mn hnh mt
s thc c rng bng 10, v s ch s sau du thp phn l 4.
i vi kiu chui k t, y cho bit rng ln nht m chui c th hin th.
V d %5.7s s in ra mn hnh mt chui k t c rng l 5 v khng c vc
qu 7. Nu chui k t di hn rng cc i th cc k t cui cng s b ct bt.
i vi s nguyn, chnh xc s ch ra s ch s ti thiu s c hin th.
Nu s ch s nh hn y, chng trnh s thm vo trc cc s khng sao cho s ch
s bng y. Xt v d sau:
#include <stdio.h>
void main(void){
printf("%.4f\n", 123.1234567);
printf("%.8d\n", 1000);
printf("%10.15s\n", "This is a simple test.");
}
Kt qu nh sau:
27
123.1235
00001000
This is a simpl
d. Canh l cho cc gi tr
Ngm nh cc gi tr c vit t phi qua tri. Tc l nu rng ca nh
dng ln hn rng ca d liu th d liu s c vit t phi qua. Trong trng
hp ny, vit d liu t bn tri qua ta thm du tr sau du %. Xt v d sau:
#include <stdio.h>
void main(void){
printf("canh le ben phai:%8d\n", 100);
printf("canh le ben trai:%-8d\n", 100);
}
Kt qu hin th trn mn hnh nh sau:
canh le ben phai:
canh le ben trai:100
100
Kiu d liu
char
int
int
unsigned int (h 16)
Ngn ng lp trnh C
28
%u
%o
%f,%e,%g
%ld
%lu
%lf
%Lf
%%
%[]
%s
29
c. S dng tp scanset
Scanset l tp cc k t c nh ngha trc. Khi hm scanf() x l tp
scanset, n ch nhp nhng k t thuc tp ny. K t c c s c gn n
mt mng cc k t c tr bi tham s ca tp scanset tng ng. nh ngha cc
k t trong tp scanset vo cp du []. C th nh sau:
%[XYZ]
Trong XYZ l cc k t. Khi nhp d liu, hm scanf() bt u c cc k
t cho n khi bt gp mt k t khng phi trong tp scanset. Mng ny cha
chui c kt thc bng rng. Xt v d:
#include <stdio.h>
#include <conio.h>
void main(void){
int i;
char str[80], str2[80];
scanf("%d%[abcdefg]%s", &i, str, str2);
printf("%d %s %s", i, str, str2);
getch();
}
Khi nhp 123abcdtye, chng trnh s in ra 123 abcd tye. Bi v t
khng thuc tp scanset, do hm scanf() s ngng c vo bin str khi gp
ch t, cc k t cn li s c c vo str2.
ch ra mt tp o ngc, ta dng k hiu ^. K hiu ny cho bit nhp
nhng k t m khng thuc tp scanset. Ta c th to ra mt tp cc k t lin tc
bng mt du ni v d nh %[a-z]. Tp scanset c phn bit ch hoa v ch
thng.
d. Loi b nhng khong trng khng cn thit
Mt k t trng trong chui iu khin lm cho hm scanf() b qua nhng
khong trng u input stream.
e. Nhng k t khng phi l khong trng trong chui iu khin
Ngn ng lp trnh C
30
2.9. Mt s v d c bn
2.9.1. V d 1
Vit chng trnh nhp vo mt s thc biu din nhit n v Fahrenheit
(oF), sau chuyn sang n v Celsius (oC). Kt qu hin th c 1 ch s sau du thp
phn.
/* Chuong trinh chuyen doi don vi do nhiet do */
#include <stdio.h>
// khai bao thu vien chuan
void main(void){
// khai bao ham main
float t;
// Khai bao bien t
printf("Nhap vao nhiet do (Fahrenheit): ");
scanf("%f",&t);
// nhap gia tri tu ban phim
printf("%0.1f do Fahrenheit = %0.1f do Celsius\n", t,
5.0/9*(t-32));
}
2.9.2. V d 2
Vit chng trnh nhp vo hai s nguyn dng, in ra mn hnh tng bnh
phng ca hai s .
/* Chuong trinh tinh tong binh phuong cua hai so */
#include <stdio.h>
void main(void){
int x, y;
printf("Nhap vao hai so nguyen x, y: ");
scanf("%d%d",&x,&y);
printf("%d^2 + %d^2=%d\n", x, y, x*x + y*y);
}
31
2.9.3. V d 3
Vit chng trnh nhp vo mt s nguyn dng c ba ch s, in ra mn hnh
cc s thuc hng trm, hng chc, hng n v.
/* hang tram, hang chuc,
#include <stdio.h>
void main(void){
unsigned int x;
printf("Nhap vao so
scanf("%u",&x);
printf("chu so hang
printf("chu so hang
printf("chu so hang
}
hang don vi */
b) Ngaysinh
d) Sv2000
Cu 2. Mc no c cc Tn u t ng quy nh ca C:
a) x1, X-2;
b) Xx1, X2;
c) CONST, X_234;
d)X[1], x2;
b) #include <conio.h>
d) khng khai bo g;
Ngn ng lp trnh C
32
Cu 5. Cho bit cc biu thc sau: biu thc no sai? Biu thc ng c gi tr l bao
nhiu?
Gi s ta khai bo nh sau:
int i=10;
char ch=a;
Khi cc biu thc sau: biu thc no sai, biu thc ng cho gi tr l bao
nhiu?
a. i = (i+ch)++;
c. ch = ch++;
e. ch = ch++ - i++
b. i = i++ + ch++
d. ch = ++ch;
2.10.2. Bi tp
Bi 1. Vit chng trnh nhp vo mt s thc x, in ra mn hnh gi tr biu thc
1+9x-2sinx+x2-ex. nh dng biu thc sao cho ch c 2 gi tr sau du thp phn.
Bi 2. Nhp vo di bn knh hnh trn, in ra mn hnh chu vi v din tch ca hnh
trn tng ng. Yu cu cc gi tr hin th trn mn hnh c hai ch s sau du thp
phn.
Bi 3. Nhp vo di ba cnh a, b,c ca mt tam gic. Tnh din tch tam gic bng
cng thc Heron nh sau:
li.
33
Bi 4. Vit chng trnh nhp vo mt tng s tin, bit rng c ba loi mnh gi tin
l 500.000 VN, 200.000VN, 100.000VN, 50.000VN. Cho bit tng s tin trn
c t nht l bao nhiu t t cc mnh gi bit. V d s tin l: 2.850.000 c 5 t
500 ngn, 1 t 200.000, 1 t 100.000, 1 t 50.000. phng n trn c tng s t l 8 v
y l phng n c s t tin t nht.
Bi 5. Vit chng trnh nhp vo s giy, in ra mn hnh s gi, pht v giy theo
nh dng hh:mm:ss. V d s giy l 3746 tng ng 01 gi, 2 pht, 26 giy.
Bi 6. Nhp vo ba s thc, tm s ln nht ca ba s .
Bi 7. Nhp vo:
Lng ngy cng (LNC)
S ngy cng quy nh (NCQD)
S ngy lm (SNC)
Vit chng trnh tnh s tin lng (TL) bit rng TL = SNCLNC. Nu SNC
vt qu NCQD th s ngy vt nhn 2.
35
thc
lnh
la chn
lp
nhy
Cu lnh la chn l if, switch; cu lnh lp l while, for, dowhile; cu lnh nhy l break, continue, goto, return. Biu thc bao gm
cc biu thc hp l. Khi lnh l cc lnh t trong cp du mc {}.
Ngn ng lp trnh C
36
Sai
ng
S1
S2
Sai
ng
S1
37
Ngn ng lp trnh C
38
39
case v2:
S2;
.
.
.
case vn: Sn;
[default: Sn+1;]
}
Trong , E l biu thc s nguyn hoc k t; v1, v2, , vn l cc hng gi
tr; S1, S2, , Sn, Sn+1 l cc cu lnh bt k.
Lnh switch thc hin nh sau: so snh gi tr ca biu thc E ln lt vi
cc gi tr vi. Khi tm thy mt gi tr vi no bng gi tr ca biu thc, cu lnh
Si kt hp s c thc hin cho n khi gp lnh break hoc n cui cu lnh
switch. Cu lnh sau default (nu c) s c thc hin nu biu thc E khng
trng vi gi tr vi no. Hnh sau m t nguyn tc hot ng ca lnh switch:
ng
S1
E=v1
Sai
ng
S2
E=v2
Sai
ng
E=vn
Sn
Sai
Sn+1
Ngn ng lp trnh C
40
41
Ngn ng lp trnh C
42
case 2:
printf(Nhap nam:); scanf(%d, &nam);
if ((nam%4==0 && nam%100!=0)||(nam%400==0))
printf(Thang 2 nam %d co 29 ngay, nam);
else
printf(Thang 2 nam %d co 28 ngay, nam);
break;
default:
printf(Thang khong hop le);
}
}
V d trn minh ha hai vn : Th nht, ta c th c cc mnh case m
khng kt hp vi lnh no. Khi gp trng hp ny, chng trnh s chuyn xung
mnh case tip theo. Th hai, nu khng c lnh break chng trnh s thc thi
cc lnh tip theo.
43
E1
E2
Sai
ng
S;
E3;
Ngn ng lp trnh C
44
printf("%d", y);
V d trn ch in gi tr 10 ca bin y ra mn hnh. Cc lnh trong vng lp
for trn khng bao gi thc hin bi v x v y bng nhau khi vo vng lp.
Sai
E
ng
S
45
Vng lp do-while kim tra iu kin cui vng lp. iu ny cho php vng lp
do-while s thc hin t nht l mt ln. Dng tng qut ca vng lp do-while
nh sau:
do S; while (E);
Trong , S l cu lnh bt k, E l biu thc logic. ngha: thc hin cu lnh
S trong khi cn ng. Hnh sau m t nguyn tc hot ng ca lnh dowhile:
ng
E
Sai
Ngn ng lp trnh C
46
ch = getche();
switch(ch){
case '1':
/* cau lenh tinh dien tich hinh tron. */
break;
case '2':
/* cau lenh tich dien tich tam giac. */
break;
case '3':
/* cau lenh tich dien tich chu nhat. */
break;
}
if (ch=='4') break;
}while(1);
}
Trong v d trn, s dng vng lp do-while l mt la chn tt nht bi v
ta mong mun cc cu lnh trn c thc hin t nht l mt ln.
47
dng nhiu lnh nhy s lm cho chng trnh tr nn phc tp kh g ri. Thng
thng ta s dng lnh nhy trong trng hp thot khi nhiu vng lp lng nhau.
Dng tng qut ca cu lnh nh sau:
goto label;
.
.
.
label:
statements;
Trong , label l tn nhn. Tn nhn l mt nh danh trong C, n c th
c nh ngha trc hoc sau lnh goto. V d sau c to ra mt vng lp in cc s
t 1 n 10.
x = 1;
loop1:
printf(%d ,x);
x++;
if (x<10) goto loop1;
V d tip theo s in ra mn hnh s u tin c ba ch s tha tnh cht abc
3
=a +b +c3.
#include <stdio.h>
void main(void){
int i, j, k;
for(i=1; i<=9; i++)
for(j=0; j<=9; j++)
for(k=0; k<=9; k++)
if(100*i+10*j+k == i*i*i +j*j*j +k*k*k)
goto ketthuc;
ketthuc:
printf(%d%d%d,i, j, k);
}
Ngn ng lp trnh C
48
49
if
if
if
if
(A
(A
(A
(A
>
>
>
<
B)
B)
B)
B)
printf(%f,B);
printf(%f,A);
scanf(%f,&A);
printf(%f,B);
else
else
else
else
printf(%f,A);
printf(%f,B);
scanf(%f,&B);
printf(%f,A);
if
if
if
if
b. 9
c. 4
d. 5
Chan
b. Le
c. So am
d. khng c hin g
Ngn ng lp trnh C
50
b. s = 55
c. s = 100
d. s = 101
S
S
S
S
=
=
=
=
1;
0;
1;
1;
for(i
for(i
for(i
for(i
=
=
=
=
1;
1;
1;
1;
i
i
i
i
<=
<=
<=
<=
N;
N;
N;
N;
i++)
i++)
i++)
i++)
S
S
S
S
*= i;
= S * i;
= S * N;
= S + i;
= 1;
<= 6) {
S + i;
i + 2;
Gi tr sau cng ca S l:
a. 6
b. 9
c. 11
d. 0
i = 1;
= S + i * i;
= i + 1;
(i<4);
Gi tr sau cng ca S l:
a. 0
b. 14
c. 16
d. 30
3.5.2. Bi tp
Bi 1. Nhp bn s x1, x2, x3, x4, tm s ln nht v s nh nht ca bn s .
51
=
=
> 1
1 1
+2
( |2 |) < 1
S kWh s dng
n gi
(VN)
kWh t 0 100
1.418
1.622
2.044
2.210
2.361
Bi 9. Nhp vo thng/nm cho bit thng c bao nhiu ngy. Nm nhun l nm chia
ht cho 4 nhng khng chia ht cho 100 hoc chia ht cho 400.
Bi 10. Nhp ngy/thng/nm, cho bit ngy l ngy th my trong tun. Thut
ton Doomsday (ngy tn th) tnh ngy ca tun nh sau: (ly ngy 09/06/2013
Dng Hong Huyn
Ngn ng lp trnh C
52
lm v d).
Bc 1: Ly hai s u ca nm chia d cho 4:
nu d 0: AD = 3
nu d 1: AD = 0
nu d 2: AD = 6
nu d 3: AD = 4
AD: l gi tr Doomsday ca nm. (20 % 4 = 0 -> AD = 3.)
Bc 2: Ly hai s cui ca nm chia cho 12 ly phn nguyn cho gn a, phn
d cho gn b. (a = 13 / 12 = 1, b = 13 % 12 = 1.)
Bc 3: t c = b chia nguyn cho 4. (c = 1 / 4 = 0).
Bc 4: t s = a + b + c. (s = 1 + 1 + 0 = 2)
Bc 5: t t = s chia d cho 7. (t = 2 % 7 = 2)
Bc 6: t thu = t + AD. (thu = 2 + 3 = 5)
Bc 7: Tm gi tr Doomsday ca thng (MD) da vo bng sau:
Thng 1
2
3 4 5 6 7 8 9 10 11 12
MD
3/4(Nhun) 28/29(Nhun) 0 4 9 6 11 8 5 10 7 12
(MD = 6)
Bc 8: t thu = thu + ngy MD. (thu = 5 +9 - 6 =8)
Bc 9: Trong khi thu < 0 tip tc cng cho 7. (thu = 8).
Bc 10: thu = thu chia ly phn d cho 7. (thu = 8 % 7 = 1).
Bc 11: Ngy ca tun c xc nh nh sau: 0: th by; 1:ch nht; 2: th
hai; 3: th ba; ; 6: th su. (Ngy 09/6/2013 l ch nht).
Bi 11. Nhp ngy/thng/nm dng lch, i sang ngy thng nm m lch.
Bi 12. Nhp mt k t bt k, cho bit k t thuc loi no: l ch hoa, l ch
thng, l ch s hay cc k t khc.
Khoa Cng ngh thng tin Trng i hc Quy Nhn
53
=
=
1+ 2 + 3+ +
1 + 2 + +
= 1 + 3 + 5 + + (2 + 1)
=
(1)
1
1
1
1
+ +
(2 )
2
4
6
8
1 3 5 7
2 1
2 4 6 8
2
. ( + 1). ( + 2)
1.3.5.7n, khi n l
2.4.6.8n, khi n chn
!
! ( )!
Ngn ng lp trnh C
54
6.0
12
6.6
15
7.5
18
7.6
24
7.7
36
8.0
Bi 26. Nhp s tin gi, li sut (%/thng), s tin nhn c. Tnh s thng cn gi.
Bi 27. Vit chng trnh tm c s chung ln nht v bi s chung nh nht ca hai
s nguyn.
Bi 28. Tnh gn ng hm s ex da vo khai trin Maclaurin vi chnh xc bng
55
x
x2 x3
xn
...
...
1
2! 3!
n!
xn
, n 0
n!
n
x2 x3 x4
n 1 x
... 1
...
2
3
4
n
xn
,
n
n0
( 1) 2 ( 1)( 2) 3
( 1)...( n 1) n
x
x ...
x ...
2!
3!
n!
( 1)...( n 1)
n!
vi
1 x
1 x
Bi 32. Tnh gn ng hm s
sin( x) x
x3 x5 x7
x 2 n1
n
... 1
...
3! 5! 7!
2n 1!
x 2 n1
, n 0
2n 1!
cos( x) 1
2n
x2 x4 x6
n x
... 1
...
2! 4! 6!
2n !
x 2n
, n 0
2n !
57
Ngn ng lp trnh C
58
59
Chc nng
Sao chp chui s2 vo s1.
Ghp chui s2 vo cui chui s1.
Tr v di ca chui s1.
Tr v 0 nu s1 v s2 bng nhau; nh
hn 0 nu s1<s2; ln hn 0 nu s1>s2.
Tr v v tr xut hin u tin ca ch
trong s1.
Tr v mt con tr n v tr xut hin
u tin ca s2 trong s1.
Nhp chui s t bn phm
In chui s ra mn hnh
Ngn ng lp trnh C
60
getch();
}
61
str[30][80];
Ngn ng lp trnh C
62
lnh sau:
gets(&str[20][0]);
V d:
/* chuong trinh soan van ban don gian. */
#include <stdio.h>
#define MAX 100
#define LEN 80
char text[MAX][LEN];
void main(void){
int t, i, j;
printf("Nhap chuoi rong de thoat.\n");
for(t=0; t<MAX; t++) {
printf("dong %d: ", t);
gets(text[t]);
if(text[t][0]==0) break;
}
for(i=0; i<t; i++) {
for(j=0; text[i][j]!=0; j++)
printf("%c",text[i][j]);
printf("\n");
}
}
63
Ngn ng lp trnh C
64
{9, 81}
{10, 100}/*sqrs[9][0] and sqrs[9][1]*/
};
int A[10];
int[10] A;
int A[1..10];
int A[1,10];
65
int A[5];
Chn lnh ng:
a.
b.
c.
d.
A[1]
A[2]
A(3)
A[5]
=
=
=
=
4/2;
-6;
6;
10;
Cu 4. Khai bo no ng:
a.
b.
c.
d.
int
int
int
int
A[n][m];
A[2][3];
A[1..2,1..3];
A[3, 2];
b. -9
c. 3
d. 5
4.6.2. Bi tp
Bi 1. Nhp s t nhin n v mt dy s thc x1, x2, ..., xn. Tm s ln nht
v s nh nht ca dy. m xem trong dy c bao nhiu s dng, bao nhiu s m,
bao nhiu s 0 ? Loi no nhiu nht?
Bi 2. Nhp mt dy s nguyn x1, x2, ..., xn. In ring cc s chn v cc s
l, mi loi trn mt dng.
Bi 3. Nhp dy s nguyn, in ra mn hnh nhng s nguyn t trong dy.
Bi 4. Nhp dy s nguyn, in ra mn hnh nhng s chnh phng trong dy.
Ngn ng lp trnh C
66
(an > 0)
(bm > 0)
67
V d :
P = 2x4 + 3x3 - 4x2 +7x + 9
= (((2x + 3)x - 4 )x + 7)x + 9 .
Bi 15. Nhp mt dy s bt k x 1, x2,..., xn, cho bit dy c i xng khng?
dy c lp thnh mt cp s cng khng? V d dy 1 3 5 4 5 3 1 l i xng,
dy 1 3 5 7 l mt cp s cng.
Bi 16. Nhp mt dy s bt k x1, x2,..., xn, cho bit dy thuc loi no: tng,
gim hay khng tng, khng gim?
Bi 17. Nhp mt dy s nguyn dng x1, x2,..., xn. Tch dy x thnh hai
dy: dy A gm cc s chn, dy B gm cc s l, sp xp dy A tng dn, dy B gim
dn, in hai dy A v B trn hai dng khc nhau. Ni hai dy A v B theo th t
thnh mt dy duy nht v gn tr li vo dy x, in dy x.
V d nhp dy x={5, 7, 0, 2, 1, 6, 4, 9} th dy A={0, 2, 4,
6}, dy B={9, 7, 5, 1}, v x={0, 2, 4, 6, 9, 7, 5, 1}.
Bi 18. Nhp hai s m, n v hai ma trn Am,n v Bm,n. In cc ma trn A, B, C=A+2B
v D=A-B ln mn hnh.
Bi 19.
Nhp v in ma trn Am,n.
Tm s nh nht v s ln nht trong ma trn .
Tnh tng ca tt c cc phn t trong ma trn.
m trong ma trn c bao nhiu s dng, bao nhiu s 0, bao nhiu s m.
Bi 20.
Nhp v in ma trn Am,n
Ngn ng lp trnh C
68
69
Ngn ng lp trnh C
70
71
Tng qut, biu thc con tr ph hp vi quy lut biu thc khc. Tuy nhin c
vi im cn quan tm.
Ngn ng lp trnh C
72
73
char *s=abc;
for(t=0; s[t]; ++t) putchar(s[t]);
}
/* Truy cp s nh l con tr. */
#include <stdio.h>
void main(void){
int t;
char *s=abc;
while(*s) putchar(*s++);
}
Tng t i vi mng hai chiu:
int a[10][10];
//a = &a[0][0];
a[1][2] = 100; //<=> *(a+1*10+2) = 100;
Tng qut, truy cp n phn t j, k ca mng hai chiu ta dng cng
thc sau:
a[j][k] <=> *(a + j*ct + k)
Tuy mng v con tr ging nhau nhng cng c mt im khc bit c bn gia
mng v con tr. l i vi mng ta khng th thay i a ch ca mng trong sut
chng trnh. V d: int a[10], b[10]; cu lnh a=b; s khng thc hin
c bi v ngha ca cu lnh trn l ly a ch phn t u tin ca mng b gn
cho a, m a l a ch ca mng a[10] nn ta khng th thay i a c. Tuy nhin
vi con tr ta c th thay i a ch ca n khi cn. Xt v d: int a[10],
b[10], *p; ta c th thc hin p=a; v sau tip tc thc hin p=b; iu ny
c ngha l p nhn a ch ca a sau nhn a ch ca b.
Ngn ng lp trnh C
74
x[2] = &var;
Khi ly gi tr ca bin var, ta dng lnh sau:
v = *x[2];
gi mt mng con tr n hm, ta khai bo hm nh sau:
void func1(int *p[]);
Khi hm func1() nhn tham s l mt con tr, tr n mng cc con tr
nguyn. Thng thng mng con tr thng dng lu tr cc con tr n chui. V
d:
char *p[10];/* Khai bao 10 con tro kieu char. */
p[0] = Chuoi thu nhat;
.
.
.
p[9] = Chuoi thu muoi;
V d:
To mt hm thng bo li vi mt m li cho trc
void syntax_error(int num){
static char *err[] = { "Cannot Open File\n",
"Read Error\n",
"Write Error\n",
"Media Failure\n"
};
printf("%s", err[num]);
}
75
Bin
a ch
Gi tr
Con tr n bin
Con tr
Con tr
Bin
a ch
a ch
Gi tr
Con tr n con tr
Hnh 5-3. Con tr n mt con tr khc.
5.8. Cp pht b nh ng
5.8.1. Cc hm lin quan
Cp pht ng l chng trnh s nhn b nh khi thc thi, hm h tr cho cp
pht ng trong C l malloc() (cp pht).
C php: void *malloc(int size); Hm malloc() s tr v con tr
kiu void iu ny c ngha l ta c th gn cho mi kiu con tr, v con tr ny tr
Ngn ng lp trnh C
76
77
return;
}
/* Nhap cac phan tu cua day */
for(i=0; i<n; i++){
printf("phan tu thu %d: ", i);
scanf("%d", p+i);
}
max = *p;
for(i=1; i<n; i++)
if(*(p+i)>max)
max = *(p+i);
printf("so lon nhat: %d\n", max);
free(p);
}
Ch , ly a ch ca phn t th i ta c th s dng c php: &p[i] hoc
p+i. ly gi tr ca phn t th i ta c th vit p[i] hoc *(p+i).
Ngn ng lp trnh C
78
79
}
}
/* Nhap cac phan tu ma tran. */
for(i=0; i<m; i++)
for(j=0; j<n; j++){
printf("p(%d,%d): ",i,j);
scanf("%d", p[i]+j);
}
/* In cac phan tu ra man hinh. */
for(i=0; i<m; i++){
for(j=0; j<n; j++)
printf("%4d",*(p[i]+j));
printf("\n");
}
/* Tim so lon nhat cua ma tran. */
max = **p;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
if(p[i][j]>max)
max = *(*(p+i)+j);
printf("So lon nhat: %d\n", max);
/* Giai phong bo nho. */
for(i=0; i<m; i++)
free(p[i]);
free(p);
}
Ch , ly gi tr ca p[i][j] ta c th vit: p[i][j] hoc
*(p[i]+j) hoc *(*(p+i)+j). ly a ch ca p[i][j] ta c th vit
&p[i][j] hoc p[i]+j hoc *(p+i)+j. Tuy nhin d hiu v trnh nhp
nhng, ta nn vit &p[i][j] l ly a ch ca phn t p[i][j], p[i][j] ly gi
tr ca phn t p[i][j].
Trong v d trn, ta c th cp pht b nh ng cho mng hai chiu nh trng
Ngn ng lp trnh C
80
5.9. Mt s vn vi con tr
5.9.1. Xc nh con tr trc khi s dng
Ch trong qu trnh c v ghi d liu vo con tr. Nu con tr cha xc nh
th vic c s cho mt gi tr khng mong mun, nu ghi c th ta s ghi ln m
hoc l d liu ca chng trnh. V d:
/*Chuong trinh se bi loi. */
int main(void){
int x, *p;
x = 10;
*p = x;
return 0;
}
Chng trnh trn s gn gi tr 10 vo mt v tr no trong b nh m ta
cha xc nh bi v con tr p cha bao gi c gn mt gi tr c th. Trong trng
hp chng trnh nh c th khng gy nh hng nhiu, nu chng trnh qu ln,
gi tr ca p c th l mt v tr no ca d liu, h iu hnh, m chng trnh.
81
p = x;
printf("%d", *p);
getch();
}
Khi gi hm printf() khng in gi tr ca x n ch in mt gi tr khng xc
nh bi v lnh gn p=x l sai. sa li chng trnh ny, ta dng lnh p=&x.
Ngn ng lp trnh C
82
p = &x;
printf(%d\n,
q = p;
printf(%d\n,
*q = *q + 2;
printf(%d\n,
printf(%d\n,
printf(%d\n,
*p);
*q);
x);
*q);
*p);
83
p = p 2;
printf(%d\n,*p);
p = p + 4;
printf(%d\n,*p);
5.10.2. Bi tp
Bi 1. Nhp s t nhin n, cp pht cho con tr p n s nguyn trong b nh. Nhp dy
cc s nguyn vo p. Tm s ln nht v s nh nht ca dy. m trong dy c bao
nhiu s dng, bao nhiu s m, bao nhiu s 0 ? Loi no nhiu nht ?
Bi 2. Cp pht b nh v nhp mt dy s bt k x1, x2,..., xn. In o ngc dy , v
d cho dy 1 5 3 8, in ra: 8 3 5 1. Sp xp dy tng dn, in dy. Sp xp dy
gim dn, in dy.
Bi 3. Nhp hai s nguyn m, n. Cp pht b nh ng cho ma trn cp mxn, tm s
ln nht, nh nht trn tng dng, ct ca ma trn.
Bi 4. Nhp s n, cp pht mt ma trn vung cp nxn, kim tra ma trn vung ny c
phi l ma trn n v hay khng? ma trn vung ny c i xng vi nhau qua ng
cho chnh hay khng?
Bi 5. Cp pht b nh cho ba ma trn Amxp, Bpxn, Cmxn. Vit chng trnh tnh
tch ca hai ma trn A.B kt qu lu vo ma trn C.
Chng 6. Hm (Function)
85
CHNG 6. HM (FUNCTION)
6.1. Dng tng qut ca mt hm
Dng tng qut ca mt hm:
return_type function_name(parameter list)
{
body of the function
}
Kiu tr v c kiu d liu bt k, ngoi tr kiu mng. Danh sch tham s cch
nhau bi du phy. Hm c th c tham s hoc khng. Tt c cc tham s ca hm
phi c khai bo mt cch ring bit.
f(type var1, type var2, , type varN).
vit mt chng trnh c s dng hm, ta phi khai bo hm trc hm
main, v nh ngha hm sau hm main. Khun dng c th nh sau:
/* Khai bao ham tai vi tri nay */
return_type function_name(parameter list);
return type main(){
statements ;
}
/* Dinh nghia ham tai vi tri nay */
return_type function_name(parameter list){
body of the function
}
gi hm, ta dng c php:
function_name(parameter1, parameter2, , parameterN);
Nu hm khng c tham s hnh thc ta gi hm theo cch sau:
function_name();
Nu hm c tr v mt gi tr, hm c th xut hin bn phi php gn, xut
hin trong cu lnh printf.
Ngn ng lp trnh C
86
!
!(
)!
#include <stdio.h>
/*Khai bao ham tinh giai thua */
unsigned long int giaithua(int n);
/* Khai bao ham main */
void main(void){
int n, k, Cnk;
printf("n,k=");
scanf("%d%d",&n,&k);
Cnk = giaithua(n)/giaithua(k)/giaithua(n-k);
printf("So to hop %d phan tu cua tap hop %d phan tu
la: %d\n",k,n,Cnk);
}
/* Dinh nghia ham tinh giai thua */
unsigned long int giaithua(int n){
unsigned long int tg=1;
int i;
for(i=2; i<=n; i++)
tg = tg * i;
return tg;
}
Trong v d trn, ta nh ngha mt hm c tn l giaithua, hm ny c tham
s l mt s nguyn chnh l gi tr cn tnh giai tha. Trong phn nh ngha hm
giaithua, bin n l tham s v n l bin cc b ging nh nhng bin tg, i trong
hm. iu c ngha l bin n, tg, i c cp c cp pht vng nh khi gi hm
v nhng vng nh ny s c gii phng khi thot khi hm.
Trong hm main, ta c ba li gi hm giaithua l: giaithua(n),
giaithua(k), giaithua(n-k). Khi ba gi tr n, k, n-k c gi l i s
(argument) ca hm giaithua. Trong trng hp ny, ba gi tr n, k, n-k s c
sao chp vo tham s n ca hm giaithua khi gi hm. C ch truyn tham s ca
Chng 6. Hm (Function)
87
Ngn ng lp trnh C
88
6.4. Tham s ca hm
Trong mt hm nu s dng tham s, n phi c khai bo bin v nhn gi tr
ca cc i s. Cc bin ny c gi l tham s hnh thc. Bin ny ging nh l bin
cc b bn trong hm v c to ra khi vo hm v b hy khi thot khi hm.
Chng 6. Hm (Function)
89
6.4.2. Gi mng n hm
a. Gi mng mt chiu n hm
Ta khng th gi ton b mng n mt hm, tuy nhin ta c th gi n hm
mt con tr n mng bng cch ch ra tn mng m khng c ch s. V d sau s gi
a ch ca mng i n hm func1()
void main(void){
int i[10];
func1(i);
.
Ngn ng lp trnh C
90
.
.
}
hm func1() nhn c tham s i nh trn, ta c ba cch khai bo hm
nh sau: dng con tr, dng mng c kch thc v mng khng xc nh kch thc.
void func1(int *x) /*Pointer*/{
. . .
}
void func1(int x[10])/* sized array*/{
. . .
}
void func1(int x[]) /* unsized array */{
. . .
}
C ba cch trn u to ra mt kt qu tng t.
Khi gi mng n hm, ta gi a ch ca mng n hm, trong trng hp ny
mi thay i trn mng bn trong hm s lm thay i gi tr mng trong tham s. V
d:
#include <conio.h>
#include <stdio.h>
#include <string.h>
void upper(char *str);
void main(void){
char s[100];
gets(s);
upper(s);
puts(s);
getch();
}
void upper(char *str){
int i, n = strlen(str);
for(i=0; i<n; i++)
if((str[i]>='a')&&(str[i]<='z'))
str[i] = str[i] - 32;
}
Khoa Cng ngh thng tin Trng i hc Quy Nhn
Chng 6. Hm (Function)
91
Ngn ng lp trnh C
92
6.5. Con tr hm
Mt trong nhng vn phc tp nht ca con tr l con tr hm. Tuy hm
khng phi l mt bin nhng n vn c sn mt a ch trong b nh v c th gn a
ch ny cho con tr. a ch ny l im vo ca hm v n l a ch c s dng khi
Khoa Cng ngh thng tin Trng i hc Quy Nhn
Chng 6. Hm (Function)
93
94
Ngn ng lp trnh C
Chng 6. Hm (Function)
95
Ngn ng lp trnh C
96
Chng 6. Hm (Function)
97
printf(%d, x);
return x;
}
void main(void){
int a=2;
printf(%d\n,f(a));
printf(%d,a);
getch();
}
Cu 2. Cho bit kt qu trn mn hnh
int f(int x){
x = x * x;
printf(%d, x);
return x;
}
void main(void){
int x=2;
printf(%d\n,f(x));
printf(%d,x);
getch();
}
Cu 3. Cho bit kt qu trn mn hnh
void f(int i);
void main(void){
int j=5, x=7;
printf(j=%d\n,j);
printf(x=%d\n,x);
f(x);
printf(j=%d\n,j);
printf(x=%d\n,x);
getch();
}
void f(int i){
int j=10; //Nu b dng lnh ny, kt qu s nh th no?
i = i * 2;
Ngn ng lp trnh C
98
printf(i=%d\n,i);
printf(j=%d\n,j);
}
Cu 4. Cho bit kt qu trn mn hnh
void f(int *p){
*p *= 2;
}
void main(void){
int x=5;
printf(x=%d,x);
f(&x);
printf(x=%d,x);
getch();
}
6.8.2. Bi tp
Bi 1. Vit mt hm i mt s thp phn sang s nh phn v ngc li.
Bi 2. Vit hm i mt s thp phn sang h thp lc phn, nh phn v ngc li.
Bi 3. Vit hm kim tra mt s c phi l s nguyn t hay khng? Sau nhp vo
mt dy s, s dng hm ny kim tra cc phn t trong dy, nu phn t no l s
nguyn t th hin th ln mn hnh.
Bi 4. Vit hm kim tra mt s c phi l s chnh phng hay khng? Sau nhp
vo mt dy s, s dng hm ny kim tra cc phn t trong dy, nu phn t no l s
chnh phng th hin th ln mn hnh.
Bi 5. Vit hm kim tra mt s c phi l s i xng hay khng? Sau nhp vo
mt dy s, s dng hm ny kim tra cc phn t trong dy, nu phn t no l s i
xng th hin th ln mn hnh.
Bi 6. Vit hm tm c s chung ln nht ca hai s. Sau nhp vo mt dy s, s
dng hm ny tm c s chung ln nht ca mt dy s.
Bi 7. Vit hm tm bi s chung nh nht ca hai s. Sau nhp vo mt dy s, s
dng hm ny tm bi s chung nh nht ca mt dy s.
Chng 6. Hm (Function)
99
101
Ngn ng lp trnh C
102
103
};
void main(void){
/* Khai bao bien cau truc. */
struct So_Phuc c1, c2, c3;
printf("Nhap so phuc thu nhat:\n");
printf("Phan thuc: ");
scanf("%lf",&c1.thuc);
printf("Phan ao: ");
scanf("%lf",&c1.ao);
printf("Nhap so phuc thu hai :\n");
printf("Phan thuc: ");
scanf("%lf",&c2.thuc);
printf("Phan ao: ");
scanf("%lf",&c2.ao);
/* Cong hai so phuc. */
c3.thuc=c1.thuc+c2.thuc;
c3.ao=c1.ao+c2.ao;
printf("(%.0lf+%.0lfi)+(%.0lf+%.0lfi)=%.0lf+%.0lfi\n"
,c1.thuc,c1.ao,c2.thuc,c2.ao,c3.ao,c3.thuc);
}
).
Ngn ng lp trnh C
104
#include <stdio.h>
#include <math.h>
/* Khai bao cau truc So_Phuc. */
struct So_Phuc{
double thuc, ao;
};
void main(void){
/* Khai bao mang va bien cau truc. */
struct So_Phuc C[100], max;
int i, n;
double m, temp;
printf("Nhap so phuc thu: ");
scanf("%d",&n);
for(i=0; i<n; i++){
printf("C[%d].thuc: ");
scanf("%lf",&C[i].thuc);
printf("C[%d].ao : ", i);
scanf("%lf",&C[i].ao);
}
printf("\n");
printf("Cac so phuc vua nhap:\n");
for(i=0; i<n; i++)
printf("%.0lf+%.0lfi\n",C[i].thuc,C[i].ao);
max = C[0];
m = sqrt(C[0].thuc*C[0].thuc + C[0].ao*C[0].ao);
for(i=1; i<n; i++){
temp=sqrt(C[i].thuc*C[i].thuc+C[i].ao*C[i].ao);
if(temp>m){
m = temp;
max = C[i];
}
}
printf("\n");
printf("So phuc co module lon nhat la:\n");
printf("%.0lf+%.0lfi\n",max.thuc,max.ao);
printf("Module: %lf\n", m);
}
Khoa Cng ngh thng tin Trng i hc Quy Nhn
105
Ngn ng lp trnh C
106
Nhap(&T);
printf("So phuc T vua nhap:\n");
In(T);
}
void Nhap(struct So_Phuc *So){
printf("thuc: ");
scanf("%lf",&So->thuc);
printf("ao : ");
scanf("%lf",&So->ao);
}
void In(struct So_Phuc So){
printf("%.0lf+%.0lfi\n",So.thuc,So.ao);
}
i vi hm Nhap, khi nhp cc gi tr thc v o trong hm ta vn mun gi
nhng gi tr ny khi thot khi hm do phi s dng c ch truyn tham s theo
tham chiu, v con tr cu trc s gii quyt c yu cu ny.
i vi hm In, ta ch cn hin th phn thc v phn o ra mn hnh m khng
cn thay i bt k thnh phn no ca s phc, do ch cn truyn tham s cho hm
In theo c ch truyn theo tham tr nn ta khng cn s dng con tr cu trc trong
trng hp ny.
107
#include <stdio.h>
/* Khai bao cau truc luu Ma tran. */
struct Matran{
int pt[50][50];
int dong, cot;
};
void Nhap(struct Matran *A);
void In(struct Matran A);
void main(void){
struct Matran M;
printf("Nhap ma tran M:\n");
Nhap(&M);
printf("Ma tran vua nhap:\n");
In(M);
}
void Nhap(struct Matran *A){
int i, j;
printf("So dong: ");
scanf("%d",&A->dong);
printf("So cot : ");
scanf("%d",&A->cot);
for(i=0; i<A->dong; i++)
for(j=0; j<A->cot; j++){
printf("Phan tu (%d,%d): ",i,j);
scanf("%d",&A->pt[i][j]);
}
}
void In(struct Matran A){
int i, j;
for(i=0; i<A.dong; i++){
for(j=0; j<A.cot; j++)
printf("%3d",A.pt[i][j]);
printf("\n");
}
}
Trong v d trn ta thy hm in ma trn ra mn hnh s dng c ch truyn tham
s theo tham tr. Chng trnh s cp mt vng nh cho bin cu trc A, sau sao
Ngn ng lp trnh C
108
109
Ngn ng lp trnh C
110
void main(void){
struct List *list=NULL, *item;
int temp;
do{
printf("Nhap du lieu (0<= de ket thuc): ");
scanf("%d",&temp);
if(temp<=0)
break;
item = malloc(sizeof(struct List *));
item->data = temp;
insert(&list,item);
}while(1);
show(list);
printf("Nhap phan tu can tim: ");
scanf("%d",&temp);
item = find(list,temp);
if(item!=NULL)
printf("Tim thay!\n");
else
printf("Khong tim thay!\n");
item=list;
free(item);
show(list);
}
/* Chen phan tu q vao dau danh sach. */
void insert(struct List **p,struct List *q){
struct List *r;
if (p==NULL)
*p=q;
else{
r=*p;
*p=q;
(*p)->next=r;
}
}
/* Hien thi cac phan tu cua danh sach. */
Dng Hong Huyn
111
Ngn ng lp trnh C
112
113
Ngn ng lp trnh C
114
union u_type{
int i;
char ch;
};
Khai bo ny khng to b nh cho tt c cc bin. Ta c th khai bo bin
hoc bng cch t tn ca n cui khai bo hoc s dng khai bo phn bit.
khai bo bin kiu unions ta dng c php nh sau:
unions uni_type uni_var;
V d:
unions u_type cnvt;
Trong bin cnvt c bin nguyn i v bin k t ch cng chia s mt vng
nh, i hai byte v ch mt byte.
115
Ngn ng lp trnh C
116
enum
enumname {enumlist}
khai bo bin kiu enum:
0
1
2
100
101
102
117
nh sau:
Cch 1:
switch(money) {
case penny:
printf("penny");
break;
case nickel:
printf("nickel");
break;
case dime:
printf("dime");
break;
case quarter:
printf("quarter");
break;
case half_dollar:
printf("half_dollar");
break;
case dollar:
printf("dollar");
}
Cch 2:
char name[][12]={
"penny",
"nickel",
"dime",
"quarter",
"half_dollar",
"dollar"}
printf(%s,name[money]);
Ngn ng lp trnh C
118
my. Trong kiu cu trc, kch thc bao gi cng ln hn hoc bng tng kch thc
ca cc thnh vin. Ton t sizeof l mt ton t thc hin ti thi im thc thi
chng trnh, tt c cc thng tin v kch thc ca mi bin ch c bit ti thi
im bin dch. iu ny cng rt c ngha i vi kiu unions bi v kch thc
ca kiu unions lun bng hoc ln hn kch thc ca thnh vin ln nht.
b. Bin cu trc
119
d. Con tr cu trc A
Cu 3. Khi y l:
a. Kiu cu trc
c. Thnh vin ca cu trc A
b. Bin cu trc
d. Con tr cu trc A
b. 10
c.12
d. 4
b. A->m1
c. x.m1
d. A.m1
b. &A->m1
c. &x.m1
d. &x->m1
b. &x->m1
c. *x.m1
d. x.m1
b. 10
c.12
d. 4
b. A->m1
c. y.m1
d. A.m1
b. &A->m1
c. &y.m1
d. &x->m1
b. &y->m1
c. *y.m1
d. y.m1
Cu 12. sao chp cc thnh vin ca bin cu trc x qua z ta thc hin lnh:
a. z = x;
c. z = &x;
7.6.2. Bi tp
Bi 1. bit mt th sinh u hay rt trong k thi tuyn sinh, cn bit cc thng tin
sau:
H tn: h v tn ca th sinh
Dng Hong Huyn
Ngn ng lp trnh C
120
) +(
121
( )( )( )
Ngn ng lp trnh C
122
123
Ngn ng lp trnh C
124
putchar(ch);
} while (ch != '.');
getch();
}
8.1.1. Mt vn vi hm getchar
Hm getchar() c ci t theo cch m cc k t c g s nm trong
vng m cho n khi bm phm enter. Do ta phi nhn phm enter trc khi mun
gi mi th n chng trnh. Hm getchar() cng ch nhn mt k t ti thi
im n c gi, trong khi trong vng m c th c nhiu hn mt k t, do khi
s dng hm ny s gp nhng li m ta khng bit ti sao.
125
putchar(ch);
} while (ch != 13);
}
126
Ngn ng lp trnh C
#include <stdio.h>
#include <string.h>
#include <conio.h>
/* Danh sach cac tu. */
char *dic[] = {
"computer"
,
"May tinh.",
"informatic", "Tin hoc.",
"keyboard"
,
"Ban phim.",
"mouse"
,
"Con chuot.",
"printer" ,
"May in.",
"moniter" ,
"Man hinh",
""
,
"" /* Diem ket thuc danh sach. */
};
void main(void)
{
char word[40], ch;
char **p;
do {
printf("Nhap tu can tra: ");
gets(word);
p = dic;
/* Tim tu va in ra man hinh. */
do {
if(strcmp(*p, word)==0){
printf("Nghia Tieng Viet: ");
puts(*(p+1));
break;
}
p = p + 2; /* Chuyen den tu tiep theo. */
}while(*p);
if(*p==0)
printf("Tu nay khong co trong tu dien.\n");
printf("Tra tu khac? (y/n): ");
ch=getche();
printf("\n");
}while(ch != 'N' && ch!='n');
}
127
8.3. Hm printf
Xem mc 2.8.1
8.4. Hm scanf
Xem mc 2.8.2
8.5.2. Bi tp
Bi 1. Vit chng trnh thc hin cng vic sau: khi ngi dng bm 1 t hp phm
bt k, nu phm khng phi l phm iu khin th in ra mn hnh m ASCII ca phm
, nu l phm iu khin th in m qut ca t hp phm .
Bi 2. Vit chng trnh to mt menu c n mc chn. Khi ngi dng bm phm mi
tn ln v xung, vt sng ca menu s di chuyn. Khi ngi dng bm phm enter,
thng bo ra mn hnh mc chn ca menu.
Bi 3. Vit mt tr chi n gin tm gi l rn sn mi. Xut hin ngu nhin mt
k t x. Ngi dng iu khin con rn (bao gm cc k hin x ghp li vi nhau)
sao cho chm vo k t x va xut hin . Nu rn chm mi thm k t x vo
rn rn di thm. Tip tc hin th k t x ti v tr ngu nhin.
129
9.1.2. File
File l mi th c trn a, ta c th kt hp lung vi file bng thao tc m.
Khi mt file c m, thng tin chuyn i qua li gia file v chng trnh.
Trong file h tr khi nim v tr, khi mt file c m v tr con tr n u
file. Mi k t khi c vit/c trn file lm cho con tr file tng ln mt v tr.
ngt kt hp gia mt lung v file ta s dng lnh ng tp tin. Khi ng
mt tp tin, ni dung nu c s c ghi ln thit b, qu trnh ny lm sch vng m
v n m bo rng khng c thng tin no tnh c b vit ln a. Tt c cc file s
c ng t ng khi chng trnh kt thc bnh thng, hoc gp lnh tr v t hm
main() hoc lnh exit. Cc file s khng c ng khi chng trnh kt thc bt
thng, hoc b b d.
Mi lung kt hp vi file c mt cu trc iu khin c gi FILE. Khng
bao gi thay i cu trc ny.
Ngn ng lp trnh C
130
Chc nng
fopen()
M mt file
fclose()
ng mt file
putc()
Ghi 1 k t vo file
fputc()
Ging hm putc().
getc()
c mt k t t file
fgetc()
Ging hm getc().
fgets()
c mt chui k t t file
fputs()
fseek()
ftell()
feof()
Tr v gi tr ng nu gp cui file
ferror()
Tr v gi tr ng nu gp li
rewind()
a con tr v u file
remove()
Xa mt file
fflush()
Lm sch lung
Hnh 9-1. Cc hm thao tc file.
131
M mt file vn bn c.
To mt file vn bn ghi.
M file vn bn b sung.
rb
M file nh phn c.
wb
ab
r+
M file vn bn c/ghi.
w+
To file vn bn c/ghi.
a+
r+b
w+b
a+b
Ngn ng lp trnh C
132
133
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *fp;
char ch;
if(argc!=2) {
printf("cu phap: viewfile <filename>\n");
exit(1);
}
if((fp=fopen(argv[1], "r"))==NULL) {
printf("Khong the mo file.\n");
exit(1);
}
ch = getc(fp); /* doc mot ki tu */
while (ch!=EOF){
putchar(ch); /* in ki tu len man hinh */
ch = getc(fp);
}
fclose(fp);
return 0;
}
Ch : file m ngun phi t tn l viewtext.c. thc thi chng trnh
trn, u tin ta to mt file vn bn c th c tn l textfile.txt c ni dung
nh hnh sau:
Ngn ng lp trnh C
134
135
putc(13,fp);
}
else if(ch!=0)
putc(ch, fp);
else{
ch = getch();
if(ch==64) /* ma quet phim F6. */
break;
}
} while (1);
fclose(fp);
printf("\nFile da duoc luu.");
return 0;
}
Chng trnh trn ging mt chng trnh son tho vn bn n gin ch
Console. Trong chng trnh ny ta ch mi x l nhng phm n gin v d bm
phm Enter s chn vo file vn bn k t xung dng. Bm phm F6 s thot khi
chng trnh v lu file vo a.
Ngn ng lp trnh C
136
while(!feof(fp)) ch = getc(fp);
Chng trnh sau s to mt chng trnh mt file ging nh lnh copy ca h
iu hnh DOS.
/* filename copyfile.c */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *in, *out;
char ch;
if(argc!=3) {
printf("Cu phap: copyfile <file1> <file2>\n");
exit(1);
}
/* Mo file nguon. */
if((in=fopen(argv[1], "rb"))==NULL) {
printf("Khong mo duoc file nguon.\n");
exit(1);
}
/* mo file dich. */
if((out=fopen(argv[2], "wb")) == NULL) {
printf("Khong mo duoc file dich.\n");
exit(1);
}
/* Xu li sao chep file. */
while(!feof(in)){
ch = getc(in);
if(!feof(in)) putc(ch, out);
}
fclose(in);
fclose(out);
return 0;
}
137
Ngn ng lp trnh C
138
9.2.8. Hm rewind()
Hm rewind() thit lp con tr v tr file v u file c ch ra bi tham s.
Khun mu nh sau:
void rewind(FILE *fp);
hiu r hm rewind(), xt v d sau. Hin th ni dung file va mi c
ghi vo a. thc hin thao tc ny, ta phi quay v u file sau khi hon thnh
vic ghi vo a v s dng fgets() c li file ny. Ch file ny phi c m
ch c/ghi bng cch s dng ch w+. ch w+, nu file cha tn ti,
Khoa Cng ngh thng tin Trng i hc Quy Nhn
139
9.2.9. Hm ferror()
Hm ferror() xc nh c hay khng mt thao tc trn file gp li. Khun
mu ca hm nh sau:
int ferror(FILE *fp);
Hm tr v gi tr ng nu thao tc sau cng trn file fp c li, ngoi ra hm
tr v gi tr sai. Bi v mi thao tc trn file u c th gy li, do hm ferror()
Ngn ng lp trnh C
140
141
Ngn ng lp trnh C
142
143
}
fwrite(&d, sizeof(double), 1, fp);
fwrite(&i, sizeof(int), 1, fp);
fwrite(&l, sizeof(long), 1, fp);
rewind(fp);
fread(&d, sizeof(double), 1, fp);
fread(&i, sizeof(int), 1, fp);
fread(&l, sizeof(long), 1, fp);
printf("%f %d %ld", d, i, l);
fclose(fp);
return 0;
}
Mt trong nhng ng dng quan trong nht ca hm fread() v fwrite()
l c/ghi d liu do ngi dng nh ngha. V d cho cu trc:
struct struct_type{
float balance;
char name[80];
} cust;
Cu lnh sau s vit ni dung ca cust vo file c tr bi fp:
fwrite(&cust, sizeof(struct struct_type), 1, fp);
V d to cu trc c tn l Phan_So lu tr phn s, nhp vo hai phn s
ghi hai phn s ny vo file phanso.dat. Sau c hai phn s ny v hin th ln
mn hnh.
#include <stdio.h>
#include <stdlib.h>
struct Phan_So{
int tu, mau;
};
void main(void){
struct Phan_So P1, P2;
FILE *fp;
if((fp = fopen("phanso.dat","wb"))==NULL){
printf("Khong mo duoc file phans0.dat\n");
exit(1);
Ngn ng lp trnh C
144
}
printf("Nhap phan so thu nhat:\n");
printf("Tu: ");
scanf("%d",&P1.tu);
printf("Mau: ");
scanf("%d",&P1.mau);
/* ghi phan so thu nhat vao file. */
fwrite(&P1,sizeof(struct Phan_So),1,fp);
printf("Nhap phan so thu hai:\n");
printf("Tu: ");
scanf("%d",&P2.tu);
printf("Mau: ");
scanf("%d",&P2.mau);
/* ghi phan so thu hai vao file. */
fwrite(&P2,sizeof(struct Phan_So),1,fp);
fclose(fp);
/*
doc hai phan so tu file phanso.dat
in gia tri hai phan so len man hinh.
*/
if((fp = fopen("phanso.dat","rb"))==NULL){
printf("Khong mo duoc file phanso.dat\n");
exit(1);
}
/* doc hai phan so ra hai bien P1, P2. */
fread(&P1,sizeof(struct Phan_So),1,fp);
fread(&P2,sizeof(struct Phan_So),1,fp);
/* hien thi hai phan so ra man hinh. */
printf("Phan so thu nhat: %d/%d\n",P1.tu,P1.mau);
printf("Phan so thu hai : %d/%d\n",P2.tu,P2.mau);
fclose(fp);
}
Ch : c/ghi d liu bng hai hm fread(), fwrite() ta c th m
file ch vn bn. Tuy nhin thao tc thng c/ghi d liu khng theo nh
mun. file nh phn khng th hin th ni dung bng cc chng trnh son tho vn
bn thng thng.
145
Macro Name
SEEK_SET
SEEK_CUR
SEEK_END
Ngn ng lp trnh C
146
.
Hnh 9-5. File input.dat c m bng chng trnh Notepad.
Sau khi c d liu ra mng, chng trnh sp xp mng theo th t tng dn
Khoa Cng ngh thng tin Trng i hc Quy Nhn
147
Ngn ng lp trnh C
148
Sau khi thc hin chng trnh ta c th xem ni dung ca file output.dat
bng cc chng trnh son vn bn thng thng. Hnh sau hin ni dung ca file
output.dat bng chng trnh Notepad.
a.
b.
c.
d.
M
M
M
M
mt
mt
mt
mt
file
file
file
file
vn
nh
nh
vn
149
bn b sung.
phn c.
phn ghi.
bn ghi.
Bo li
M file
M file
M file
Cu 3. Gi s trn a cha c file test, sau khi m file test bng lnh:
fp=fopen(test,rb); chng trnh s:
a.
b.
c.
d.
Bo li
M file
M file
M file
Bo li
M file
M file
M file
M
M
M
M
file
file
file
file
vn
nh
vn
nh
M
M
M
M
file
file
file
file
vn
nh
vn
nh
Ngn ng lp trnh C
150
Nu
Nu
Nu
Nu
file
file
file
file
Nu
Nu
Nu
Nu
file
file
file
file
Nu
Nu
Nu
Nu
file
file
file
file
b. getc()
c. getchar()
d. gets()
b. putc()
c. fputs()
d. puts()
b. getchar()
c. fgets()
d. getc()
b. putc()
c. fputs()
d. puts()
b. putc()
c. fputs()
d. fwrite()
b. fgets()
c. getc()
d. fread()
151
9.7.2. Bi tp
Bi 1. Vit chng trnh nhp mt ma trn t bn phm sau ghi ma trn vo file
theo cu trc sau: dng u tin c hai s nguyn m t s (dng, ct) ca ma trn
tng ng vi hai gi tr (m, n); m dng tip theo mi dng c n s thc tng ng vi
gi tr ca tng phn t.
Bi 2. Vit chng trnh c ni dung ca file cha ma trn trn, sau in ni dung
ma trn ra mn hnh.
Bi 3. S dng hai hm fread(), fwrite() to lnh copy trong DOS.
Bi 4. Vit chng trnh to mt dy s ngu nhin gm n s nguyn. Ghi dy s ny
vo file c tn l dayso.dat. c v hin th ni dung ca dy t file ra mn hnh.
Dng cc hm truy cp ngu nhin sp xp dy s ny theo th t tng dn. Lu
khng c s dng mng.
Bi 5. qun l d liu v hc sinh, ta cn cc thng tin sau: m hc sinh, h tn,
nm sinh, qu qun. Yu cu:
Ngn ng lp trnh C
152
153
error
on
input\n khi xut hin nh danh E_MS. Khi bin dch, hm printf(E_MS)
thc s xut hin l printf(standard error on input\n);
Ngn ng lp trnh C
154
155
10.2. #error
Dn hng #error bt buc chng ngng bin dch. Mc ch chnh l dng
cho g ri. Dng tng qut ca mt dn hng #error l:
#error error_message
error_message khng c t gia cp du nhy kp. Khi dn hng
#error xut hin, thng ip li s hin th cng vi nhng thng tin khc c th
Ngn ng lp trnh C
156
10.3. #include
Dn hng #include ch dn cho trnh bin dch c file ngun khc vi tn
cha trong dn hng #include. Tn ca file ngun c th t trong du nhy kp
() hoc du m (<>). V d:
#include stdio.h
#include <stdio.h>
C hai u ch dn trnh bin dch c v bin dch file tiu vi cc hm th
vin vo ra h thng.
Cc file c chn c th c dn hng #include bn trong, khi ta gi l
chn lng nhau. S cc mc lng nhau bin i ty theo trnh bin dch. Tuy nhin
trong C chun quy nh c th c ti a l 8 mc.
Tn file c th t trong du nhy kp hoc trong cp du m xc nh cch
thc tm kim. Nu t trong cp du m, chng trnh tm kim trong th mc c
nh ngha bi trnh bin dch. Nu t trong du nhy kp, chng trnh tm kim
trong th mc c ch ra ti lc khai bo hoc trong th mc hin hnh.
Thng thng, ta s dng du m chn cc th vin chun v du nhy kp
chn cc file tiu do ta vit ra.
Ta s dng dn hng #include trong trng mun chia nh chng trnh thnh
nhiu file khc nhau d qun l, hoc s dng to mt th vin ring s dng.
Xt v d sau: vit chng trnh nhp v mt dy s, sp xp v in dy s ra
mn hnh. Trong v d ny ta c th chia chng trnh thnh nhiu file khc nhau v
bin dch ring bit tng file mt. C th ta gp cc m lnh vit hm Nhap(), hm
In(), hm Sapxep() vo mt file ring v bin dch c lp file ny. Tip theo, vit
chng trnh cha hm main() bao gm cc lnh gi hm Nhap(), In() v
Sapxep() trong mt file ring. Cc thao tc thc hin nh sau:
157
Ngn ng lp trnh C
158
159
Ngn ng lp trnh C
160
int i;
for(i=0; i<n; i++)
printf("%4d", p[i]);
printf("\n");
}
/*
dinh nghia ham sap xep
tham so d=1 sap tang, d=-1 sap giam
*/
void Sapxep(int *p, int n, int d){
int i, j, tg;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(d*p[i]>d*p[j]){
tg = p[i];
p[i] = p[j];
p[j] = tg;
}
}
File th ba c tn l main.c c ni dung nh sau:
#include <stdio.h>
#include "mang.h" /* chen file tieu de mang.h */
void main(void){
int a[100], n;
printf("Nhap so phan tu: ");
scanf("%d",&n);
Nhap(a,n);
/* Nhap mang.
In(a,n);
/* In mang sau khi nhap.
Sapxep(a,n,1);
/* Sap xep mang tang dan.
In(a,n);
/* In mang sau khi sap tang.
Sapxep(a,n,-1);
/* Sap xep mang giam dan.
In(a,n);
/* In mang sau khi sap giam.
}
*/
*/
*/
*/
*/
*/
161
Ngn ng lp trnh C
162
#elif expression N
statement sequence
#endif
V d sau dng ACTIVE_COUNTRY nh ngha k hiu tin t:
#define US 0
#define ENGLAND 1
#define FRANCE 2
#define ACTIVE_COUNTRY US
#if ACTIVE_COUNTRY == US
char currency[] = "dollar";
#elif ACTIVE_COUNTRY == ENGLAND
char currency[] = "pound";
#else
char currency[] = "franc";
#endif
Trong C chun cho php c 8 mc lng nhau, khi lng nhau mi #endif,
163
Ngn ng lp trnh C
164
10.5. #undef
Dn hng #undef ngha l undefines xa nh ngha macro trc ,
dng tng qut ca #undef nh sau:
#undef macro-name
V d:
#define LEN 100
#define WIDTH 100
char array[LEN][WIDTH];
#undef LEN
#undef WIDTH
/* at this point both LEN and WIDTH are undefined */
C LEN v WIDTH c nh ngha cho n khi xut hin cu lnh #undef.
10.6. defined
Ta c th dng defined kt hp vi #if xc nh mt macro c
nh ngha hay cha. Dng tng qut ca defined nh sau:
defined macro-name
Nu macro c nh ngha, biu thc cho gi tr ng, ngoi ra cho gi tr
sai. V d xc nh macro MYFILE c nh ngha hay cha ta c th dng mt
trong hai cch sau:
#ifdef MYFILE
hoc:
#if defined MYFILE
Ta c th thm du ! ph nh mnh defined. V d cu lnh sau s
c bin dch nu DEBUG cha c nh ngha:
#if !defined DEBUG
printf("Final version!\n");
#endif
10.7. #line
Khoa Cng ngh thng tin Trng i hc Quy Nhn
165
Ngn ng lp trnh C
166
167
printf(Gia
printf(Gia
printf(Gia
printf(Gia
tri
tri
tri
tri
lon
lon
lon
lon
nhat:
nhat:
nhat:
nhat:
MAX);
%d,50);
50);
%d,MAX);
Ngn ng lp trnh C
168
a.
b.
c.
d.
#define
#define
#define
#define
MAX a>b?a:b
MAX(a,b) a>b?a:b
MAX(a,b) (a)>(b)?(a):(b)
MAX(ab) (a)>(b)?(a):(b)
#include
#include
#include
#include
<mang.h>
<D:\Visual C++\mang.h>
"D:\Visual C++\mang.h"
"mang.h"
10.11.2. Bi tp
Bi 1. To th vin dng chung bao gm cc hm lin quan n mng 1 chiu.
Bi 2. To th vin dng chung bao gm cc hm lin quan n mng 2 chiu.
Bi 3. To th vin dng chung bao gm cc hm lin quan n chui k t.
Bi 4. To th vin dng chung bao gm cc hm lin quan n s hc.
Bi 5. To th vin dng chung bao gm cc hm lin quan n s phc.
Bi 6. To th vin dng chung bao gm cc hm lin quan n phn s.
169