Lap Trinh C Can Ban [Aptech]

download Lap Trinh C Can Ban [Aptech]

of 294

Transcript of Lap Trinh C Can Ban [Aptech]

MC LC

Sessions1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Nhng khi nim c bn v ngn ng C Bin v Kiu d liu - L thuyt Bin, Ton t v Kiu d liu Thc hnh Ton t v Biu thc - L thuyt Ton t v Biu thc - Thc hnh Nhp v Xut trong C L thuyt iu kin L thuyt iu kin Thc hnh Vng lp L thuyt Vng lp Thc hnh Mng L thuyt Mng Thc hnh Con tr L thuyt Con tr Thc hnh Hm L thuyt Hm Thc hnh Chui L thuyt Chui Thc hnh Cc Kiu d liu Nng cao v Sp xp L thuyt Cc Kiu d liu Nng cao v Sp xp Thc hnh Qun L Tp Tin L thuyt Qun L Tp Tin Thc hnh

Bi 1Mc tiu: Kt thc bi hc ny, bn c th:

Nhng khi nim c bn v ngn ng C

Phn bit s khc nhau gia Cu lnh, Chng trnh v Phn mm Bit c qu trnh hnh thnh C Nn dng C khi no v ti sao Nm c cu trc mt chng trnh C Hiu r khi nim gii thut (algorithms) V lu (flowchart) Lit k cc k hiu dng trong lu Gii thiu Ngy nay, khoa hc my tnh thm nhp vo mi lnh vc. T ng ha hin ang l ngnh ch cht iu hng s pht trin th gii. Bt c ngnh ngh no cng cn phi hiu bit t nhiu v Cng ngh Thng tin v lp trnh ni chung. C th, C l mt ngn ng lp trnh cp cao m mi lp trnh vin cn phi bit. V th, trong gio trnh ny, chng ta s nghin cu chi tit cu trc ngn ng C. u tin chng ta tm hiu s khc nhau ca nhng khi nim: Lnh (Command), Chng trnh (Program) v Phn mm (Software). 1.1 Ra lnh cho my tnh lm vic Khi mt my tnh c khi ng, n s t ng thc thi mt s tin trnh v xut kt qu ra mn hnh. iu ny din ra th no? Cu tr li n gin l nh vo H iu hnh ci t bn trong my tnh. H iu hnh (operating system) c xem nh phn mm h thng. Phn mm ny khi ng my tnh v thit lp cc thng s ban u trc khi trao quyn cho ngi dng. lm c iu ny, h iu hnh phi c cu to t mt tp hp cc chng trnh. Mi chng trnh u c gng a ra li gii cho mt hay nhiu bi ton no Mi chng trnh c gng a ra gii php cho mt hay nhiu vn . Mi chng trnh l tp hp cc cu lnh gii quyt mt bi ton c th. Mt nhm lnh to thnh mt chng trnh v mt nhm cc chng trnh to thnh mt phn mm. r hn, chng ta hy xem xt mt th d : Mt ngi bn n nh chng ta chi v c mi mn sa du. Anh ta thy ngon ming v mun xin cng thc lm. Chng ta hng dn cho anh ta lm nh sau : 1. Ly mt t sa. 2. nc p du vo. 3. Trn hn hp ny v lm lnh. By gi nu bn ca chng ta theo nhng ch dn ny, h cng c th to ra mn sa du tuyt vi. Chng ta hy phn tch ch th (lnh) trn Lnh u tin : Lnh ny hon chnh cha ? N c tr li c cu hi ly sa u ?. Lnh th hai : Mt ln na, lnh ny khng ni r nc p du u.

Nhng khi nim c bn ca ngn ng C

1

May mn l bn ca chng ta thng minh hiu c cng thc pha ch ni trn, d rng cn nhiu im cha r rng. Do vy nu chng ta mun ph bin cch lm, chng ta cn b sung cc bc nh sau : 1. Rt mt ly sa vo my trn. 2. thm vo mt t nc du p. 3. ng np my trn 4. M in v bt u trn 5. Dng my trn li 6. Nu trn u th tt my, ngc li th trn tip. 7. Khi trn xong, rt hn hp vo t v t vo t lnh. 8. lnh mt lc ri ly ra dng. So snh hai cch hng dn nu trn, hng dn th hai chc chn hon chnh, r rng hn, ai cng c th c v hiu c. Tng t, my tnh cng x l d liu da vo tp lnh m n nhn c. ng nhin cc ch th a cho my vi tnh cng cn phi hon chnh v c ngha r rng. Nhng ch th ny cn phi tun th cc quy tc: 1. Tun t 2. C gii hn 3. Chnh xc. Mi ch th trong tp ch th c gi l cu lnh v tp cc cu lnh c gi l chng trnh. Chng ta hy xt trng hp chng trnh hng dn my tnh cng hai s. Cc lnh trong chng trnh c th l : 1. 2. 3. 4. 5. Nhp s th nht v nh n. Nhp s th hai v nh n. Thc hin php cng gia s th nht v s th hai, nh kt qu php cng. Hin th kt qu. Kt thc.

Tp lnh trn tun th tt c cc quy tc cp. V vy, tp lnh ny l mt chng trnh v n s thc hin thnh cng vic cng hai s trn my tnh.

Ghi ch: Kh nng nh ca con ngi c bit n nh l tr nh, kh nng nh d liu c a vo my tnh c gi l b nh. My tnh nhn d liu ti mt thi im v lm vic vi d liu vo thi im khc, ngha l my tnh ghi d liu vo trong b nh ri sau c ra truy xut cc gi tr d liu v lm vic vi chng. Khi khi lng cng vic giao cho my tnh ngy cng nn nhiu v phc tp th tt c cc cu lnh khng th c a vo mt chng trnh, chng cn c chia ra thnh mt s chng trnh nh hn. Tt c cc chng trnh ny cui cng c tch hp li chng c th lm vic vi nhau. Mt tp hp cc chng trnh nh th c gi l phn mm.

2

Lp trnh c bn C

Mi quan h gia ba khi nim cu lnh, chng trnh v phn mm c th c biu din bng s trong hnh 1.1:

Software

Program 1

Program 2

Commands

Commands

Commands

Hnh 1.1: Phn mm, chng trnh v cu lnh 1.2 Ngn ng C

Vo u nhng nm 70 ti phng th nghim Bell, Dennis Ritchie 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 lin kt cht ch vi h thng UNIX nhng khng b tri buc vo bt c mt my tnh hay h iu hnh no. C rt hiu qu vit cc chng trnh thuc nhiu nhng lnh vc khc nhau. C cng 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. C khi thc thi cng rt nhanh nh hp ng (Assembly). Lp trnh vin c th to ra v bo tr th vin hm m chng s c ti s dng cho chng trnh khc. Do , nhng d n ln c th c qun l d dng m tn rt t cng sc. 1.2.1 C Ngn ng bc trung C c hiu l ngn ng bc trung bi v n kt hp nhng yu t ca nhng ngn ng cp cao v nhng chc nng ca hp ng (ngn ng cp thp). C cho php thao tc trn nhng thnh phn c bn ca my tnh nh bits, bytes, a ch. Hn na, m C rt d di chuyn ngha l phn mm vit cho loi my tnh ny c th chy trn mt loi my tnh khc. Mc d C c nm kiu d liu c bn, nhng n khng c xem ngang hng vi ngn ng cao cp v mt kiu d liu. C cho php chuyn kiu d liu. N cho php thao tc trc tip trn bits, bytes, word v con tr (pointer). V vy, n c dng cho lp trnh mc h thng. 1.2.2 C - Ngn ng cu trc

Nhng khi nim c bn ca ngn ng C

3

Thut ng ngn ng cu trc khi (block-structured language) khng p dng vi C. Ngn ng cu trc khi cho php th tc (procedures) hay hm (functions) c khai bo bn trong cc th tc v hm khc. C khng cho php vic to hm trong hm nn n khng phi l ngn ng cu trc khi. Tuy nhin, n c xem l ngn ng cu trc v n c nhiu im ging vi ngn ng cu trc ALGOL, Pascal v mt s ngn ng tng t khc. C cho php c s tng hp ca m lnh v d liu. iu ny l mt c im ring bit ca ngn ng cu trc. N lin quan n kh nng tp hp cng nh n du tt c thng tin v cc lnh khi phn cn li ca chng trnh dng cho nhng tc v ring bit. iu ny c th thc hin qua vic dng cc hm hay cc khi m lnh (Code Block). Cc hm c dng nh ngha hay tch ri nhng tc v c yu cu trong chng trnh. iu ny cho php nhng chng trnh hot ng nh trong mt n v thng nht. Khi m lnh l mt nhm cc cu lnh chng trnh c ni kt vi nhau theo mt trt t logic no v cng c xem nh mt n v thng nht. Mt khi m lnh c to bi mt tp hp nhiu cu lnh tun t gia du ngoc m v ng xon nh di y: do { i = i + 1; . . . } while (i < 40); Ngn ng cu trc h tr nhiu cu trc dng cho vng lp (loop) nh l while, do-while, v for. Nhng cu trc lp ny gip lp trnh vin iu khin hng thc thi trong chng trnh. 1.3 Cu trc chng trnh C

C c mt s t kha, chnh xc l 32. Nhng t kha ny kt hp vi c php ca C hnh thnh ngn ng C. Nhng nhiu trnh bin dch cho C thm vo nhng t kha dng cho vic t chc b nh nhng giai on tin x l nht nh. Vi quy tc khi lp trnh C nh sau : Tt c t kha l ch thng (khng in hoa) on m trong chng trnh C c phn bit ch thng v ch hoa. V d : do while th khc vi DO WHILE T kha khng th dng cho cc mc ch khc nh t tn bin (variable name) hoc tn hm (function name) Hm main() lun l hm u tin c gi n khi mt chng trnh bt u chy (chng ta s xem xt k hn phn sau)

Xem xt on m chng trnh: main () { /* This is a sample program */ int i = 0; i = i + 1; . . }

4

Lp trnh c bn C

Ghi ch: Nhng kha cnh khc nhau ca chng trnh C c xem xt qua on m trn. on m ny xem nh l on m mu, n s c dng li trong sut phn cn li ca gio trnh ny.

1.3.1 nh ngha Hm Chng trnh C c chia thnh tng n v gi l hm. on m mu ch c duy nht mt hm main(). H iu hnh lun trao quyn iu khin cho hm main() khi mt chng trnh C c thc thi. Tn hm lun c theo sau l cp du ngoc n (). Trong du ngoc n c th c hay khng c nhng tham s (parameters). 1.3.2 Du phn cch (Delimiters) Sau nh ngha hm s l du ngoc xon m {. N thng bo im bt u ca hm. Tng t, du ngoc xon ng } sau cu lnh cui trong hm ch ra im kt thc ca hm. Du ngoc xon m nh du im bt u ca mt khi m lnh, du ngoc xon ng nh du im kt thc ca khi m lnh . Trong on m mu c 2 cu lnh gia 2 du ngoc xon. Hn na, i vi hm, du ngoc xon cng dng phn nh nhng on m trong trng hp dng cho cu trc vng lp v lnh iu kin.. 1.3.3 Du kt thc cu lnh (Terminator) Dng int i = 0; trong on m mu l mt cu lnh (statement). Mt cu lnh trong C th c kt thc bng du chm phy (;). C khng hiu vic xung dng dng phm Enter, khong trng dng phm spacebar hay mt khong cch do dng phm tab. C th c nhiu hn mt cu lnh trn cng mt hng nhng mi cu lnh phi c kt thc bng du chm phy. Mt cu lnh khng c kt thc bng du chm phy c xem nh mt cu lnh sai. 1.3.4 Dng ch thch (Comment) Nhng ch thch thng c vit m t cng vic ca mt lnh c bit, mt hm hay ton b chng trnh. Trnh bin dch s khng dch chng. Trong C, ch thch bt u bng k hiu /* v kt thc bng */. Trng hp ch thch c nhiu dng, ta phi ch k hiu kt thc (*/), nu thiu k hiu ny, ton b chng trnh s b coi nh l mt ch thch. Trong on m mu dng ch "This is a sample program" l dng ch thch. Trong trng hp ch thch ch trn mt dng ta c th dng //. V d: int a = 0; // Bin a c khai bo nh l mt kiu s nguyn (interger) 1.3.5 Th vin C (Library) Tt c trnh bin dch C cha mt th vin hm chun dng cho nhng tc v chung. Mt vi b ci t C t th vin trong mt tp tin (file) ln trong khi a s cn li cha n trong nhiu tp tin nh. Khi lp trnh, nhng hm c cha trong th vin c th c dng cho nhiu loi tc v khc nhau. Mt hm (c vit bi mt lp trnh vin) c th c t trong th vin v c dng bi nhiu chng trnh khi c yu cu. Vi trnh bin dch cho php hm c thm vo th vin chun trong khi s khc li yu cu to mt th vin ring. 1.4 Bin dch v thc thi mt chng trnh (Compiling and Running)

Nhng bc khc nhau ca vic dch mt chng trnh C t m ngun thnh m thc thi c thc hin nh sau : Son tho/X l t

Nhng khi nim c bn ca ngn ng C

5

Ta dng mt trnh x l t (word processor) hay trnh son tho (editor) vit m ngun (source code). C ch chp nhn loi m ngun vit di dng tp tin vn bn chun. Vi trnh bin dch (compiler) cung cp mi trng lp trnh (xem ph lc) gm trnh son tho. M ngun y l on vn bn ca chng trnh m ngi dng c th c. N l u vo ca trnh bin dch C. B tin x l C T m ngun, bc u tin l chuyn n qua b tin x l ca C. B tin x l ny s xem xt nhng cu lnh bt u bng du #. Nhng cu lnh ny gi l cc ch th tin bin dch (directives). iu ny s c gii thch sau. Ch th tin bin dch thng c t ni bt u chng trnh mc d n c th c t bt c ni no khc. Ch th tin bin dch l nhng tn ngn gn c gn cho mt tp m lnh. M ngun m rng C B tin x l ca C khai trin cc ch th tin bin dch v a ra kt qu. y gi l m ngun C m rng, sau n c chuyn cho trnh bin dch C. Trnh bin dch C (Compiler) Trnh bin dch C dch m ngun m rng thnh ngn ng my my tnh hiu c. Nu chng trnh qu ln n c th c chia thnh nhng tp tin ring bit v mi tp tin c th c bin dch ring r. iu ny gip ch khi m mt tp tin b thay i, ton chng trnh khng phi bin dch li. B lin kt (Linker) M i tng cng vi nhng th tc h tr trong th vin chun v nhng hm c dch ring l khc kt ni li bi B lin kt cho ra m c th thc thi c.

6

Lp trnh c bn C

B np (Loader) M thc thi c thi hnh bi b np ca h thng. Tin trnh trn c m t qua lu 1.2 sau :

# include fileTp tin thm vo

Source fileChng trnh gc

Library FileTh vin

CompilerTrnh bin dch

Other Usergenerated Object FileCc tp tin thc thi khc ca ngi dng

Object FileTp tin i tng

LinkerB lin kt

Executable FileTp tin thc thi

Hnh 1.2: Bin dch v thc thi mt chng trnh

1.5

Cc bc lp trnh gii quyt vn

Chng ta thng gp phi nhng bi ton. gii quyt nhng bi ton , chng ta cn hiu chng trc ri sau mi hoch nh cc bc cn lm . Gi s chng ta mun i t phng hc n qun n t phc v tng hm. thc hin vic ny chng ta cn hiu n ri tm ra cc bc gii quyt trc khi thc thi cc bc : BC 1 : Ri phng BC 2 : n cu thang BC 3 : Xung tng hm BC 4 : i tip n qun n t phc v Th tc trn lit k tp hp cc bc thc hin c xc nh r rng cho vic gii quyt vn . Mt tp hp cc bc nh vy gi l gii thut (Algorithm hay gi vn tt l algo ). Mt gii thut (cn gi l thut ton) c th c nh ngha nh l mt th tc, cng thc hay cch gii quyt vn . N gm mt tp hp cc bc gip t c li gii. Qua phn trn, chng ta thy r rng gii quyt c mt bi ton, trc tin ta phi hiu bi ton , k n chng ta cn tp hp tt c nhng thng tin lin quan ti n. Bc k s l x l nhng mu thng tin . Cui cng, chng ta cho ra li gii ca bi ton .

Nhng khi nim c bn ca ngn ng C

7

Gii thut chng ta c l mt tp hp cc bc c lit k di dng ngn ng n gin. Rt c th rng cc bc trn do hai ngi khc nhau vit vn tng t nhau nhng ngn ng dng din t cc bc c th khc nhau. Do , cn thit c nhng phng php chun mc cho vic vit gii thut mi ngi d dng hiu n. Chnh v vy , gii thut c vit bng cch dng hai phng php chun l m gi (pseudo code) v lu (flowchart). C hai phng php ny u dng xc nh mt tp hp cc bc cn c thi hnh c c li gii. Lin h ti vn i n qun n t phc v trn, chng ta vch ra mt k hoch (thut ton) n ch. Tuy nhin, n ni, chng ta phi cn thi hnh nhng bc ny tht s. Tng t, m gi v lu ch a ra nhng bc cn lm. Lp trnh vin phi vit m cho vic thc thi nhng bc ny qua vic dng mt ngn ng no . Chi tit v v m gi v lu c trnh by di y. 1.5.1 M gi (pseudo code)

Nh rng m gi khng phi l m tht. M gi s dng mt tp hp nhng t tng t nh m tht nhng n khng th c bin dch v thc thi nh m tht. Chng ta hy xem xt m gi qua v d sau.V d ny s hin th cu 'Hello World!'. V d 1: BEGIN DISPLAY 'Hello World!' END Qua v d trn, mi on m gi phi bt u vi t BEGIN hoc START, v kt thc vi t END hay STOP. hin th gi tr no , t DISPLAY hoc WRITE c dng. Khi gi tr c hin th l mt gi tr hng (khng i), trong trng hp ny l (Hello World), n c t bn trong du nhy. Tng t, nhn mt gi tr ca ngi dng, t INPUT hay READ c dng. hiu iu ny r hn, chng ta xem xt v d 2, v d ny ta s nhp hai s v my s hin th tng ca hai s. V d 2: BEGIN INPUT A, B DISPLAY A + B END Trong on m gi ny, ngi dng nhp vo hai gi tr, hai gi tr ny c lu trong b nh v c th c truy xut nh l A v B theo th t. Nhng v tr c t tn nh vy trong b nh gi l bin. Chi tit v bin s c gii thch trong phn sau ca chng ny. Bc k tip trong on m gi s hin th tng ca hai gi tr trong bin A v B. Tuy nhin, cng on m trn, ta c th b sung lu tng ca hai bin trong mt bin th ba ri hin th gi tr bin ny nh trong v d 3 sau y. V d 3: BEGIN INPUT A, B8 Lp trnh c bn C

C = A + B DISPLAY C END Mt tp hp nhng ch th hay cc bc trong m gi th c gi chung l mt cu trc. C ba loi cu trc : tun t, chn la v lp li. Trong on m gi ta vit trn,chng ta dng cu trc tun t. Chng c gi nh vy v nhng ch th c thi hnh tun t, ci ny sau ci khc v bt u t im u tin. Hai loi cu trc cn li s c cp trong nhng chng sau. 1.5.2 Lu (Flowcharts)

Mt lu l mt hnh nh minh ho cho gii thut. N v ra biu ca lung ch th hay nhng hot ng trong mt tin trnh. Mi hot ng nh vy c biu din qua nhng k hiu. hiu iu ny r hn, chng ta xem lu trong hnh 1.3 dng hin th thng ip truyn thng Hello World!.S TA R T

DIS P L AY 'H e ll o W o rld !'

STO P

Hnh 1.3: Lu Lu ging vi on m gi l cng bt u vi t BEGIN hoc START, v kt thc vi t END hay STOP. Tng t, t kha DISPLAY c dng hin th gi tr no n ngi dng. Tuy nhin, y, mi t kha th nm trong nhng k hiu. Nhng k hiu khc nhau mang mt ngha tng ng c trnh by bng trong Hnh 1.4.

Hnh 1.4: K hiu trong lu

Nhng khi nim c bn ca ngn ng C

9

Ta hy xt lu cho v d 3 nh Hnh 1.5 di y.

K hiu bt u: Dng y bt u lu K hiu xut/nhp: Dng y nhp hai s A, B K hiu x l: Dng y cng hai s K hiu xut/nhp: Dng y hin th tng C K hiu kt thc: Dng y kt thc lu Hnh 1.5: Lu cng hai s Ti bc m gi tr ca hai bin c cng v gn cho bin th ba th xem nh l mt x l v c trnh by bng mt hnh ch nht. Lu m chng ta xt y l n gin.Thng thng, lu tri rng trn nhiu trang giy. Trong trng hp nh th, biu tng b ni c dng ch im ni ca hai phn trong mt chng trnh nm hai trang k tip nhau. Vng trn ch s ni kt v phi cha k t hoc s nh hnh 1.6. Nh th, chng ta c th to lin kt gia hai lu cha hon chnh.

Hnh 1.6: B ni Bi v lu c s dng vit chng trnh, chng cn c trnh by sao cho mi lp trnh vin hiu chng d dng. Nu c ba lp trnh vin dng ba ngn ng lp trnh khc nhau vit m, bi ton h cn gii quyt phi nh nhau. Trong trng hp ny, m gi a cho lp trnh vin c th ging nhau mc d ngn ng lp trnh h dng v tt nhin l c php c th khc nhau. Nhng kt qu cui cng l mt. Do , cn thit phi hiu r bi ton v m gi phi c vit cn thn. Chng ta cng kt lun rng m gi c lp vi ngn ng lp trnh. Vi im cn thit khc phi ch khi v mt lu : Lc u ch tp trung vo kha cnh logic ca bi ton v v cc lung x l chnh ca lu Mt lu phi c duy nht mt im bt u (START) v mt im kt thc (STOP).

10

Lp trnh c bn C

Khng cn thit phi m t tng bc ca chng trnh trong lu m ch cn cc bc chnh v c ngha cn thit. Chng ta tun theo nhng cu trc tun t, m trong lung thc thi chng trnh i qua tt c cc ch th bt u t ch th u tin. Chng ta c th bt gp cc iu kin trong chng trnh, da trn cc iu kin ny hng thc thi ca chng trnh c th r nhnh. Nhng cu trc cho vic r nhnh nh l cu trc chn la, cu trc iu kin hay r nhnh. Nhng cu trc ny c cp chi tit sau y: Cu trc IF (Nu) Cu trc chn la c bn l cu trc IF. hiu cu trc ny chng ta hy xem xt v d trong khch hng c gim gi nu mua trn 100 ng. Mi ln khch hng tr tin, mt on m chng trnh s kim tra xem lng tin tr c qu 100 ng khng?. Nu ng th th s gim gi 10% ca tng s tin tr, ngc li th khng gim gi. iu ny c minh ha s lc qua m gi nh sau: IF khch hng mua trn 100 th gim gi 10% Cu trc dng y l cu lnh IF. Hnh thc chung cho cu lnh IF (cu trc IF) nh sau: IF iu kin Cc cu lnh END IF Mt cu trc IF bt u l IF theo sau l iu kin. Nu iu kin l ng (tha iu kin) th quyn iu khin s c chuyn n cc cu lnh trong phn thn thc thi. Nu iu kin sai (khng tha iu kin), nhng cu lnh phn thn khng c thc thi v chng trnh nhy n cu lnh sau END IF (chm dt cu trc IF). Cu trc IF phi c kt thc bng END IF. Chng ta xem v d 4 cho cu trc IF. V d 4: Yu cu: Kim xem mt s l chn hay khng v hin th thng ip bo nu ng l s chn, ta x l nh sau : BEGIN INPUT num r = num MOD 2 IF r=0 Display Number is even END IF END on m trn nhp mt s t ngi dng, thc hin ton t MOD (ly phn d) v kim tra xem phn d c bng 0 hay khng. Nu bng 0 hin th thng ip, ngc li thot ra. Lu cho on m gi trn th hin qua hnh 1.7. Phn thn ca cu trc IF

Nhng khi nim c bn ca ngn ng C

11

S TAR T

IN P U T nu m

r = n u m M OD 2

r =0

No

YesD IS P LAY "N u m b e r i s E ve n "

S TOP

Hnh 1.7 : Kim tra s chn C php ca lnh IF trong C nh sau: if (iu kin) { Cu lnh } Cu trc IFELSE Trong v d 4, s hay hn nu ta cho ra thng ip bo rng s khng l s chn tc l s l thay v ch thot ra. lm iu ny ta c th thm cu lnh IF khc kim tra xem trng hp s khng chia ht cho 2. Ta xem v d 5. Example 5: BEGIN INPUT num r = num MOD 2 IF r=0 DISPLAY Even number END IF IF r0 DISPLAY Odd number END IF END Ngn ng lp trnh cung cp cho chng ta cu trc IFELSE. Dng cu trc ny s hiu qu v tt hn gii quyt vn . Cu trc IF ELSE gip lp trnh vin ch lm mt php so snh v sau thc thi cc bc ty theo kt qu ca php so snh l True (ng) hay False (sai). Cu trc chung ca cu lnh IFELSE nh sau: IF iu kin12 Lp trnh c bn C

Cu lnh 1 ELSE Cu lnh 2 END IF C php ca cu trc ifelse trong C nh sau: if(iu kin) { Cu lnh 1 } else { Cu lnh 2 } Nu iu kin tha (True), cu lnh 1 c thc thi. Ngc li, cu lnh 2 c thc thi. Khng bao gi c hai c thc thi cng lc. V vy, on m ti u hn cho v d tm s chn c vit ra nh v d 6. V d 6: BEGIN INPUT num r = num MOD 2 IF r = 0 DISPLAY Even Number ELSE DISPLAY Odd Number END IF END Lu cho on m gi trn th hin qua Hnh 1.8.

Nhng khi nim c bn ca ngn ng C

13

S TA R T

IN P U T n u m

r = n um M O D 2

Yesr = 0

No

D IS P L AY "N u m b e r i s E ve n "

D IS PL A Y " N u m b er is O d d "

S TOP

Hnh 1.8: S chn hay s l a iu kin s dng AND/OR Cu trc IFELSE lm gim phc tp, gia tng tnh hu hiu. mt mc no , n cng nng cao tnh d c ca m. Cc th d IF chng ta cp n thi im ny th kh n gin. Chng ch c mt iu kin trong IF nh gi. Thnh thong chng ta phi kim tra cho hn mt iu kin, th d: xem xt nh cung cp c t MVS (nh cung cp quan trng nht) khng?, mt cng ty s kim tra xem nh cung cp c lm vic vi cng ty t nht 10 nm khng? v c tng doanh thu t nht 5,000,000 khng?. Hai iu kin tha mn th nh cung cp c xem nh l mt MVS. Do ton t AND c th c dng trong cu lnh IF nh trong v d 7 sau: V d 7: BEGIN INPUT yearsWithUs INPUT bizDone IF yearsWithUs >= 10 AND bizDone >=5000000 DISPLAY Classified as an MVS ELSE DISPLAY A little more effort required! END IF END V d 7 cng kh n gin, v n ch c 2 iu kin. tnh hung thc t, chng ta c th c nhiu iu kin cn c kim tra. Nhng chng ta c th d dng dng ton t AND ni nhng iu kin li ging nh ta lm trn. By gi, gi s cng ty trong v d trn i quy nh, h quyt nh a ra iu kin d dng hn. Nh l : Hoc lm vic vi cng ty trn 10 nm hoc c doanh s (gi tr thng mi,giao dch)

14

Lp trnh c bn C

t 5,000,000 tr ln. V v, ta thay th ton t AND bng ton t OR. Nh rng ton t OR cho ra gi tr True (ng) nu ch cn mt iu kin l True. Cu trc IF lng nhau Mt cch khc thc hin v d 7 l s dng cu trc IF lng nhau. Cu trc IF lng nhau l cu lnh IF ny nm trong trong cu lnh IF khc. Chng ta vit li v d 7 s dng cu trc IF lng nhau v d 8 nh sau:

V d 8:BEGIN INPUT yearsWithUs INPUT bizDone IF yearsWithUs >= 10 IF bizDone >=5000000 DISPLAY Classified as an MVS ELSE DISPLAY A little more effort required! END IF ELSE DISPLAY A little more effort required! END IF END on m trn thc hin cng nhim v nhng khng c AND. Tuy nhin, chng ta c mt lnh IF (kim tra xem bizDone ln hn hoc bng 5,000,000 hay khng?) bn trong lnh IF khc (kim tra xem yearsWithUs ln hn hoc bng 10 hay khng?). Cu lnh IF u tin kim tra iu kin thi gian nh cung cp lm vic vi cng ty c ln hn 10 nm hay khng. Nu di 10 nm (kt qu tr v l False), n s khng cng nhn nh cung cp l mt MVS; Nu tha iu kin n xt cu lnh IF th hai, n s kim tra ti iu kin bizDone ln hn hoc bng 5,000,000 hay khng. Nu tha iu kin (kt qu tr v l True) lc nh cung cp c xem l mt MVS, nu khng th mt thng ip bo rng khng l mt MVS. Lu cho m gi ca v d 8 c trnh by qua hnh 1.9.

Nhng khi nim c bn ca ngn ng C

15

START

INPUT yearsWithUs

INPUT bizDone

YesyearsWithUs >= 10

No

YesbzDone > 5000000

No

DISPLAY "A little more effort required!"

DISPLAY "Classified as an MVS"

DISPLAY "A little more effort required!"

STOP

Hnh 1.9: Cu lnh IF lng nhau M gi trong trng hp ny ca cu trc IF lng nhau ti v d 8 cha hiu qu. Cu lnh thng bo khng tha iu kin MVS phi vit hai ln. Hn na lp trnh vin phi vit thm m nn trnh bin dch phi xt hai iu kin ca lnh IF, do lng ph thi gian. Ngc li, nu dng ton t AND ch xt ti iu kin ca cu lnh IF mt ln. iu ny khng c ngha l cu trc IF lng nhau ni chung l khng hiu qu. N ty theo tnh hung c th m ta dng n. C khi dng ton t AND hiu qu hn, c khi dng cu trc IF lng nhau hiu qu hn. Chng ta s xt mt v d m dng cu trc IF lng nhau hiu qu hn dng ton t AND. Mt cng ty nh phn lng c bn cho cng nhn da trn tiu chun nh trong bng 1.1.

Grade E E M M

Experience 2 3 2 3Bng 1.1: Lng c bn

Salary 2000 3000 3000 4000

V vy, nu mt cng nhn c xp loi l E v c hai nm kinh nghim th lng l 2000, nu ba nm kinh nghim th lng l 3000. M gi dng ton t AND cho vn trn nh v d 9:

16

Lp trnh c bn C

V d 9: BEGIN INPUT grade INPUT exp IF grade =E AND exp =2 salary=2000 ELSE IF grade = E AND exp=3 salary=3000 END IF END IF IF grade =M AND exp =2 salary=3000 ELSE IF grade = M AND exp=3 salary=4000 END IF END IF END Cu lnh IF u tin kim tra xp loi v kinh nghim ca cng nhn. Nu xp loi l E v kinh nghim l 2 nm th lng l 2000, ngoi ra nu xp loi E, nhng c 3 nm kinh nghim th lng l 3000. Nu c 2 iu kin khng tha th cu lnh IF th hai cng tng t s kim iu kin xp loi v kinh nghim cho cng nhn phn nh lng. Gi s xp loi ca mt cng nhn l E v c hai nm kinh nghim. Lng ngi s c tnh theo mnh IF u tin. Phn cn li ca cu lnh IF th nht c b qua. Tuy nhin, iu kin ti mnh IF th hai s c xt v tt nhin l khng tha, do n kim tra mnh ELSE ca cu lnh IF th 2 v kt qu cng l False. y qu l nhng bc tha m chng trnh xt qua. Trong v d, ta ch c hai cu lnh IF bi v ta ch xt c hai loi l E v M. Nu c khong 15 loi th s tn thi gian v ti nguyn my tnh cho vic tnh ton tha mc d lng xc nh ti cu lnh IF u tin. y dt khot khng phi l m ngun hiu qu. By gi chng ta xt m gi dng cu trc IF lng nhau c sa i trong v d 10.

Nhng khi nim c bn ca ngn ng C

17

V d 10: BEGIN INPUT grade INPUT exp IF grade=E IF exp=2 salary = 2000 ELSE IF exp=3 salary=3000 END IF END IF ELSE IF grade=M IF exp=2 Salary=3000 ELSE IF exp=3 Salary=4000 END IF END IF END IF END IF END on m trn nhn kh c. Tuy nhin, n em li hiu sut cao hn. Chng ta xt cng v d nh trn. Nu cng nhn c xp loi l E v kinh nghim l 2 nm th lng c tnh l 2000 ngay trong bc u ca cu lnh IF. Sau , chng trnh s thot ra v khng cn thc thi thm bt c lnh ELSE no. Do , khng c s lng ph v on m ny mang li hiu sut cho chng trnh v chng trnh chy nhanh hn. Vng lp Mt chng trnh my tnh l mt tp cc cu lnh s c thc hin tun t. N c th lp li mt s bc vi s ln lp xc nh theo yu cu ca bi ton hoc n khi mt s iu kin nht nh c tha. Chng hn, ta mun vit chng trnh hin th tn ca ta 5 ln. Ta xt m gi di y. V d 11: BEGIN DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY END

Scooby Scooby Scooby Scooby Scooby

Nu hin th tn ta 1000 ln, nu ta vit DISPLAY Scooby 1000 ln th rt tn cng sc. Ta c th tinh gin vn bng cch vit cu lnh DISPLAY ch mt ln, sau t n trong cu trc vng lp, v ch th my tnh thc hin lp 1000 ln cho cu lnh trn.

18

Lp trnh c bn C

Ta xem m gi ca cu trc vng lp trong v d 12 nh sau: V d 12: Do loop 1000 times DISPLAY Scooby End loop Nhng cu lnh nm gia Do loop v End loop (trong v d trn l lnh DISPLAY) c thc thi 1000 ln. Nhng cu lnh ny cng vi cc lnh do loop v end loop c gi l cu trc vng lp. Cu trc vng lp gip lp trnh vin pht trin thnh nhng chng trnh ln trong c th yu cu thc thi hng ngn cu lnh. Do loopend loop l mt dng thc tng qut ca vng lp. V d sau l cch vit khc nhng cng dng cu trc vng lp. V d 13: BEGIN cnt=0 WHILE (cnt < 1000) DO DISPLAY Scooby cnt=cnt+1 END DO END

Lu cho m gi trong v d 13 c v trong Hnh 1.10.

S TA R T

cn t = 0

cn t < 1 0 0 0

Yes

NoD I S P L A Y " S c o ob y "

cn t = c n t + 1

S TO P

Hnh 1.10: Cu trc vng lp Ch rng Hnh 1.10 khng c k hiu c bit no biu din cho vng lp. Chng ta dng k hiu phn nhnh kim tra iu kin v qun l hng i ca ca chng trnh bng cc dng chy (flow_lines).

Nhng khi nim c bn ca ngn ng C

19

Tm tt bi hc Phn mm l mt tp hp cc chng trnh. Mt chng trnh l mt tp hp cc ch th (lnh). Nhng on m lnh l c s cho bt k mt chng trnh C no. Ngn ng C c 32 t kha. Cc bc cn thit gii quyt mt bi ton l nghin cu chi tit bi ton , thu thp thng tin thch hp, x l thng tin v i n kt qu. Mt gii thut l mt danh sch rt gn v logic cc bc gii quyt vn . Gii thut c vit bng m gi hoc lu . M gi l s trnh by ca gii thut trong ngn ng tng t nh m tht Mt lu l s trnh by di dng biu ca mt gii thut. Lu c th chia nh thnh nhiu phn v u ni dng cho vic ni chng li ti ni chng b chia ct. Mt chng trnh c th gp mt iu kin da theo vic thc thi c th c phn theo cc nhnh r khc nhau. Cu trc lnh nh vy gi l cu trc chn la, iu kin hay cu trc r nhnh. Cu trc chn c bn l cu trc IF. Cu trc IF ELSE gip lp trnh vin ch lm so snh n v sau thc thi cc bc ty theo kt qu ca php so snh l True (ng) hay False (sai). Cu trc IF lng nhau l cu lnh IF ny nm trong cu lnh IF khc. Thng thng ta cn lp li mt s bc vi s ln lp xc nh theo yu cu ca bi ton hoc n khi mt s iu kin nht nh c tha. Nhng cu trc gip lm vic ny gi l cu trc vng lp.

20

Lp trnh c bn C

Kim tra tin hc tp 1. C cho php ____________ ca m v d liu. 2. Mt l mt s trnh by dng biu minh ha tnh tun t ca nhng hot ng c thc thi nhm t c mt li gii. 3. Lu gip chng ta xem xt li v g ri chng trnh mt cch d dng. 4. Mt lu c th c tu s im bt u v s im kt thc. (True / False) (True / False)

5. Mt ____ c bn l vic thc thi tun t nhng cu lnh n khi mt iu kin c th no l ng (True) hay sai (False).

Nhng khi nim c bn ca ngn ng C

21

Bi tp t lm 1. Vit mt on m gi v v mt lu nhp mt gi tr l 0 C (Celsius) v chuyn n sang 0F (Fahrenheit). [Hng dn: C/5 = (F-32)/9] 2. Vit mt on m gi v v mt lu nhp im ca mt sinh vin cho cc mn : Vt l, Ha hc, v Sinh hc. Sau hin th im trung bnh v tng ca nhng im ny.

22

Lp trnh c bn C

Bi 2Mc tiu: Kt thc bi hc ny, bn c th: Hiu v s dng c bin (variables) Phn bit s khc nhau gia bin v hng (constants)

Bin v Kiu d liu

Nm vng v s dng cc kiu d liu khc nhau trong chng trnh C Hiu v s dng cc ton t s hc. Gii thiu Bt c chng trnh ng dng no cn x l d liu cng cn c ni lu tr tm thi d liu y. Ni m d liu c lu tr gi l b nh. Nhng v tr khc nhau trong b nh c th c xc nh bi cc a ch duy nht. Nhng ngn ng lp trnh trc y yu cu lp trnh vin qun l mi v tr nh thng qua a ch, cng nh gi tr lu trong n. Cc lp trnh vin dng nhng a ch ny truy cp hoc thay i ni dung ca cc nh. Khi ngn ng lp trnh pht trin, vic truy cp hay thay i gi tr nh c n gin ho nh s ra i ca khi nim bin . 2.1 Bin (variable) Mt chng trnh ng dng c th qun l nhiu loi d liu. Trong trng hp ny, chng trnh phi ch nh b nh cho mi n v d liu. Khi ch nh b nh, c hai im cn lu nh sau : 1. Bao nhiu b nh s c gn 2. Mi n v d liu c lu tr u trong b nh. Trc y, cc lp trnh vin phi vit chng trnh theo ngn ng my gm cc m 1 v 0. Nu mun lu tr mt gi tr tm thi, v tr chnh xc ni m d liu c lu tr trong b nh my tnh phi c ch nh. V tr ny l mt con s c th, gi l a ch b nh. Cc ngn ng lp trnh hin i cho php chng ta s dng cc tn tng trng gi l bin (variable), ch n mt vng b nh ni m cc gi tr c th c lu tr. Kiu d liu quyt nh tng s b nh c ch nh. Nhng tn c gn cho bin gip chng ta s dng li d liu khi cn n. Chng ta quen vi cch s dng cc k t i din trong mt cng thc. V d, din tch hnh ch nht c tnh bi : Din tch = A = chiu di x chiu rng = L x B Cch tnh li sut n gin c cho nh sau: Tin li = I = S tin ban u x Thi gian x T l/100 = P x T x R /100 Cc k t A, L, B, I, P, T, R l cc bin v l cc k t vit tt i din cho cc gi tr khc nhau.

Bin v Kiu d liu

1

Xem v d sau y : Tnh tng im cho 5 sinh vin v hin th kt qu. Vic tnh tng c thc hin theo hng dn sau. Hin th gi tr tng ca 24, 56, 72, 36 v 82 Khi gi tr tng c hin th, gi tr ny khng cn c lu trong b nh my tnh. Gi s, nu chng ta mun tnh im trung bnh, th gi tr tng phi c tnh mt ln na. Tt hn l chng ta s lu kt qu vo b nh my tnh, v s ly li n khi cn n. sum = 24 + 56 + 72 + 36 + 82 y, sum l bin c dng cha tng ca 5 s. Khi cn tnh im trung bnh, c th thc hin nh sau: Avg = sum / 5 Trong C, tt c bin cn phi c khai bo trc khi dng chng. Chng ta hy xt v d nhp hai s v hin th tng ca chng trong v d 1. V d 1: BEGIN DISPLAY Enter 2 numbers INPUT A, B C=A+B DISPLAY C END A, B v C trong on m trn l cc bin. Tn bin gip chng ta trnh phi nh a ch ca v tr b nh. Khi on m c vit v thc thi, h iu hnh m nhim vic cp khng gian nh cn trng cho nhng bin ny. H iu hnh nh x mt tn bin n mt v tr xc nh trong b nh ( nh). V tham chiu ti mt gi tr ring bit trong b nh, chng ta ch cn ch ra tn ca bin. Trong v d trn, gi tr ca hai bin c nhp t ngi dng v chng c lu tr ni no trong b nh. Nhng v tr ny c th c truy cp thng qua cc tn bin A v B. Trong bc k tip, gi tr ca hai bin c cng v kt qu c lu trong bin th 3 l bin C. Cui cng, gi tr bin C c hin th. Trong khi mt vi ngn ng lp trnh cho php h iu hnh xa ni dung trong nh v cp pht b nh ny dng li th nhng ngn ng khc nh C yu cu lp trnh vin xa vng nh khng s dng thng qua m chng trnh. Trong c hai trng hp, h iu hnh u lo vic cp pht v thu hi nh. H iu hnh hot ng nh mt giao din gia cc nh v lp trnh vin. Lp trnh vin khng cn lu tm v v tr nh m cho h iu hnh m nhim. Vy vic iu khin b nh (v tr m d liu thch hp lu tr) s do h iu hnh m trch, ch khng phi lp trnh vin. 2.2 Hng (constant)

Trong trng hp ta dng bin, gi tr c lu s thay i. Mt bin tn ti t lc khai bo n khi thot khi phm vi dng n. Nhng cu lnh trong phm vi khi m ny c th truy cp gi tr ca

2

Lp trnh c bn C

bin, v thm ch c th thay i gi tr ca bin. Trong thc t, i khi cn s dng mt vi khon mc m gi tr ca chng khng bao gi b thay i. Mt hng l mt gi tr khng bao gi b thay i. V d, 5 l mt hng, m gi tr ton hc lun l 5 v khng th b thay i bi bt c ai. Tng t, Black l mt hng, n biu th cho mu en. Khi , 5 c gi l hng s (numeric constant), Black c gi l hng chui (string constant). 2.3 nh danh (Identifier)

Tn ca cc bin (variables), cc hm (functions), cc nhn (labels) v cc i tng khc nhau do ngi dng nh ngha gi l nh danh. Nhng nh danh ny c th cha mt hay nhiu k t. K t u tin ca nh danh phi l mt ch ci hay mt du gch di ( _ ). Cc k t tip theo c th l cc ch ci, cc con s hay du gch di. Arena, s_count, marks40, v class_one l nhng nh danh ng. Cc v d v cc nh danh sai l 1sttest, oh!god, v start... end. Cc nh danh c th c chiu di tu , nhng s k t trong mt bin c nhn din bi trnh bin dch th thay i theo trnh bin dch. V d, nu mt trnh bin dch nhn din 31 con s c ngha u tin cho mt tn nh danh th cc cu sau s hin th cng mt kt qu: y l bin testing.... testing y l bin testing.... testing ... testing Cc nh danh trong C c phn bit ch hoa v ch thng, c th, arena th khc ARENA. 2.3.1 Cc nguyn tc cho vic ch t tn

Cc quy tc t tn bin khc nhau tu ngn ng lp trnh. Tuy nhin, vi quy c chun c tun theo nh : Tn bin phi bt u bng mt k t ch ci. Cc k t theo sau k t u bng mt chui cc ch ci hoc con s v cng c th bao gm k t c bit nh du gch di. Trnh dng k t O ti nhng v tr m c th gy lm ln vi s khng (0) v tng t ch ci l (ch thng ca ch hoa L) c th lm ln vi s 1. Tn ring nn trnh t tn cho bin. Theo tiu chun C cc ch ci thng v hoa th xem nh khc nhau v d. bin ADD, add v Add l khc nhau. Vic phn bit ch hoa v ch thng khc nhau tu theo ngn ng lp trnh. Do , tt nht nn t tn cho bin theo cch thc chun. Tn mt bin nn c ngha, gi t v m t r kiu d liu ca n. V d, nu tm tng ca hai s th tn bin lu tr tng nn t l sum (tng). Nu t tn l s hay ab12 th khng hay lm.

Bin v Kiu d liu

3

2.3.2

T kha (Keywords)

Tt c cc ngn ng dnh mt s t nht nh cho mc ch ring. Nhng t ny c mt ngha c bit trong ng cnh ca tng ngn ng, v c xem l t kha. Khi t tn cho cc bin, chng ta cn bo m rng khng dng bt c t kha no lm tn bin. Tn kiu d liu tt c c coi l t kha. Do vy, t tn cho mt bin l int s pht sinh mt li, nhng t tn cho bin l integer th khng. Vi ngn ng lp trnh yu cu lp trnh vin ch ra tn ca cc bin cng nh kiu d liu ca n trc khi dng bin tht s. Bc ny c gi l khai bo bin. Ta s ni r bc ny trong phn tip theo khi tho lun v cc kiu d liu. iu quan trng cn nh by gi l bc ny gip h iu hnh tht s cp pht mt khong khng gian vng nh cho bin trc khi bt u s dng n. 2.4 Cc kiu d liu (Data types)

Cc loi d liu khc nhau c lu tr trong bin l : S (Numbers) Cc s nguyn. V d : 10 hay 178993455. Cc s thc. V d : 15.22 hay 15463452.25. Cc s dng. Cc s m.

Tn. V d : John. Gi tr lun l. V d : Y hay N. Khi d liu c lu tr trong cc bin c kiu d liu khc nhau, n yu cu dung lng b nh s khc nhau. Dung lng b nh c ch nh cho mt bin ty thuc vo kiu d liu ca n. ch nh b nh cho mt n v d liu, chng ta phi khai bo mt bin vi mt kiu d liu c th. Khai bo mt bin c ngha l mt vng nh no c gn cho bin. Vng b nh sau ny s c tham chiu thng qua tn ca bin. Dung lng b nh c cp cho bin bi h iu hnh ph thuc vo kiu d liu c lu tr trong bin. V vy, mt kiu d liu s m t loi d liu ph hp vi bin. Dng thc chung cho vic khai bo mt bin: Kiu d liu (Tn bin) Kiu d liu thng c dng trong cc cng c lp trnh c th c phn chia thnh: 1 Kiu d liu s - lu tr gi tr s.4 Lp trnh c bn C

2 Kiu d liu k t lu tr thng tin m t Nhng kiu d liu ny c th c tn khc nhau trong cc ngn ng lp trnh khc nhau. V d, mt kiu d liu s c gi trong C l int trong khi ti Visual Basic c gi l integer. Tng t, mt kiu d liu k t c t tn l char trong C trong khi trong Visual Basic n c t tn l string. Trong bt c trng hp no, cc d liu c lu tr lun ging nhau. im khc duy nht l cc bin c dng trong mt cng c phi c khai bo theo tn ca kiu d liu c h tr bi chnh cng c . C c 5 kiu d liu c bn. Tt c nhng kiu d liu khc da vo mt trong s nhng kiu ny. 5 kiu d liu l: int l mt s nguyn, v c bn n biu th kch c t nhin ca cc s nguyn (integers). float v double c dng cho cc s c du chm ng. Kiu float (s thc) chim 4 byte v c th c ti 6 con s phn sau du thp phn, trong khi double chim 8 bytes v c th c ti 10 con s phn thp phn. char chim 1 byte v c kh nng lu mt k t n (character). void c dng in hnh khai bo mt hm khng tr v gi tr. iu ny s c ni r hn trong phn hm. Dung lng nh v phm vi gi tr ca nhng kiu ny thay i theo mi loi b x l v vic ci t cc trnh bin dch C khc nhau. Lu : Cc con s du chm ng c dng biu th cc gi tr cn c chnh xc phn thp phn. Kiu d liu int L kiu d liu lu tr d liu s v l mt trong nhng kiu d liu c bn trong bt c ngn ng lp trnh no. N bao gm mt chui ca mt hay nhiu con s. Th d trong C, lu tr mt gi tr s nguyn trong mt bin tn l num, ta khai bo nh sau: int num; Bin num khng th lu tr bt c kiu d liu no nh Alan hay abc. Kiu d liu s ny cho php cc s nguyn trong phm vi -32768 ti 32767 c lu tr. H iu hnh cp pht 16 bit (2 byte) cho mt bin c khai bo kiu int. V d: 12322, 0, -232. Nu chng ta gn gi tr 12322 cho num th bin ny l bin kiu s nguyn v 12322 l hng s nguyn. Kiu d liu s thc (float) Mt bin c kiu d liu s thc c dng lu tr cc gi tr cha phn thp phn. Trnh bin dch phn bit cc kiu d liu float v int. im khc nhau chnh ca chng l kiu d liu int ch bao gm cc s nguyn, trong khi kiu d liu float c th lu gi thm c cc phn s. V d, trong C, lu tr mt gi tr float trong mt bin tn gi l num, vic khai bo s nh sau : float num;

Bin v Kiu d liu

5

Bin khai bo l kiu d liu float c th lu gi tr thp phn c chnh xc ti 6 con s. Bin ny c cp pht 32 bit (4 byte) ca b nh. V d: 23.05, 56.5, 32. Nu chng ta gn gi tr 23.5 cho num, th bin num l bin s thc v 23.5 l mt hng s thc. Kiu d liu double Kiu d liu double c dng khi gi tr c lu tr vt qu gii hn v dung lng ca kiu d liu float. Bin c kiu d liu l double c th lu tr nhiu hn khong hai ln s cc ch s ca kiu float. S cc ch s chnh xc m kiu d liu float hoc double c th lu tr ty thuc vo h iu hnh c th ca my tnh. Cc con s c lu tr trong kiu d liu float hay double c xem nh nhau trong h thng tnh ton. Tuy nhin, s dng kiu d liu float tit kim b nh mt na so vi kiu d liu double. Kiu d liu double cho php chnh xc cao hn (ti 10 con s). Mt bin khai bo kiu d liu double chim 64 bit (8 byte) trong b nh. Th d trong C, lu tr mt gi tr double cho mt bin tn num, khai bo s nh sau: double num; Nu chng ta gn gi tr 23.34232324 cho num, th bin num l bin kiu double v 23.34232324 l mt hng kiu double. Kiu d liu char Kiu d liu char c dng lu tr mt k t n. Mt kiu d liu char c th lu mt k t n c bao ng trong hai du nhy n (). Th d kiu d liu char nh: a, m, $ %. Ta c th lu tr nhng ch s nh nhng k t bng cch bao chng bn trong cp du nhy n. Khng nn nhm ln chng vi nhng gi tr s. V d, 1, 5 v 9 s khng c nhm ln vi nhng s 1, 5 v 9. Xem xt nhng cu lnh ca m C di y: char gender; gender='M'; Hng u tin khai bo bin gender ca kiu d liu char. Hng th hai lu gi mt gi tr khi to cho n l M. Bin gender l mt bin k t v M l mt hng k t. Bin ny c cp pht 8 bit (1 byte) trong b nh. Kiu d liu void C c mt kiu d liu c bit gi l void. Kiu d liu ny ch cho trnh bin dch C bit rng khng c d liu ca bt c kiu no. Trong C, cc hm s thng tr v d liu thuc mt kiu6 Lp trnh c bn C

no . Tuy nhin, khi mt hm khng c g tr v, kiu d liu void c s dng ch ra iu ny. 2.4.1 Nhng kiu d liu c bn v dn xut Bn kiu d liu (char, int, float v double) m chng ta tho lun trn c s dng cho vic trnh by d liu thc s trong b nh ca my tnh. Nhng kiu d liu ny c th c sa i sao cho ph hp vi nhng tnh hung khc nhau mt cch chnh xc. Kt qu, chng ta c c cc kiu d liu dn xut t nhng kiu c bn ny. Mt b t (modifier) c s dng thay i kiu d liu c bn nhm ph hp vi cc tnh hung a dng. Ngoi tr kiu void, tt c cc kiu d liu khc c th cho php nhng b t ng trc chng. B t c s dng vi C l signed, unsigned, long v short. Tt c chng c th c p dng cho d liu kiu k t v kiu s nguyn. B t long cng c th c p dng cho double. Mt vi b t nh : 1. unsigned 2. long 3. short khai bo mt bin kiu dn xut, chng ta cn t trc khai bo bin thng thng mt trong nhng t kha ca b t. Mt gii thch chi tit v cc b t ny v cch thc s dng chng c trnh by bn di. Cc kiu c du (signed) v khng du(unsigned) Khi khai bo mt s nguyn, mc nh l mt s nguyn c du. Tnh quan trng nht ca vic dng signed l b sung cho kiu d liu char, v char l kiu khng du theo mc nh. Kiu unsigned ch r rng mt bin ch c th c gi tr dng. B t ny c th c s dng vi kiu d liu int v kiu d liu float. Kiu unsigned c th p dng cho kiu d liu float trong vi trng hp nhng iu ny gim bt tnh kh chuyn (portability) ca m lnh. Vi vic thm t unsigned vo trc kiu d liu int, min gi tr cho nhng s dng c th c tng ln gp i. Ta xem nhng cu lnh ca m C cung cp bn di, n khai bo mt bin theo kiu unsigned int v khi to bin ny c gi tr 23123. unsigned int varNum; varNum = 23123; Ch rng khng gian cp pht cho kiu bin ny vn gi nguyn. Ngha l, bin varNum c cp pht 2 byte nh khi n dng kiu int. Tuy nhin, nhng gi tr m mt kiu unsgned int h tr s nm trong khong t 0 n 65535, thay v l -32768 ti 32767 m kiu int h tr. Theo mc nh, int l mt kiu d liu c du. Cc kiu long v short Chng c s dng khi mt s nguyn c chiu di ngn hn hoc di hn chiu di bnh thng. Mt b t short c p dng cho kiu d liu khi chiu di yu cu ngn hn chiu di s nguyn bnh thng v mt b t long c dng khi chiu di yu cu di hn chiu di s nguyn bnh thng.

Bin v Kiu d liu

7

B t short c s dng vi kiu d liu int. N sa i kiu d liu int theo hng chim t v tr b nh hn. Bi vy, trong khi mt bin kiu int chim gi 16 bit (2 byte) th mt bin kiu short int (hoc ch l short), chim gi 8 bit (1 byte) v cho php nhng s c trong phm vi t 128 ti 127. B t long c s dng tng ng mt min gi tr rng hn. N c th c s dng vi int cng nh vi kiu d liu double. Khi c s dng vi kiu d liu int, bin chp nhn nhng gi tr s trong khong t -2,147,483,648 n 2,147,483,647 v chim gi 32 bit ( 4 byte). Tng t, kiu long double ca mt bin chim gi 128 bit (16 byte). Mt bin long int c khai bo nh sau: long int varNum; N cng c th c khai bo n gin nh long varNum. Mt s long integer c th c khai bo nh long int hay ch l long. Tng t, ta c short int hay short. Bng di y trnh by phm vi gi tr cho cc kiu d liu khc nhau v s bit n chim gi da theo tiu chun ANSI. Kiu char unsigned signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double Dung lng xp x (n v l bit) 8 8 8 16 16 16 16 16 16 32 32 32 32 64 128 Phm vi -128 ti 127 0 ti 255 -128 ti 127 -32,768 ti 32,767 0 ti 65,535 Ging nh kiu int -128 ti 127 0 ti 65, 535 Ging nh kiu short int -2,147,483,648 ti 2,147,483,647 Ging nh kiu long int 0 ti 4,294,967,295 6 con s thp phn 10 con s thp phn 10 con s thp phn

Table 2.1: Cc kiu d liu v phm vi Th d sau trnh by cch khai bo nhng kiu d liu trn. V d 2: main() { char abc; int xyz; float length; double area; long liteyrs; short arm; }

/*abc of type character */ /*xyz of type integer */ /*length of type float */ /* area of type double */ /*liteyrs of type long int */ /*arm of type short integer*/

Chng ta xem li v d cng hai s v hin th tng chng trc. M gi nh sau :8 Lp trnh c bn C

V d 3: BEGIN INPUT A, B C = A + B DISPLAY C END Trong v d ny, cc gi tr cho hai bin A v B c nhp. Cc gi tr c cng v tng c lu cho bin C bng cch dng cu lnh C = A + B. Trong cu lnh ny, A v B l nhng bin v k hiu + gi l ton t. Chng ta s ni v ton t s hc ca C phn sau y. Tuy nhin, c nhng loi ton t khc trong C s c bn ti phn k tip. 2.5 Cc ton t s hc (Arithmetic Operators)

Nhng ton t s hc c s dng thc hin nhng thao tc mang tnh s hc. Chng c chia thnh hai lp : Ton t s hc mt ngi (unary) v ton t s hc hai ngi (binary). Bng 2.2 lit k nhng ton t s hc v chc nng ca chng. Cc ton t mt ngi ++ -Chc nng Ly i s Tng mt gi tr Gim mt gi tr Cc ton t hai ngi + * % / ^ Chc nng Cng Tr Nhn Ly phn d Chia Ly s m

Bng 2.2: Cc ton t s hc v chc nng Cc ton t hai ngi Trong C, cc ton t hai ngi c chc nng ging nh trong cc ngn ng khc. Nhng ton t nh +, -, * v / c th c p dng cho hu ht kiu d liu c sn trong C. Khi ton t / c p dng cho mt s nguyn hoc k t, bt k phn d no s c ct b. V d, 5/2 s bng 2 trong php chia s nguyn. Ton t % s cho ra kt qu l s d ca php chia s nguyn. V d: 5%2 s c kt qu l 1. Tuy nhin, % khng th c s dng vi nhng kiu c du chm ng. Chng ta hy xem xt mt v d ca ton t s m. 9^2 y 9 l c s v 2 l s m. S bn tri ca ^ l c s v s bn phi ^ l s m. Kt qu ca 9^2 l 9*9 = 81. Thm v d khc: 5^3 C ngha l:

Bin v Kiu d liu

9

5*5*5 Do : 5 ^ 3 = 5 * 5 * 5 = 125. Ghi ch: Nhng ngn ng lp trnh nh Basic, h tr ton t m. Tuy nhin, ANSI C khng h tr k hiu ^ cho php tnh ly tha. Ta c th dng cch khc tnh ly tha trong C l dng hm pow() c nh ngha trong math.h. C php ca n th hin qua v d sau: ... #include void main(void) { . /* the following function will calculate x to the power y. */ z = pow(x, y); . } V d sau trnh by tt c ton t hai ngi c dng trong C. Ch rng ta cha ni v hm printf() v getchar(). Chng ta s bn trong nhng phn sau. V d 4: #include main() { int x,y; x = 5; y = 2; printf("The integers are printf("The addition gives printf("The subtraction gives printf("The multiplication gives printf("The division gives printf("The modulus gives getchar(); } Kt qu l: The The The The The The integers are : addition gives : subtraction gives : multiplication gives : division gives : modulus gives : 5 & 2 7 3 10 2 1

: : : : : :

%d & %d\n", x, y); %d\n", x + y); %d\n", x - y); %d\n", x * y); %d\n", x / y); %d\n", x % y);

Cc ton t mt ngi (unary) Cc ton t mt ngi l ton t tr mt ngi -, ton t tng ++ v ton t gim -- Ton t tr mt ngi

10

Lp trnh c bn C

K hiu ging nh php tr hai ngi. Ly i s ch ra hay thay i du i s ca mt gi tr. V d: a = -75; b = -a; Kt qu ca vic gn trn l a c gn gi tr -75 v b c gn cho gi tr 75 (-(- 75)). Du tr c s dng nh th gi l ton t mt ngi v n ch c mt ton hng. Ni mt cch chnh xc, khng c ton t mt ngi + trong C. V vy, mt lnh gn nh. invld_pls = +50; khi m invld_pls l mt bin s nguyn l khng hp l trong chun ca C. Tuy nhin, nhiu trnh bin dch khng phn i cch dng nh vy. Cc ton t Tng v Gim C bao cha hai ton t hu ch m ta khng tm thy c trong nhng ngn ng my tnh khc. Chng l ++ v --. Ton t ++ thm vo ton hng ca n mt n v, trong khi ton t - gim i ton hng ca n mt n v. C th: x = x + 1; c th c vit l: x++; v: x = x - 1; c th c vit l: x--; C hai ton t ny c th ng trc hoc sau ton hng, chng hn: x = x + 1; c th c vit li l x++ hay ++x; V cng tng t cho ton t --. S khc nhau gia vic x l trc hay sau trong ton t mt ngi tht s c ch khi n c dng trong mt biu thc. Khi ton t ng trc ton hng, C thc hin vic tng hoc gim gi tr trc khi s dng gi tr ca ton hng. y l tin x l (pre-fixing). Nu ton t i sau ton hng, th gi tr ca ton hng c s dng trc khi tng hoc gim gi tr ca n. y l hu x l (post-fixing). Xem xt v d sau :a = 10; b = 5; c = a * b++;

Bin v Kiu d liu

11

Trong biu thc trn, gi tr hin thi ca b c s dng cho tnh ton v sau gi tr ca b s tng sau. Tc l, c c gn 50 v sau gi tr ca b c tng ln thnh 6. Tuy nhin, nu biu thc trn l: c = a * ++b; th gi tr ca c s l 60, v b s l 6 bi v b c tng 1 trc khi thc hin php nhn vi a, sau gi tr c gn vo c. Trong trng hp m tc ng ca vic tng hay gim l ring l th ton t c th ng trc hoc sau ton hng u c. Hu ht trnh bin dch C sinh m rt nhanh v hiu qu i vi vic tng v gim gi tr. M ny s tt hn so vi khi ta dng ton t gn. V vy, cc ton t tng v gim nn c dng bt c khi no c th.

12

Lp trnh c bn C

Tm tt bi hc Thng thng, khi chng trnh ng dng cn x l d liu, n cn c ni no lu tr tm thi d liu ny. Ni m d liu c lu tr gi l b nh. Cc ngn ng lp trnh hin i ngy nay cho php chng ta s dng cc tn tng trng gi l bin (variable), dng ch n mt vng trong b nh ni m cc gi tr c th c lu tr. Khng c gii hn v s v tr b nh m mt chng trnh c th dng. Mt hng (constant) l mt gi tr khng bao gi b thay i. Tn ca cc bin (variable), cc hm (function), cc nhn (label) v cc i tng khc nhau do ngi dng nh ngha gi l nh danh. Tt c ngn ng dnh mt s t nht nh cho mc ch ring. Nhng t ny c gi l l t kha (keywords). Cc kiu d liu chnh ca C l character, integer, float, double v void. Mt b t c s dng thay i kiu d liu c bn sao cho ph hp vi nhiu tnh hung a dng. Cc b t c s dng trong C l signed, unsigned, long v short. C h tr hai loi ton t s hc: mt ngi v hai ngi. Ton t tng ++ v ton t gim -- l nhng ton t mt ngi. N ch hot ng trn bin kiu s. Ton t hai ngi s hc l +, -, *, /, %, n ch tc ng ln nhng hng s, bin hay biu thc. Ton t phn d % ch p dng trn cc s nguyn v cho kt qu l phn d ca php chia s nguyn.

Bin v Kiu d liu

13

Kim tra tin hc tp 1 2 3 4 5 C c phn bit ch thng v hoa. S 10 l mt _______________. K t u ca nh danh c th l mt s. (True / False) (True / False)

Dng kiu _________ s tit kim b nh do n chim ch na khng gian nh so vi _________. Kiu d liu _______ c dng ch cho trnh bin dch C bit rng khng c gi tr c tr v. _______ v _______ l hai nhm ton t s hc. A. Bitwise & v | C. Lun l AND B. Mt ngi v hai ngi D. Khng cu tr li no c no

6

7

Cc ton t mt ngi s hc l __ v __. A. ++ v -C. ^ v $ B. % v ^ D. Khng cu tr li no c

14

Lp trnh c bn C

Bi tp t lm 1. Chn tng ng cho ct A v B: Ct A 8 10.34 ABC abc 23 12112134.86868686886 _A1 $abc A Tn nh danh sai Hng s nguyn Hng k t Double S chm ng Tn nh danh ng Ct B

Hng dn : Nhiu mc trn ct A c th tng ng ti mt mc n ti ct B. 2. Tnh gi tr ca cc bin sau mi cu lnh di y: a. int a = 4^4 b. int a = 23.34 c. a = 10 b = a + a++ d. a = -5 b = -a

Bin v Kiu d liu

15

Bi 3Mc tiu: Kt thc bi hc ny, bn c th: S dng bin, kiu d liu v biu thc s hc. Phn I Trong thi gian 1 gi 30 pht u: 3.1 Bin

Bin, Ton t v Kiu d liu

Nh chng ta bit, Bin l tn t cho v tr b nh my tnh, c th dng lu tr cc gi tr khc nhau ti nhng thi im khc nhau. Trong chng ny, ch yu chng ta s hc cch to v s dng bin. 3.1.1 To bin To bin bao gm vic to kiu d liu v tn hp l cho bin, v d: int currentVal; Trong v d trn, tn bin l currentVal c kiu d liu l s nguyn (integer). 3.2 Kiu d liu Kiu d liu nh ngha loi gi tr m s c lu trong mt bin no , v d: int currentVal; Trong v d trn int ch rng bin currentVal s lu gi tr kiu s nguyn (integer). 3.3 Biu thc s hc Mt biu thc s hc trong C bao gm mt tn bin nm pha bn tri ca du =, tn bin hoc hng nm bn phi du =. Bin v hng nm bn phi ca du = c ni vi nhau bi nhng ton t s hc nh +, -, *, v /. Th d, delta = alpha * beta / gamma + 3.2 * 2 / 5;

By gi chng ta xt mt chng trnh tnh tin li n gin nh sau V d 1: 1. Gi trnh son tho nhp nhng cu lnh cho chng trnh C. 2. To ra mt tp tin mi. 3. Nhp vo on m sau: #include void main()

Bin,Ton t v Kiu d liu

41

{ int principal, period; float rate, si; principal = 1000; period = 3; rate = 8.5; si = principal * period * rate / 100; printf(%f, si); } thy kt qu u ra, thc hin tip cc bc sau: 4. Lu tp tin vi tn myprogramI.C. 5. Bin dch tp tin myprogramI.C. 6. Thc thi chng trnh myprogramI.C. 7. Tr v trnh son tho. Mu kt xut cho chng trnh trn nh hnh sau:

Hnh 3.1: Kt qu ca myprogramI.C

V d 2: 1. To mt tp tin mi. 2. G vo m sau: #include void main() { int a, b, c, sum; printf(\nEnter any three numbers: ); scanf(%d %d %d, &a, &b, &c); sum = a + b + c;

42

Lp trnh c bn C

printf(\n Sum = %d, sum); } 3. Lu tp tin vi tn myprogramII.C. 4. Bin dch tp tin myprogramII.C. 5. Thc thi chng trnh myprogramII.C. 6. Tr v trnh son tho. Mu kt qu u ra ca chng trnh trn nh hnh sau:

Hnh 3.2: Kt qu ca myprogramII.C

Bin,Ton t v Kiu d liu

43

Phn II Trong thi gian 30 pht k tip: 1. Vit mt chng trnh nhp vo mt s v tnh bnh phng ca s . Hng dn: Thc hin theo cc bc sau: a. Nhp vo mt s. b. Nhn s vi chnh n v hin th kt qu .

44

Lp trnh c bn C

Bi tp t lm 1. Vit chng trnh tnh din tch v chu vi ca mt vng trn. 2. Vit chng trnh nhp lng v tui ca mt ngi v hin th cc s va nhp ra mn hnh.

Bin,Ton t v Kiu d liu

45

46

Lp trnh c bn C

Bi 4Mc tiu: Kt thc bi hc ny, bn c th:

Ton t v Biu thc

Hiu c Ton t gn Hiu c biu thc s hc Nm c ton t quan h (Relational Operators) v ton t lun l (Logical Operators) Hiu ton t lun l nh phn (Bitwise Logical Operators) v biu thc (Expressions) Hiu khi nim p kiu Hiu u tin ca cc ton t.

Kt thc bi hc ny, cc hc vin c th: Nm c Ton t gn Hiu c biu thc s hc Nm c ton t quan h (ton t so snh-Relational Operators) v ton t lun l (Logical Operators) Hiu ton t lun l nh phn( ton t lun l nh phn-Bitwise Logical Operators) v biu thc Nm c v p kiu qua Cast Hiu v u tin ca cc ton t Gii thiu C c mt tp cc ton t phong ph. Ton t l cng c dng thao tc d liu. Mt ton t l mt k hiu dng i din cho mt thao tc c th no c thc hin trn d liu. C nh ngha bn loi ton t: ton t s hc (arithmetic), quan h (relational), lun l (logical), v ton t lun l nh phn (bitwise). Bn cnh , C cn c mt s ton t c bit. Ton t thao tc trn hng hoc bin. Hng hoc bin ny c gi l ton hng (operands). Bin c cp cc chng trc. Hng l nhng gi tr c nh m chng trnh khng th thay i. Hng trong C c th l bt c kiu d liu c bn no. Ton t c phn loi: ton t mt ngi, hai ngi hoc ba ngi. Ton t mt ngi ch thao tc trn mt phn t d liu, ton t hai ngi trn hai phn t d liu v ba ngi trn ba phn t d liu. V d 4.1: c = a + b; y a, b, c l nhng ton hng, du = v du + l nhng ton t. 4.1 Biu thc (Expressions)Formatted: Bullets and Numbering

Mt biu thc l t hp cc ton t v ton hng. Ton t thc hin cc thao tc nh cng, tr, so snh v.v... Ton hng l nhng bin hay nhng gi tr m cc php ton c thc hin trn n. Trong v d a + b, a v b l ton hng v + l ton t. Tt c kt hp li l mt biu thc.Trong qu trnh thc thi chng trnh, gi tr thc s ca bin (nu c) s c s dng cng vi cc hng c mt trong biu thc. Vic nh gi biu thc c thc hin nh cc ton t. V vy, mi biu thc trong C u c mt gi tr.

Ton t v Biu thc

47

Cc v d v biu thc l: 2 x 3+7 2y+5 2 + 6 (4 - 2) z + 3 (8 - z)

48

Lp trnh c bn C

V d 4.2: Roland nng 70 kilograms, v Mark nng k kilograms. Vit mt biu thc cho tng cn nng ca h. Tng cn nng ca hai ngi tnh bng kilograms l 70 + k. V d 4.3: Tnh gi tr biu thc 4 z + 12 vi z = 15. Chng ta thay th mi z vi gi tr 15, v n gin ha biu thc theo quy tc: thi hnh php ton trong du ngoc trc tin, k n ly tha, php nhn v chia ri php cng v tr. 4 z + 12 tr thnh 4 15 + 12 = 60 + 12 = 72 Ton t gn (Assignment Operator) Trc khi nghin cu cc ton t khc, ta hy xt ton t gn (=). y l ton t thng dng nht cho mi ngn ng v mi ngi u bit. Trong C, ton t gn c th c dng cho bt k biu thc C hp l. Dng thc chung cho ton t gn l: Tn bin = biu thc; Gn lin tip Nhiu bin c th c gn cng mt gi tr trong mt cu lnh n. Vic ny thc hin qua c php gn lin tip. V d: a = b = c =10; Dng m trn gn gi tr 10 cho a, b,v c. Tuy nhin, vic ny khng th thc hin lc khai bo bin. V d, int a = int b = int c= 0; Cu lnh trn pht sinh li v sai c php. Biu thc s hc (Arithmetic Expressions) Cc php ton thng c thc hin theo mt th t c th (hoc ring bit) cho ra gi tr cui cng. Th t ny gi l u tin (s ni n sau). Cc biu thc ton hc trong C c biu din bng cch s dng ton t s hc cng vi cc ton hng dng s v k t. Nhng biu thc ny gi l biu thc s hc (Arithmetic Expressions). V d v biu thc s hc l : a * (b+c/d)/22; ++i % 7; 5 + (c = 3+8); (php nhn thc hin trc php cng)

Ton t v Biu thc

49

Nh chng ta thy trn, ton hng c th l hng, bin hay kt hp c hai. Hn na, mt biu thc c th l s kt hp ca nhiu biu thc con. Chng hn, trong biu thc u, c/d l mt biu thc con, v trong biu thc th ba c = 3+8 cng l mt biu thc con. 4.2 Ton t quan h (Relational Operators)

Ton t quan h c dng kim tra mi quan h gia hai bin , hay gia mt bin v mt hng. V d, vic xt s ln hn ca hai s, a v b, c thc hin thng qua du ln hn (>) gia hai ton hng a v b (a > b).

Trong C, true (ng) l bt c gi tr no khc khng (0), v false (sai) l bt c gi tr no bng khng (0). Biu thc dng ton t quan h tr v 0 cho false v 1 cho true. V d biu thc sau : a == 14 ; Biu thc ny kim tra xem gi tr ca a c bng 14 hay khng. Gi tr ca biu thc s l 0 (false) nu a c gi tr khc 14 v 1 (true) nu n l 14. Bng sau m t ngha ca cc ton t quan h. Ton t > >= < = 10)) /* s khng ln hn hay bng 10 */

C ton t quan h v lun l c quyn u tin thp hn ton t s hc. V d, 5 > 4 + 3 c tnh tng ng vi 5 > (4 + 3), ngha l 4+3 s c tnh trc v sau ton t quan h s c thc hin. Kt qu s l false, tc l tr v 0. Cu lnh sau: printf("%d", 5> 4 + 3); s cho ra: 0 v 5 b hn (4 + 3) .

4.4

Ton t lun l nh phn (Bitwise Logical Operators) v biu thc

V d xt ton hng c gi tr l 12, ton t lun l nh phn s coi s 12 ny nh 1100. Ton t lun l nh phn xem xt cc ton hng di dng chui bit ch khng l gi tr s thng thng. Gi tr s c th thuc cc c s: thp phn (decimal), bt phn (octal) hay thp lc phn (hexadecimal). Ring ton t lun l nh phn s chuyn i ton hng m n thao tc thnh biu din nh phn tng ng, l dy s 1 hoc l 0. Ton t lun l nh phn gm &, | , ^ , ~ , vv c tng kt qua bng sau:.

Ton t Bitwise AND ( x & y)

M t Mi v tr ca bit tr v kt qu l 1 nu bit ti v tr tng ng ca hai ton hng u l 1.

Ton t v Biu thc

51

Bitwise OR ( x | y) Bitwise NOT ( ~ x) Bitwise XOR ( x ^ y)

Mi v tr ca bit tr v kt qu l 1 nu bit ti v tr tng ng ca mt trong hai ton hng l 1. o ngc gi tr cc bit ca ton hng (1 thnh 0 v ngc li). Mi v tr ca bit tr v kt qu l 1 nu bit ti v tr tng ng ca mt trong hai ton hng l 1 ch khng phi c hai cng l 1. Bng 4.3: Ton t lun l nh phn

Ton t lun l nh phn xem kiu d liu s nh l s nh phn 32-bit, gi tr s c i thnh gi tr bit tnh ton trc ri sau s tr v kt qu dng s ban u. V d: Biu thc 10 & 15 c ngha l (1010 & 1111) tr v gi tr 1010 c ngha l 10. Biu thc 10 | 15 c ngha l (1010 | 1111) tr v gi tr 1111 c ngha l 15. Biu thc 10 ^ 15 c ngha l (1010 ^ 1111) tr v gi tr 0101 c ngha l 5. Biu thc ~10 c ngha l ( ~1010 ) tr v gi tr 1111.1111.1111.1111.1111.1111.1111.0101 c ngha l -11. 4.5 Biu thc dng hn hp & Chuyn i kiu

Mt biu thc dng hn hp l mt biu thc m trong cc ton hng ca mt ton t thuc v nhiu kiu d liu khc nhau. Nhng ton hng ny thng thng c chuyn v cng kiu vi ton hng c kiu d liu ln nht. iu ny c gi l tng cp kiu. S pht trin v kiu d liu theo th t sau :

char < int 6 OR False) K n du ngoc n ngoi c xt n. Xem li cc bng ni v th t u tin ca cc ton t. 4. 5+9*3^2-4 > 10 AND (2+16-2 > 6 OR False) 5. 5+9*3^2-4 > 10 AND (18-2 > 6 OR False) 6. 5+9*3^2-4 > 10 AND (16 > 6 OR False) 7. 5+9*3^2-4 > 10 AND (True OR False) 8. 5+9*3^2-4 > 10 AND True 9. 5+9*9-4>10 AND True Ta tnh biu thc bn tri trc theo cc quy tc 10. 5+81-4>10 AND True 11. 86-4>10 AND True 12. 82>10 AND True

Ton t v Biu thc

57

13. True AND True 14. True.

58

Lp trnh c bn C

Tm tt bi hc C nh ngha bn loi ton t: s hc, quan h (so snh), lun l v lun l nh phn. Tt c ton t trong C c tnh ton theo th t u tin. Ton t quan h c dng kim tra mi quan h gia hai bin hay gia mt bin v mt hng. Ton t lun l l nhng k hiu dng kt hp hay ph nh nhng biu thc cha cc ton t quan h. Ton t lun l nh phn xt cc ton hng nh l bit nh phn ch khng phi l cc gi tr s thp phn. Php gn (=) c xem nh l mt ton t c tnh kt hp t phi sang tri. u tin thit lp s phn cp ca mt tp cc ton t so vi tp cc ton t khc khi c lng mt biu thc.

Ton t v Biu thc

59

Kim tra tin hc tp 1. ______ l nhng cng c thao tc d liu. A. Nhng ton t C. Nhng biu thc B. Nhng ton hng D. Khng cu no ng

2.

Mt _______ bao gm s kt hp ca cc ton t v cc ton hng. A. Biu thc C. Con tr B. Hm D. Khng cu no ng

3. ________ thit lp s phn cp ca mt tp cc ton t so vi tp cc ton t khc khi c lng mt biu thc. A. Nhng ton hng C. Ton t B. u tin D. Khng cu no ng

4. ____________ l mt biu thc c cc ton hng thuc nhiu kiu d liu khc nhau . A. Biu thc n C. Quyn u tin B. Biu thc hn hp D. Khng cu no ng

5. Mt biu thc c p thnh mt kiu nht nh bng cch dng ____. A. p kiu C. Ton t B. Quyn u tin D. Khng cu no ng

6. _________ c dng kt hp hay ph nh biu thc cha cc ton t quan h. A. Nhng ton t lun l C. Nhng ton t phc B. Nhng ton t lun l nh phn D. Khng cu no ng

7. Nhng ton t lun l nh phn l __, ___, __ v __ . A. % , ^ , * and @ C. !,],& and * B. &,|,~ and ^ D. Khng cu no ng

8. u tin ca cc ton t c th c thay i bng cch t cc phn t c yu cu ca biu thc trong _________ . A. Du ngoc xon ({ }) C. Nhng du ngoc n (()) B. K hiu m ( ^) D. Khng cu no ng

60

Lp trnh c bn C

Bi tp t lm 1. Vit mt chng trnh nhp v cng ba s. 2. Vit mt chng trnh tnh gi tr ca biu thc vi cc gi tr sau: z = a*b+(c/d)-e*f ; a = 10 b=7 c = 15.75 d=4 e=2 f = 5.6 3. Vit mt chng trnh tnh din tch v chu vi ca hnh ch nht. 4. Vit mt chng trnh tnh th tch ca mt hnh tr. 5. Vit mt chng trnh tnh lng thc lnh ca mt nhn vin theo cng thc di y Lng c bn : $ 12000 DA : 12% lng c bn HRA : $150 TA : $120 Cc mc khc : $450 Thu : PF :14% lng c bn v IT: 15% lng c bn Lng thc lnh = Lng c bn + DA + HRA + TA + Cc mc khc (PF + IT)

Ton t v Biu thc

61

Bi 5Mc tiu: Kt thc bi hc ny, bn c th: S dng c cc ton t s hc, so snh v lun l Chuyn i cc kiu d liu Nm c th t u tin gia cc ton t.

Ton t v Biu thc

Cc bc trong chng ny c nghin cu k v gii thch chi tit chng ta c th hiu r v p dng chng mt cch hon chnh.Ta hy theo cc bc cn thn. Phn I - Trong thi gian 1 gi 30 pht u: V d 1: Trong chng ny, ta s vit mt chng trnh tnh ton tin li n gin (li thun cha tnh tin vn vo) khi ta vay tin. Cng thc tnh ton l p * n * r /100. y p c ngha l tin vn, n l s nm v r c ngha l t l li sut. Chng trnh khai bo ba bin s thc float c tn l p, n v r. Ch rng, cc bin c khai bo trn cng mt dng m th ta dng du phy (,) phn chia chng vi nhau. Mi bin trn c gn mt gi tr. Xt dng m sau: printf(\nAmount is: %f, p*n*r/100);

Trong printf() trn, chng ta dng %f hin th gi tr ca bin kiu float (s thc), gi tr bin ny l p*n*r/100, cng thc dng tnh li n gin c a vo trong printf(). l p, n v r c nhn vi nhau v kt qu c chia cho 100. Nh vy printf() s hin th li n. Gi Borland C. 5.1 Tnh li n

1. To ra mt tp tin mi. 2. G on m sau trong Edit window: #include #include void main() { float p, n, r; clrscr(); p = 1000; n = 2.5;

Ton t v biu thc

61

r = 10.5; printf(\n Amount is: %f, p*n*r/100); } 3. Lu tp tin vi tn simple.c. 4. Bin dch tp tin simple.c. 5. Thc thi chng trnh simple.c. 6. Tr v trnh son tho. Kt qu: The Amount is: 262.500000

5.2 Dng ton t s hc Trong phn ny ta s vit mt chng trnh c s dng ton t s hc. Chng trnh ny khai bo bn bin s nguyn tn l a, b, c v d. Gi tr s gn cho cc bin a, b v c l: a = 50, b = 24, c = 68 Xt dng m sau: d = a*b+c/2; a nhn vi b. c chia cho 2. Kt qu ca a*b c cng vi thng s ca c/2. Gi tr ny s gn cho d qua ton t (=). Biu thc c tnh nh sau: 1. 2. 3. 4. 50 * 24 = 1200 68 / 2 = 34 1200 + 34 = 1234 d = 1234

printf( ) : hin th gi tr ca bin d. Xt biu thc: d = a*(b+c+(a-c)*b); y du ngoc n trong cng c u tin cao nht. Do vy, (a-c) c tnh trc. Sau , tnh ti cc du ngoc n ngoi. Kt qu ca (a-c) c nhn cho b bi v * c u tin cao hn - v +. Biu thc c tnh nh di y:

1. 2. 3. 4. 5.62

d d d d d

= = = = =

50 * (24 + 68 + (50 - 68) * 24) 50 * (24 + 68 + (-18) * 24) 50 * (24 + 68 + (-432)) 50 * (92 - 432) 50 * (-340)Lp trnh c bn C

6. d = -17000 Cc biu thc khc c tnh ty vo cc ton t c dng. Kt qu c hin th bi lnh printf(). 1.To mi mt tp tin. 2. G on m sau trong Edit window: #include #include void main() { int a,b,c,d; clrscr(); a = 50; b = 24; c = 68; d = a*b+c/2; printf(\n The d = a%b; printf(\n The d = a*b-c; printf(\n The d = a/b+c; printf(\n The

value after a*b+c/2 is: %d, d); value after a mod b is: %d, d); value after a*b-c is: %d, d); value after a/b+c is: %d, d);

d = a+b*c; printf(\n The value after a+b*c is: %d, d); d = (a+b)*c; printf(\n The value after (a+b)*c is: %d, d); d = a*(b+c+(a-c)*b); printf(\n The value after a*(b+c+(a-c)*b) is: %d, d); } 3. Lu tp tin vi tn arith.c. 4. Bin dch tp tin arith.c. 5. Thc thi chng trnh arith.c. 6. Tr v trnh son tho. Kt qu xut:

The The The The The The

value value value value value value

after after after after after after

a*b+c/2 is: 1234 a mod b is: 2 a*b-c is: 1132 a/b+c is: 70 a+b*c is: 1682 (a+b)*c is: 5032

Ton t v biu thc

63

The value after a*(b+c+(a-c)+b) is: -17000

5.3 Dng ton t so snh v lun l Trong phn ny chng ta s vit mt chng trnh s dng ton t so snh v ton t lun l. Ba bin s nguyn tn l a, b v c c khai bo trong chng trnh ny. Cc gi tr gn cho bin nh sau: a = 5, b = 6 & c = 7. Xt nhng dng m sau: 1. a + b >= c; u tin, a+b s c tnh (ton t s hc c u tin cao hn ton t so snh), kt qu l 11. K n gi tr 11 c so snh vi c. Kt qu l 1(true) bi v 11 > 7. 2. Xt biu thc khc: a > 10 && b 10 v b 10 && 6 b); printf("The value of b < c is \t%i\n\n", b < c); printf("The value of a + b >= c is \t%i\n\n", a + b >= c); printf("The value of a - b ptr_b ptr_a = ptr_b ptr_a == ptr_b ptr_a != ptr_b ptr_a == NULL Tr v gi tr true nu a c lu tr v tr trc b Tr v gi tr true nu a c lu tr v tr sau b Tr v gi tr true nu a c lu tr v tr trc b hoc ptr_a v ptr_b tr n cng mt v tr Tr v gi tr true nu a c lu tr v tr sau b hoc ptr_a v ptr_b tr n cng mt v tr Tr v gi tr true nu c hai con tr ptr_a v ptr_b tr n cng mt phn t d liu. Tr v gi tr true nu c hai con tr ptr_a v ptr_b tr n cc phn t d liu khc nhau nhng c cng kiu d liu. Tr v gi tr true nu ptr_a c gn gi tr NULL (0)

Tng t, nu ptr_begin v ptr_end tr n cc phn t ca cng mt mng th, ptr_end - ptr_begin s tr v s bytes cch bit gi hai v tr m chng tr n. 13.4 Con tr v mng mt chiu Tn ca mt mng tht ra l mt con tr tr n phn t u tin ca mng . V vy, nu ary l mt mng mt chiu, th a ch ca phn t u tin trong mng c th c biu din l &ary[0] hoc n gin ch l ary. Tng t, a ch ca phn t mng th hai c th c vit nh &ary[1] hoc ary+1,... Tng qut, a ch ca phn t mng th (i + 1) c th c biu din l &ary[i] hay (ary+i). Nh vy, a ch ca mt phn t mng bt k c th c biu din theo hai cch: S dng k hiu & trc mt phn t mng S dng mt biu thc trong ch s c cng vo tn ca mng.

Con tr

185

Ghi nh rng trong biu thc (ary + i), ary tng trng cho mt a ch, trong khi i biu din s nguyn. Hn th na, ary l tn ca mt mng m cc phn t c th l c c kiu s nguyn, k t, s thp phn, (d nhin, tt c cc phn t ca mng phi c cng kiu d liu). V vy, biu thc trn khng ch l mt php cng; n tht ra l xc nh mt a ch, mt s xc nh ca cc nh . Biu thc (ary + i) l mt s trnh by cho mt a ch ch khng phi l mt biu thc ton hc. Nh ni trc, s lng nh c kt hp vi mt mng s ty thuc vo kiu d liu ca mng cng nh l kin trc ca my tnh. Tuy nhin, ngi lp trnh ch c th xc nh a ch ca phn t mng u tin, l tn ca mng (trong trng hp ny l ary) v s cc phn t tip sau phn t u tin, l, mt gi tr ch s. Gi tr ca i i khi c xem nh l mt di khi c dng theo cch ny. Cc biu thc &ary[i] v (ary+i) biu din a ch phn t th i ca ary, v nh vy mt cch logic l c ary[i] v *(ary + i) u biu din ni dung ca a ch , ngha l, gi tr ca phn t th i trong mng ary. C hai cch c th thay th cho nhau v c s dng trong bt k ng dng no khi ngi lp trnh mong mun. Chng trnh sau y biu din mi quan h gia cc phn t mng v a ch ca chng. #include void main() { static int ary[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i; for (i = 0; i < 10; i ++) { printf(\n i = %d , ary[i] = %d , *(ary+i)= %d , i, ary[i], *(ary + i)); printf(&ary[i] = %X , ary + i = %X, &ary[i], ary + i); /* %X gives unsigned hexadecimal */ } } Chng trnh trn nh ngha mng mt chiu ary, c 10 phn t kiu s nguyn, cc phn t mng c gn gi tr tng ng l 1, 2, ..10. Vng lp for c dng hin th gi tr v a ch tng ng ca mi phn t mng. Ch rng, gi tr ca mi phn t c xc nh theo hai cch khc nhau, ary[i] v *(ary + i), nhm minh ha s tng ng ca chng. Tng t, a ch ca mi phn t mng cng c hin th theo hai cch. Kt qu thc thi ca chng trnh trn nh sau: i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 ary[i]=1 ary[i]=2 ary[i]=3 ary[i]=4 ary[i]=5 ary[i]=6 ary[i]=7 ary[i]=8 ary[i]=9 ary[i]=10 *(ary+i)=1 *(ary+i)=2 *(ary+i)=3 *(ary+i)=4 *(ary+i)=5 *(ary+i)=6 *(ary+i)=7 *(ary+i)=8 *(ary+i)=9 *(ary+i)=10 &ary[i]=194 &ary[i]=196 &ary[i]=198 &ary[i]=19A &ary[i]=19C &ary[i]=19E &ary[i]=1A0 &ary[i]=1A2 &ary[i]=1A4 &ary[i]=1A6 ary+i ary+i ary+i ary+i ary+i ary+i ary+i ary+i ary+i ary+i = = = = = = = = = = 194 196 198 19A 19C 19E 1A0 1A2 1A4 1A6

Kt qu ny trnh by r rng s khc nhau gia ary[i] - biu din gi tr ca phn t th i trong mng, v &ary[i] - biu din a ch ca n.

186

Lp trnh c bn C

Khi gn mt gi tr cho mt phn t mng nh ary[i], v tri ca lnh gn c th c vit l ary[i] hoc *(ary + i). V vy, mt gi tr c th c gn trc tip n mt phn t mng hoc n c th c gn n vng nh m a ch ca n l phn t mng. i khi cn thit phi gn mt a ch n mt nh danh. Trong nhng trng hp nh vy, mt con tr phi xut hin trong v tri ca cu lnh gn. Khng th gn mt a ch ty cho mt tn mng hoc mt phn t ca mng. V vy, cc biu thc nh ary, (ary + i) v &ary[i] khng th xut hin trong v tri ca mt cu lnh gn. Hn th na, a ch ca mt mng khng th thay i mt cch ty , v th cc biu thc nh ary++ l khng c php. L do l v: ary l a ch ca mng ary. Khi mng c khai bo, b lin kt quyt nh mng c bt u u, v d, bt u a ch 1002. Mt khi a ch ny c a ra, mng s . Vic c gng tng a ch ny ln l iu v ngha, ging nh khi ni x = 5++; Bi v hng khng th c tng tr, trnh bin dch s a ra thng bo li. Trong trng hp mng ary, ary cng c xem nh l mt hng con tr. Nh rng, (ary + 1) khng di chuyn mng ary n v tr (ary + 1), n ch tr n v tr , trong khi ary++ c gng di ary sang 1 v tr. a ch ca mt phn t khng th c gn cho mt phn t mng khc, mc d gi tr ca mt phn t mng c th c gn cho mt phn t khc thng qua con tr. &ary[2] ary[2] = &ary[3]; = ary[3]; /* khng cho php*/ /* cho php*/

Nh li rng trong hm scanf(), tn cc tham bin kiu d liu c bn phi t sau du (&), trong khi tn tham bin mng l ngoi l. iu ny cng d hiu. V scanf() i hi a ch b nh ca tng bin d liu trong danh sch tham s, trong khi ton t & tr v a ch b nh ca bin, do trc tn bin phi c du &. Tuy nhin du & khng c yu cu i vi tn mng, bi v tn mng t biu din a ch ca n.Tuy nhin, nu mt phn t trong mng c c, du & cn phi s dng. scanf(%d, *ary) /* scanf(%d, &ary[2]) /* 13.4.1 Con tr v mng nhiu chiu Mt mng nhiu chiu cng c th c biu din di dng con tr ca mng mt chiu (tn ca mng) v mt di (ch s). Thc hin c iu ny l bi v mt mng nhiu chiu l mt tp hp ca cc mng mt chiu.V d, mt mng hai chiu c th c nh ngha nh l mt con tr n mt nhm cc mng mt chiu k tip nhau. C php bo mng hai chiu c th vit nh sau: data_type (*ptr_var)[expr 2]; thay v data_type array[expr 1][expr 2]; Khi nim ny c th c tng qut ha cho cc mng nhiu chiu, l, data_type (*ptr_var)[exp 2] .... [exp N]; thay v data_type array[exp 1][exp 2] ... [exp N]; i vi phn t u tin */ i vi phn t bt k */

Con tr

187

Trong cc khai bo trn, data_type l kiu d liu ca mng, ptr_var l tn ca bin con tr, array l tn mng, v exp 1, exp 2, exp 3, ... exp N l cc gi tr nguyn dng xc nh s lng ti a cc phn t mng c kt hp vi mi ch s. Ch du ngoc () bao quanh tn mng v du * pha trc tn mng trong cch khai bo theo dng con tr. Cp du ngoc () l khng th thiu, ngc li c php khai bo s khai bo mt mng ca cc con tr ch khng phi mt con tr ca mt nhm cc mng. V d, nu ary l mt mng hai chiu c 10 dng v 20 ct, n c th c khai bo nh sau: int (*ary)[20]; thay v int ary[10][20]; Trong s khai bo th nht, ary c nh ngha l mt con tr tr ti mt nhm cc mng mt chiu lin tip nhau, mi mng c 20 phn t kiu s nguyn. V vy, ary tr n phn t u tin ca mng, l dng u tin (dng 0) ca mng hai chiu. Tng t, (ary + 1) tr n dng th hai ca mng hai chiu, ... Mt mng thp phn ba chiu fl_ary c th c khai bo nh: float (*fl_ary)[20][30]; thay v float fl_ary[10][20][30]; Trong khai bo u, fl_ary c nh ngha nh l mt nhm cc mng thp phn hai chiu c kch thc 20 x 30 lin tip nhau. V vy, fl_ary tr n mng 20 x 30 u tin, (fl_ary + 1) tr n mng 20 x 30 th hai,... Trong mng hai chiu ary, phn t ti dng 4 v ct 9 c th c truy xut s dng cu lnh: ary[3][8]; hoc *(*(ary + 3) + 8); Cch th nht l cch thng c dng. Trong cch th hai, (ary + 3) l mt con tr tr n dng th 4. V vy, i tng ca con tr ny, *(ary + 3), tham chiu n ton b dng. V dng 3 l mt mng mt chiu, *(ary + 3) l mt con tr tr n phn t u tin trong dng 3, sau 8 c cng vo con tr. V vy, *(*(ary + 3) + 8) l mt con tr tr n phn t 8 (phn t th 9) trong dng th 4. V vy i tng ca con tr ny, *(*(ary + 3) + 8), tham chiu n tham chiu n phn t trong ct th 9 ca dng th 4, l ary [3][8]. C nhiu cch thc nh ngha mng, v c nhiu cch x l cc phn t mng. La chn cch thc no ty thuc vo ngi dng. Tuy nhin, trong cc ng dng c cc mng dng s, nh ngha mng theo cch thng thng s d dng hn. Con tr v chui Chui n gin ch l mt mng mt chiu c kiu k t. Mng v con tr c mi lin h mt thit, v nh vy, mt cch t nhin chui cng s c mi lin h mt thit vi con tr. Xem trng hp hm

188

Lp trnh c bn C

strchr(). Hm ny nhn cc tham s l mt chui v mt k t tm kim k t trong mng, ngha l, ptr_str = strchr(strl, a); bin con tr ptr_str s c gn a ch ca k t a u tin xut hin trong chui str. y khng phi l v tr trong chui, t 0 n cui chui, m l a ch, t a ch bt u chui n a ch kt thc ca chui. Chng trnh sau s dng hm strchr(), y l chng trnh cho php ngi dng nhp vo mt chui v mt k t tm kim. Chng trnh in ra a ch bt u ca chui, a ch ca k t, v v tr tng i ca k t trong chui (0 l v tr ca k t u tin, 1 l v tr ca k t th hai,...). V tr tng i ny l hiu s gia hai a ch, a ch bt u ca chui v a ch ni m k t cn tm u tin xut hin. #include #include void main () { char a, str[81], *ptr; printf(\nEnter a sentence:); gets(str); printf(\nEnter character to search for:); a = getche(); ptr = strchr(str, a); /* return pointer to char*/ printf(\nString starts at address: %u, str); printf(\nFirst occurrence of the character is at address: %u, ptr); printf(\nPosition of first occurrence (starting from 0)is: %d, ptr-str); } Kt qu ca v d trn c hin th ra nh sau:Mt v d v kt qu thc hin chng trnh nh sau: Enter a sentence: We all live in a yellow submarine Enter character to search for: Y String starts at address: 65420. First occurrence of the character is at address: 65437. Position of first occurrence (starting from 0) is: 17 Trong cu lnh khai bo, bin con tr ptr c thit t cha a ch tr v t hm strchr(), v vy y l mt a ch ca mt k t (ptr c kiu char). Hm strchr() khng cn thit phi khai bo nu th vin string.h c khai bo. 13.5 Cp pht b nh Cho n thi im ny th chng ta bit l tn ca mt mng tht ra l mt con tr tr ti phn t u tin ca mng. Hn na, ngoi cch nh ngha mt mng thng thng c th nh ngha mt mng nh l mt bin con tr. Tuy nhin, nu mt mng c khai bo mt cch bnh thng, kt qu l mt khi b nh c nh c dnh sn ti thi im bt u thc thi chng trnh, trong khi iu ny khng xy ra nu mng c khai bo nh l mt bin con tr. S dng mt bin con tr biu

Con tr

189

din mt mng i hi vic gn mt vi nh khi to trc khi cc phn t mng c x l. S cp pht b nh nh vy thng thng c thc hin bng cch s dng hm th vin malloc(). Xem v d sau. Mt mng s nguyn mt chiu ary c 20 phn t c th c khai bo nh sau: int *ary; thay v int ary[20]; Tuy nhin, ary s khng c t ng gn mt khi b nh khi n c khai bo nh l mt bin con tr, trong khi mt khi nh cha 10 s nguyn s c dnh sn nu ary c khai bo nh l mt mng. Nu ary c khai bo nh l mt con tr, s lng b nh c th c gn nh sau: ary = malloc(20 *sizeof(int)); S dnh mt khi b nh c kch thc (tnh theo bytes) tng ng vi kch thc ca mt s nguyn. y, mt khi b nh cho 20 s nguyn c cp pht. 20 con s gn vi 20 bytes (mt byte cho mt s nguyn) v c nhn vi sizeof(int), sizeof(int) s tr v kt qu 2, nu my tnh dng 2 bytes lu tr mt s nguyn. Nu mt my tnh s dng 1 byte lu mt s nguyn, hm sizeof() khng i hi y. Tuy nhin, s dng n s to kh nng uyn chuyn cho m lnh. Hm malloc() tr v mt con tr cha a ch v tr bt u ca vng nh c cp pht. Nu khng gian b nh yu cu khng c, malloc() tr v gi tr NULL. S cp pht b nh theo cch ny, ngha l, khi c yu cu trong mt chng trnh c gi l Cp pht b nh ng. Trc khi tip tc xa hn, chng ta hy tho lun v khi nim Cp pht b nh ng. Mt chng trnh C c th lu tr cc thng tin trong b nh ca my tnh theo hai cch chnh. Phng php th nht bao gm cc bin ton cc v cc b bao gm cc mng. Trong trng hp cc bin ton cc v bin tnh, s lu tr l c nh sut thi gian thc thi chng trnh. Cc bin ny i hi ngi lp trnh phi bit trc tng s dung lng b nh cn thit cho mi trng hp. Phng php th hai, thng tin c th c lu tr thng qua H thng cp pht ng ca C. Trong phng php ny, s lu tr thng tin c cp pht t vng nh cn t do v khi cn thit. Hm malloc() l mt trong cc hm thng c dng nht, n cho php thc hin vic cp pht b nh t vng nh cn t do. Tham s cho malloc() l mt s nguyn xc nh s bytes cn thit. Mt v d khc, xt mng k t hai chiu ch_ary c 10 dng v 20 ct. S khai bo v cp pht b nh trong trng hp ny phi nh sau: char (*ch_ary)[20]; ch_ary = (char*)malloc(10*20*sizeof(char)); Nh ni trn, malloc() tr v mt con tr tr n kiu rng (void). Tuy nhin, v ch_ary l mt con tr kiu char, s chuyn i kiu l cn thit. Trong cu lnh trn, (char*) i kiu tr v ca malloc() thnh mt con tr tr n kiu char. Tuy nhin, nu s khai bo ca mng phi cha php gn cc gi tr khi to th mng phi c khai bo theo cch bnh thng, khng th dng mt bin con tr: int ary[10] = {1,2,3,4,5,6,7,8,9,10}; hoc int ary[] = {1,2,3,4,5,6,7,8,9,10};

190

Lp trnh c bn C

V d sau y to mt mng mt chiu v sp xp mng theo th t tng dn. Chng trnh s dng con tr v hm malloc() gn b nh.

#include #include void main() { int *p, n, i, j, temp; printf("\n Enter number of elements in the array: "); scanf("%d", &n); p = (int*) malloc(n * sizeof(int)); for(i = 0; i < n; ++i) { printf("\nEnter element no. %d:", i + 1); scanf("%d", p + i); } for(i = 0; i < n - 1; ++i) for(j = i + 1; j < n; ++j) if(*(p + i) > *(p + j)) { temp = *(p + i); *(p + i) = *(p + j); *(p + j) = temp; } for(i = 0; i < n; ++i) printf("%d\n", *(p + i)); } Ch lnh malloc(): p = (int*)malloc(n*sizeof(int)); y, p c khai bo nh mt con tr tr n mt mng v c gn b nh s dng malloc(). D liu c c vo s dng lnh scanf(). scanf("%d",p+i); Trong scanf(), bin con tr c s dng lu d liu vo trong mng. Cc phn t mng lu tr c hin th bng printf(). printf("%d\n", *(p + i)); Ch du * trong trng hp ny, v gi tr lu trong v tr phi c hin th. Khng c du *, printf() s hin th a ch. free()

Con tr

191

Hm ny c th c s dng gii phng b nh khi n khng cn cn thit. Dng tng qut ca hm free(): void free( void *ptr ); Hm free() gii phng khng gian c tr bi ptr, khng gian c gii phng ny c th s dng trong tng lai. ptr s dng trc bng cch gi n malloc(), calloc(), hoc realloc(), calloc() v realloc() (s c tho lun sau). V d bn di s hi bn c bao nhiu s nguyn s c bn lu vo trong mt mng. Sau s cp pht b nh ng bng cch s dng malloc v lu s lng s nguyn, in chng ra, v sau xa b nh cp pht bng cch s dng free. #include #include /* required for the malloc and free functions */ int main() { int number; int *ptr; int i; printf("How many ints would you like store? "); scanf("%d", &number); ptr = (int *) malloc (number * sizeof(int)); /*allocate memory*/ if(ptr != NULL) { for(i = 0 ; i < number ; i++) { *(ptr+i) = i; } for(i=number ; i>0 ; i--) { printf("%d\n", *(ptr+(i-1))); /*print out in reverse order*/ } free(ptr); /* free allocated memory */ return 0; } else { printf("\nMemory allocation failed - not enough memory.\n"); return 1; } } Kt qu nh sau nu gi tr c nhp vo 3: How many ints would you like store? 3 2 1 0 calloc()

192

Lp trnh c bn C

calloc tng t nh malloc, nhng khc bit chnh l mc nhin cc gi tr c lu trong khng gian b nh cp pht l 0. Vi malloc, cp pht b nh c th c gi tr bt k. calloc i hi hai i s. i s th nht l s cc bin m bn mun cp pht b nh cho. i s th hai l kch thc ca mi bin. void *calloc( size_t num, size_t size ); Ging nh malloc, calloc s tr v mt con tr rng (void) nu s cp pht b nh l thnh cng, ngc li n s tr v mt con tr NULL. V d bn di ch ra cho bn gi hm calloc nh th no v tham chiu n nh cp pht s dng mt ch s mng. Gi tr khi to ca vng nh cp pht c in ra trong vng lp for. #include #include int main() { float *calloc1, *calloc2; int i; calloc1 = (float *) calloc(3, sizeof(float)); calloc2 = (float *) calloc(3, sizeof(float)); if(calloc1 != NULL && calloc2 != NULL) { for(i = 0; i < 3; i++) { printf("\ncalloc1[%d] holds %05.5f ", i, calloc1[i]); printf("\ncalloc2[%d] holds %05.5f", i, *(calloc2 + i)); } free(calloc1); free(calloc2); return 0; } else { printf("Not enough memory\n"); return 1; } } Kt qu: calloc1[0] calloc2[0] calloc1[1] calloc2[1] calloc1[2] calloc2[2] holds holds holds holds holds holds 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

Trong tt c cc my, cc mng calloc1 v calloc2 phi cha cc gi tr 0. calloc c bit hu dng khi bn ang s dng mng a chiu. y l mt v d khc minh ha cch dng ca hm calloc().

Con tr

193

/* This program gets the number of elements, allocates spaces for the elements, gets a value for each element, sum the values of the elements, and print the number of the elements and the sum. */ #include #include main() { int *a, i, n, sum = 0; printf(\n%s%s, An array will be created dynamically. \n\n, Input an array size n followed by integers: ); scanf( %d, &n); /* get the number of elements */ a = (int *) calloc (n, sizeof(int)); /* get a value for each element */ for( i = 0; i < n; i++ ) { printf(Enter %d values: , n); scanf(%d, a + i); } /* sum the values */ for(i = 0; i < n; i++ ) sum += a[i]; free(a); /* free the space */ /* allocate space */

/* print the number and the sum */ printf(\n%s%7d\n%s%7d\n\n, Number of elements: , n, Sum of the elements: , sum); }

realloc()Gi s chng ta cp pht mt s bytes cho mt mng nhng sau nhn ra l bn mun thm cc gi tr. Bn c th sao chp mi th vo mt mng ln hn, cch ny khng hiu qu. Hoc bn c th cp pht thm cc bytes s dng bng cch gi hm realloc, m d liu ca bn khng b mt i. realloc() nhn hai i s. i s th nht l mt con tr tham chiu n b nh. i s th hai l tng s bytes bn mun cp pht thm. void *realloc( void *ptr, size_t size ); Truyn 0 nh l i s th hai th tng ng vi vic gi hm free. Mt ln, realloc tr v mt con tr rng (void) nu thnh cng, ngc li mt con tr NULL c tr v. V d ny s dng calloc cp pht b nh cho mt mng int c nm phn t. Sau realloc c gi m rng mng c th cha by phn t.

194

Lp trnh c bn C

#include #include int main() { int *ptr; int i; ptr = (int *)calloc(5, sizeof(int *)); if(ptr!=NULL) { *ptr = 1; *(ptr + 1) = 2; ptr[2] = 4; ptr[3] = 8; ptr[4] = 16; /* ptr[5] = 32; wouldn't assign anything */ ptr = (int *)realloc(ptr, 7 * sizeof(int)); if(ptr!=NULL) { printf("Now allocating more memory... \n"); ptr[5] = 32; /* now it's legal! */ ptr[6] = 64; for(i = 0;i < 7; i++) { printf("ptr[%d] holds %d\n", i, ptr[i]); } realloc(ptr, 0); /* same as free(ptr); - just fancier! */ return 0; } else { printf("Not enough memory - realloc failed.\n"); return 1; } } else { printf("Not enough memory - calloc failed.\n"); return 1; } } Kt qu: Now allocating more memory... ptr[0] holds 1 ptr[1] holds 2 ptr[2] holds 4 ptr[3] holds 8

Con tr

195

ptr[4] holds 16 ptr[5] holds 32 ptr[6] holds 64 Ch hai cch khc nhau c s dng khi khi to mng: ptr[2] = 4 l tng ng vi *(ptr + 2) = 4 (ch d c hn!). Trc khi s dng realloc, vic gn mt gi tr n phn t ptr[5] khng gy ra li cho trnh bin dch. Chng trnh vn thc thi, nhng ptr[5] khng cha gi tr m bn gn.

196

Lp trnh c bn C

Tm tt bi hc Mt con tr cung cp mt phng thc truy xut mt bin m khng cn tham chiu trc tip n bin. Mt con tr l mt bin, cha a ch vng nh ca mt bin khc. S khai bo con tr bao gm mt kiu d liu c s, mt du *, v mt tn bin. C hai ton t c bit c dng vi con tr: * v &. Ton t & tr v a ch b nh ca ton hng.

Ton t th hai, *, l phn b xung ca ton t &. N tr v gi tr c cha trong v tr b nh c tr bi con tr. Ch c php cng v php tr l c th c thc thi vi con tr.

Hai con tr c th c so snh trong mt biu thc quan h ch khi c hai bin ny cng tr n cc bin c cng kiu d liu. Cc con tr c truyn ti hm nh cc i s. Mt tn mng tht ra l mt con tr tr n phn t u tin ca mng. Mt hng con tr l mt a ch; mt bin con tr l mt ni lu a ch.

B nh c th c cp pht khi cn dng bng cch dng cc hm malloc(),calloc(),realloc(). S cp pht b nh theo cch ny c gi l s cp pht b nh ng.

Con tr

197

Kim tra tin hc tp 1. Mt _________ cung cp mt phng thc truy xut mt bin m khng tham chiu trc tip n bin. A. Mng C. Cu trc B. Con tr D. Tt c u sai

2. Cc con tr khng th tr n cc mng. 3. __________ ca con tr xc nh kiu ca cc bin m con tr c th tr n. A. Kiu C. Ni dung B. Kch thc D. Tt c u sai

(ng/Sai)

4. C hai ton t c bit c dng vi con tr l ____ v _____. A. ^ v % C. * v & B. ; v ? D. Tt c u sai

5. Ch c ________ v __________ l nhng php ton c th c thc hin trn cc con tr. A. Cng, Tr C. Chia, Cng B.Nhn, Chia D. Tt c u sai

6. Hai con tr c th c so snh ch khi c hai bin ny ang tr n cc kiu d liu khc nhau. 7. S cp pht b nh theo cch ny, ngha l, khi trong chng trnh c yu cu c gi l __________ . A. Cp pht b nh ng C. Cp pht b nh ni dung B. Cp pht b nh tnh D. Tt c u sai

198

Lp trnh c bn C

Bi tp t lm 1. Vit mt chng trnh nhn vo mt chui v in ra n nu l chui c xui ngc u ging nhau. 2. Vit mt chng trnh s dng con tr tr n cc chui nhn tn ca mt con th v mt con chim v tr v cc tn theo dng s nhiu.

Con tr

199

Bi 14Mc tiu: Kt thc bi hc ny, bn c th: S dng con tr S dng con tr vi mng.

Con tr

Cc bc trong bi hc ny c trnh by chi tit, r rng v cn thn. iu ny gip ta hiu r v cng c lp trnh. Thc hin theo cc bc sau tht cn thn. Phn I Trong thi gian 1 gi 30 pht u: 14.1 Con tr Cc bin con tr trong C cha a ch ca mt bin c bt k kiu no. Ngha l, cc con tr c th l kiu d liu s nguyn hoc k t. Mt bin con tr s nguyn s cha a ch ca mt bin s nguyn. Mt con tr k t s cha a ch ca mt bin kiu k t. 14.1.1 m s nguyn m trong mt chui s dng con tr Cc con tr c th c s dng thay cho cc ch s duyt cc phn t trong mt mng. V d, mt con tr kiu chui c th c dng tr n a ch bt u ca mt t. V vy mt con tr c s dng c cc k t trong t . minh ha iu ny, chng ta vit mt chng trnh C m s nguyn m trong mt t bng cch s dng con tr. Cc bc c lit k nh sau: 1. Khai bo mt bin con tr kiu k t. M lnh nh sau, char *ptr; 2. Khai bo mt mng k t v nhp vo cng gi tr. M lnh nh sau, char word[10]; printf(\n Enter a word : ); scanf(%s, word); 3. Gn con tr k t ti chui. M lnh nh sau, ptr = &word[0]; a ch ca k t u tin ca mng k t, word, s c lu trong bin con tr, ptr. Ni cch khc, con tr ptr s tr ti k t u tin trong mng k t word. 4. Ln lt duyt cc k t trong t xc nh l nguyn m hay khng. Trong trng hp mt nguyn m c tm thy, tng gi tr bin m nguyn m. on m lnh nh sau, int i, vowcnt; for(i = 0; i < strlen(word); i++) {

Con tr

201

if((*ptr==a) || (*ptr==e) || (*ptr==i) || (*ptr ==o) || (*ptr==u) || (*ptr==A) || (*ptr==E) || (*ptr ==I) || (*ptr==O) || (*ptr==U)) vowcnt++; ptr++; } 5. Hin th t v s lng nguyn m trong t. on m lnh s nh sau, printf(\n The word is : %s \n The number of the word is: %d , word,vowcnt); Di y l chng trnh hon chnh. 1. Gi trnh son tho chng trnh C. 2. To tp tin mi. 3. a vo on m lnh sau: void main() { char *ptr; char word[10]; int i, vowcnt=0; printf(\n Enter a word: ); scanf(%s, word); ptr = &word[0]; for(i = 0; i < strlen(word); i++) { if((*ptr==a) || (*ptr==e) || (*ptr==i) || (*ptr==o) || (*ptr==u) || (*ptr==A) || (*ptr==E) || (*ptr==I) || (*ptr==O) || (*ptr==U)) vowcnt++; ptr++; } printf(\n The word is: %s \n The number of vowels in the word is: %d , word, vowcnt); } vowels in

Xem kt qu, theo nhng bc sau:

4. Lu tp tin vi tn pointerI.C. 5. Bin dch tp tin, pointerI.C. 6. Chy chng trnh, pointerI.C. 7. Tr v trnh son tho. Kt qu ca chng trnh trn c th hin nh trong hnh 14.1.

202

Lp trnh c bn C

Hnh 14.1 : Kt qu ca chng trnh pointerI.C 14.1.2 Sp xp mt mng theo th t abc s dng con tr Cc con tr c th c s dng hon v ni dung ca hai nh. minh ha iu ny, chng ta vit mt chng trnh C sp xp mt tp cc chui theo th t abc. C nhiu cch gii quyt chng trnh ny. Chng ta hy dng mt mng ca con tr k t hiu cch dng mng ca con tr. thc hin chng trnh ny, 1. khai bo mng con tr k t cha 5 chui. M lnh nh sau, char *ptr[5]; Mng c m t trong hnh 14.2. ptr[0] ptr[1] ptr[2] Ptr[3] ptr[4]

Hnh 14.2: Mng con tr k t 2. Nhp 5 chui v gn cc con tr trong mng con tr n cc chui. on m lnh nh sau, int i; char cpyptr1[5][10]; for (i=0;i 0) { temp = ptr[i]; ptr[i] = ptr[j]; ptr[j] = temp; } } } 5. Hin th cc chui ban u v cc chui c sp xp. on m lnh l, print(\nThe Original list is ); for(i = 0; i < 5; i++) printf(\n%s, cpyptr2[i]); printf(\nThe Sorted list is ); for(i = 0; i < 5; i++) printf(\n%s, ptr[i]); Di y l chng trnh hon thin. 1. To tp tin mi. 2. a vo on m lnh sau:

204

Lp trnh c bn C

void main() { char *ptr[5]; int i; int j; char cpyptr1[5][10],cpyptr2[5][10]; char *temp; for(i = 0; i < 5; i++) { printf(\nEnter a string: ); scanf(%s, cpyptr1[i]); ptr[i] = cpyptr1[i]; } for(i = 0; i < 5; i++) strcpy(cpyptr2[i], cpyptr1[i]); for(i = 0; i < 4; i++) { for(j = i + 1; j < 5; j++) { if (strcmp(ptr[i], ptr[j]) > 0) { temp = ptr[i]; ptr[i] = ptr[j]; ptr[j] = temp; } } printf(\n The Original list is ); for(i = 0; i < 5; i++) printf(\n%s, cpyptr2[i]); printf(\n The Sorted list is ); for(i = 0; i < 5; i++) printf(\n%s, ptr[i]); } } xem kt qu, thc hin theo cc bc sau: 3. Lu tp tin vi tn pointII.C 4. Bin dch tp tin, pointII.C 5. Chy chng trnh, pointII.C 6. Tr v trnh son tho.

Kt qu ca v d trn c hin th ra nh trong hnh 14.5.

Con tr

205

Figure 14.5: Kt qu ca chng trnh pointII.C

206

Lp trnh c bn C

Phn II Trong thi gian 30 pht k tip: 1. Vit mt chng trnh C ni hai chui bng cch s dng cc con tr. thc hin iu ny, a. Khai bo ba bin chui. b. Khai bo ba con tr kiu k t. c. Nhp cc gi tr ca hai chui. d. To ba con tr tr n ba bin chui. Chui th ba hin ti khng c bt k gi tr g. e. Lp qua chui th nht v sao chp ni dung ca chui vo chui th ba. S dng cc bin con tr sao chp cc gi tr. f. Sau khi sao chp chui th nht, lp qua chui th hai v chp ni dung ca chui vo cui chui ba. S dng cc bin con tr sao chp gi tr. g. In ra chui th ba.

Con tr

207

Bi tp t lm 1. Vit mt chng trnh C o mt mng k t bng cch s dng con tr. 2. Vit mt chng trnh cng hai ma trn s dng cc con tr.

208

Lp trnh c bn C

Bi 15Mc tiu: Kt thc bi hc ny, bn c th: Tm hiu v cch s dng cc hm Tm hiu v cu trc ca mt hm Khai bo hm v cc nguyn mu hm Tho lun cc kiu khc nhau ca bin Tm hiu cch gi cc hm: Gi bng gi tr Gi bng tham chiu

Hm

Tm hiu v cc qui tc v phm vi ca hm Tm hiu cc hm trong