237
HỌC VIỆN KỸ THUẬT MẬT MÃ NHÀ XUẤT BẢN THÔNG TIN VÀ TRUYỀN THÔNG GIÁO TRÌNH LẬP TRÌNH CĂN BẢN ThS. TRẦN THỊ HOA

Giao Trinh C

Embed Size (px)

DESCRIPTION

Giáo Trình C

Citation preview

HC VIN K THUT MT M

ThS. TRN TH HOA

GIO TRNH

LP TRNH CN BN

NH XUT BN THNG TIN V TRUYN THNG

MC LC

iMC LC

viDANH MC CC BNG

viiDANH MC CC HNH V

viiiLI NI U

1CHNG 1: CC THNH PHN C BN CA NGN NG C

11.1. Gii thiu ngn ng C

21.2. Tp k t, t kha, tn gi

21.2.1. Tp k t

21.2.2. T kha

31.2.3. Tn gi

31.3. Cu lnh, khi lnh, li gii thch

31.3.1. Cu lnh

41.3.2. Khi lnh

41.3.3. Li gii thch

51.4. Cc ch th tin bin dch

51.4.1. Ch th #include

61.4.2. Ch th #define

61.5. Cu trc ca mt chng trnh C

71.6. Mt vi chng trnh C n gin

81.7. Vn hnh chng trnh trn my

91.7.1. To tp chng trnh gc

91.7.2. Dch chng trnh

101.7.3. Chy chng trnh

12CHNG 2: KIU D LIU, HNG, BIN, MNG V BIU THC

122.1. Kiu d liu

122.1.1. Cc kiu d liu n gin thng dng

132.1.2. Kiu d liu lit k

142.2. Hng, bin

142.2.1. Hng

162.2.2. Bin

172.2.3. Kiu mng

192.2.4. Ton t sizeof

202.3. nh ngha kiu d liu mi

202.4. Biu thc

202.4.1. Khi nim biu thc

212.4.2. Cc php ton

242.4.3. Chuyn i kiu gi tr

252.4.4. Cu lnh gn v Biu thc gn

252.4.5. Biu thc iu kin

262.4.6. Th t u tin trong php ton

29CHNG 3: VO - RA D LIU

293.1. Hm printf

293.1.1. Khai bo hm

293.1.2. Chui iu khin

303.1.3. c t

313.1.4. K t chuyn dng

323.1.5. Danh sch i

333.1.6. Gi tr ca hm printf

333.2. Hm scanf

333.2.1. Khai bo hm

333.2.2. Danh sch i

333.2.3. Dng vo v trng vo

343.2.4. Chui iu khin

343.2.5. K t chuyn dng

363.2.6. Gi tr ca hm scanf

363.3. Dng vo stdin v cc hm scanf, gets, getchar

373.3.1. Hm gets

373.3.2. Hm getchar

383.4. Cc hm xut k t puts, putchar

383.4.1. Hm puts

383.4.2. Hm putchar

393.5. Cc hm vo ra trn mn hnh, bn phm

393.5.1. Hm getch

393.5.2. Hm getche

393.5.3. Hm putch

393.5.4. Hm kbhit

403.5.5. Hm xa mn hnh

403.5.6. Hm di chuyn con tr

42CHNG 4: CC CU LNH IU KHIN

424.1. Cc cu lnh r nhnh

424.1.1. Cu lnh if

464.1.2. Cu lnh switch

514.1.3. Nhn v cu lnh goto.

544.2. Cc cu lnh c cu trc lp

544.2.1. Cu lnh for

604.2.2. Cu lnh while

634.2.3. Cu lnh dowhile

664.3. Cu lnh break v cu lnh continue

664.3.1. Cu lnh break

674.3.2. Cu lnh continue

70CHNG 5: CON TR V HM

705.1. Con tr

705.1.1. a ch

705.1.2. Con tr

735.2. Hm

745.2.1. Cch t chc hm

765.2.2. Bin/mng t ng

785.2.3. Bin/mng ngoi

795.2.4. Cch truyn tham s khi gi hm

815.2.5. Hm c i con tr

835.2.6. Con tr v mng mt chiu

855.2.7. Con tr v mng nhiu chiu

885.2.8. Hm kiu con tr

885.2.9. Con tr ti hm (Con tr hm)

915.2.10. Hm c i l con tr hm

925.2.11. Hm quy

97CHNG 6: KIU CU TRC, KIU HP

976.1. Kiu cu trc

976.1.1. nh ngha kiu cu trc

996.1.2. Khai bo bin cu trc

1006.1.3. Truy nhp ti cc thnh phn ca cu trc

1016.1.4. S dng cu trc

1036.1.5. Mng cu trc

1056.1.6. Khi u cho mt cu trc v php gn cu trc

1066.2. Kiu hp

1066.2.1. nh ngha kiu hp

1066.2.2. Khai bo bin kiu hp

1106.3. Cu trc t tr v danh sch lin kt

1106.3.1. Cp pht b nh ng

1106.3.2. Cu trc t tr v danh sch lin kt

1126.3.3. Cc php ton trn danh sch lin kt

1206.3.4. Ngn xp

1236.3.5. Hng i

129CHNG 7: THAO TC TRN CC TP TIN

1297.1. Gii thiu chung

1307.2. Kiu nhp xut nh phn v vn bn

1307.2.1. Kiu nhp xut nh phn

1307.2.2. Kiu nhp xut vn bn

1317.3. Cc hm x l tp cp 2

1317.3.1. Cc hm dng chung cho c hai kiu nhp xut

1347.3.2. Cc hm nhp xut k t

1367.3.3. Cc hm nhp xut theo kiu vn bn

1427.3.4. Cc hm nhp xut theo kiu nh phn

150TI LIU THAM KHO

151PH LC 1

153PH LC 2

155PH LC 3

DANH MC CC BNG

2Bng 1.1: Danh sch t kha ca ngn ng C

21Bng 2.1: Cc php ton hai ngi

22Bng 2.2: Cc php ton vi bit

22Bng 2.3: Cc php ton so snh

23Bng 2.4: Cc php ton logic

26Bng 2.5: Th t u tin ca cc php ton

31Bng 3.1: Danh sch cc k t chuyn dng ca hm printf

35Bng 3.2: Danh sch k t chuyn dng v kiu i ca hm scanf

131Bng 7.1: Cc kiu truy nhp tp

DANH MC CC HNH V9Hnh 1.1: Mn hnh son tho ca Turbo C

43Hnh 4.1:S khi cu lnh if dng 1(nhnh else ni tt) v lnh if dng 2

48Hnh 4.2: S khi ca cu lnh switchcase

52Hnh 4.3: S khi ca cu lnh goto kt hp vi cu lnh if

55Hnh 4.4: S khi ca cu lnh for

61Hnh 4.5: S khi ca cu lnh while

64Hnh 4.6: S khi ca cu lnh do while

Hnh 6.1: Mt cu trc t tr 113Hnh 6.2: M hnh danh sch lin kt thun..........114

Hnh 6.3: M hnh danh sch lin kt ngc.115

LI NI U

Theo khung chng trnh ca B Gio Dc v o To, Lp trnh cn bn l mt phn quan trng trong hc phn Tin hc i cng thuc cc khi ngnh Khoa hc T nhin, c bit l ngnh Cng ngh thng tin.

Nhm p ng yu cu hc tp ca sinh vin bc u lm quen vi cng vic lp trnh, tc gi bin son Gio Trnh Lp trnh cn bn nhm gip cho sinh vin c mt ti liu hc tp, rn luyn tt kh nng lp trnh, to nn tng vng chc cho cc mn hc tip theo trong chng trnh o to k s Cng ngh thng tin.

Gio trnh bao gm nhng kin thc t n gin n phc tp. Ni dung ca gio trnh c chia thnh by chng. Trong mi chng u c phn gii thiu l thuyt, phn bi tp mu v cui cng l phn bi tp t gii sinh vin t mnh kim tra nhng kin thc v kinh nghim c hc. Sau y l ni dung chnh ca cc chng:

Chng 1 ngoi vic gii thiu cc khi nim c bn ca ngn ng lp trnh C cn a ra mt s chng trnh C n gin v cch thc hin chng trn my gip ngi c mau chng tip cn vi my.

Chng 2 trnh by v cc kiu d liu, cch biu din cc gi tr d liu v cch t chc (lu tr) d liu trong bin v mng. Ngoi ra chng ny cn gii thiu v biu thc, v cc cch x l d liu n gin nh cc php ton, biu thc v cu lnh gn.

Chng 3 trnh by v cc hm vo ra d liu trn bn phm v mn hnh.

Chng 4 trnh by v lp ton t rt quan trng dng th hin cc thut ton, l ton t r nhnh if, ton t la chn switch, cc ton t to lp chu trnh (vng lp) for, while, do while v ton t goto.

Chng 5 trnh by cch t chc chng trnh thnh cc hm, cc quy tc xy dng v s dng hm. Cc vn hay v kh y l con tr, con tr hm v k thut quy.

Chng 6 trnh by v mt kiu d liu quan trng l cu trc, cu trc t tr v danh sch lin kt.

Chng 7 trnh by v cc thao tc trn tp nh: to mt tp mi, ghi d liu t b nh ln tp, c d liu t tp vo b nh,

Khi vit, tc gi c gng gio trnh c hon chnh, song chc chn khng trnh khi thiu xt, v vy rt mong nhn c s ng gp kin ca c gi gio trnh ngy cng hon thin hn.

Tc gi cng xin chn thnh cm n cc ng nghip Khoa Cng ngh Thng tin, Hc vin K thut Mt m gip , ng gp kin hon chnh ni dung gio trnh ny.

H Ni, thng 11, 2013

TC GICHNG 1: CC THNH PHN C BN CA NGN NG C

Trong chng ny, tc gi s gii thiu nhng thnh phn c bn ca ngn ng lp trnh C (cng nh ca bt k ngn ng lp trnh no khc) l: tp k t, t kha, tnNgoi ra, gip bn c mau chng tip cn vi my, tc gi cng gii thiu mt vi chng trnh n gin v cch vn hnh chng trn my c th nhn c kt qu cui cng.

1.1. Gii thiu ngn ng C

Lp trnh cu trc l phng php t chc, phn chia chng trnh thnh cc hm, th tc, chng c dng x l d liu nhng li tch ri cc cu trc d liu. Thng qua cc ngn ng Foxpro, Pascal, C a s nhng ngi lm Tin hc kh quen bit vi phng php lp trnh ny.

Vo u nhng nm 70 ti phng th nghim Bell pht trin ngn ng C. C c s dng ln u trn mt h thng ci t h iu hnh UNIX. C c ngun gc t ngn ng BCPL do Martin Richards pht trin. BCPL sau c Ken Thompson pht trin thnh ngn ng B, y l ngi khi thy ra C.

Trong khi BCPL v B khng h tr kiu d liu, th C c nhiu kiu d liu khc nhau. Nhng kiu d liu chnh gm: kiu k t (character), kiu s nguyn (interger) v kiu s thc (float).

C c dng lp trnh h thng. Mt chng trnh h thng c ngha lin quan n h iu hnh ca my tnh hay nhng tin ch h tr n. H iu hnh (OS), trnh thng dch (Interpreters), trnh son tho (Editors), chng trnh Hp Ng (Assembly) l cc chng trnh h thng. H iu hnh UNIX c pht trin da vo C. C ang c s dng rng ri bi v tnh hiu qu v linh hot. Trnh bin dch (compiler) C c sn cho hu ht cc my tnh. M lnh vit bng C trn my ny c th c bin dch v chy trn my khc ch cn thay i rt t hoc khng thay i g c. Trnh bin dch C dch nhanh v cho ra m i tng khng li.

Ngoi vic C c dng vit h iu hnh Unix, ngi ta nhanh chng nhn ra sc mnh ca C trong vic x l cc vn khc nhau ca tin hc nh x l s, vn bn, c s d liu v c bit l trong lp trnh hng i tng khi C c pht trin thnh C++.

1.2. Tp k t, t kha, tn gi

1.2.1. Tp k t

Mi ngn ng lp trnh u c xy dng t mt b k t no . Cc k t c nhm li theo nhiu cch khc nhau to nn cc t. Tip theo, n lt mnh, cc t li c lin kt theo mt nguyn tc no to thnh cc cu lnh. Mt chng trnh bao gm nhiu cu lnh din t mt thut ton no . Ngn ng C c xy dng trn b k t sau:

26 ch ci latinh thng: a, b, c,, x, y, z

26 ch ci latinh hoa: A, B, C,..., X, Y, Z

10 ch s: 0, 1,, 8, 9

Cc k t ton hc: + - * / = ( )

K t gch ni _

Cc k t c bit khc nh: . , : ; [ ] { } ? ! \ & | % # $...

Ch :

Du cch thc s l mt khong cch dng tch cc t. V d Ha noi gm 6 k t cn Hanoi gm 5 k t.

Khi vit chng trnh ta khng c s dng bt k k hiu no khc ngoi tp k t ni trn.

1.2.2. T kha

T kha l mt s t m ngn ng C t trc c ngha hon ton xc nh v thng c dng khai bo cc kiu d liu, vit cc ton t v cc cu lnh. Cc t kha phi c vit bng ch thng. Trong C c cc t kha sau:

Bng 1.1: Danh sch t kha ca ngn ng C

asm const else for interrupt

while break continue enum goto long short

case default extern huge near static typedef cdecl do far

if pascal struct

union char double float

int register

unsigned return sizeof void

switch volatile

signed

Ch : Cc t kha khng c vit hoa m phi vit bng ch thng. Chng hn khng vit l INT m vit l int.

1.2.3. Tn gi

Khi nim tn rt quan trng trong qu trnh lp trnh, n khng nhng th hin r ngha trong chng trnh m cn dng xc nh cc i tng khc nhau khi thc hin chng trnh.

Tn thng c t cho hng, bin, mng, con tr, nhn Chiu di ti a ca tn l 32 k t.

Tn hp l l mt chui k t lin tc gm: k t ch, k t s v du gch di. K t u ca tn phi l k t ch hoc du gch di. Khi t tn khng c t trng vi cc t kha.

V d 1.1. Mt s tn gi

Cc tn ng: delta, a_1, Num_ODD, Case

Cc tn sai: 3a_1 (k t u l k t s)

num-odd (s dng du gch ngang)

int (t tn trng vi t kha)

del ta (c khong trng)

f(x) (c du ngoc trn)

Ch : Trong C, tn phn bit ch hoa v ch thng. Ch hoa thng c dng t tn cho cc hng v ch thng hay dng t tn cho hu ht cc i tng khc nh: bin, mng, hm, cu trc.

V d 1.2 : number khc Number

case khc Case (case l t kha, do t tn l Case th vn ng)

1.3. Cu lnh, khi lnh, li gii thch

1.3.1. Cu lnh

Chng trnh C c t chc thnh nhiu cu lnh, mi cu lnh c th thc hin mt cng vic no nhng cui mi cu lnh phi c kt thc bng du chm phy ;. Trn mt dng c th vit nhiu cu lnh v mt cu lnh cng c th vit trn nhiu dng.

Ti nhng v tr ca cu lnh m cho php xut hin mt hoc nhiu du khong cch th ta c th ngt phn cn li ca cu lnh xung dng tip theo.

V d 1.3: Cho on chng trnh sau

void main()

{

int x,y;

x = 7; y = 8;

if

( x>y)

printf(x > y);

}

Trong v d trn, dng lnh th hai, gm c hai cu lnh. Cu lnh if c vit trn ba dng th 3, 4 v 5.

1.3.2. Khi lnh

Cc cu lnh c t trong cp du { } c gi l mt khi lnh. Khi lnh c xem nh mt cu lnh ring bit.

Trong c php ca cc cu lnh, ti nhng v tr ch cho php xut hin mt cu lnh m ta mun thc hin nhiu cu lnh th ta phi t nhng cu lnh trong mt khi lnh.

1.3.3. Li gii thch

Trong khi lp trnh cn phi ghi ch gii thch cc bin, hng, cc thao tc x l gip cho chng trnh r rng, d nh, d sa cha v ngi c d hiu. Trong C c cc kiu ghi ch sau:

// ni dung ghi ch. Khi ni dung ghi ch c ghi trn mt dng hoc phn cn li ca mt dng.

/* ni dung ghi ch */. Khi ni dung ghi ch c th ghi trn mt dng, trn nhiu dng hoc trn phn cn li ca mt dng.

V d 1.4: Chng trnh tm s ln ca hai s a v b

void main()

{

int a, b; //khai bao bin a, b kiu int

a = 1;

//gn 1 cho a

b =3; //gn 3 cho b

/* thut ton tm s ln nht l nu a ln hn b th a l s ln nht ngc li b l s ln nht */

if (a > b) printf("max = %d", a);

else printf("max: %d", b);

}

Khi bin dch chng trnh, C gp cc cp du ghi ch th s b qua v khng dch ra ngn ng my.

1.4. Cc ch th tin bin dch1.4.1. Ch th #include

C php: # include hoc

(1)

# include [ng dn]\tn tp

(2)

Cng dng: Nu trong mt chng trnh C c s dng cc hm, hng, bin, cc kiu d liu c khai bo trong mt chng trnh C khc (c th ca ngn ng C hoc do ngi dng t vit) th ta phi s dng ch th trn ch th cho b tin x l chp ni dung ca cc tp cha cc hm, hng, bin, kiu d liu trn vo v tr t n.

S khc nhau gia hai dng khai bo trn: Dng (1) khc dng (2) ch khi khng c thng tin v ng dn (tc l ngi lp trnh ch ghi tn tp m khng ghi y c ng dn). Vi dng (1) th chng trnh s tm tp c tn a ra trong th vin INCLUDE ca trnh bin dch. Cn vi dng (2) th chng trnh trc tin s tm tp trong th mc ch, nu khng tm thy th s tip tc tm trong th vin INCLUDE.

Ch :

Cc tp th vin c sn trong C c gi l cc tp tiu v c ui l .h

Cc hm vo ra chun nm trn hai tp stdio.h v conio.h

Cc hm ton hc nm trong tp math.h

Cc hm x l chui nm trong tp string.h.

Cc hm chuyn i d liu nm trong tp ctype.h

Mi mt ch th #include ch khai bo c mt tp, nu mun khai bo nhiu tp th ta phi s dng nhiu dng #include.

V d 1.5. Gi s mt chng trnh C cn s dng n cc cu lnh nhp/xut d liu, cc hm ton hc v cc hm x l chui th ta phi khai bo cc tp stdio.h, math.h v string.h nh sau:

#includestdio.h

#includemath.h

#includestring.h1.4.2. Ch th #define

C php

#define tn_hng tn

Cng dng: Dng khai bo cc tn hng. tn_hng s c dng thay th cho tn. Tt c cc tn_hng trong chng trnh xut hin sau ny u c hiu l tn.1.5. Cu trc ca mt chng trnh C

Ngn ng C khng c khi nim th tc. Mi chng trnh con trong C u c t chc thnh cc hm. Hm l mt n v c lp trong chng trnh. Tnh c lp ca hm th hin trn hai im sau:

Khng cho php xy dng mt hm bn trong hm khc. iu ny khc bit vi ngn ng Pascal

Mi mt hm, c th c cc bin, mng, cc kiu d liu ring ca hm v chng ch c dng ni b bn trong thn hm cha n.

Mt chng trnh C bao gm mt hoc nhiu hm trong bt buc phi c mt hm chnh (hm main()). Chng trnh c bt u thc hin t cu lnh u tin ca hm main() v kt thc khi thc hin xong cu lnh cui cng v gp k t ng } ca hm ny.

Khi thc hin chng trnh, thng qua cc li gi hm m my c th i t hm ny n hm khc.

Thng thng, cu trc chung ca mt chng trnh C nh sau:

Khai bo nguyn mu hm 1

..

Khai bo nguyn mu hm n

Khai bo hm n + 1

Khai bo hm n + m

void main()

{

}

Khai bo hm 1

.

Khai bo hm n

Bn ngoi cc hm, ti cc v tr ta c th t cc cu lnh sau:

# include //Khai bo cc tp

# define // Khai bo cc tn hng

typedef // nh ngha kiu d liu

khai bo bin ngoi, mng ngoi,

Mt s lu khi vit chng trnh C: vit chng trnh c cu trc c r rng, d kim tra v trnh nhm ln, ta nn vit chng trnh theo cc quy tc sau:

Cc cu lnh v khi lnh nm trong mt ton t iu khin th vit li vo bn phi.

Cc cu lnh v khi lnh cng cp th vit trn cng mt ct (thng ct).

im u v im cui ca mt khi lnh cng vit thng ct.

1.6. Mt vi chng trnh C n gin

V d 1.6: Chng trnh hin ln mn hnh hai dng ch

TURBO C HN HNH

LM QUEN VI BN

# include stdio.h

# include conio.h

void main()

{

printf(TURBO C HAN HANH\n);

/* In dng ch TURBO C HAN HANH ri xung dng*/

printf(LAM QUEN VOI BAN);

/* In dng ch LAM QUEN VOI BAN u dng tip theo */

getch(); // tm dng my xem kt qu

}

V d 1.7: Chng trnh tnh chu vi v din tch ca hnh ch nht vi hai cnh c nhp t bn phm

# include stdio.h

# include conio.h

void main()

{

int dai,rong;

//khai bo cc bin

float cv, dt;

printf(Nhap chieu dai, rong:); //In ra mn hnh chui trong cp du

// nhy kp

scanf(%d %d,&dai,&rong); //Nhp s liu cho cc bin

cv = (float)(dai+rong)*2;

// Tnh chu vi

dt = (float)(dai*rong);

// Tnh din tch

printf(\nchu vi = %d,cv); // In ra mn hnh gi tr chu vi

printf(\ndien tich = %d,dt); // In ra mn hnh din tch

getch(); //Dng mn hnh xem kt qu

}

1.7. Vn hnh chng trnh trn my

Phn vic cn li sau khi c chng trnh l thc hin chng trnh trn my tnh nhn c kt qu cui cng. y l phn vic t i hi suy ngh v sng to hn so vi cng vic lp trnh. Qu trnh vn hnh trn my tnh bao gm cc bc c bn sau:

To tp chng trnh gc ui C (son tho chng trnh)

Dch chng trnh (to tp chng trnh thc hin ui EXE)

Chy chng trnh.

Gi s TURBO C c ci t trong th mc C:\TC.

1.7.1. To tp chng trnh gc

Chn chng trnh TC.EXE nm trong ng dn C:\TC\BIN s nhn c menu chnh trn mn hnh vi ni dung sau:

Hnh 1.1: Mn hnh son tho ca Turbo C

By gi ta cn dng chc nng New nm trong Menu File bng cch a con tr n hp sng New v bm Enter to mt tp chng trnh mi. Khi chc nng New c thc hin v my sn sng nhn cc dng chng trnh a vo. Ta s s dng bn phm np chng trnh.

Chng trnh mc d a ln mn hnh nhng n vn cha c ghi ln a. Mun vy sau khi son tho chng trnh ta dng chc nng Save trn Menu File sau g tn tp gc, gi s g tn tp l THU.C ri n phm enter. n y qu trnh son tho c hon thnh v tp c tn l THU.C c lu trn a.1.7.2. Dch chng trnh

dch chng trnh ta dng chc nng Compile trn menu Compile hoc nhn t hp phm Alt + F9, chc nng ny c tc dng dch chng trnh gc v lin kt vi cc hm th vin nhm to ra tp chng trnh thc hin c ui l EXE. Cc sai st (error) v cnh bo (warning) nu c s c ch ra. Nu c error hoc warning th ta cn tr li bc 1 sa cha chng trnh. Trong trng hp tri li, ta nhn c mt chng trnh ng, n c ghi ln a di dng mt tp c tn l: THU.EXE. n y qu trnh dch xem nh c hon thnh.

Tm li sau khi thc hin hai bc va nu trn ta nhn c tp chng trnh gc THU.C v tp chng trnh thc hin THU.EXE, c hai u c t trong th mc C:\TC v my ang sn sng lm vic vi cc tp trong th mc ny.

1.7.3. Chy chng trnh

khi ng mt tp chng trnh thc hin ta s dng tn ca n. Chng hn, khi ng chng trnh THU.EXE ta bm THU v enter (trong mi trng DOS) hoc ta c th chy trong mi trng Turbo C bng cch bm ng thi hai phm Ctrl + F9. Khi chng trnh bt u lm vic. Nu nhp cc s liu cn thit chng trnh s tnh ton v a ra kt qu cui cng trn my tnh

Bi tp cui chng

Cu 1. Vit chng trnh tnh x ly tha y vi cc gi tr x v y c nhp vo t bn phm.

Cu 2. Vit chng trnh tnh tch ca bn s thc c nhp vo t bn phm.

Cu 3. Vit chng trnh nhp vo ba s a, b, c l ba cnh ca mt tam gic. Sau in ra mn hnh chu vi v din tch ca tam gic trn.

CHNG 2: KIU D LIU, HNG, BIN, MNG V BIU THCTrong chng ny, tc gi s gii thiu v cc kiu d liu n gin thng dng nh nguyn, thc, k t v kiu d liu c cu trc nh mng ca ngn ng C. a ra cc khi nim v hng, bin v cch s dng chng trong chng trnh. Tip theo l cc nh ngha v biu thc v cc php ton phc v cng vic tnh ton trong khi lp trnh.

2.1. Kiu d liu

2.1.1. Cc kiu d liu n gin thng dng

2.1.1.1. Kiu k t (char)

Mt gi tr kiu char chim mt byte b nh v biu din c mt k t thng qua bng m American Stardard Code Information Interchange (ASCII ph lc 1)

Trong ngn ng C c hai kiu char l:

Kiu

Phm vi biu din Kch thc

S k t

[signed] char -128 127

1 byte

256

Unsigned char 0 255

1 byte

256

Nh vy c hai kiu char l signed char v unsigned char. Kiu th nht biu din mt s nguyn t -128 n 127 cn kiu th hai c gi tr t 0 n 255.

Ch : Gi tr kiu char l mt s nguyn, do c th thc hin cc php tnh s hc trn .

V d 2.1: on chng trnh sau minh ha s khc nhau gia hai kiu char trn:

char ch1;

unsigned char ch2;

ch1 = 200; ch2 = 200;

Khi nu ta dng cu lnh in ra mn hnh printf(ch1 = %d, ch2 = %d, ch1, ch2); th s cho kt qu nh sau ch1 = -56, ch2 = 200 nhng c ch1 v ch2 u biu din chung mt k t c m trong bng m ASCII l 200, tc l nu ta dng cu lnh in printf(ch1 = %c, ch2 = %c, ch1, ch2) th s ra mn hnh hai gi tr k t ca ch1 v ch2 l ging nhau.

Gii thch: S 200 c biu din h nh phn l 11001000. V ch2 l unsigned char (s khng du) nn tt c cc bit trong dy nh phn 11001000 u c dng tnh gi tr vy gi tr ca ch2 l 200, cn ch1 l kiu signed char (c du) nn bit u tin trong dy nh phn l bit du, y l bit 1 nn l s m. Nh vy dy nh phn trn l biu din s m dng m b. chuyn v biu din dng m ngc ta ly dy nh phn trn tr cho 1 c kt qu l 11000111. T m ngc trn ta o ngc cc bit s c biu din dng m thun nh sau 10111000. Gi tr ca dy nh phn 10111000 l -56.

2.1.1.2. Kiu nguyn

Trong C bao gm cc kiu s nguyn sau:

Kiu

Phm vi biu din

Kch thc

int

-32768 32767

2 byte

unsigned int

0 65535

2 byte

long [int]

-2147483648 2147483647

4 byte

unsigned long [int]

0 4294967295

4 byte

Ch : Cc kiu k t cng c xem l mt dng ca s nguyn.

2.1.1.3. Kiu thc

Trong C c cc kiu s thc sau:

Kiu

Phm vi biu din

Kch thc

float

3.4E-38 3.4E+38

4 byte

double

1.7E-308 1.7E+308

8 byte

long double

3.4E-4932 3.4E+4932

10 byte

Ch : My c th lu tr c s kiu float c gi tr tuyt i t 3.4E-38 n 3.4E+38. S c tr tuyt i nh hn 3.4E-38 c xem bng 0. Phm vi biu din ca s double c hiu theo ngha tng t.

2.1.2. Kiu d liu lit k

C php:

enum [tn_kiu] {tn 1,, tn n} [danh sch bin];

Cc tn 1, , tn n c coi nh l cc s nguyn lin tip c tnh t 0. Ni c th hn tn 1 = 0, tn 2 = 1,

Bin kiu enum thc cht l bin nguyn, n c cp pht 2 byte b nh v n c th nhn mt gi tr nguyn bt k.

V d 2.2: Xt chng trnh sau

#include

void main()

{

enum ngay {cn,t2,t3,t4,t5,t6,t7} ngay1, ngay2;

int j = 2000;

ngay1 = t4;

ngay2 = j;

printf(ngay1=%d, ngay2 =%d,ngay1,ngay2);

getch();

}

s in ra mn hnh kt qu sau: ngay1 = 3, ngay2 = 2000.

2.2. Hng, bin

2.2.1. Hng

Hng l cc i lng m gi tr ca n khng thay i trong qu trnh tnh ton. Tn hng c khai bo theo c php sau:

const kiu d liu tn_hng = gi tr;

V d 2.3: Cho khai bo hng sau: const int max = 100; khi tt c cc tn max xut hin trong chng trnh u c gi tr l 100.

Ch : Trong chng trnh khng c dng bt k cu lnh no lm thay i gi tr ca cc hng.

2.2.1.1. Hng s thc

Hng s thc c vit theo hai cch:

Theo dng thp phn: S thc gm phn nguyn, du chm thp phn v phn thp phn. V d 2.4: cc hng s thc 214.55, 12.0

Theo dng m: S thc c tch gm hai phn l nh tr v bc. Phn nh tr l mt s nguyn hoc s thc c vit di dng thp phn, phn bc l mt s nguyn biu din s m ca c s 10, hai phn ny cch nhau bi k t e hoc E. V d 2.5: 0.12E3 biu din gi tr 0.12*103 = 120.0, 1.23e-2 biu din gi tr 1.23 * 10-2 = 0.0123.

2.2.1.2. Hng s nguyn

L mt s nguyn c gi tr trong khong t -32768 n 32767. V d 2.6:

-45, 543 l cc hng s nguyn. Ch phn bit 12 v 12.0. S 12 l hng s nguyn cn 12.0 l hng s thc.

Mt hng s nguyn c th c biu din nh sau:

Theo cch thng thng: 2006,12,tc l s c biu din h c s 10

Theo c s 8: Thm s 0 vo ng trc s 017|8 = 15|10

Theo c s 16: Thm 0x u s: 0x 1A|16 = 26|10

Kiu char cng c xem nh mt hng nguyn:

V d 2.7:

printf(so=%d,A+5);s cho ra kt qu l so = 70

printf(chu=%c,A+2);s cho ra kt qu l chu =C

2.2.1.3. Hng k t

L mt k t c vit trong hai du nhy n.

V d 2.8: a l mt hng k t. Gi tr ca a chnh l m ca k t a trong bng m ASCII. Nh vy gi tr ca a l 97.

i vi mt vi hng k t c bit, ta cn s dng cch vit sau (thm du \ vo trc k t ):

Cch vit

K t

\

\

\\

\

\n

chuyn dng

\0

\0 (null)

\t

tab

\b

backspace

\r

CR (v u dng)

\f

sang trang

2.2.1.4. Hng xu k t

L mt dy k t bt k t trong hai du nhy kp.

V d 2.9: hng xu k t Ha noi, (xu khng gm k t no hay cn gi l xu rng). Xu k t c lu tr trong my di dng mt mng c cc phn t l cc k t ring bit. Trnh bin dch t ng thm k t \0 vo cui mi xu (k t \0 c xem l du hiu kt thc ca mt xu k t).

Ch : Phn bit gia hng k t v hng xu k t: A l hng k t khc vi A l hng xu k t.

2.2.2. Bin2.2.2.1. Khai bo bin

Bin l mt i lng c gi tr thay i trong qu trnh tnh ton. Mi bin trong chng trnh cn phi c khai bo trc khi s dng. Khai bo bin theo c php sau:

kiu d liu danh sch tn bin;

Ch : Cc bin c cng kiu d liu s c ghi trn mt dng trong cng mt khai bo, khi cc bin c vit cch nhau bi du phy.

V d 2.10: V d v khai bo bin trong chng trnh

void main()

{

int a,b,c; //khai bo 3 bin a, b, c kiu int

float x,y;

//khai bo 2 bin x, y kiu float

char ch1, ch2; //khai bo 2 bin ch1, ch2 kiu char

.

}

Ch : Bin kiu int ch nhn c cc gi tr kiu int. Cc bin khc cng c ngha tng t.

2.2.2.2. Khi u gi tr cho bin

Ta c th va khai bo bin va gn cho bin mt gi tr u tin bng cch sau:

kiu d liu tn bin = gi tr u tin;

V bin l i lng c gi tr thay i nn trong chng trnh ta c th dng cc cu lnh gn thay i gi tr ca bin.

2.2.2.3. Ly a ch ca bin

Mi bin c cp pht mt vng nh gm mt s byte lin tip. S hiu ca byte u chnh l a ch ca bin. nhn a ch bin ta dng php ton: &tn_bin

2.2.3. Kiu mng

Mi bin ch c th cha mt gi tr. cha mt dy s ta c th dng nhiu bin nhng cch ny khng tin li. Trong trng hp ny ta s s dng kiu d liu l mng. Mng l mt tp hp nhiu phn t c cng mt kiu gi tr v chung mt tn v c phn bit vi nhau bi ch s mng. Mi phn t mng c vai tr nh mt bin v cha c mt gi tr. C bao nhiu kiu bin th c by nhiu kiu mng, nh vy s c mng s nguyn, mng s thc, mng k t. Mng cn c khai bo xc nh r:

Kiu mng (int, float,)

Tn mng

S chiu v kch thc mi chiu.

2.2.3.1. Khai bo mng

Mng c khai bo theo c php sau:

kiu d liu mng_1, mng_2,, mng_n;

trong mi mng_i (vi i=1..n) c khai bo theo c php sau: tn_mng[k1][k2][km] vi k1, k2,, km l kch thc ca mi chiu.

V d 2.11: Cc khai bo

int a[10];

float b[3][3];

S xc nh hai mng vi ngha:

Mng th nht tn l a c kiu l int, s chiu l mt, kch thc l 10. Mng gm 10 phn t c nh s nh sau: a[0], a[1],.., a[9] v mi phn t cha c mt gi tr kiu int.

Mng th hai tn l b, kiu l float, s chiu l 2, kch thc ca cc chiu u l 3. Mng c 9 phn t, nh sau:

b[0][0]

b[0][1]b[0][2]

b[1][0]

b[1][1]b[1][2]

b[2][0]

b[2][1]b[2][2]

trong mi phn t b[i][j] cha c mt gi tr kiu float

Ch :

Cc phn t ca mng c cp pht cc khong nh lin tip nhau trong b nh.

Khi cn khai bo mt bin chui k t ta khai bo mng mt chiu m mi phn t ca mng c kiu l kiu k t (char) nh v d sau: char chuoi[15];

2.2.3.2. Khi to gi tr mng

Mun khi u gi tr ca mng no , ta vit nh sau:

Vi mng mt chiu:

tn_mng[n] = {gt1, gt2,, gtk}; vi k 4 = a/2n

~Ly phn b~0=1 ~1=0

2.4.2.3. Cc php ton so snh v logic.

Cc php ton so snh v logic cho ra kt qu hoc gi tr ng (1) hoc gi tr sai (0). Cc php ton so snh cho trong bng sau:

Bng 2.3: Cc php ton so snhPhp ton ngha V d

>So snh ln hn3>7 c gi tr 0

=2 c gi tr 1

=20 c gi tr 0

==So snh bng nhau3==0 c gi tr 0

!=So snh khc nhau5!=9 c gi tr 1

Cc php ton logic c cho trong bng sau:

Bng 2.4: Cc php ton logic

Php ton ngha Gii thch

!Php ph nh mt ngiA!a

Khc 00

Bng 01

&&Php v (and)aba&&b

Khc 0Khc 01

Khc 0Bng 00

Bng 0Khc 00

Bng 0Bng 00

||Php hoc (or)aba||b

Khc 0Khc 01

Khc 0Bng 01

Bng 0Khc 01

Bng 0Bng 00

Ch : a v b c th nguyn hay thc.

2.4.2.4. Php tng, gim

Php tng: ton t ++ s cng thm mt n v vo ton hng ca n.

Php gim: ton t -- s tr i mt n v vo ton hng ca n.

Ch : Du ++, -- c th ng trc hoc sau ton hng, vy c th vit: ++n, n++, -- n, n--;

S khc nhau gia hai cch vit:

Trong php n++ th n c tng gi tr ln mt n v sau khi gi tr ca n c s dng.

Cn php ++n th n c tng gi tr ln mt n v trc khi n c s dng.

V d 2.16: Nu n c gi tr bng 5 th khi thc hin cu lnh m = n++; th my s thc hin cu lnh gn m = n trc tc l m = 5, sau mi thc hin n php tng n = n + 1, tc l gi tr n= 6.

Nu c cu lnh gn m = ++n; th my s thc hin php tng n = n + 1 trc, tc l gi tr ca n = 6, sau mi thc hin php gn m = n, nh vy trong trng hp ny gi tr ca m = 6.

2.4.3. Chuyn i kiu gi tr

Vic chuyn i kiu gi tr thng din ra mt cch t ng trong hai trng hp sau:

Khi biu thc gm cc ton hng khc kiu: khi hai ton hng trong mt php ton c kiu khc nhau th kiu thp hn s c nng thnh kiu cao hn trc khi thc hin php ton. Kt qu thu c l mt gi tr c kiu cao hn. Chng hn gia hai ton hng c kiu int vi long th ton hng kiu int s c chuyn thnh kiu long, gia hai ton hng c kiu int v float th ton hng kiu int s c chuyn thnh kiu float,V d 2.17: 1.5*(11/3) = 4.5

Khi gn mt gi tr kiu ny cho mt bin/phn t mng kiu kia. Khi gi tr ca v phi c chuyn sang kiu ca v tri, l kiu ca kt qu. Kiu int c th chuyn thnh kiu float, kiu float c th chuyn thnh kiu int do loi b phn thp phn,V d 2.18: nu n l bin nguyn th sau khi thc hin cu lnh n = 15.6; th n s c gi tr l 15.

Ngoi ra ta c th chuyn t mt kiu gi tr sang mt kiu bt k m ta mun bng php p kiu nh sau: (type) (biu thc). Khi kiu ca biu thc s c i thnh kiu type theo cc trng hp nu trn.

V d 2.19: (int)a s cho mt gi tr kiu int. Nu a l bin kiu float th y c s chuyn i t float sang int. Ch bn thn a vn c kiu float ch (int)a l c kiu int.

Ch :

Mun c gi tr chnh xc trong php chia hai bin nguyn cn dng php p kiu: (float)(a/b)

i vi cc hm ton hc ca th vin chun th gi tr ca i v gi tr ca hm u c kiu double, v vy tnh cn bc hai ca mt bin nguyn n, ta phi dng php p kiu chuyn kiu int sang double nh sau: sqrt((double)n)

2.4.4. Cu lnh gn v Biu thc gn

2.4.4.1. Cu lnh gn

c dng gn gi tr cho mt bin hay mt phn t mng, cu lnh gn c c php nh sau:

bin/phn t mng = biu thc;

V d 2.20: Xt cc cu lnh

n = 2; //gn gi tr 2 cho bin n

ch = a; //gn gi tr cho bin ch l k t a

Ch : cc cu lnh gn c dng nh x = x +1; trong v tri c lp li v phi th ta c th vit gn hn nh sau: x +=1; Tng t vi cu lnh x = x 1; ta cng c th vit l x = 1;

2.4.4.2. Biu thc gn

L biu thc c dng v = e trong v l mt bin hay phn t mng, e l mt biu thc. Gi tr ca biu thc gn l gi tr ca e, kiu ca biu thc gn l kiu ca v. Nu t du chm phy vo biu thc gn th ta c cu lnh gn.

V d 2.21:

Khi vit a = b = 5; th iu c ngha l gn gi tr ca biu thc b = 5 cho bin a. Kt qu l b = 5 v a = 5.

Tng t cu lnh a = b = c = d = 8; s gn gi tr 8 cho a, b, c, d.

Cu lnh x = (y = 2) * (z = 6); th s cho kt qu y = 2, z = 6 v z = 12.

2.4.5. Biu thc iu kin

L biu thc c dng:

biu thc 1 ? biu thc 2: biu thc 3

Gi tr ca biu thc iu kin bng gi tr ca biu thc 2 nu biu thc 1 khc 0 (ng) hoc bng gi tr ca biu thc 3 nu biu thc 1 bng 0 (sai). Kiu ca biu thc iu kin l kiu cao nht trong cc kiu ca biu thc 2 v biu thc 3.

V d 2.22: Cho biu thc iu kin sau: (a>b) ? a : b Biu thc cho kt qu l gi tr cc i ca hai s a v b. Tc l, nu biu thc a>b c gi tr l ng th s cc i s l a v ngc li, nu biu thc a>b c gi tr l sai th s cc i s l b.

2.4.6. Th t u tin trong php ton

Cc php ton c u tin khc nhau, th t u tin ca cc php ton c cho trong bng sau:

Bng 2.5: Th t u tin ca cc php ton

S th tPhp tonTrnh t kt hp

1() [] -> .Tri qua phi

2! ~ & * - ++ -- (type) sizeofPhi qua tri

3*(php nhn) / % Tri qua phi

4+ -Tri qua phi

5>Tri qua phi

6< >=Tri qua phi

7== !=Tri qua phi

8&Tri qua phi

9^Tri qua phi

10|Tri qua phi

11&&Tri qua phi

12||Tri qua phi

13? :Phi qua tri

14= + = - = *= /= % = > = &= ^= |=Phi qua tri

15,Tri qua phi

Ch :

i vi cc php ton c cng mc u tin th trnh t tnh ton c th t tri qua phi hay ngc li ty thuc vo Trnh t kt hp.

Khi ta vit mt biu thc, nu khng nh n th t u tin ca cc php ton th ta nn s dng cc cp du ngoc trn ().

Di y l mt vi ch dn v cc php ton l trong bng trn:+ Trn dng 1

[] dng biu din phn t mng, v d a[3]

. dng biu din thnh phn ca cu trc, v d sv.ten

-> dng biu din thnh phn cu trc thng qua con tr

+ Trn dng 2

* dng truy nhp n vng nh thng qua con tr, v d *a

& php ton ly a ch, v d &a

+ Trn dng 15

, l ton t dng ngn cch cc biu thc trong mt dy biu thc.

Bi tp cui chng

Cu 1. Hy tm cc biu thc ng trong cc biu thc sau y

1. (i = j)++

2. i + j++

3. ++( i + j)++ i +++j

Cu 2. Xc nh gi tr ca cc biu thc sau:

a. 5.6 + 2.7 + 20/6 + 8.0

b. 5.6 + 2.7 + 20/6.0 + 8.0

Cu 3. S dng cc hm ton hc trong C biu din cc cng thc ton hc sau:

a. b.

Cu 4. Biu din cc cng thc ton hc cho cc biu thc sau:

a. sqt(sqrt(a) + sqrt(b))

b. sqrt(sqr(x))/sqrt(sqr(y))*ln(exp(x)/exp(y))

CHNG 3: VO - RA D LIU

Trong cc v d ca cc chng trc, chng ta nhiu ln s dng cc hm printf, scanf nhp v xut d liu. Chng ny s gii thiu chi tit hn v cc hm ny. Ngoi ra, cn b sung nhiu hm mi khc nh: nhp xut chui, nhp xut k t, xa mn hnh,

3.1. Hm printf

Hm printf nm trong tp stdio.h, c kh nng chuyn dng, to khun v a gi tr ca cc i ca hm ra mn hnh.

3.1.1. Khai bo hm

C php:

int printf(const char *cdk [, danh sch cc i]);

Ch :

int l kiu kt qu tr v ca hm.

i cdk l hng con tr kiu char cha a ch ca chui iu khin. Chui iu khin s c gii thch r hn trong phn tip theo.

3.1.2. Chui iu khin

Chui iu khin l mt dy cc k t, c th cha ba loi k t sau:

Cc loi k t iu khin gm:

K t

ngha

\n

xung dng

\f

sang trang

\t

tab

\b

backspace

Cc c t chuyn dng v to khun (c gi tt l c t) cho cc i tng ng.

Cc k t khng phi l c t cng khng phi l cc k t iu khin gi l k t hin th (c a ra mn hnh). Ngoi cc k t hin th thng thng, c cc k t c bit sau:

K t

ngha

\

in ra du

\

in ra du

\\

in ra du \

3.1.3. c t

c t c th c vit theo c php sau:

%[-][n][.m]k t chuyn dng

trong :

% v k t chuyn dng l nhng thnh phn bt buc phi c, cc thnh phn khc c th vng mt.

S n dng quy nh s v tr in ra gi tr ca i.

+ Nu khng c tham s n ny hoc c m nh hn s v tr cn thit in ra gi tr i tng ng th khi n c hiu l bng ng s v tr cn thit in ra gi tr ca i..

+ Nu c n v n ln hn s v tr cn thit in ra gi tr i tng ng th khi ph thuc vo c hay khng c du tr . Trng hp khng c th gi tr ca i s c in ra mn hnh dn v bn phi to ra cc khong trng bn tri. Trng hp c du th ngc li, gi tr ca i s c in ra mn hnh dn v bn tri v to ra cc khong trng bn phi.

V d 3.1: Xt on chng trnh sau

int n = 5, m = 6;

printf(n = %-4d, m = %5d);

s cho kt qu: n = 5_ _ _ , m = _ _ _ _6: (Ch : _ c hiu l khong trng) My s dnh 4 v tr in gi tr ca n. S n c in trn mt v tr bn tri v to ra 3 khong trng bn phi. Tip my dnh 5 v tr in gi tr ca m. S m c in ra trn mt v tr bn phi v to ra 4 khong trng bn tri

S m: Ch c ngha khi i tng ng ca n thuc kiu s thc hoc kiu chui.

+ Nu i l kiu s thc th m dng quy nh s cc ch s thp phn. Trong trng hp nu khng c m th phn thp phn c mc nh l 6.

+ Nu i l bin kiu chui v m nh hn di ca chui th ch m k t u tin ca chui c in ra mn hnh. Nu khng c m hoc m ln hn di ca chui th c chui s c in ra mn hnh.

V d 3.2: Xt on chng trnh sau

float x = 7.5;

char lop[ ] = happy new year;

printf(x = %7.2f, lop = %10.4s, x, lop);

s cho kt qu nh sau: x =_ _ _7.50, lop = _ _ _ _ _ _happ

- Vi bin x: my dnh 7 v tr in gi tr ca bin x, gi tr ca x chim 4 v tr bn phi trong c 2 v tr dnh cho phn thp phn, v 3 v tr d tha c dn v bn tri.

- Vi bin lop: My dnh 10 v tr in gi tr ca bin lop, trong 4 k t u tin ca lop c in ra trn 4 v tr bn phi, 6 v tr cn li bn tri l cc khong trng.

3.1.4. K t chuyn dng

L mt hoc mt dy k hiu, n xc nh quy tc chuyn dng v dng in ra ca i tng ng. Nh vy s c trng hp cng mt gi tr s c in ra theo cc dng khc nhau khi s dng cc k t chuyn dng khc nhau. Tuy nhin ta khng c s dng cc k t chuyn dng mt cch ty tin m phi tun theo cc quy tc nh sn: vi mi kiu gi tr tng ng vi mt hoc mt vi k t chuyn dng nht nh, nh trong bng sau:

Bng 3.1: Danh sch cc k t chuyn dng ca hm printf

K t chuyn dngKiu ca iCch chuyn dng

cchari c coi l mt k t

d/iinti c coi l s nguyn h 10 c du (nu gi tr m)

ld/lilongi c coi l s nguyn h 10 c du (nu gi tr m)

uinti c coi l s nguyn h 10 khng du

ointi c coi l s h 8 khng du (khng c s 0 ng trc)

lolongi c coi l s h 8 khng du (khng c s 0 ng trc)

xinti c coi l s h 16 khng du (khng c s 0x ng trc)

lxlongi c coi l s h 8 khng du (khng c s 0x ng trc)

ffloat hay doublei l s thc c in ra di dng du phy tnh. In ra c cc s 0 v ngha.

efloat hay doublei l s thc c in ra di dng du phy ng. In ra c cc s 0 v ngha.

gfloat hay doubleDng %f hay %e ty thuc dng no ngn hn. Khng in ra cc s 0 v ngha.

sXu k ti l mt xu k t

3.1.5. Danh sch i

Cc i trong danh sch i c ngn cch nhau bi dy phy. i l mt biu thc gm mt ton hng hay bao gm cc ton hng v php ton trong ton hng c th l: hng, bin, phn t mng, li gi hm. Gi tr ca i s c chuyn dng v in ra theo cch ca c t tng ng.

Ch :

Mi mt c t phi c mt i tng ng. Khi mt c t khng tm thy mt i tng ng, hoc kiu d liu ca i tng ng khng ph hp vi c t th my s b nhm v a ra kt qu v ngha.

S i c th nhiu hn s c t, nhng cc i khng c c t pha sau s khng c in ra.

Ti v tr ca n trong c t ta c th thay bng du *, khi trc i tng ng ta phi a vo mt s nguyn thay cho gi tr ca tham s n. Mc ch ca tham s ny l ta c th cn chnh ng i vi hm printf.

V d 3.3: Cho on chng trnh:

int n = 6;

float x = 7.5;

printf(x = %*.2f ,n,x);

s cho kt qu nh sau: x = _ _7.50

3.1.6. Gi tr ca hm printf

Khi hm printf thc hin thnh cng th s tr v mt gi tr ng bng s k t c in ra mn hnh k c cc k t iu khin.

V d 3.4: Cho on chng trnh

int i;

i = printf(Happy\nNew year);

printf(i = %d,i);

Hm s cho ra kt qu l: i = 14

3.2. Hm scanf

Hm scanf c khai bo trong tp stdio.h. C tc dng c thng tin t thit b vo chun (bn phm), chuyn dch chng (thnh s nguyn, s thc) v lu tr vo b nh theo cc a ch xc nh.

3.2.1. Khai bo hm

C php:

int scanf(const char *cdk [,danh sch cc i]);

trong cdk l hng con tr kiu char cha a ch ca chui iu khin. Danh sch i s c nh ngha phn sau.

3.2.2. Danh sch i

Cc i c ngn cch nhau bi du phy. Mi i l mt con tr cha a ch ca mt vng nh (a ch bin, mng,) dng lu tr mt gi tr c vo t bn phm. ly a ch ca bin hay ca phn t mng ta vit: &bin/phn t mng.

3.2.3. Dng vo v trng vo

Dng vo l mt dy k t lin tip nhau (bao gm c khong trng) trn thit b vo (khong trng c hiu l du cch, du tab hoc k t xung dng)

Trng vo l mt dy k t khc khong trng. Nh vy khong trng dng ngn cch cc trng vo trong mt dng vo.

V d 3.5: Trn dng vo: 123_abc\t25\n gm ba trng l 123, abc v 25

3.2.4. Chui iu khin

Gm cc k t c t chuyn dng, mi c t thng c mt i tng ng, gn ging chui iu khin ca hm printf, dng nh danh cc gi tr nhp vo t bn phm ri gn cho cc bin. Mi c t c dng sau:

[*][n] trong :

Nu c k t * th trng vo vn c d c bnh thng nhng gi tr ca n s b b qua (khng c a vo b nh) v c t ny c xem l khng c i tng ng.

n l mt dy s xc nh chiu di cc i ca trng vo. ngha ca tham s n nh sau:

+ Nu n vng mt hoc ln hn hay bng di ca trng vo tng ng th ton b ni dung ca trng vo s c c, sau nh dng v gn cho i tng ng (nhng phi khng c du *).

+ Nu n nh hn di ca trng vo tng ng th ch n k t u ca trng vo c d c, sau nh dng v gn cho i tng ng, phn cn li ca trng vo s c xem xt bi cc c t v i tng ng tip theo.

V d 3.6: Xt on chng trnh

int m,n; scanf(%*d %2d %d, &n, &m);

Nu t bn phm, nhp 125 _ 678910 enter th s 125 vn c d c nhng gi tr ca n s b b qua v khng c i tng ng. Cn li hai k t tip theo l 67 c d c, nh dng v gn cho bin n. Cui cng cc k t 8910 c d oc, nh dng v gn cho bin m.

3.2.5. K t chuyn dng

Xc nh cch thc d c cc k hiu trn dng vo trc khi gn n cho cc a ch tng ng. Cch d c th nht l d c theo trng vo, khi cc khong trng b b qua. Cch d c th hai l d c theo k t, khi cc khong trng cng c xem xt bnh ng nh cc k t khc. Cch th hai ch xy ra khi ta s dng mt trong ba k t chuyn dng sau y: c, [], [^]

Di y l danh sch cc k t chuyn dng:Bng 3.2: Danh sch k t chuyn dng v kiu i ca hm scanf

K t chuyn dngKiu i

cchar

dint

ldlong

oint

lolong

xint

lxlong

f/efloat

lf/ledouble

sdy k t

[dy k t]Cc k t trn dng vo s ln lt c c cho n khi no gp mt k t khng thuc tp cc k t t trong hai du [ ]. i tng ng l con tr kiu char

[^dy k t]Cc k t trn dng vo s ln lt c c cho n khi no gp mt k t thuc tp cc k t t trong hai du [ ]. i tng ng l con tr kiu char

V d 3.7: Cho on chng trnh

int a,b;

char ch[10], ck[10];

scanf(%d%[0123456789]%[^0123456789]%3d,&a,ch,ck,&b);

Vi dng vo nhp nh sau:

35_13243 _xyz 545

th s gn kt qu ln lt cho cc bin nh sau: a= 35, xu ch = _13243_, xu ck = xyz, b = 545.

Ch :

Khi ta dng hm scanf nhp d liu cho mt bin no th my s dng li i nhp d liu. Nhng trong chng trnh gi s c rt nhiu bin m ta cn phi nhp d liu cho tt c cc bin . Nh vy, khi my dng li i nhp d liu nu khng c s ch dn c th th ngi dng s kh phn bit c th t nhp ca cc bin nh th no. Do trc mi cu lnh scanf ta nn s dng cu lnh printf a ra hng dn cho ngi dng cng vic cn phi lm, nh v d sau:

printf(Nhap gia tri cua bien nguyen a = );

scanf(%d, &a);

printf(\nNhap gia tri cua bien thuc b = );

scanf(%f, &b);

printf(\nNhap k tu ch = );

scanf(%c, &ch);

Gi s c khai bo chui s nh sau: char string[10]; th trong chng trnh khi ta mun nhp d liu cho chui s ta vit scanf(Nhap chuoi string = %s, string); y ta khng ghi l &string v string l mt mng m tn mng l mt con tr v n cha a ch u tin ca mng hay ni cch khc tn mng l mt hng a ch. Do trong trng hp ny ta ch ghi l string.

Gi s c khai bo mng a nh sau int a[10]; Trong chng trnh khi ta mun nhp d liu cho mt phn t no ca mng a th ta vit nh sau:

printf(Nhap gia tri cua phan tu a[%d] = , i);

scanf(%d, &a[i]);

3.2.6. Gi tr ca hm scanf

Hm cho ra kt qu l mt s nguyn bng cc trng vo c d c v c lu tr vo cc i tng ng.

Ch : S i, s c t, s trng vo nn bng nhau v ph hp v kiu d liu v nu khng s kh kim sot v cc i c th nhn cc gi tr v ngha.

3.3. Dng vo stdin v cc hm scanf, gets, getchar

stdin: l dng vo chun (bn phm). Cc hm scanf, gets, getchar u nhn d liu t stdin. C cc trng hp xy ra:

Nu trn stdin c d liu, th cc hm s nhn mt phn d liu m chng yu cu. Phn d liu cn li vn trn stdin.

Khi trn stdin khng d liu theo yu cu ca cc hm, th my tm dng ngi dng a thm d liu t bn phm ln stdin (cho n khi bm phm enter).

Nu nhp tha cho cc i th phn tha s c a vo stdin phc v cho cc hm gets, getchar, scanf tip sau.

Phm enter s sinh ra k t \n v cng c a vo stdin, do n s lm tri hm gets, getchar v scanf pha sau.

3.3.1. Hm gets

Hm gets c khai bo trong tp stdio.h.

C php: char *gets(char *s);

trong i s l con tr kiu char tr ti vng nh cha dy k t nhn c.

Cng dng ca hm: Nhn dy k t t stdin cho n khi gp k t \n. K t \n b loi khi stdin nhng khng c t vo chui. Chui c b sung thm k t \0 v t vo vng nh do s tr ti. Hm tr v a ch ca chui nhn c.

3.3.2. Hm getchar

Hm getchar c khai bo trong tp stdio.h.

C php: int getchar(void)

Cng dng ca hm: nhn mt k t t stdin. Hm tr v m k t nhn c.

Ch :

Xt cu lnh ch = getchar(); Nu bm phm A enter th ch = A, k t \n vn li trn stdin v n s lm tri cc hm getchar hoc hm gets sau . Nu ch bm enter th ch = \n v \n b loi khi stdin.

Hm scanf cng li k t \n trn stdin. K t ny s lm tri hm gets v getchar sau . cc hm ny hot ng ng th phi kh k t \n trong hm scanf bng cch thm c t %*c vo cui chui iu khin nh sau:

V d 3.8: Cho on chng trnh

char ht[25]; int t;

printf(Nhap t=);

scanf(%d %*c,&t); //kh \n trong dng vo

printf(Nhap ht = );

gets(ht);

nhn d liu ng n bng cch nhp vo t bn phm th trc khi thc hin scanf, gets, getchar ta nn lm sch stdin bng hm sau: fflush(stdin); Dng hm ny s trnh c mi hu qu ca cc thao tc nhp s liu trc . Vi v d 3.8 trn ta c th vit li

V d 3.9: Vit li v d 3.8

char ht[25]; int t;

printf(Nhap t=);

scanf(%d ,&t);

printf(Nhap ht = );

fflush(stdin); //Xa stdin

gets(ht);

3.4. Cc hm xut k t puts, putchar

Cc hm ny c khai bo trong tp stdio.h. Cc hm printf, puts, putchar u c tc dng a d liu ln dng ra chun stdout (mn hnh).

3.4.1. Hm puts

Hm puts c khai bo trong tp stdio.h

C php: int puts(const char *s); trong s l con tr kiu char tr ti vng nh cha chui k t cn xut ra stdout.

Cng dng ca hm: a chui s v a thm k t \n ln stdout. Khi thnh cng, hm tr v k t cui cng c a ra (chnh l \n). Ngc li khi c li hm tr v EOF.

V d 3.10: cu lnh puts(\nHa noi); s a dng ch Ha noi ln mt dng mi ca mn hnh sau chuyn con tr xung u dng tip theo.

3.4.2. Hm putchar

Hm putchar c khai bo trong tp stdio.h

C php: int putchar(int ch); trong ch l m ca mt k t.

Cng dng ca hm: a k t c m l ch ln stdout. Khi thnh cng hm tr v m ca k t c a ra. C li th hm cho EOF.

3.5. Cc hm vo ra trn mn hnh, bn phm

Cc hm trong mc ny c khai bo trong tp conio.h

3.5.1. Hm getch

C php: int getch(void);

Cng dng ca hm: Hm nhn mt k t t b m bn phm, khng cho hin k t ln mn hnh. Nu c sn k t trong b m bn phm, th hm nhn mt k t trong , nu b m rng th my tm dng. Khi g mt k t th hm nhn ngay c k t (khng cn bm thm phm enter nh cc hm nhp t stdin). Hm tr v k t nhn c

3.5.2. Hm getche

C php: int getche(void);

Cng dng ca hm: Hm nhn mt k t t b m bn phm v cho hin k t va nhp ln mn hnh. iu ny l khc vi hm getch() pha trn.

3.5.3. Hm putch

C php: int putch(int ch); trong i ch l m k t cn hin th.

Cng dng: a k t ch ln ca s vn bn mn hnh. K t s c hin th theo mu xc nh bi hm textcolor. Trong khi hm putchar lun hin th k t theo mu mc nh l mu trng. Hm tr v k t c hin th

3.5.4. Hm kbhit

C php: int kbhit(void);

Cng dng ca hm: Kim tra b m bn phm. Hm cho gi tr khc 0 nu b m bn phm khc rng, c gi tr 0 nu ngc li.

Ch :

1. Lm sao phn bit c khi bm mt phm th k t tng ng c th b a vo stdin hay vo b m bn phm? Ta phn bit nh sau:

Nu g phm th my dng ch nhp d liu trong cc hm scanf, gets v getchar th k t c gi vo stdin. G phm trong cc trng hp khc th k t c gi vo b m bn phm.

2. Khng nn dng hm scanf nhp d liu cho mng k t m nn dng hm gets v nu dng hm scanf c th s b mt d liu nh trong v d sau:

V d 3.11.

char s[20];

void main()

{

printf(Nhap chuoi s = );

scanf(%s, s); // Cch 2 l dng hm gets(s);

printf(\nChuoi s = %s, s);

}

Nu ta nhp t bn phm chui ha_noi (_ y l du cch) th kt qu in ra mn hnh l Chuoi s = ha cn nu dng hm gets trong trng hp ny th s cho kt qu l s = ha_noi. V hm scanf d c d liu theo tng trng vo sau mi trng vo s c nh dng v gn gi tr cho i tng ng do chui ha c d c, nh dng v gn gi tr cho bin s, cn chui noi s c dnh cho cc hm scanf, gets, getchar pha sau.

3. Khng nn dng hm scanf nhp d liu cho k t m dng hm getch, getchar.

3.5.5. Hm xa mn hnh

C php: void clrscr();

Cng dng ca hm: Hm dng xa sch mn hnh v a con tr v v tr u mn hnh.

3.5.6. Hm di chuyn con tr

C php: void gotoxy(x,y);

Cng dng ca hm: Di chuyn con tr mn hnh n v tr c ta (x,y) trong x l s hiu ct nhn gi tr t 1 n 80, y l dng c gi tr t 1 n 25.

Bi tp cui chng

Cu 1. Vit chng trnh

u tin in ra cc dng ch

NGON NGU LAP TRINH

Nu khng bm phm hoc bm mt phm khc C v P th dng ch trn tip tc hin ra.

Nu bm C th chng trnh in ra dng ch TURBO C

Nu bm P th chng trnh in ra dng ch TURBO PASCAL

Bm tip phm bt k th chng trnh kt thc.

Cu 2. Vit chng trnh to hnh sau:

* * * * * * * * * * *

* * * * * * * * * *

* * * * * * * *

* * * * * *

* * * *

* * * * * * * * * * *

Cu 3. Vit chng trnh nhp phn thc x v phn o y ca mt s phc, sau in ra theo mu: (x, y) vi cc yu cu:

S in ra c hai ch s sau du chm thp phn

Kt qu in ra to thnh mt dy k t lin tip nhau (khng c khong trng)

Cu 4. Vit chng trnh nhp vo ba s tha mn iu kin l ba cnh ca mt tam gic. Sau tnh chu vi v din tch ca tam gic v in cc gi tr va tnh c ra mn hnh.

Cu 5. Vit chng trnh nhp tnh gi tr chu vi v din tch ca mt hnh trn sau in cc gi tr va tnh c ra mn hnh trong d liu bn knh ca hnh trn c nhp vo t bn phm.

Cu 6. Vit chng trnh nhp vo t bn phm gi tr GDP ca nm 2011 v tc tng trng kinh t bnh qun (tnh theo %). Sau tnh gi tr GDP ca cc nm 2012, 2013 v in cc gi tr va tnh c ra mn hnh.

CHNG 4: CC CU LNH IU KHIN

Mt chng trnh bao gm nhiu cu lnh. Thng thng cc cu lnh c thc hin theo th t m chng c vit ra. Cc ton t iu khin cho php thay i trt t ni trn, do my c th ang thc hin cu lnh ny li nhy ti thc hin mt cu lnh khc v tr bt k. Khi my s thc hin cng vic mt cch linh hot hn v hiu qu hn. C th chia cc ton t iu khin thnh ba nhm chnh:

+ Nhy khng iu kin

+ R nhnh

+ T chc chu trnh

Ngoi ra cn c mt s ton t khc c kh nng b tr nh break, continue.

4.1. Cc cu lnh r nhnh

4.1.1. Cu lnh if

Cu lnh if cho php la chn mt trong hai nhnh ty thuc gi tr bng hay khc 0 ca mt biu thc, c hai cch vit cu lnh if nh sau:

Dng 1: if (biu thc)

Dng 2: if (biu thc)

else

S hot ng ca cu lnh if:

Dng 1: Trc tin my s xc nh gi tr ca biu thc. Nu biu thc ng (c gi tr khc 0) my s thc hin v sau thc hin cc cu lnh pha sau. Nu biu thc sai th my b qua m chuyn n thc hin cc cu lnh pha sau.

Dng 2: Trc tin my s xc nh gi tr ca biu thc. Nu biu thc ng (c gi tr khc 0) my s thc hin v sau thc hin cc cu lnh vit sau . Nu biu thc sai (c gi tr bng 0) th my thc hin v sau thc hin cc cu lnh pha sau .

Nhn xt:

- Trong c php ca c hai dng ca cu lnh if , bao gm mt hoc nhiu cu lnh, nu nhiu cu lnh th cc cu lnh phi c vit trong mt khi lnh. Ch ny cng p dng vi cc cu lnh iu khin khc (tr cu lnh switch).

- Cu lnh if dng 1 thc ra l cu lnh if dng 2 thu gn vi l rng.

S hot ng ca cu lnh if c th c biu din bi s khi sau y:

Hnh 4.1:S khi cu lnh if dng 1(nhnh else ni tt) v lnh if dng 2

V d 4.1: Vit chng trnh s dng cu lnh if tm s ln nht ca hai s a v b sau in gi tr ln nht ra mn hnh

Dng 1:

#include stdio.h

void main()

{

float a, b, max;

printf(Nhap hai so a va b =);

scanf(%f%f,&a,&b);

max = a;

if (b > max) max = b;

printf(Gia tri lon nhat cua hai so la %8.2f,max);

getch();

}

Dng 2

#include stdio.h

void main()

{

float a, b, max;

printf(Nhap hai so a va b =);

scanf(%f%f,&a,&b);

if (a>b) max = a;

else max = b;

printf(Gia tri lon nhat cua hai so la %8.2f,max);

getch();

}

Ch :

Trong v c th cha cc cu lnh if khc, khi ta c trng hp cc cu lnh if lng nhau. Trong trng hp ny nn s dng cc du ng m khi {} khng gy ra s hiu nhm. Khi s t kha if bng s t kha else th ta d dng xc nh c tng cp if else tng ng. Trong trng hp s t kha else t hn s t kha if th else s c gn vi if khng c else gn nht trc .

V d 4.2: Xt on chng trnh sau:

if (n>0)

if (a>b) z = a;

else z = b;

Khi else s i vi if bn di. y nu s dng khi lnh, ta s c:

if (n>0)

{

if (a>b) z = a;

else z = b;

}

Cu lnh else if: Khi mun thc hin mt trong n quyt nh ta c th s dng cu lnh if di dng sau:

if (biu thc 1)

else if (biu thc 2)

.

else if (biu thc n 1)

else

S hot ng ca cu lnh else if:

Ch mt trong n vic c thc hin

Nu biu thc th i l biu thc u tin khc 0 (i = 1, 2, , n 1) th c thc hin.

Nu c n 1 biu thc u c gi tr bng 0 th c thc hin

V d 4.3. Gi s theo di trnh ca cn b ta dng m sau

MTrnh

1 S cp

2 Trung cp

3 i hc

4 Cao hc

5 Tin s

Vit chng trnh nhp vo m sau in ra mn hnh trnh hc vn ca mt cn b bt k.

Chng trnh c vit nh sau:

#includestdio.h

void main()

{

int ma;

printf(Nhap ma:);

scanf(%d, &ma);

if (ma == 1)

printf(Trinh do so cap);

else if ( ma == 2)

printf(Trinh do trung cap);

else if (ma == 3)

printf(Trinh do dai hoc);

else if (ma == 4)

printf(Trinh do cao hoc):

else if (ma == 5)

printf(Trinh do tien si);

else printf(Nhap ma sai);

getch();

}

4.1.2. Cu lnh switch

Nu nh cu lnh if ch cho php thc hin mt trong hai nhnh cng vic (tr trng hp vi cu lnh else if c th thc hin mt trong n nhnh cng vic) th cu lnh switch li c nhiu s la chn cng vic hn. Cu lnh switch cho php cn c vo gi tr ca mt biu thc nguyn chn mt trong nhiu cch nhy. C php ca cu lnh switch nh sau:

switch (biu thc nguyn)

{

case n1:

case n2:

case nk:

[default: ]

}

trong l cc biu thc hng nguyn. Cc c gi tr khc nhau. on chng trnh nm gia hai du {} c gi l thn ca cu lnh switch. Do , du } y c xem l du kt thc thn ca switch.

S hot ng ca cu lnh switch: Ph thuc vo gi tr ca biu thc vit trong cc du ngoc trn.

1. Khi gi tr ny bng th my s nhy ti v tr t nhn v thc hin

2. Khi gi tr ca biu thc khc tt c cc th

+ Nu c default th my s nhy ti v tr t nhn l default v thc hin .

+ Nu khng c default th my ra khi cu lnh switch.

Ra khi cu lnh switch: My s ra khi cu lnh switch khi n gp mt cu lnh break hoc gp du kt thc thn ca switch. Cng c th s dng cu lnh goto trong thn ca cu lnh switch nhy ti mt cu lnh bt k bn ngoi switch.

S hot ng ca cu lnh switch c th c biu din bi s khi sau y:

Hnh 4.2: S khi ca cu lnh switchcase

Ch :

Trong c php ca cu lnh switch, nu gm nhiu cu lnh th cc cu lnh ny c th c t trong mt khi lnh hoc cng c th khng t trong mt khi lnh. y l im khc bit ca cu lnh switch vi cc cu lnh iu khin khc.

Cc c th b trng bng cch khng vit g hoc ch vit du chm phy ;. Cch b trng ny c dng khi c nhiu hng cng thc hin mt , khi cc hng pha trn ta b trng hoc vit du chm phy ;, cn hng cui cng ca nhm hng ny ta vit cc cu lnh trong phn cn thc hin.

Nu cc cu lnh trong mi c kt thc bng cu lnh break; th cu lnh switch s thc hin ch mt trong cc ny (vi i = 1..k).

V d 4.4: Chng trnh nhp vo im ca mt sinh vin (Gi s im nhp vo l s nguyn tha mn iu kin 0 tiep lu gi a ch ca phn t ng sau phn t cn xa, tc l q->tiep = p->tiep;

- Gii phng b nh cha phn t cn xa.6.3.3.5. Chn mt phn t vo danh sch.

C hai kiu chn l chn phn t vo sau mt phn t trong danh sch v kiu th hai l chn phn t vo trc mt phn t trong danh sch. C th nh sau:

Gi s cn chn phn t A vo sau phn t B trong danh sch, cc bc chn nh sau:

Cp pht b nh v nhp thng tin ca phn t A, gi s a ch ca A c lu gi bi con tr q

Thc hin tm kim xem trong danh sch c phn t B hay khng? Nu khng c B th thng bo ra mn hnh l khng c phn t B v kt thc vic chn sau. Ngc li, nu c phn t B trong danh sch v con tr p lu gi a ch ca B th ta cho con tr q->tiep lu gi a ch ca phn t ng sau phn t B trong danh sch v con tr p->tiep lu gi a ch ca phn t A, tc l q->tiep = p->tiep; v p->tiep = q;

Gi s cn chn phn t A vo trc phn t B trong danh sch, cc bc chn nh sau:

Cp pht b nh v nhp thng tin ca phn t A, gi s a ch ca A c lu gi bi con tr q

Thc hin tm kim xem trong danh sch c phn t B hay khng? Nu khng c B th thng bo ra mn hnh l khng c phn t B v kt thc vic chn sau. Ngc li, nu c phn t B trong danh sch v con tr p lu gi a ch ca B th:

+ i n phn t ng trc phn t B trong danh sch, gi s gi l phn t C v C do con tr r tr ti.

+ Khi chn A vo trc B tc l ta s chn A vo sau C, khi ta cho con tr r->tiep lu gi a ch ca A v cho con tr q->tiep lu gi a ch ca B, tc l r->tiep = q; v q->tiep = p;V d 6.17: Vit chng trnh to mt danh sch lin kt thun ca mt lp sinh vin sau thc hin cc cng vic sau:

In danh sch ra mn hnh

Chn thm mt sinh vin vo sau mt sinh vin c tn nhp t bn phm

Xa mt sinh vin c tn nhp t bn phm ra khi danh sch

#includestdio.h

#include`conio.h

#includealloc.h

#includestring.h

typedef struct sinh_vin

{

char ho_ten[20];

float diem_tb;

struct sinh_vien *tiep;

} p_sv;

p_sv *p_dau, *p_cuoi, *p;

void tao_ds()

{

char ht[20], chon;

int stt = 0; float x;

printf(Nhap danh sach sinh vin\n);

p_dau = NULL;

do {

fflush(stdin);

printf(Nhap thong tin ve sinh vin thu %d, ++stt);

printf(Nhap ho ten:);

gets(ht);

printf(Nhap diem trung binh:);

scanf(%f,&x);

p = (p_sv *)malloc(sizeof(p_sv));

strcpy(p ->ho_ten, ht);

p -> diem_tb = x;

if (p_dau == NULL)

{

p_dau = p;

p_cuoi = p;

}

else

{

p_cuoi ->tiep = p;

p_cuoi = p;

}

p->tiep = NULL;

printf(Co nhap nua khong?):

fflush(stdin);

chon = getchar();

} while (chon != k );

}

void hien_ds()

{

int stt=0;

printf(Danh sach sinh vien\n);

printf(stt Ho ten

Diem trung binh\n);

p = p_dau;

while (p != NULL)

{

printf(%d %s%6.2f\n,++stt, p -> ho_ten,

p>diem_tb);

p = p->tiep;

}

getch();

}

void chen_pt()

{

p_sv *p_tim; float x;

char ht[20];

p = (p_sv *)malloc(sizeof(p_sv));

printf(Nhap ho ten sinh vien can chen:);

fflush(stdin);

gets(p->ho_ten);

printf(Nhap diem trung binh:);

scanf(%f,&x);

p -> diem_tb = x;

p ->tiep = NULL;

printf(Muon chen sau sinh vien nao:);

fflush(stdin);

gets(ht);

p_tim = p_dau;

while ((p_tim != NULL) && (strcmpi(p_tim->ho_ten,ht)))

p_tim = p_tim ->tiep;

if (p_tim == NULL)

printf(Khong tim thay vi tri can chen);

else

{

if (p_tim -> tiep == NULL) p_tim ->tiep = p;

else

{

p -> tiep = p_tim -> tiep;

p_tim -> tiep = p;

}

printf(Da chen xong);

}

getch();

}

void xoa_pt()

{

p_sv *p_tim; *p_truoc; char ht[20];

printf(Nhap ho ten sinh vien can xoa:);

fflush(stdin);

gets(ht);

p_tim = p_dau;

while ((p_tim != NULL) && (strcmpi(p_tim->ho_ten,ht)))

{

p_truoc = p_tim;

p_tim = p_tim ->tiep;

}

if (p_tim == NULL)

printf(Khong tim thay vi tri can xoa);

else

{

if (p_tim ->tiep == NULL)

p_truoc ->tiep = NULL;

else

if (p_tim == p_dau) p_dau = p_tim -> tiep;

else p_truoc -> tiep = p_tim ->tiep;

free(p_tim);

printf(Da xoa xong);

}

getch();

}

void main();

{

char chon;

do

{

clrscr();

printf(Danh sach chuc nang can thuc hien\n);

printf(1. Tao danh sach\n);

printf(2. In danh sach\n);

printf(3. Chen phan tu vao trong danh sach\n);

printf(4. Xoa phan tu trong danh sach\n);

printf(5. Thoat\n);

printf(Moi chon chuc nang);

fflush(stdin);

chon = getchar();

switch (chon)

{

case 1: tao_ds(); break;

case 2: in_ds(); break;

case 3: chen_pt(); break;

case 4: xoa_pt(); break;

}

} while (chon !=5);

}

V d 6.18: Cng ging nh v d trn nhng lm vic vi danh sch lin kt ngc.

Cc hm in danh sch, chn phn t vo danh sch, xa mt phn t ra khi danh sch trong danh sch lin kt ngc cng c thc hin ging nh i vi danh sch lin kt thun, ch khc bit hm to danh sch.

void tao_ds()

{

char ht[20], chon;

float x;

printf(Nhap danh sach sinh vien\n);

printf(Ket thuc nhap bang nhan phim K\n);

p_ds = NULL;

do

{

fflush(stdin);

printf(Nhap ho ten:);

gets(ht);

printf(Nhap diem trung binh:);

scanf(%f,&x);

p = (p_sv *)malloc(sizeof(p_sv));

strcpy(p ->ho_ten, ht);

p -> diem_tb = x;

p->tiep = p_ds;

p_ds = p;

printf(\nCo nhap nua khong?);

fflush(stdin);

chon = getchar();

} while (chon != k );

}

6.3.4. Ngn xp

L mt danh sch cc phn t nhng php thm phn t v loi b phn t ch c thc hin mt u ca danh sch. u ny cn gi l nh ngn xp. Ngn xp hot ng theo c ch LIFO (Last In First Out), tc l phn t vo ngn xp u tin th li ra khi ngn xp cui cng v ngc li, phn t vo ngn xp cui cng th ra u tin.

V d 6.19: v vic s dng ngn xp trong bi ton chuyn mt s n sang c s a bt k.

#includestdio.h

#include`conio.h

#includealloc.h

typedef struct node

{

int so_du;

struct node *tiep;

} p_node;

p_node *top, *p;

void push(int n)

{

p = (p_node*)malloc(sizeof(p_node));

p->so_du= n;

p->tiep = top;

top = p;

}

void chuyen_co_so(int so, int co_so)

{

top = NULL;

while (so != 0)

{

push(so % co_so);

so = so / co_so;

}

}

void pop(int *m)

{

p = top;

m = p->so_du;

top = top -> tiep;

free(p);

}

void hien_ket_qua(int so,int co_so)

{

int n;

printf(\nso %d duoc doi sang co so %d la:, so, co_so};

while (top != NULL)

{

pop(&n);

if (n dia = n;

p->cot_nguon = c1;

p ->cot_dich = c2;

if (first == NULL)

{

first = p;

last = p;

}

else

{

last->tiep = p; last = p;

p -> tiep = NULL;

}

}

void chuyen_dia(int n, int c1, int c2, int c3)

{

if (n == 1) them_pt(n, c1, c2);

else

{

chuyen_dia(n-1, c1, c3, c2);

them_pt(n, c1, c2);

chuyen_dia(n-1, c3, c2, c1);

}

}

void lay_pt(int *n, int *c1, int *c2)

{

p = first;

n = p->dia;

*c1 = p->cot_nguon;

*c2 = p->cot_dich;

first = first -> tiep;

free(p);

}

void hien_ket_qua(void)

{

int d, cn, cd;

while (first != NULL)

{

lay_pt(&d, &cn, &cd);

printf(\n chuyen dia thi %d tu cot %d sang cot %d, d,

cn, cd);

}

}

void main()

{

int sd;

first = NULL;

printf(Nhap so dia:);

scanf(%d,&sd);

chuyen_dia(sd,1,2,3);

hien_ket_qua();

getch();

}

Bi tp cui chng

Cu 1. Vit chng trnh xy dng mt cu trc (ng vi phiu im ca th sinh) gm cc thnh phn:

h tn

qu qun

trng

tui

s bo danh

im thi.

Trong h tn li l mt cu trc gm ba thnh phn: h, tn m v tn. Qu qun cng l mt cu trc gm ba thnh phn: x, huyn, tnh. im thi cng l mt cu trc gm ba thnh phn: ton, l, ha. Nhp s liu t mt phiu im c th v lu tr vo cc thnh phn ca cu trc ni trn sau in cc s liu ra mn hnh.

Cu 2. Xy dng mt mng cu trc m mi thnh phn ca n c kiu nh cu trc bi 1. Nhp s liu ca 20 phiu im v lu tr vo mng cu trc ni trn. Tm kim v in ra cc th sinh c tng s im ba mn ln hn 15,

Cu 3. Gi s nhp s liu ca 20 phiu im theo yu cu ca cu 2. Hy vit chng trnh sp xp li cc phn t ca mng cu trc theo th t gim dn ca tng s im, sau in danh sch th sinh sau khi sp xp ra mn hnh. Mi th sinh in ra trn mt dng gm cc thng tin: H tn, qu qun, s bo danh, im ton, l, ha.

Cu 4. Vit chng trnh nhp vo s liu bn hng vi n mt hng c cu trc gm cc thnh phn: Tn hang, n gi, s lng, thnh tin (= s lng * n gi). Sau hin ra mn hnh theo dng:

SO LIEU BAN HANG

STTTen HangDon giaSo luongThanh tien

1Sach5100500

2But2300600

Cu 5. Dng kt hp struct v union nhp vo danh sch cc hc sinh ca mt lp hc. Trong cc thnh phn chung l: Ho_ten, Que, Gioi tinh, Tong_diem

Cc thnh phn ring ng vi gii tnh l:

N: im ht, im ma.

Nam: im th dc, im tin

- Nhp d liu cho cc hc sinh. Sau in ra danh sch hc sinh theo dng

DANH SACH HOC SINH NU

STT Ho TenQueDiem hat Diem mua Tong

. . .. . .

DANH SACH HOC SINH NAM

STT Ho TenQueDiem th dcDiem tin Tong

. . .. . .

Cu 6. Vit chng trnh to mt danh sch lin kt thun ghi danh sch cc sinh vin c cu trc gm cc thnh phn: Ho_ten, Tuoi, Diem TB.

- In danh sch ra mn hnh theo dng:

DANH SACH SINH VIEN

STTHo tenTuoiDiem TB

. . .. . .

- Chn thm mt sinh vin (c tn nhp vo t bn phm) vo sau mt sinh vin no (c tn nhp vo t bn phm) ri in danh sch theo dng trn

- Xa mt sinh vin no (c tn nhp t bn phm) ra khi danh sch ri in danh sch theo dng trn.

Cu 7. Vit chng trnh to mt danh sch lin kt ngc ghi danh sch cc sinh vin c cu trc gm cc thnh phn: Ho_ten, Tuoi, Diem TB.

- In danh sch ra mn hnh theo dng:

DANH SACH SINH VIEN

STTHo tenTuoiDiem TB

. . .. . .

- Chn thm mt sinh vin (c tn nhp vo t bn phm) vo trc mt sinh vin no (c tn nhp vo t bn phm) ri in danh sch theo dng trn.

- Xa mt sinh vin no (c tn nhp t bn phm) ra khi danh sch ri in danh sch theo dng trn.

CHNG 7: THAO TC TRN CC TP TIN

7.1. Gii thiu chung

Nh chng ta bit, mt tp tin (d c xy dng bng cch no) l mt dy cc byte (c nh s t 0) ghi trn a. S byte ca dy chnh l di ca tp. Chng ny trnh by cc thao tc trn tp nh: to tp mi, ghi d liu t b nh ln tp, c d liu t tp vo b nh Trong C cc thao tc tp c thc hin nh cc hm th vin. Cc hm ny c chia thnh hai nhm: cp 1 v cp 2. Hu ht cc hm u c th truy xut theo c hai kiu nh phn v vn bn. Tuy nhin vic chn kiu ph hp cho mi hm l cn thit.

Cc hm cp 1: Cn gi l cc hm nhp/xut h thng thc hin vic c/ghi nh DOS. Cc hm cp 1 c c trng sau:

Khng c dch v nhp xut ring cho tng kiu d liu m ch c dch v c ghi mt dy cc byte. Nh vy ghi mt s thc ln a ta phi dng dch v ghi 4 byte, ghi 10 s nguyn ta dng dch v ghi 20 byte

Mi tp c mt s hiu (cn gi l danh s hay th), cc hm cp 1 lm vic vi tp thng qua s hiu ny.

Cc hm cp 2: c xy dng t cc hm cp 1 nn d s dng v c nhiu kh nng hn:

C dch v truy xut cho tng kiu d liu. C th s c cc hm nhp xut k t, chui, s nguyn, s thc, cu trc,

C t ng cung cp mt vng m. Mi ln c ghi th thng tin hnh trn vng m ch khng hn trn tp, tc l khi ghi d liu th d liu s c a vo vng m v khi no y th vng m mi c y ln a. Cn khi c, thng tin c ly t vng m v khi no vng m rng th my mi ly d liu t a cha vo vng m. iu ny s lm gim s ln nhp xut trn a v nng cao tc lm vic. Tuy nhin, trong mt s trng hp ta phi lm sch vng m trnh mt mt thng tin.

Cc hm cp 2 lm vic vi tp thng qua mt bin con tr tp. Con tr tp dng xc nh v tr hin thi (tnh theo byte) ca tp. Khi m tp con tr tp tr vo byte u tin, mi ln c/ghi d liu trn tp th con tr tp cng t ng dch chuyn sang v tr tip theo. Bin con tr tp c khai bo theo c php: FILE danh_sch_con_tr; V d: FILE *f1, *f2; l khai bo hai bin con tr tp c tn l f1 v f2. Do cc hm cp 2 c nhiu kiu truy xut v d dng hn so vi cc hm cp 1, nn trong chng trnh C cc hm cp 2 c a chung hn. V cc hm cp 1 mc su hn, gn DOS hn nn tc truy nhp s nhanh hn. Trong khun kh gio trnh, tc gi s trnh by h thng truy xut cp 2.

7.2. Kiu nhp xut nh phn v vn bn

7.2.1.1. Bo ton d liu

Trong qu trnh nhp xut, d liu khng b bin i. D liu ghi trn tp theo cc byte nh phn nh trong b nh.

7.2.1.2. M kt thc tp

Khi c tp, nu gp cui tp th ta nhn c m kt thc tp EOF (End Of File, nh ngha trong stdio.h bng -1) v hm feof cho gi tr khc khng. y l do chn s -1 lm m kt thc tp v nu cha gp cui tp th s c c mt byte c gi tr t 0 n 255. Nh vy gi tr -1 s khng trng vi bt k byte no c c t tp.

7.2.2. Kiu nhp xut vn bn

Kiu nhp xut vn bn ch khc kiu nh phn khi x l k t chuyn dng (m 10) v k t m 26. i vi cc k t khc, hai kiu u c ghi nh nhau.

7.2.2.1. M chuyn dng.

Khi ghi d liu ln tp, mt k t LF (m 10) c chuyn thnh hai k t CR (m 13) v LF (m 10).

Khi c d liu t tp, hai k t lin tip CR v LF trn tp ch cho ta mt k t l LF.

V d 7.1: Xt hm fputc(10, f); Nu tp f c m ghi theo kiu nh phn, th hm s ghi ln tp mt k t m 10, nhng nu tp f c m ghi theo kiu vn bn th hm s ghi ln tp hai m l 13 v 10.

7.2.2.2. M kt thc tp.

Khi c mt tp f nu gp k t c m 26 hoc cui tp th ta nhn c m kt thc tp EOF (s -1) v hm feof(f) cho gi tr khc khng (s 1).

V d 7.2: Gi s ghi cc m 65 10 26 66 ln tp f:

Nu ghi theo kiu nh phn th ni dung ca tp f l: 65 10 26 66

Nu ghi theo kiu vn bn th ni dung ca tp f l: 65 13 10 26 66

Khi c tp f trn th:

Nu c theo kiu nh phn s c c tt c cc m.

Nu c theo kiu vn bn th ch c c cc m 65, 10, v 26 v m 26 c hiu l m kt thc tp.

7.3. Cc hm x l tp cp 2

Cc hm cp 2 s dng cu trc FILE v m kt thc EOF, tt c u c khai bo v nh ngha trong th vin stdio.h. M EOF bng -1 cn cu trc FILE gm cc thnh phn dng qun l tp tin nh:

level: cho bit c cn d liu trong vng m khng

bsize: ln vng m (mc nh l 512 byte)

flags: cc c trng thi.

Mc d hu ht cc hm u c th dng chung cho c hai kiu nhp xut, nhng vic la chn kiu dng cho mi hm l cn thit trnh nhm ln, sai st. Di y, chng ta s phn loi cc hm theo s la chn ny.

7.3.1. Cc hm dng chung cho c hai kiu nhp xut

7.3.1.1. Hm m tp

Dng hm:

FILE *fopen(const char *tn_tp, const char *kiu);

trong i th nht l tn ca tp v i th hai l kiu truy nhp. Kiu truy nhp c th c cc gi tr sau:

Bng 7.1: Cc kiu truy nhp tp

Kiu ngha

r / rtM 1 tp c theo kiu vn bn. Tp cn tn ti nu khng s c li

w / wtM 1 tp ghi theo kiu vn bn. Nu tp tn ti n s b xa

a / atM 1 tp ghi b xung theo kiu vn bn. Tp cha tn ti th to tp mi

rbM 1 tp c theo kiu nh phn. Tp cn tn ti nu khng s c li

wbM 1 tp ghi theo kiu nh phn. Nu tp tn ti n s b xa

abM 1 tp ghi b xung theo kiu nh phn. Tp cha tn ti th to tp mi

r+ / r+tM 1 tp c/ghi theo kiu vn bn. Tp cn tn ti nu khng s c li

w+ / w+tM 1 tp c/ghi theo kiu vn bn. Nu tp tn ti n s b xa

a+ / a+tM 1 tp c/ghi b xung theo kiu vn bn. Tp cha tn ti th to tp mi

r+bM 1 tp c/ghi theo kiu nh phn. Tp cn tn ti nu khng s c li

w+bM 1 tp c/ghi theo kiu nh phn. Nu tp tn ti n s b xa

a+bM 1 tp c/ghi b xung theo kiu nh phn. Tp cha tn ti th to tp mi

Cng dng ca hm: Dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m. Nu c li hm tr v gi tr NULL.

Ch : trong cc kiu c/ghi, cn lm sch vng m trc khi chuyn t c sang ghi v ngc li.

7.3.1.2. Hm ng tp

Dng hm: int fclose(FILE *fp); trong i fp l con tr tng ng vi tp cn ng.

Cng dng: Dng ng tp, ng tp gm cc cng vic sau:

y d liu cn trong vng m ln a (khi ang ghi)

Xa vng m (khi ang c)

Gii phng bin fp n c th dng cho tp khc. Nu thnh cng hm cho gi tr 0 ngc li hm cho EOF.

7.3.1.3. Hm ng tt c cc tp ang m

Dng hm: int fcloseall(void);

Cng dng: Dng ng tt c cc tp ang m. Nu thnh cng hm cho gi tr nguyn bng s tp ng c, ngc li hm cho EOF.

7.3.1.4. Hm lm sch vng m ca tp

Dng hm: int fflush(FILE *fp); vi i fp l con tr tp.

Cng dng: Dng lm sch vng m ca tp fp. Nu thnh cng hm cho gi tr 0, ngc li hm cho EOF.

7.3.1.5. Hm lm sch vng m ca cc tp ang m

Dng hm: int fflushall(void);

Cng dng: Dng lm sch vng m ca cc tp ang m. Nu thnh cng hm cho gi tr nguyn bng s tp ang m, ngc li hm cho EOF.

7.3.1.6. Hm kim tra li thao tc tp

Dng hm: int ferror(FILE *fp); vi i fp l con tr tp.

Cng dng: Dng kim tra li thao tc trn tp fp. Hm cho gi tr khc khng nu c li, ngc li nu khng c li th cho gi tr bng khng.

7.3.1.7. Hm thng bo li h thng

Dng hm: void perror(const char *s); vi s l con tr tr ti mt chui k t.

Cng dng: Hm in chui s v thng bo li

7.3.1.8. Hm kim tra cui tp

Dng hm: int feof(FILE *fp); vi fp l con tr tp

Cng dng: Dng kim tra cui tp. Hm cho gi tr khc khng nu gp cui tp khi c, ngc li hm cho gi tr bng khng.

7.3.1.9. Hm loi tp trn a

Hm unlink

Dng hm: int unlink(const char *tn_tp) vi i tn_tp l tn ca tp cn xa.

Cng dng: Dng xa mt tp c tn l tn_tp trn a. Nu thnh cng hm cho gi tr 0, ngc li hm cho gi tr EOF.

Hm remove

Dng hm: remove(const char *tn_tp); vi i tn_tp l tn ca tp cn xa.

Cng dng: Dng xa mt tp c tn l tn_tp trn a.

7.3.1.10. Hm chuyn con tr v u tp

Dng hm: void rewind(FILE *fp); vi i fp l con tr tp

Cng dng: Chuyn con tr tp v v tr u tp.

7.3.1.11. Hm chuyn con tr n v tr bt k

Dng hm: int fseek(FILE *fp, long sb, int xp); vi i fp l con tr tp, i sb l s byte cn di chuyn, v xp cho bit v tr xut pht m vic dch chuyn c bt u t y, xp c th nhn cc gi tr sau:

Xp = SEEK_SET hay 0: xut pht t u tp

Xp = SEEK_CUR hay 1:xut pht t v tr hin ti ca con tr

Xp = SEEK_END hay 2: xut pht t cui tp.

Cng dng: Hm di chuyn con tr tp t v tr xc nh bi xp qua mt s byte bng gi tr tuyt i ca sb. Chiu di chuyn v cui tp nu sb dng, ngc li s di chuyn v u tp. Khi thnh cng hm tr v gi tr 0, khi c li hm tr v gi tr khc 0.

7.3.1.12. Hm xem v tr hin ti ca con tr tp

Dng hm: long ftell(FILE *fp); vi i fp l con tr tp

Cng dng: Khi thnh cng, hm cho bit v tr hin ti ca con tr tp (byte th my trn tp fp, s th t ca byte c tnh bt u t 0). Khi c li hm tr v -1.

7.3.2. Cc hm nhp xut k t

Cc hm nhp xut k t dng c c trong kiu nhp xut nh phn v nhp xut vn bn.

7.3.2.1. Cc hm putc v fputc

Dng hm:

int putc(int ch, FILE *fp);

int fputc(int ch, FILE *fp);

trong ch l mt bin nguyn, fp l con tr tp

Cng dng: Hai hm trn c ngha nh nhau. Cho php ghi ln tp fp mt k t c m bng ch % 256 trong ch c xem l s nguyn khng du. Nu thnh cng hm cho m k t c ghi, ngc li hm cho EOF.

V d 7.3: Gi s ta ghi k t \n ln tp f bng cu lnh putc(\n, f); th:

Nu ghi tp theo kiu nh phn, kt qu trn tp c k t 10

Nu ghi theo kiu vn bn, kt qu trn tp c cc k t m 13 v 10.

7.3.2.2. Cc hm getc v fgetc

Dng hm:

int getc(FILE *fp);

int getc(FILE *fp);

vi fp l con tr tp.

Cng dng: Hai hm trn c ngha nh nhau. Cho php c mt k t t tp fp. Nu thnh cng hm cho m ca k t c c (c gi tr t 0 n 255). Nu gp cui tp hay c li hm cho EOF.

V d 7.4: Gi s tp f c ni dung nh sau: 13 10

Nu m tp c theo kiu nh phn ta c: ch1 = getc(f) = 13, ch2 = getc(f) = 10.

Nu m tp c theo kiu vn bn ta c: ch1 = getc(f) = 10, ch2 = getc(f) = -1 (gp cui tp).

V d 7.5: Chng trnh sao chp ni dung t tp f1 sang tp f2

#include stdio.h

void main()

{

int c;

char t1[20], t2[20];

FILE *f1, *f2;

printf(\nTen tep nguon:);

fflush(stdin);

gets(t1);

printf(\nTen tep dich:);

fflush(stdin);

gets(t2);

f1 = fopen(t1, rb);

if (f1 == NULL)

{

printf(\n Tep %s khong ton tai,t1);

getch();

exit(1);

}

f2 = fopen(t1, wb);

while ((c=fgetc(f1) != EOF) fputc(c, f2);

fclose(f1);

fclose(f2);

printf(\nDa sao chep xong.);

getch();

}

Ch : Nu chng trnh trn ta thay bng kiu nhp xut vn bn th ch cc byte ng trc m 26 u tin ca tp f1 c sao chp sang tp f2.

7.3.3. Cc hm nhp xut theo kiu vn bn

Cc hm trong mc ny ch nn dng theo kiu nhp xut vn bn.

7.3.3.1. Hm ghi d liu ln tp theo khun dng fprintf

Dng hm:

int fprintf(FILE *fp, const char *ck, danh sch i);

Vi fp l con tr tp, cdk l hng con tr kiu char cha a ch ca chui iu khin, danh sch i l cc i m gi tr ca chng cn ghi ln tp. Trong chui iu khin v danh sch i c cng ngha nh trong hm printf.

Cng dng: Gi tr ca cc i c ghi ln tp fp theo khun dng xc nh trong chui iu khin. Nu thnh cng, hm tr v mt gi tr nguyn bng s byte ghi ln tp, ngc li nu c li hm cho EOF. Cch lm vic ca hm ging nh hm printf.

V d 7.6: Gi s c khai bo sau: int x = 2, y = 10;

Cu lnh fprintf(f, Ma trn A \n %d__%d, x, y); s ghi ln tp f ni dung sau:

Ma trn A

2 10

7.3.3.2. Hm c d liu t tp theo khun dng fscanf

Dng hm:

int fscanf(FILE *fp, const char *cdk, danh sch i);

Vi fp l con tr tp v cdk l hng con tr kiu char cha a ch ca chui iu khin, danh sch i l cc i dng cha kt qu c c t tp. Chui iu khin v danh sch i c cng ngha nh trong hm scanf.

Cng dng: c d liu t tp fp, bin i theo khun dng v lu kt qu vo cc i. Hm lm vic ging nh hm scanf. Hm tr v gi tr bng s trng c c.

V d 7.7: Gi s c mt dy s nguyn ghi ln tp so_nguyen.sl. Gia hai s nguyn c t nht mt khong trng. Sau ch s cui cng l m 26 hay cui tp, Yu cu c v in ra mn hnh dy s ni trn, mi s c in trn mt dng.

Chng trnh c vit nh sau:

#includestdio.h

void main()

{

FILE *f;

int c;

f = fopen(so_nguyen.sl, r);

while (!feof(f))

{

fscanf(f, %d, &c);

printf(\n%d, c);

}

fclose(f);

getch();

}

7.3.3.3. Hm ghi mt chui k t ln tp

Dng hm: int fputs(const char *s, FILE *fp); vi i s l hng con tr kiu char tr ti a ch u ca mt chui k t v fp l con tr tp.

Cng dng: Ghi chui s ln tp fp (k t \0 ca chui khng c ghi ln tp). Khi thnh cng hm tr v m ca k t cui cng c ghi ln tp, khi c li hm cho EOF.

V d 7.8: Vit chng trnh nhp cc dng k t t bn phm v ghi ln tp van_ban.

Chng trnh c vit nh sau

#include stdio.h

#include conio.h

void main()

{

int i = 0;

char dong_kt[256];

FILE *f;

f = fopen(van_ban, w);

while (1)

{

++i;

printf(\nDong thu %d (Bam enter de ket thuc):, i);

gets(dong_kt);

if (dong_kt[0] = \0) break;

if (i>1) fputc(10, f);

fputs(d, f);

}

fclose(f);

getch();

}

7.3.3.4. Hm c mt chui k t t tp

Dng hm: char * fgets(char *s, int n, FILE *fp); vi s l con tr tr ti vng nh ln cha chui k t c t tp, n l s nguyn xc nh di cc i ca chui cn c v fp l con tr tp.

Cng dng: Hm c mt chui k t t tp fp cha vo vng nh s. vic c kt thc khi:

Hoc c c n -1 k t

Hoc gp du xung dng (cp m 13 v 10). Khi m 10 c a vo xu kt s.

Hoc kt thc tp.

Chui s s c b sung thm k t kt thc chui. Khi thnh cng hm tr v a ch ca vng chui s, khi c li hoc gp cui tp hm cho gi tr NULL.

V d 7.9: Vit chng trnh c cc dng k t trn tp van_ban c to trong v d 7.8 v in ra mn hnh.

Chng trnh c vit nh sau:

#include stdio.h

#include conio.h

void main()

{

int i = 0;

char dong_kt[256];

FILE *f;

f = fopen(van_ban, r);

while (!feof(f))

{

++i;

fgets(dong_kt, 256, f);

printf(\nDong thu %d: %s, i, dong_kt);

}

fclose(f);

getch();

}

V d 7.10: Lp mt tp c tn l ma trn.C c ni dung nh sau: dng u tin ca tp ghi gi tr s hng v s ct ca mt ma trn An*m, dng th hai ghi chui Ma trn A, t dng th ba tr i ghi ln tp cc phn t ca ma trn A, ghi trn n hng, mi hng c m phn t.

#includestdio.h

#includeconio.h

void main()

{

FILE *fp;

int n, m, i, j, a[10][10];

char tb[50];

fp = fopen(ma tran.C, wt);

fprintf(fp,Ma tran A\n);

printf(\nNhap so hang, cot cua ma tran:);

scanf(%d %d, &n, &m);

fprintf(fp, %d %d, n, m);

for(i=1; i