Sie sind auf Seite 1von 96

B GIAO THNG VN TI TRNG I HC HNG HI B MN: KHOA HOC MAY TI NH KHOA: CNG NGH THNG TIN

BI GING
K THUT LP TRNH C

TN HC PHN : K THUT LP TRNH C M HC PHN : 17206 TRNH O TO : I HC CHNH QUY DNG CHO SV NGNH : CNG NGH THNG TIN

HI PHNG - 2008

MC LC
MC LC .................................................................................................................................. 2 CHNG 1. GII THIU ........................................................................................................ 6 1.1. Gii thiu ngn ng lp trnh C. ...................................................................................... 6 1.2. Thut ton v s khi ................................................................................................. 8 CHNG 2. CC KHI NIM C BN V NGN NG LP TRNH C ......................... 9 2.1. Cc phn t c bn ca ngn ng lp trnh C. ............................................................... 9 2.2. Cu trc chung ca chng trnh C ............................................................................... 10 2.3. Cc bc c bn khi lp chng trnh ........................................................................... 11 2.4. Cc kiu d liu c s ................................................................................................... 12 2.5. Cc khai bo trong chng trnh C................................................................................ 17 2.6. Biu thc........................................................................................................................ 21 2.7. Cc hm ton hc .......................................................................................................... 22 CHNG 3. CC CU LNH C BN .............................................................................. 23 3.1. Lnh gn gi tr, lnh gp .............................................................................................. 23 3.2. Hm vit d liu ra mn hnh ........................................................................................ 25 3.3. Hm nhp d liu vo t bn phm ............................................................................... 27 3.4. Cu lnh iu kin ......................................................................................................... 31 3.5. Cu lnh la chn-lnh switch ...................................................................................... 34 3.6. Cu lnh lp for ............................................................................................................. 36 3.7. Cu lnh while ............................................................................................................... 37 3.8. Cu lnh do while ..................................................................................................... 37 3.9. Cu lnh break ............................................................................................................... 38 3.10. Lnh continue .............................................................................................................. 38 3.11. Ton t goto v nhn ( label )...................................................................................... 38 CHNG 4. HM CHNG TRNH V CU TRC CHNG TRNH. ...................... 39 4.1. Khi nim v chng trnh con ..................................................................................... 39 4.2. Hm trong C .................................................................................................................. 39 4.3. Chuyn tham s cho hm............................................................................................... 41 4.4. Bin ton cc v bin a phng ................................................................................. 41 4.5.Tnh quy ca hm ...................................................................................................... 42 4.6. B tin x l C............................................................................................................... 46 CHNG 5. MNG V CC KIU D LIU C CU TRC ........................................ 50 5.1.D liu kiu mng/con tr .............................................................................................. 50 5.3. D liu kiu cu trc ..................................................................................................... 61 CHNG 6. D LIU KIU TP ......................................................................................... 67 6.1. Khi nim v tp tin ...................................................................................................... 67 6.2. Cu trc v phn loi tp ............................................................................................... 67 2

6.3. To tp mi c/ghi d liu ...................................................................................... 68 6.4. Mt s hm x l tp ca C ........................................................................................... 70 6.5. Bi tp p dng .............................................................................................................. 77 CHNG 7. HO ............................................................................................................ 78 7.1. Gii thiu chung ............................................................................................................ 78 7.2. Cc hm t mu, v im, t mu................................................................................ 80 7.3. Cc hm v hnh c bn................................................................................................. 88 TI LIU THAM KHO ........................................................................................................ 96

11.6. Tn hc phn: K thut lp trnh (C) B mn ph trch ging dy: Khoa hc My tnh M hc phn: 17206

Loi hc phn: 2 Khoa ph trch: CNTT Tng s TC: 4

TS tit L thuyt Thc hnh/Xemina T hc Bi tp ln n mn hc 75 45 30 0 0 0 iu kin tin quyt: Sinh vin phi hc xong cc hc phn sau mi c ng k hc phn ny: Tin i cng, Ton ri rc, i s, Gii tch 1. Mc tiu ca hc phn: Cung cp cho sinh vin kin thc v rn luyn k nng lp trnh da trn ngn ng lp trnh C Ni dung ch yu - Nhng vn c bn v ngn ng lp trnh C. - Cch thc xy dng mt chng trnh da trn ngn ng lp trnh C. - Cc vn v con tr, file v ha trong C Ni dung chi tit ca hc phn: TN CHNG MC Chng 1: Gii thiu 1.1. Gii thiu ngn ng lp trnh C. 1.1.1. Xut x ca ngn ng lp trnh C. 1.1.2. Trnh bin dch C v cch s dng. 1.2. Thut ton v s khi Chng 2. Cc khi nim c bn v ngn ng C 2.1. Cc phn t c bn ca ngn ng lp trnh C. 2.2. Cu trc chung ca chng trnh C 2.3. Cc bc c bn khi lp chng trnh 2.4. Cc kiu d liu c s 2.5. Cc khai bo trong chng trnh C 2.6. Biu thc 2.7. Cc hm ton hc Chng 3. Cc cu lnh iu khin ca C 3.1. Lnh gn gi tr, lnh gp 3.2. Hm vit d liu ra mn hnh 3.3. Hm nhp d liu vo t bn phm 3.4. Cu lnh iu kin 3.5. Cu lnh la chn 3.6. Cu lnh lp for 3.7. Cu lnh lp while 3.8. Cu lnh dowhile. 3.9. Cu lnh break. 3.10. Lnh continue 3.11. Ton t goto v nhn (label) Chng 4. Hm 4.1. Khi nim v chng trnh con 4.2. Hm trong C PHN PHI S TIT LT TH/Xemina BT 2 0

TS 2

KT

13

14

TN CHNG MC 4.3. Chuyn tham s cho hm 4.4. Bin ton cc v bin a phng 4.5. Tnh quy ca hm 4.6. i dng lnh ca hm 4.7. Mt s hm c bit Chng 5. Mng v kiu d liu c cu trc 5.1. D liu kiu mng/con tr 5.1.1. Mng 1 chiu v nhiu chiu 5.1.2. Con tr v a ch 5.1.3. Lin h gia mng v con tr 5.1.4. Con tr v hm 5.2. D liu kiu xu k t. Lin h gia con tr v xu k t 5.3. D liu kiu bn ghi 5.4. Mt s v d tng hp Chng 6. File 6.1. Khi nim. 6.2. Cu trc v phn loi tp. 6.3. To tp mi c / ghi d liu. 6.4. Mt s hm x l tp ca C. 6.5. Bi tp p dng Chng 7. ho trong C 7.1. Gii thiu chung 7.2. Cc hm t mu, v im, t mu 7.3. Cc hm v hnh c bn

TS

PHN PHI S TIT LT TH/Xemina BT

KT

21

12

10

Nhim v ca sinh vin : Tham d cc bui thuyt trnh ca gio vin, t hc, t lm bi tp do gio vin giao, tham d cc bi kim tra nh k v cui k. Ti liu tham kho: 1. Phm Vn t, K thut lp trnh C - C s v nng cao, NXB KHKT, 1998. 2. Quch Tun Ngc, Ngn ng lp trnh C, NXB GD, 1998. 3. Mt s website lin quan: http://www.codeproject.com, http://www.cprogramming.com, Hnh thc v tiu chun nh gi sinh vin: Hnh thc thi cui k : Thi vn p trn my tnh, thi gian lm bi 45 pht Sinh vin phi m bo cc iu kin theo Quy ch ca Nh trng v ca B Thang im: Thang im ch A, B, C, D, F im nh gi hc phn: Z = 0,3X + 0,7Y. Bi ging ny l ti liu chnh thc v thng nht ca B mn Khoa hc my tnh, Khoa Cng ngh thng tin v c dng ging dy cho sinh vin. Ngy ph duyt: / /20

Trng B mn: ThS. Nguyn Hu Tun (k v ghi r h tn)

CHNG 1. GII THIU 1.1. Gii thiu ngn ng lp trnh C. 1.1.1. Xut x ca ngn ng lp trnh C. Khong cui nhng nm 1960 u 1970 xut hin nhu cu cn c cc ngn ng bc cao h tr cho nhng nh tin hc trong vic xy dng cc phn mm h thng, h iu hnh. Ngn ng C ra i t , n c pht trin ti phng th nghim Bell. n nm 1978, gio trnh " Ngn ng lp trnh C " do chnh cc tc gi ca ngn ng l Dennish Ritchie v B.W. Kernighan vit, c xut bn v ph bin rng ri. C l ngn ng lp trnh vn nng. Ngoi vic C c dng vit h iu hnh UNIX, ngi ta nhanh chng nhn ra sc mnh ca C trong vic x l cho cc vn hin i ca tin hc. C khng gn vi bt k mt h iu hnh hay my no, v mc du n c gi l " ngn ng lp trnh h thng" v n c dng cho vic vit h iu hnh, n cng tin li cho c vic vit cc chng trnh x l s, x l vn bn v c s d liu. 1.1.2. Trnh bin dch C v cch s dng.. A. Turbo C (TC) 1. Gii thiu chung TC Khi ng C cng nh mi chng trnh khc bng cch nhp p chut ln biu tng ca chng trnh. Khi chng trnh c khi ng s hin ra giao din gm c menu cng vic v mt khung ca s bn di phc v cho son tho. Mt con tr nhp nhy trong khung ca s v chng ta bt u nhp ni dung (vn bn) chng trnh vo trong khung ca s son tho ny. Mc ch ca gio trnh ny l trang b nhng kin thc c bn ca lp trnh thng qua NNLT C cho cc sinh vin mi bt u nn chng ti vn chn trnh by giao din ca cc trnh bin dch quen thuc l Turbo C hoc Borland C. V cc trnh bin dch khc c gi c th t tham kho trong cc ti liu lin quan. kt thc lm vic vi C (son tho, chy chng trnh ...) v quay v mi trng Windows chng ta n Alt-X. 2. Giao din v ca s son tho ca TC a. M t chung Khi gi chy C trn mn hnh s xut hin mt menu x xung v mt ca s son tho. Trn menu gm c cc nhm chc nng: File, Edit, Search, Run, Compile, Debug, Project, Options, Window, Help. kch hot cc nhm chc nng, c th n Alt+ch ci biu th cho menu ca chc nng (l ch ci c gch di). V d m nhm chc nng File n Alt+F, sau dch chuyn hp sng n mc cn chn ri n Enter. thun tin cho NSD, mt s cc chc nng hay dng cn c gn vi mt t hp cc phm cho php ngi dng c th chn nhanh chc nng ny m khng cn thng qua vic m menu nh m t trn. Mt s t hp phm c th s c trnh by vo cui phn ny. Cc b chng trnh dch h tr ngi lp trnh mt mi trng tch hp tc ngoi chc nng son tho, n cn cung cp nhiu chc nng, tin ch khc gip ngi lp trnh va c th son tho vn bn chng trnh va gi chy chng trnh va g li Cc chc nng lin quan n son tho phn ln ging vi cc b son tho khc (nh WinWord) do vy chng ti ch trnh by tm tt m khng trnh by chi tit y. b. Cc chc nng son tho Ging hu ht cc b son tho vn bn, b son tho ca Turbo C hoc Borland C cng s dng cc phm sau cho qu trnh son tho: Dch chuyn con tr: cc phm mi tn cho php dch chuyn con tr sang tri, phi mt k t hoc ln trn, xung di 1 dng. dch chuyn nhanh c cc phm nh Home (v u 6

dng), End (v cui dng), PgUp, PgDn (ln, xung mt trang mn hnh). dch chuyn xa hn c th kt hp cc phm ny cng phm Control (Ctrl, ^) nh ^PgUp: v u tp, ^PgDn: v cui tp. Chn, xo, sa: Phm Insert cho php chuyn ch son tho gia chn v . Cc phm Delete, Backspace cho php xo mt k t ti v tr con tr v trc v tr con tr (xo li). Cc thao tc vi khi dng: nh du khi dng (thc cht l khi k t lin nhau bt k) ta a con tr n v tr u n Ctrl-KB v Ctrl-KK ti v tr cui. Cng c th thao tc nhanh hn bng cch gi phm Shift v dng ccphm dch chuyn con tr qut t v tr u n v tr cui, khi khi k t uc nh du s chuyn mu nn. Mt khi c nh du c th dng ct, dn vo mt ni khc trong vn bn hoc xo khi vn bn. thc hin thao tc ct dn, u tin phi a khi nh du vo b nh m bng nhm phm ShiftDelete (ct), sau dch chuyn con tr n v tr mi cn hin ni dung va ct v n t hp phm Shift-Insert. Mt on vn bn c ghi vo b nh m c th c dn nhiu ln vo nhiu v tr khc nhau bngcch lp li t hp phm Shift-Insert ti cc v tr khc nhau trong vn bn. xo mt khi dng nh du m khng ghi vo b nh m, dng t hp phm Ctrl-Delete. Khi mt ni dung mi ghi vo b nh m th n s xo (ghi ) ni dung c c, do vy cn cn nhc s dng phm Ctrl-Delete (xo v khng lu li ni dung va xo vo b m) v Shift-Delete (xo v lu li ni dung va xo) mt cch ph hp. T hp phm Ctrl-A rt thun li khi cn nh du nhanh ton b vn bn. c. Chc nng tm kim v thay th Chc nng ny dng dch chuyn nhanh con tr vn bn n t cn tm. thc hin tm kim bm Ctrl-QF, tm kim v thay th bm Ctrl-QA. Vo t hoc nhm t cn tm vo ca s Find, nhm thay th (nu dng Ctrl-QA) vo ca s Replace v nh du vo cc tu chn trong ca s bn di sau n Enter. Cc tu chn gm: khng phn bit ch hoa/thng, tm t c lp hay ng trong t khc, tm trong ton vn bn hay ch trong phn c nh du, chiu tm i n cui hay ngc v u vn bn, thay th c hi li hay khng hi li dch chuyn con tr n cc vng khc nhau trong mt menu hay ca s cha cc tu chn ta s dng phm Tab. d. Cc chc nng lin quan n tp Ghi tp ln a: Chn menu File\Save hoc phm F2. Nu tn tp cha c (cn mang tn Noname.cpp) my s yu cu cho tn tp. Phn m rng ca tn tp c mc nh l CPP. Son tho tp mi: Chn menu File\New. Hin ra ca s son tho trng v tn file tm thi ly l Noname.cpp. Son tho tp c: Chn menu File\Open hoc n phm F3, nhp tn tp hoc dch chuyn con tr trong vng danh sch tp bn di n tn tp cn son ri n Enter. Cng c th p dng cch ny son tp mi khi khng nhp vo tn tp c th. Ghi tp ang son tho ln a vi tn mi: Chn menu File\Save As v nhp tn tp mi vo ri n Enter. e. Chc nng dch v chy chng trnh Ctrl-F9: Khi ng chc nng dch v chy ton b chng trnh. F4: Chy chng trnh t u n dng lnh hin ti (ang cha con tr) F7: Chy tng lnh mt ca hm main(), k c cc lnh con trong hm. F8: Chy tng lnh mt ca hm main(). Khi mi li gi hm c xem l mt lnh (khng chy tng lnh trong cc hm c gi). Cc chc nng lin quan n dch chng trnh c th c chn thng qua menuCompile (Alt-C). f. Tm tt mt s phm nng hay dng Cc phm kch hot menu: Alt+ch ci i din cho nhm menu . V d Alt-F m menu File chn cc chc nng c th trong n nh Open (m file), Save (ghi file ln a), Print (in ni dung vn bn chng trnh ra my in), Alt-C m menu Compile chn cc chc nng dch chng trnh. Cc phm dch chuyn con tr khi son tho. F1: m ca s tr gip. y l chc nng quan trng gip ngi lp trnh nh tn lnh, c 7

php v cch s dng. F2: ghi tp ln a. F3: m tp c ra sa cha hoc son tho tp mi. F4: chy chng trnh n v tr con tr. F5: Thu hp/m rng ca s son tho. F6: Chuyn i gia cc ca s son tho. F7: Chy chng trnh theo tng lnh, k c cc lnh trong hm con. F8: Chy chng trnh theo tng lnh trong hm chnh. F9: Dch v lin kt chng trnh. Thng dng chc nng ny tm li c php ca chng trnh ngun trc khi chy. Alt-F7: Chuyn con tr v ni gy li trc . Alt-F8: Chuyn con tr n li tip theo. Ctrl-F9: Chy chng trnh. Ctrl-Insert: Lu khi vn bn c nh du vo b nh m. Shift-Insert: Dn khi vn bn trong b nh m vo vn bn ti v tr con tr. Shift-Delete: Xo khi vn bn c nh du, lu n vo b nh m. Ctrl-Delete: Xo khi vn bn c nh du (khng lu vo b nh m). Alt-F5: Chuyn sang ca s xem kt qu ca chng trnh va chy xong. Alt-X: thot C v li Windows. B. Dev C C. Visual C++ 1.2. Thut ton v s khi

Khi nim: thut ton hay gii thut dng ch phng php hay cch thc (method) gii quyt vn .
S d khi: s dng cc khi biu din thut ton Bi tp: 1. V s khi gii thut gii phng trnh bc nht ax+b=0 2. V s khi gii thut gii bt phng trnh bc nht ax+b>0 3. V s khi gii thut gii phng trnh bc hai ax2+bx+c=0 4. V s khi gii thut tm c s chung ln nht ca 2 s nguyn dng 5. V s khi gii thut tm s nh nht ca 2 s

CHNG 2. CC KHI NIM C BN V NGN NG LP TRNH C 2.1. Cc phn t c bn ca ngn ng lp trnh C. 2.1.1. Tp k t dng trong ngn ng C 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. Cc t li c lin kt vi nhau theo mt qui tc no to nn cc cu lnh. Mt chng trnh bao gm nhiu cu lnh v th hin mt thut ton gii mt bi ton no . Ngn ng C c xy dng trn b k t sau : 26 ch ci hoa : A B C .. Z 26 ch ci thng : a b c .. z 10 ch s : 0 1 2 .. 9 Cc k hiu ton hc : + - * / = ( ) K t gch ni : _ Cc k t khc : . , : ; [ ] {} ! \ & % # $ ...

Du cch (space) dng tch cc t. V d ch VIET NAM c 8 k t, cn VIETNAM ch c 7 k t. Ch : Khi vit chng trnh, ta khng c s dng bt k k t no khc ngoi cc k t trn. V d nh khi lp chng trnh gii phng trnh bc hai ax 2 +bx+c=0 , ta cn tnh bit thc Delta = b2 - 4ac, trong ngn ng C khng cho php dng k t , v vy ta phi dng k hiu khc thay th. 2.1.2. T kho: T kho l nhng t c s dng khai bo cc kiu d liu, vit cc ton t v cc cu lnh. Bng di y lit k cc t kho ca TURBO C : asm char do extern goto interrupt register sizeof tipedef volatile break const double far huge long return static union while case continue else float if near short struct unsigned cdecl default enum for int pascal signed switch void

ngha v cch s dng ca mi t kho s c cp sau ny, y ta cn ch : - Khng c dng cc t kho t tn cho cc hng, bin, mng, hm ... 9

- T kho phi c vit bng ch thng, v d : vit t kho khai bo kiu nguyn l int ch khng phi l INT. 2.1.3. Tn: Tn l mt khi nim rt quan trng, n dng xc nh cc i lng khc nhau trong mt chng trnh. Chng ta c tn hng, tn bin, tn mng, tn hm, tn con tr, tn tp, tn cu trc, tn nhn,... Tn c t theo qui tc sau: Tn l mt dy cc k t bao gm ch ci, s v gch ni. K t u tin ca tn phi l ch hoc gch ni. Tn khng c trng vi kho. di cc i ca tn theo mc nh l 32 v c th c t li l mt trong cc gi tr t 1 ti 32 nh chc nng : Option-Compiler-Source-Identifier length khi dng TURBO C. V d : Cc tn ng : a_1 Cc tn sai: delta x1 3MN m#2 f(x) do te ta Y-3 _step GAMA K t u tin l s S dng k t # S dng cc du ( ) Trng vi t kho S dng du trng S dng du -

Ch : Trong TURBO C, tn bng ch thng v ch hoa l khc nhau v d tn AB khc vi ab. Trong C, ta thng dng ch hoa t tn cho cc hng v dng ch thng t tn cho hu ht cho cc i lng khc nh bin, bin mng, hm, cu trc. Tuy nhin y khng phi l iu bt buc. 2.2. Cu trc chung ca chng trnh C Mt chng trnh C c th c t trong mt hoc nhiu file vn bn khc nhau. Mi file vn bn cha mt s phn no ca chng trnh. Vi nhng chng trnh n gin v ngn thng ch cn t chng trn mt file. Mt chng trnh gm nhiu hm, mi hm ph trch mt cng vic khc nhau ca chng trnh. c bit trong cc hm ny c mt hm duy nht c tn hm l main(). Khi chy chng trnh, cc cu lnh trong hm main() s c thc hin u tin. Trong hm main() c th c cc cu lnh gi n cc hm khc khi cn thit, v cc hm ny khi chy li c th gi n cc hm khc na c vit trong chng trnh (tr vic gi quay li hm main()). Sau khi chy n lnh cui cng ca hm main() chng trnh s kt thc. C th, thng thng mt chng trnh gm c cc ni dung sau: Phn khai bo cc tp nguyn mu: khai bo tn cc tp cha nhng thnh phn c sn (nh cc hng chun, kiu chun v cc hm chun) m NSD s dng trong chng trnh. Phn khai bo cc kiu d liu, cc bin, hng ... do NSD nh ngha v c dng chung trong ton b chng trnh. Danh sch cc hm ca chng trnh (do NSD vit, bao gm c hm main()). Cu trc chi tit ca mi hm s c cp n trong chng 4. Di y l mt on chng trnh n gin ch gm 1 hm chnh l hm main(). Ni dung ca chng trnh dng in ra mn hnh dng ch: Cho cc bn, by gi l 2gi. #include <stdio.h>// khai bo tp nguyn mu c s dng hm printf, scanf void main() 10

{ int h = 2; // Khai bo v khi to bin h = 2 printf( Cho cc bn, by gi l %d gi,h) ;// in ra mn hnh } Dng u tin ca chng trnh l khai bo tp nguyn mu stdio.h. y l khai bo bt buc v trong chng trnh c s dng hm chun printf() (in ra mn hnh), hm ny c khai bo v nh ngha sn trong stdio.h. Khng ring hm main(), mi hm khc u phi bt u tp hp cc cu lnh ca mnh bi du { v kt thc bi du }. Tp cc lnh bt k bn trong cp du ny c gi l khi lnh. Khi lnh l mt c php cn thit trong cc cu lnh c cu trc nh ta s thy trong cc chng tip theo. Vy ni tm li cu trc c bn ca chng trnh nh sau : ). 2.3. Cc bc c bn khi lp chng trnh 2.3.1. Qui trnh vit v thc hin chng trnh Trc khi vit v chy mt chng trnh thng thng chng ta cn: 1. Xc nh yu cu ca chng trnh. Ngha l xc nh d liu u vo (input) cung cp cho chng trnh v tp cc d liu cn t c tc u ra (output).Cc tp hp d liu ny ngoi 2 cc tn gi cn cn xc nh kiu ca n.V d gii mt phng trnh bc 2 dng: ax + bx + c = 0, cn bo cho chng trnh bit d liu u vo l a, b, c v u ra l nghim x1 v x2 ca phng trnh. Kiu ca a, b, c, x1, x2 l cc s thc. 2. Xc nh thut ton gii. 3. C th ho cc khai bo kiu v thut ton thnh dy cc lnh, tc vit thnh chng trnh thng thng l trn giy, sau bt u son tho vo trong my. Qu trnh ny c gi l son tho chng trnh ngun. 4. Dch chng trnh ngun tm v sa cc li gi l li c php. 5. Chy chng trnh, kim tra kt qu in ra trn mn hnh. Nu sai, sa li chng trnh, dch v chy li kim tra. Qu trnh ny c thc hin lp i lp li cho n khi chng trnh chy tt theo yu cu ra ca NSD. 2.3.2. Son tho tp chng trnh ngun Son tho chng trnh ngun l mt cng vic n gin: g ni dung ca chng trnh ( vit ra giy) vo trong my v lu li n ln a. Thng thng khi lu li chng trnh ln a ln sau s khng cn phi g li. C th son chng trnh ngun trn cc b son tho (editor) khc nhng phi chy trong mi trng tch hp C++ (Borland C, Turbo C). Mc ch ca son tho l to ra mt vn bn chng trnh v a vo b nh ca my. Vn bn chng trnh cn c trnh by sng sa, r rng. Cc cu lnh cn ging thng ct theo cu trc ca lnh (cc lnh cha trong mt lnh cu trc c trnh by tht vo trong so vi im bt u ca lnh). Cc ch thch nn ghi ngn gn, r ngha v ph hp. 2.3.3. Dch chng trnh Sau khi son tho xong chng trnh ngun, bc tip theo thng l dch (n t hp phm 11 Cc #include Cc #define Khai bo cc i tng d liu ngoi ( bin, mng, cu trc vv..). Khai bo nguyn mu cc hm. Hm main(). nh ngha cc hm ( hm main c th t sau hoc xen vo gia cc hm khc

Alt-F9) tm v sa cc li gi l li c php. Trong khi dch C++ s t con tr vo ni gy li (vit sai c php) trong vn bn. Sau khi sa xong mt li NSD c th dng Alt-F8 chuyn con tr n li tip theo hoc dch li. chuyn con tr v ngc li li trc c th dng Alt-F7. Qu trnh sa li dch c lp li cho n khi vn bn c sa ht li c php. Sn phm sau khi dch l mt tp mi gi l chng trnh ch c ui EXE tc l tp m my thc hin.Tp ny c th lu tm thi trong b nh phc v cho qu trnh chy chng trnh hoc lu li trn a tu theo tu chn khi dch ca NSD. Trong v sau khi dch, C++ s hin mt ca s cha thng bo v cc li (nu c), hoc thng bo chng trnh c dch thnh cng (khng cn li). Cc li ny c gi l li c php. dch chng trnh ta chn menu \Compile\Compile hoc \Compile\Make hoc nhanh chng hn bng cch n t hp phm Alt-F6. 2.3.4. Chy chng trnh n Ctrl-F9 chy chng trnh, nu chng trnh cha dch sang m my, my s t ng dch li trc khi chy. Kt qu ca chng trnh s hin ra trong mt ca s kt qu NSD kim tra. Nu kt qu cha c nh mong mun, quay li vn bn sa v li chy li chng trnh. Qu trnh ny c lp li cho n khi chng trnh chy ng nh yu cu ra. Khi chng trnh chy, ca s kt qu s hin ra tm thi che khut ca s son tho. Sau khi kt thc chy chng trnh ca s son tho s t ng hin ra tr li v che khut ca s kt qu. xem li kt qu hin n Alt-F5 (hoc thm lnh getch() vo cui hm main()). Sau khi xem xong quay li ca s son tho n phm bt k. 2.4. Cc kiu d liu c s Trong C s dng cc cc kiu d liu c s sau : 2.4.1. Kiu k t (char): Mt gi tr kiu char chim 1 byte ( 8 bit ) v biu din c mt k t thng qua bng m ASCII. V d: K t 0 1 2 A B a b Kiu char (signed char ) unsigned char M ASCII 048 049 050 065 066 097 098 Phm vi biu din -128 n 127 0 n 255 S k t 256 256 Kch thc 1 byte 1 byte

C hai kiu d liu char : kiu signed char v unsigned char.

V d sau minh ho s khc nhau gia hai kiu d liu trn. Xt on chng trnh sau: char ch1; 12

unsigned char ch2; ...... ch1=200; ch2=200; Khi thc cht : ch1=-56; ch2=200; Nhng c ch1 v ch2 u biu din cng mt k t c m 200. Phn loi k t : C th chia 256 k t lm ba nhm : Nhm 1: Nhm cc k t iu khin c m t 0 n 31. Chng hn k t m 13 dng chuyn con tr v u dng, k t 10 chuyn con tr xung dng di ( trn cng mt ct ). Cc k t nhm ny ni chung khng hin th ra mn hnh. Nhm 2 : Nhm cc k t vn bn c m t 32 n 126. Cc k t ny c th c a ra mn hnh hoc my in. Nhm 3 : Nhm cc k t ho c m s t 127 n 255. Cc k t ny c th a ra mn hnh nhng khng in ra c ( bng cc lnh DOS ). 2.4.2. Kiu s nguyn : Trong C cho php s dng s nguyn kiu int, s nguyn di kiu long v s nguyn khng du kiu unsigned. Kch c v phm vi biu din ca chng c ch ra trong bng di y : Kiu int unsigned int long unsigned long 2.4.3. Kiu du phy ng (s thc): Trong C cho php s dng ba loi d liu du phy ng, l float, double v long double. Kch c v phm vi biu din ca chng c ch ra trong bng di y : Kiu float double long double Phm vi biu din 3.4E-38 n 3.4E+38 1.7E-308 n 1.7E+308 3.4E-4932 n 1.1E4932 S ch s c ngha 7 n 8 15 n 16 17 n 18 Kch thc 4 byte 8 byte 10 byte 13 Phm vi biu din -32768 n 32767 0 n 65535 -2147483648 n 2147483647 0 n 4294967295 Kch thc 2 byte 2 byte 4 byte 4 byte

Ch : Kiu k t cng c th xem l mt dng ca kiu nguyn.

Gii thch: My tnh c th lu tr c cc s kiu float c gi tr tuyt i t 3.4E-38 n 3.4E+38. Cc s c gi tr tuyt i nh hn3.4E-38 c xem bng 0. Phm vi biu din ca s double c hiu theo ngha tng t. Ch : Trong C khng c kiu logic Boolean (th hin gi tr True, False). C s dng kiu s nguyn xy dng kiu logic, 0 ng vi False, 0 ng vi tr True. V d: biu thc 6>8 nhn gi tr 0, 6>3 nhn gi tr 1. 2.4.4. nh ngha kiu bng typedef : Cng dng: T kho typedef dng t tn cho mt kiu d liu. Tn kiu s c dng khai bo d liu sau ny. Nn chn tn kiu ngn v gn d nh. Ch cn thm t kho typedef vo trc mt khai bo ta s nhn c mt tn kiu d liu v c th dng tn ny khai bo cc bin, mng, cu trc, vv... Cch vit: Vit t kho typedef, sau kiu d liu ( mt trong cc kiu trn ), ri n tn ca kiu. V d cu lnh: typedef int nguyen; s t tn mt kiu int l nguyen. Sau ny ta c th dng kiu nguyen khai bo cc bin, cc mng int nh v d sau ; nguyen x, y; 2.4.5. Cc php ton s hc, quan h v logic Cc php ton s hc. Cc php ton hai ngi s hc l Php ton + * / nghi Php cng Php tr Php nhn Php chia Php ly phn d V d a+b a-b a*b a/b ( Chia s nguyn s cht phn thp phn ) a%b ( Cho phn d ca php chia a cho b )

C php ton mt ngi - v du -(a+b) s o gi tr ca php cng (a+b). V d :11/3=3 11%3=2 -(2+6)=-8 Cc php ton + v - c cng th t u tin, c th t u tin nh hn cc php * , / , % v c ba php ny li c th t u tin nh hn php tr mt ngi. 14

Cc php ton s hc c thc hin t tri sang phi. S u tin v kh nng kt hp ca php ton c ch ra trong mt mc sau ny Cc php ton quan h v logic : Php ton quan h v logic cho ta gi tr ng ( 1 ) hoc gi tr sai ( 0 ). Ni cch khc, khi cc iu kin nu ra l ng th ta nhn c gi tr 1, tri li ta nhn gi tr 0. Cc php ton quan h l : Php ton > ngha So snh ln hn So snh ln hn hoc bng So snh nh hn So snh nh hn hoc bng So snh bng nhau V d a>b 4>5 c gi tr 0 a>=b 6>=2 c gi tr 1 a<b 6<=7 c gi tr 1 a<=b 8<=5 c gi tr 0 a==b 6==6 c gi tr 1 a!=b 9!=9 c gi tr 0

>=

<

<=

==

!=

So snh khc nhau

Bn php ton u c cng s u tin, hai php sau c cng s th t u tin nhng thp hn s th t ca bn php u. Cc php ton quan h c s th t u tin thp hn so vi cc php ton s hc, cho nn biu thc: i<n-1 c hiu l i<(n-1). Cc php ton logic : Trong C s dng ba php ton logic : Php ph nh mt ngi ! a 1 0 Php v (AND) && Php hoc ( OR ) || A 1 1 0 B 1 0 1 A&&B 1 0 0 A || B 1 1 1 15 !a 0 1

Cc php quan h c s u tin nh hn so vi ! nhng ln hn so vi && v ||, v vy biu thc nh: (a<b)&&(c>d) c th vit li thnh: a<b&&c>d Ch : C a v b c th l nguyn hoc thc. Php ton tng gim : C a ra hai php ton mt ngi tng v gim cc bin ( nguyn v thc ). Ton t tng l ++ s cng 1 vo ton hng ca n, ton t gim -- th s tr ton hng i 1. V d: n=5 ++n --n Cho ta n=6 Cho ta n=4

Ta c th vit php ton ++ v -- trc hoc sau ton hng nh sau : ++n, n++, --n, n--. S khc nhau ca ++n v n++ ch: trong php n++ th tng sau khi gi tr ca n c s dng, cn trong php ++n th n c tng trc khi s dng. S khc nhau gia n-- v --n cng nh vy. V d: n=5 x=++n x=n++ Cho ta x=6 v n=6 Cho ta x=5 v n=6

Th t u tin cc php ton : Cc php ton c u tin khc nhau, iu ny c ngha trong cng mt biu thc s c mt s php ton ny c thc hin trc mt s php ton khc. Th t u tin ca cc php ton c trnh by trong bng sau : TT 1 2 3 4 5 6 7 8 9 10 11 12 Php ton () [] -> ! ~ & * - ++ -- (type ) sizeof * ( php nhn ) / % +<< >> < <= > >= == != & ^ | && || Trnh t kt hp Tri qua phi Phi qua tri Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi Tri qua phi 16

13 14 15

?: = += -= *= /= %= <<= >>= &= ^= |= ,

Phi qua tri Phi qua tri Tri qua phi

Ch thch: Cc php ton tn mt dng c cng th t u tin, cc php ton hng trn c s u tin cao hn cc s hng di. i vi cc php ton cng mc u tin th trnh t tnh ton c th t tri qua phi hay ngc li c ch ra trong ct trnh t kt hp. V d: *--px=*(--px) ( Phi qua tri ) 8/4*6=(8/4)*6 ( Tri qua phi ) Nn dng cc du ngoc trn vit biu thc mt cch chnh xc. Cc php ton l : Dng 1 [ ] Dng biu din phn t mng, v d : a[i][j] . Dng biu din thnh phn cu trc, v d : ht.ten -> Dng biu din thnh phn cu trc thng qua con tr Dng 2 * Dng khai bo con tr, v d : int *a & Php ton ly a ch, v d : &x ( type) l php chuyn i kiu, v d : (float)(x+y) Dng 15 Ton t , thng dng vit mt dy biu thc trong ton t for. 2.5. Cc khai bo trong chng trnh C 2.5.1. Hng: Hng l cc i lng m gi tr ca n khng thay i trong qu trnh tnh ton. Tn hng: Nguyn tc t tn hng ta xem xt trong mc t tn phn trc. t tn mt hng, ta dng dng lnh sau: khai bo hng ta dng cc cu khai bo sau: #define tn_hng gi_tr_hng hoc: const tn_hng = gi_tr_hng ; V d: #define sosv 50 #define MAX 100 const sosv = 50 ; Lc ny, tt c cc tn MAX trong chng trnh xut hin sau ny u c thay bng 100. V vy, ta thng gi MAX l tn hng, n biu din s 100. Mt v d khc : #define pi 3.141593 t tn cho mt hng float l pi c gi tr l 3.141593. 17

Cc loi hng : Hng int: Hng int l s nguyn c gi tr trong khong t -32768 n 32767. V d : #define number1 -50 #define sodem 2732 thc. Hng long: Hng long l s nguyn c gi tr trong khong t -2147483648 n 2147483647. Hng long c vit theo cch : 1234L hoc 1234l ( thm L hoc l vo ui ) Mt s nguyn vt ra ngoi min xc nh ca int cng c xem l long. V d : #define sl 8865056L #define sl 8865056 nh nghi hng long sl c gi tr l 8865056 nh nghi hng long sl c gi tr l 8865056 nh nghi hng int number1 c gi tr l -50 nh nghi hng int sodem c gi tr l 2732

Ch : Cn phn bit hai hng 5056 v 5056.0 : y 5056 l s nguyn cn 5056.0 l hng

Hng int h 8: Hng int h 8 c vit theo cch 0c1c2c3.... y ci l mt s nguyn dng trong khong t 1 n 7. Hng int h 8 lun lun nhn gi tr dng. V d: #define h8 0345 nh nghi hng int h 8 c gi tr l 3*8*8+4*8+5=229 Hng int h 16: Trong h ny ta s dng 16 k t : 0,1..,9,A,B,C,D,E,F. Cch vit a hoc A b hoc B c hoc C d hoc D e hoc E f hoc F Gi tr 10 11 12 13 14 15

Hng s h 16 c dng 0xc1c2c3... hc 0Xc1c2c3... y ci l mt s trong h 16. V d :

#define h16 0xa5 #define h16 0xA5 #define h16 0Xa5 #define h16 0XA5

Cho ta cc hng s h16 trong h 16 c gi tr nh nhau. Gi tr ca chng trong h 10 l: 10*16+5=165. Hng k t: Hng k t l mt k t ring bit c vit trong hai du nhy n, v d 'a'. Gi tr ca 'a' chnh l m ASCII ca ch a. Nh vy gi tr ca 'a' l 97. Hng k t c th tham gia vo cc php ton nh mi s nguyn khc. V d : '9'-'0'=57-48=9 18

V d :

#define kt 'a'

nh nghi hng k t kt c gi tr l 97

Hng k t cn c th c vit theo cch sau: ' \c1c2c3' .Trong c1c2c3 l mt s h 8 m gi tr ca n bng m ASCII ca k t cn biu din. V d : ch a c m h 10 l 97, i ra h 8 l 0141. Vy hng k t 'a' c th vit di dng '\141'. i vi mt vi hng k t c bit ta cn s dng cch vit sau ( thm du \ ) : Cch vit '\'' '\"' '\\' '\n' '\0' '\t' '\b' '\r' '\f' K t ' " \ \n (chuyn dng ) \0 ( null ) Tab Backspace CR ( v u dng ) LF ( sang trang )

Ch : Cn phn bit hng k t '0' v '\0'. Hng '0' ng vi ch s 0 c m ASCII l 48, cn hng '\0' ng vi kt \0 ( thng gi l k t null ) c m ASCII l 0. Hng k t thc s l mt s nguyn, v vy c th dng cc s nguyn h 10 biu din cc k t, v d lnh printf("%c%c",65,66) s in ra AB. Hng xu k t: Hng xu k t l mt dy k t bt k t trong hai du nhy kp. V d : #define xau1 "Ha noi" #define xau2 "My name is Giang" Xu k t c lu tr trong my di dng mt bng c cc phn t l cc k t ring bit. Trnh bin dch t ng thm k t null \0 vo cui mi xu ( k t \0 c xem l du hiu kt thc ca mt xu k t ). Ch : Cn phn bit hai hng 'a' v "a". 'a' l hng k t c lu tr trong 1 byte, cn "a" l hng xu k t c lu tr trong 1 mng hai phn t : phn t th nht cha ch a cn phn t th hai cha \0. 2.5.2. Bin. L i lng m gi tr c th thay i c trong chng trnh. Mi bin cn phi c khai bo trc khi a vo s dng, gi tr ca bin c th thay i c trong chng trnh. Vic khai bo bin c thc hin theo mu sau: Kiu_d_liu_ca_bin tn bin ; V d : int a,b,c; long dai,mn; Khai bo ba bin int l a,b,c Khai bo hai bin long l dai v mn 19

char kt1,kt2; float x,y double canh1, canh2;

Khai bo hai bin k t l kt1 v kt2 Khai bo hai bin float l x v y Khai bo hai bin double l canh1 v canh2

Bin kiu int ch nhn c cc gi tr kiu int. Cc bin khc cng c ngha tng t. Cc bin kiu char ch cha c mt k t. lu tr c mt xu k t cn s dng mt mng kiu char. V tr ca khai bo bin: Cc khai bo cn phi c t ngay sau du { u tin ca thn hm v cn ng trc mi cu lnh khc. Sau y l mt v d v khai bo bin sai : ( Khi nim v hm v cu trc chng trnh s nghin cu sau ny) main() { int a,b,c; a=2; int d; /* V tr ca khai bo sai */ ..... } Khi u cho bin: Nu trong khai bo ngay sau tn bin ta t du = v mt gi tr no th y chnh l cch va khai bo va khi u cho bin. V d : int a, b=20, c, d=40; float e=-55.2, x=27.23, y, z, t=18.98; Vic khi u v vic khai bo bin ri gn gi tr cho n sau ny l hon ton tng ng. 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. a ch ca bin s c s dng trong mt s hm ta s nghin cu sau ny ( v d nh hm scanf ). ly a ch ca mt bin ta s dng php ton: &tn_bin 2.5.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 gn biu thc gm cc ton hng khc kiu. + Khi gn mt gi tr kiu ny cho mt bin ( hoc phn t mng ) kiu khc. iu ny xy ra trong ton t gn, trong vic truyn gi tr cc tham s thc s cho cc i. Ngoi ra, ta c th chuyn t mt kiu gi tr sang mt kiu bt k m ta mun bng php chuyn sau: ( type ) biu thc V d : (float) (a+b) Chuyn i kiu trong biu thc : 20

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 kiu cao hn. Chng hn : Gia int v long th int chuyn thnh long. Gia int v float th int chuyn thnh float. Gia float v double th float chuyn thnh double. V d: 1.5*(11/3)=4.5 1.5*11/3=5.5 (11/3)*1.5=4.5 Chuyn i kiu thng qua php gn : Gi tr ca v phi c chuyn sang kiu v tri l kiu ca kt qu. Kiu int c th c c chuyn thnh float. Kiu float c th chuyn thnh int do cht i phn thp phn. Kiu double chuyn thnh float bng cch lm trn. Kiu long c chuyn thnh int bng cch ct b mt vi ch s. V d :int n; n=15.6 gi tr ca n l 15 i kiu dng (type)biu thc : Theo cch ny, kiu ca biu thc c i thnh kiu type theo nguyn tc trn. V d : Php ton : (int)a cho mt gi tr kiu int. Nu a l float th y c s chuyn i t float sang int. Ch rng bn thn kiu ca a vn khng b thay i. Ni cch khc, a vn c kiu float nhng (int)a c kiu int. i vi 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) Php p kiu c cng s u tin nh cc ton t mt ngi. Ch :Mun c gi tr chnh xc trong php chia hai s nguyn cn dng php p kiu : (float)a/b i gi tr thc r sang nguyn, ta dng: (int)(r+0.5) Ch th t u tin: (int)1.4*10=1*10=10 (int)(1.4*10)=(int)14.0=14 2.6. Biu thc Biu thc l dy k hiu kt hp gia cc ton hng, php ton v cp du () theo mt qui tc nht nh. Cc ton hng l hng, bin, hm. Biu thc cung cp mt cch thc tnh gi tr mi da trn cc ton hng v ton t trong biu thc. Nh vy hng, bin, phn t mng v hm cng c xem l biu thc. V d: 21

(x + y) * 2 - 4 ; 3 - x + sqrt(y) ; (-b + sqrt(delta)) / (2*a) ; Trong C, ta c hai khi nim v biu thc : Biu thc gn. Biu thc iu kin. Biu thc c phn loi theo kiu gi tr: nguyn v thc. Trong cc mnh logic, biu thc c phn thnh ng ( gi tr khc 0 ) v sai ( gi tr bng 0, chng ta thng quy c l 1 ). Biu thc thng c dng trong: + V phi ca cu lnh gn. + Lm tham s thc s ca hm. + Lm ch s. + Trong cc ton t ca cc cu trc iu khin. Ti y, ta c hai khi nim chnh to nn biu thc l ton hng v php ton. Ton hng gm: hng, bin, phn t mng v hm trc y ta xt. Di y ta s ni n cc php ton. Hm s c cp trong chng sau. 2.7. Cc hm ton hc 2.7.1. Cc hm s hc abs(x), labs(x), fabs(x) : tr li gi tr tuyt i ca mt s nguyn, s nguyn di v s thc. y pow(x, y) : hm m, tr li gi tr x ly tha y (x ). x exp(x) : hm m, tr li gi tr e m x (e ). log(x), log10(x) : tr li lgarit c s e v lgarit thp phn ca x (lnx, logx) . sqrt(x) : tr li cn bc 2 ca x. atof(s_number) : tr li s thc ng vi s vit di dng xu k t s_number. 2.7.2. Cc hm lng gic sin(x), cos(x), tan(x) : tr li cc gi tr sinx, cosx, tgx. Bi tp: 1. Vit chng trnh s dng cc hm ton hc tnh ton gi tr mt s biu thc 2. Tm hiu cch thc dch mt chng trnh bng mt trong cc chng trnh dch TC, C-Free, Dev C,

22

CHNG 3. CC CU LNH C BN 3.1. Lnh gn gi tr, lnh gp Lnh gn gi tr: Biu thc gn (lnh 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 n l kiu ca v. Nu t du ; vo sau biu thc gn ta s thu c php ton gn c dng: v = e; Biu thc gn c th s dng trong cc php ton v cc cu lnh nh cc biu thc khc. V d nh khi ta vit a=b=5; th iu c ngha l gn gi tr ca biu thc b=5 cho bin a. Kt qa l b=5 v a=5. Hon ton tng t nh: a=b=c=d=6; gn 6 cho c a, b, c v d V d: z=(y=2)*(x=6); biu thc li cho ta z=12. Lnh gp (khi lnh): Mt cu lnh trong C c thit lp t cc t kho v cc biu thc v lun lun c kt thc bng du chm phy. Cc v d vo/ra hoc cc php gn to thnh nhng cu lnh n gin nh: x=3+x; y = (x = sqrt(x)) + 1 ; printf(x = %4d, y=%4.2f, x, y ); Cc cu lnh c php vit trn cng mt hoc nhiu dng. Mt s cu lnh c gi l lnh c cu trc, tc bn trong n li cha dy lnh khc. Dy lnh ny phi c bao gia cp du ngoc {} v c gi l khi lnh. V d tt c cc lnh trong mt hm (nh hm main()) lun lun l mt khi lnh. Mt c im ca khi lnh l cc bin c khai bo trong khi lnh no th ch c tc dng trong khi lnh . Mt dy cc cu lnh c bao bi cc du { } gi l mt khi lnh. V d : { a=2; b=3; printf("\n%6d%6d",a,b); } TURBO C xem khi lnh cng nh mt cu lnh ring l. Ni cch khc, ch no vit c mt cu lnh th cng c quyn t mt khi lnh. Khai bo u khi lnh : Cc khai bo bin v mng chng nhng c th t u ca mt hm m cn c th vit u khi lnh : { int a, b; 23 { y * l php ton nhn } gn 2 cho y, 6 cho x v nhn hai

float x, y, z; a=b=3; x=5.5; y=a*x; z=b*x; printf("\n y= %8.2f\n z=%8.2f",y,z); } S lng nhau ca cc khi lnh v phm vi hot ng ca cc bin v mng : Bn trong mt khi lnh li c th vit lng khi lnh khc. S lng nhau theo cch nh vy l khng hn ch. Khi my bt u lm vic vi mt khi lnh th cc bin v mng khai bo bn trong n mi c hnh thnh v c hnh thnh v c cp pht b nh. Cc bin ny ch tn ti trong thi gian my lm vic bn trong khi lnh v chng lp tc bin mt ngay sau khi my ra khi khi lnh. Vy: . bt k ch no bn ngoi mt khi lnh ta khng th can thip n cc bin v cc mng c khai bo bn trong khi lnh. Nu bn trong mt khi ta dng mt bin hay mt mng c tn l a th iu ny khng lm thay i gi tr ca mt bin khc cng c tn l a ( nu c ) c dng u bn ngoi khi lnh ny. Nu c mt bin c khai bo ngoi mt khi lnh v khng trng tn vi cc bin khai bo bn trong khi lnh ny th bin cng c th s dng c bn trong cng nh bn ngoi khi lnh. V d : Xt on chng trnh sau : { int a=5,b=2; { int a=4; b=a+b; printf("\n a trong =%3d b=%3d",a,b); } printf("\n a ngoai =%3d b=%3d",a,b); } Khi on chng trnh s in kt qu nh sau : a trong =4 b=6 a ngoi =5 b=6 Do tnh cht bin a trong v ngoi khi lnh. 24 Gi tr ca mt bin hay mt mng khai bo bn trong mt khi lnh khng th a ra s dng bt k ch no bn ngoi khi lnh

3.2. Hm vit d liu ra mn hnh 3.2.1. Hm putchar (): a mt k t ra thit b ra chun, ni chung l mn hnh, ta s dng hm putchar() Cch dng: vi mu trng. V d: int c; c = getchar(); putchar(c); 3.2.2. Hm putch(): Cch dng: Dng cu lnh sau: putch(ch); Cng dng: a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s c hin th theo mu xc nh trong hm textcolor. Hm cng tr v k t c hin th. 3.2.3. a kt qu ln mn hnh - hm printf : Cch dng: prinf(iu khin, i s 1, i s 2, ...); Hm printf chuyn, to khun dng v in cc i ca n ra thit b ra chun di s iu khin ca xu iu khin. Xu iu khin cha hai kiu i tng : cc k t thng thng, chng s c a ra trc tip thit b ra, v cc c t chuyn dng, mi c t s to ra vic i dng v in i tip sau ca printf. Chui iu khin c th c cc k t iu khin: \n sang dng mi; \f sang trang mi; \b Dng tng qut ca c t : %[-][n][.m] k_t_chuyn_dng Mi c t chuyn dng u c a vo bng k t % v kt thc bi mt k_t_chuyn_dng. Gia % v k_t_chuyn_dng c th c: Du tr: Khi khng c du tr th kt qu ra c dn v bn phi nu di thc t ca kt qu ra nh hn rng ti thiu n dnh cho n. Cc v tr d tha s c lp y bng cc khong trng. Ring i vi cc trng s, nu dy s n bt u bng s 0 th cc v tr d tha bn tri s c lp y bng cc s 0. Khi c du tr th kt qu c dn v bn tri v cc v tr d tha v bn phi (nu c) lun c lp y bng cc khong trng. n : Khi n ln hn di thc t ca kt qu ra th cc v tr d tha s c lp y bi cc khong trng hoc s 0 v ni dung ca kt qu ra s c y v bn phi hoc bn tri. Khi khng c n hoc n nh hn hay bng di thc t ca kt qu ra th rng trn 25 li li mt bc; \t du tab Dng cu lnh sau: putchar(ch); Cng dng: a k t ch ln mn hnh ti v tr hin ti ca con tr. K t s c hin th

thit b ra dnh cho kt qu s bng chnh di ca n. V d : Kt qu ra -2503 -2503 -2503 -2503 "abcdef" "abcdef" "abcdef" n 8 08 8 08 8 08 08 Du c c khng khng khng c khng

Ti v tr ca n ta c th t du *,

khi n c xc nh bi gi tr nguyn ca i tng ng. Kt qu a ra -2503 -2503 -2503 000-2503 abcdef abcdef abcdef

m: Tham s m ch c s dng khi i tng ng l mt xu k t hoc mt gi tr kiu float hay double. Trong trng hp i tng ng c gi tr kiu float hay double th m l chnh xc ca trng ra. Ni mt cch c th hn gi tr in ra s c pp ch s sau s thp phn. Khi vng mt pp th chnh xc s c xem l 6. Khi i l xu k t: Nu m nh hn di ca xu th ch pp k t u tin ca xu c in ra. Nu khng c n hoc nu m ln hn hay bng di ca xu th c xu k t s c in ra. V d : Kt qu ra -435.645 -435.645 -435.645 "alphabeta" "alphabeta" "alpha" n 10 10 8 8 vng 8 2 0 vng 3 vng 6 m Du c c c vng vng c Kt qu a ra -435.65 -436 -435.645000 alp alphabeta alpha 7 4 11 3 9 5 di trng ra

Cc k t chuyn dng v ngha ca n : K t chuyn dng l mt hoc mt dy k hiu xc nh quy tc chuyn dng v dng in ra ca i tng ng. Nh vy s c tnh trng cng mt s s c in ra theo cc dng khc nhau. Cn phi s dng cc k t chuyn dng theo ng qui tc nh sn. Bng sau cho cc thng tin v cc k t chuyn dng. K t chuyn dng D O ngha i c chuyn sang s nguyn h thp phn i c chuyn sang h tm khng du ( khng c s 0 ng trc ) 26

x u c

i c chuyn sang h mi su khng du ( khng c 0x ng trc ) i c chuyn sang h thp phn khng du i c coi l mt k t ring bit i l xu k t, cc k t trong xu c in cho ti khi gp k t khng hoc cho ti khi s lng k t c xc nh bi cc c t v chnh xc m. i c xem l float hoc double v c chuyn sang dng thp phn c dng [-]m.n..nE[+ hoc -] vi di ca xu cha n l pp. i c xem l float hoc double v c chuyn sang dng thp phn c dng [-]m..m.n..n vi di ca xu cha n l pp. chnh xc mc nh l 6. Lu rng chnh xc khng xc nh ra s cc ch s c ngha phi in theo khun dng f. Dng %e hoc %f, tu theo loi no ngn hn, khng in cc s 0 v ngha.

Ch : Mi dy k t khng bt u bng % hoc khng kt thc bng k t chuyn dng u c xem l k t hin th. hin th cc k t c bit : Cch vit \' \" \\ Cc v d : 1 2 printf("\" Nang suat tang : %d % \" \n\\d"",30,-50); n=8; float x=25.5, y=-47.335 printf("\n%f\n%*.2f",x,n,y); Lnh ny tng ng vi printf("\n%f\n%8.2f",x,n,y); V n=8 tng ng vi v tr * "Nang suat tang ; 30 %" \d=-50 25.500000 -47.34 Hin th ' " \

3.3. Hm nhp d liu vo t bn phm 3.3.1. Hm getchar (): C ch vo n gin nht l c tng k t t thit b vo bin = getchar(); chun, ni chung l bn phm v mn hnh ca ngi s dng, bng hm getchar(). Cch dng: Dng cu lnh sau:

27

Cng dng: Nhn mt k t vo t bn phm v khng a ra mn hnh. Hm s tr v k t nhn c v lu vo bin. V d: int c; c = getchar(); 3.3.2. Hm getch(): Hm nhn mt k t t b m bn phm, khng cho hin ln mn hnh. Cch dng: Dng cu lnh sau: getch(); Cng dng : Nu c sn k t trong b m bn phm th hm s nhn mt k t trong . Nu b m rng, my s tm dng. Khi g mt k t th hm nhn ngay k t ( khng cn bm thm phm Enter nh trong cc hm nhp khc ). K t va g khng hin ln mn hnh. Nu dng: V d: bin=getch(); Th bin s cha k t c vo. c = getch(); Hm scanf l hm c thng tin t thit b vo chun ( bn phm ), chuyn dch chng ( thnh s nguyn, s thc, k t vv.. ) ri lu tr n vo b nh theo cc a ch xc nh. Cch dng: scanf(iu khin,i 1, i 2, ...); Xu iu khin cha cc c t chuyn dng, mi c t s to ra vic i dng bin tip sau ca scanf. c t c th vit mt cch tng qut nh sau : %[*][d...d]k t chuyn dng Vic c mt ca du * ni ln rng trng vo vn c d c bnh thng, nhng gi tr ca n b b qua ( khng c lu vo b nh ). Nh vy c t cha du * s khng c i tng ng. d...d: l mt dy s xc nh chiu di cc i ca trng vo, ngha ca n c gii thch nh sau: Nu tham s d...d vng mt hoc nu gi tr ca n ln hn hay bng di ca trng vo tng ng th ton b trng vo s c c, ni dung ca n c dch v c gn cho a ch tng ng ( nu khng c du * ). Nu gi tr ca d...d nh hn di ca trng vo th ch phn u ca trng c kch c bng d...d c c v gn cho a ch ca bin tng ng. Phn cn li ca trng s c xem xt bi cc c t v i tng ng tip theo. V d : int a; float x, y; char ch[6],ct[6] ;//khai bo xu k t 28

3.3.3. Vo s liu t bn phm - hm scanf :

scanf("%f%5f%3d%3s%s",&x&y&a&ch&ct0; Vi dng vo : 54.32e-1 25 12452348a Kt qu l lnh scanf s gn 5.432 cho x 25.0 cho y 124 cho a xu "523" v du kt thc \0 cho ch xu "48a" v du kt thc \0 cho ct K t chuyn dng: K t chuyn dng xc nh cch thc d c cc k t trn dng vo cng nh cch chuyn dch thng tin c c trc khi gn n cho cc a ch tng ng. Cch d c th nht l c theo trng vo, khi cc khong trng b b qua. Cch ny p dng cho hu ht cc trng hp. Cch d c th hai l c theo k t, khi cc khong trng cng c xem xt bnh ng nh cc k t khc. Phng php ny ch xy ra khi ta s dng mt trong ba k t chuyn dng sau : C, [ dy k t ], [^ dy k t ] Cc k t chuyn dng v ngha ca n : c d Vo mt k t, i tng ng l con tr k t. C xt k t khong trng Vo mt gi tr kiu int, i tng ng l con tr kiu int. Trng phi vo l s nguyn ld Vo mt gi tr kiu long, i tng ng l con tr kiu long. Trng phi vo l s nguyn o Vo mt gi tr kiu int h 8, i tng ng l con tr kiu int. Trng phi vo l s nguyn h 8 lo Vo mt gi tr kiu long h 8, i tng ng l con tr kiu long. Trng phi vo l s nguyn h 8 x Vo mt gi tr kiu int h 16, i tng ng l con tr kiu int. Trng phi vo l s nguyn h 16 lx Vo mt gi tr kiu long h 16, i tng ng l con tr kiu long. Trng phi vo l s nguyn h 16 f hay e Vo mt gi tr kiu float, i tng ng l con tr float, trng vo phi l s du phy ng lf hay le Vo mt gi tr kiu double, i tng ng l con tr double, trng vo phi l s du phy ng s Vo mt gi tr kiu double, i tng ng l con tr kiu char, trng vo phi 29

l dy k t bt k khng cha cc du cch v cc du xung dng [ Dy 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[]. i tng ng l con tr kiu char. Trng vo l dy k t bt k ( khong trng c xem nh mt k t ). V d : int a,b; char ch[10], ck[10]; scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b); Vi dng vo: 35 13145 xyz 584235 S gn: 35 cho a xu "13145" cho ch xu "xyz' cho ck 584 cho b Ch : Xt on chng trnh dng nhp ( t bn phm ) ba gi tr nguyn ri gn cho ba bin a,b,c nh sau: int a,b,c; scanf("%d%d%d,&a,&b,&c); vo s liu ta c th thao tc theo nhiu cch khc nhau: Cch 1: a ba s vo cng mt dng, cc s phn cch nhau bng du cch hoc du tab. Cch 2: a ba s vo ba dng khc nhau. Cch 3: Hai s u cng mt dng ( cch nahu bi du cch ho tab ), s th ba trn dng tip theo. Cch 4: S th nht trn mt dng, hai s sau cng mt dng tip theo ( cch nhau bi du cch hoc tab), s th ba trn dng tip theo. Khi vo sai s bo li v nhy v chng trnh cha li gi n. V d minh ha s dng hm printf, scanf nhp vo hai s a, b kiu nguyn, tnh ton v a kt qu biu thc ab, #include <stdio.h> #include <conio.h> #include <math.h> void main() { int a, b; float kq; printf("\nNhap so thu nhat a= "); 30

a ln mn hnh.

scanf("%d",&a); printf("\nNhap so thu hai b= "); scanf("%d",&b); kq=sqrt(a); printf("\nKet qua %d ^ %4d = %6.2f",a,b, pow(a,b)); printf("\nKet qua can bac 2 cua %d = %4.2f",a, kq); getch(); } 3.4. Cu lnh iu kin 3.4.1. Lnh if-else: Ton t if cho php la chn chy theo mt trong hai nhnh tu thuc vo s bng khng v khc khng ca biu thc. N c hai cch vit sau : if ( biu thc ) if ( biu thc ) khi lnh 1; /* Dng mt */ Hot ng ca biu thc dng 1 : My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau lnh if trong chng trnh. Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin ngay cc lnh tip sau lnh if trong chng trnh. Hot ng ca biu thc dng 2 : My tnh gi tr ca biu thc. Nu biu thc ng ( biu thc c gi tr khc 0 ) my s thc hin khi lnh 1 v sau s thc hin cc lnh tip sau khi lnh 2 trong chng trnh. Nu biu thc sai ( biu thc c gi tr bng 0 ) th my b qua khi lnh 1 m thc hin khi lnh 2 sau thc hin tip cc lnh tip sau khi lnh 2 trong chng trnh. V d : Chng trnh nhp vo hai s a v b, tm max ca hai s ri in kt qu ln mn hnh. Chng trnh c th vit bng c hai cch trn nh sau : #include "stdio.h" main() { float a,b,max; printf("\n Cho a="); 31 khi lnh 1; else khi lnh 2 ; /* Dng hai */

scanf("%f",&a); printf("\n Cho b="); scanf("%f",&b); max=a; if (b>max) max=b; printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max); } #include "stdio.h" main() { float a,b,max; printf("\n Cho a="); scanf("%f",&a); printf("\n Cho b="); scanf("%f",&b); if (a>b) max=a; else max=b; printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max); } S lng nhau ca cc ton t if : C cho php s dng cc ton t if lng nhau c ngha l trong cc khi lnh ( 1 v 2 ) trn c th cha cc ton t if - else khc. Trong trng hp ny, nu khng s dng cc du ng m ngoc cho cc khi th s c th nhm ln gia cc if-else. Ch l my s gn ton t else vi ton t if khng c else gn nht. Chng hn nh on chng trnh v d sau : if ( n>0 ) /* if th nht*/ /* if th hai*/

if ( a>b ) z=a; else z=b;

th else y s i vi if th hai. on chng trnh trn tng ng vi : if ( n>0 ) { if ( a>b ) /* if th hai*/ 32 /* if th nht*/

z=a; else z=b; } Trng hp ta mun else i vi if th nht ta vit nh sau : if ( n>0 ) { if ( a>b ) z=a; } else z=b; 3.4.2. Lnh else-if : Khi mun thc hin mt trong n quyt nh ta c th s dng cu trc sau : if ( biu thc 1 ) khi lnh 1; else if ( biu thc 2 ) khi lnh 2; ...... else if ( biu thc n-1 ) khi lnh n-1; else khi lnh n; Trong cu trc ny, my s i kim tra t biu thc 1 tr i n khi gp biu thc no c gi tr khc 0. Nu biu thc th i (1,2, ...n-1) c gi tr khc 0, my s thc hin khi lnh i, ri sau i thc hin lnh nm tip theo khi lnh n trong chng trnh. Nu trong c n-1 biu thc khng c biu thc no khc 0, th my s thc hin khi lnh n ri sau i thc hin lnh nm tip theo khi lnh n trong chng trnh. V d : Chng trnh gii phng trnh bc hai. #include "stdio.h" main() { float a,b,c,d,x1,x2; 33 /* if th hai*/ /* if th nht*/

printf("\n Nhap a, b, c:"); scanf("%f%f%f,&a&b&c); d=b*b-4*a*c; if (d<0.0) printf("\n Phuong trinh vo nghiem "); else if (d= =0.0) printf("\n Phuong trinh co nghiem kep x1,2=%8.2f",-b/(2*a)); else { printf("\n Phuong trinh co hai nghiem "); printf("\n x1=%8.2f",(-b+sqrt(d))/(2*a)); printf("\n x2=%8.2f",(-b-sqrt(d))/(2*a)); } 3.5. Cu lnh la chn-lnh switch L cu trc to nhiu nhnh c bit. N cn c vo gi tr mt biu thc nguyn chn mt trong nhiu cch nhy. Cu trc tng qut ca n l : switch ( biu thc nguyn ) { case n1: khi lnh 1 case n2: khi lnh 2 ....... case nk: khi lnh k [ default: khi lnh k+1 } Vi ni l cc s nguyn, hng k t hoc biu thc hng. Cc ni cn c gi tr khc nhau. on chng trnh nm gia cc du { } gi l thn ca ton t switch. default l mt thnh phn khng bt buc phi c trong thn ca switch. S hot ng ca ton t switch ph thuc vo gi tr ca biu thc vit trong du ngoc ( ) nh sau : Khi gi tr ca biu thc ny bng ni, my s nhy ti cc cu lnh c nhn l case ni. Khi gi tr biu thc khc tt c cc ni th cch lm vic ca my li ph thuc vo s c mt hay khng ca lnh default nh sau : Khi c default my s nhy ti cu lnh sau nhn default. 34 ]

Khi khng c default my s nhy ra khi cu trc switch. Ch : My s nhy ra khi ton t switch khi n gp cu lnh break hoc du ngoc nhn ng cui cng ca thn switch. Ta cng c th dng cu lnh goto trong thn ca ton t switch nhy ti mt cu lnh bt k bn ngoi switch. Khi ton t switch nm trong thn mt hm no th ta c th s dng cu lnh return trong thn ca switch ra khi hm ny ( lnh return s cp sau ). Khi my nhy ti mt cu lnh no th s hot ng tip theo ca n s ph thuc vo cc cu lnh ng sau cu lnh ny. Nh vy nu my nhy ti cu lnh c nhn case ni th n c th thc hin tt c cc cu lnh sau cho ti khi no gp cu lnh break, goto hoc return. Ni cch khc, my c th i t nhm lnh thuc case ni sang nhm lnh thuc case th ni+1. Nu mi nhm lnh c kt thc bng break th ton t switch s thc hin ch mt trong cc nhm lnh ny. V d: Lp chng trnh phn loi hc sinh theo im s dng cu trc switch : #include "stdio.h" main() { int diem; tt: printf("\nVao du lieu :"); printf("\n Diem ="); scanf("%d",&diem); switch (diem) { case 0: case 1: case 2: case 3:printf("Kem\n");break; case 4:printf("Yeu\n");break; case 5: case 6:printf("Trung binh\n");break; case 7: case 8:printf("Kha\n");break; case 9: case 10:printf("Gioi\n");break; default:printf(Vao sai\n); 35

} printf("Tiep tuc 1, dung 0 :") scanf("%d",&diem); if (diem= =1) goto tt; getch(); return; } 3.6. Cu lnh lp for Ton t for dng xy dng cu trc lp c dng sau : for ( biu thc 1; biu thc 2; biu thc 3) Lnh hoc khi lnh ; Ton t for gm ba biu thc v thn for. Thn for l mt cu lnh hoc mt khi lnh vit sau t kho for. Bt k biu thc no trong ba biu thc trn c th vng mt nhng phi gi du ;. Thng thng biu thc 1 l ton t gn to gi tr ban u cho bin iu khin, biu thc 2 l mt quan h logic biu th iu kin tip tc chu trnh, biu thc ba l mt ton t gn dng thay i gi tr bin iu khin. Hot ng ca ton t for : Ton t for hot ng theo cc bc sau : B1: Xc nh biu thc 1 B2: Xc nh biu thc 2 Tu thuc vo tnh ng sai ca biu thc 2 my la chn mt trong hai nhnh: Nu biu thc hai c gi tr 0 ( sai ), my s ra khi for v chuyn ti cu lnh sau thn for. Nu biu thc hai c gi tr khc 0 ( ng ), my s thc hin cc cu lnh trong thn for. Tnh biu thc 3, sau quay li bc 2 bt u mt vng mi ca chu trnh. Ch : Nu biu thc 2 vng mt th n lun c xem l ng. Trong trng hp ny vic ra khi chu trnh for cn phi c thc hin nh cc lnh break, goto hoc return vit trong thn chu trnh. Trong du ngoc trn sau t kho for gm ba biu thc phn cch nhau bi du ;. Trong mi biu thc khng nhng c th vit mt biu thc m c quyn vit mt dy biu thc phn cch nhau bi du phy. Khi cc biu thc trong mi phn c xc nh t tri sang phi. Tnh ng sai ca dy biu thc c tnh l tnh ng sai ca biu thc cui cng trong dy ny. 36

Trong thn ca for ta c th dng thm cc ton t for khc, v th ta c th xy dng cc ton t for lng nhau. Khi gp cu lnh break trong thn for, my ra s ra khi ton t for su nht cha cu lnh ny. Trong thn for cng c th s dng ton t goto nhy n mt v tr mong mun bt k. 3.7. Cu lnh while - C php : while ( biu thc 1) lnh 1 ; - Nguyn tc thc hin : +b1. Tnh gi tr ca biu thc 1. +b2. Nu gi tr ca biu thc 1 sai ( = 0 ) th chng trnh ra khi vng while +b3. Nu gi tr ca biu thc ng th thc hin lnh 1 v quay li bc 1(b1). - Ch : Biu thc 1 c th gm nhiu biu thc nhng tnh ng sai ph thuc vo biu thc cui cng. V d : Nhp 1 dy s nguyn t bn phm #include < stdio.h > #include < conio.h > main () { int dayso [ 10 ] ; int i = 0 ; while ( i < 10) { printf ( "\n S thu %d : ", i ); scanf ( " %d", & dayso [i]); i ++ ; } 3.8. Cu lnh do while - C php : do { lnh 1 ; }while ( biu thc 1 ) ; - Nguyn tc thc hin : +b1. My thc hin cu lnh 1 ; +b2. Sau tnh gi tr ca biu thc 1, nu gi tr ca biu thc 1 sai th chng trnh thot ra khi vng lp. Nu gi tr ca biu thc 1 ng th quay li bc 1. Ch : - while : iu kin c kim tra trc, nu ng mi thc hin. - do while : cu lnh c thc hin trc khi kim tra. Cu lnh thc hin bao gi t nht l 1 ln. ( do while ngc vi Repeat until ca Pascal : lnh Do while sai th dng, cn lnh repeat until ng th dng ). -Biu thc 1 c th gm nhiu biu thc, tuy nhin tnh ng sai cn c theo biu thc cui cng. * V d : tnh pi vi sai s eps = 1E - 4 , pi = 4 - 4/3 + 4/5 - 4/7 + ...eps #include < stdio.h > #include < conio.h> main () { 37

float pi, dau, i , eps, saiso ; i=1.0; dau = -1; saiso = 1e -4 ; pi = 4.0; printf ( "\n ang x l vui lng i !"); do { eps = 4.0 / ( 2.0 * i + 1.0 ); pi + = dau * eps ; dau = dau * - 1.0 ; i + = 1.0; } while ( eps > saiso ); printf ("\n s pi l : " % f ", pi ) ; getch (); } 3.9. Cu lnh break - C php : Dng thot khi vng lp. Khi gp cu lnh ny trong vng lp, my ra khi v ch n cu lnh sau cc lnh trn. Nu nhiu vng lp ----> break s thot ra khi vng lp gn nht. 3.10. Lnh continue - C php continue; : khi gp lnh ny trong cc vng lp, my s b qua phn cn li trong vng lp v tip tc thc hin vng lp tip theo. - i vi lnh For my s tnh li biu thc 3 (bt3) v quay li bc 2. - i vi lnh while, do while my s tnh li gi tr ca biu thc 1 v quay li bc 1. * V d : Nhp 1 chui k t k c k t trng v b qua cc k t khng hp l v kt thc khi n ESC hoc s k t vt qu kch thc mng. char xau [MAXL], kytu ; int i = 0 ; while (1) /* lun lun ng vng lp vnh cu */ { kytu = getch ( ) ; if ( kytu = = 27 ) break ; if ( i >= MAXL ) break ; if ( kytu > 122 || kytu < 65 ) continue ; Xau [ i ++] = kytu ; } xau [ i ] = ' \ 0 ' ; 3.11. Ton t goto v nhn ( label ) - V d : tiep tuc : st = a[ i ]; => tiep tuc l nhn ca lnh st = a [ i ]; - Lnh goto nhn => nhy n cu lnh ng sau nhn. - CH : PHM VI NHN TRONG CNG 1 HM. Bi tp: 1. Vit chng trnh gii pt bc nht ax+b=0 2. Vit chng trnh gii bt pt bc nht ax+b<0 3. Vit chng trnh gii pt bc hai ax2+bx+c=0 38

4. Vit chng trnh tm c s chung ln nht ca 2 s 5. Vit chng trnh tm s ln nht trong dy cc s nhp vo CHNG 4. HM CHNG TRNH V CU TRC CHNG TRNH. 4.1. Khi nim v chng trnh con Mt chng trnh vit trong ngn ng C l mt dy cc hm, trong c mt hm chnh ( hm main() ). Hm chia cc bi ton ln thnh cc cng vic nh hn, gip thc hin nhng cng vic lp li no mt cch nhanh chng m khng phi vit li on chng trnh. Th t cc hm trong chng trnh l bt k, song chng trnh bao gi cng i thc hin t hm main(). 4.2. Hm trong C Hm c th xem l mt n v c lp ca chng trnh. Cc hm c vai tr ngang nhau, v vy khng c php xy dng mt hm bn trong cc hm khc. Xy dng mt hm bao gm: khai bo kiu hm, t tn hm, khai bo cc i v a ra cu lnh cn thit thc hin yu cu ra cho hm. Mt hm c vit theo mu sau : type tn hm ( khai bo cc i ) { Khai bo cc bin cc b Cc cu lnh [return[biu thc];] } Dng tiu : Trong dng u tin ca hm cha cc thng tin v : kiu hm, tn hm, kiu v tn mi i. V d : float max3s(float a, float b, float c) khai bo cc i c dng : Kiu i 1 tn i 1, kiu i 2 tn i 2,..., kiu i n tn i n Thn hm : Sau dng tiu l thn hm. Thn hm l ni dung chnh ca hm bt u v kt thc bng cc du { }. Trong thn hm cha cc cu lnh cn thit thc hin mt yu cu no ra cho hm. Thn hm c th s dng mt cu lnh return, c th dng nhiu cu lnh return cc ch khc nhau, v cng c th khng s dng cu lnh ny. Dng tng qut ca n l : 39

return [biu thc]; Gi tr ca biu thc trong cu lnh return s c gn cho hm. V d : Xt bi ton: Tm gi tr ln nht ca ba s m gi tr m gi tr ca chng c a vo bn phm. Xy dng chng trnh v t chc thnh hai hm : Hm main() v hm max3s. Nhim v ca hm max3s l tnh gi tr ln nht ca ba s c vo, gi s l a,b,c. Nhim v ca hm main() l c ba gi tr vo t bn phm, ri dng hm max3s tnh nh trn, ri a kt qu ra mn hnh. Chng trnh c vit nh sau : #include "stdio.h" float max3s(float a,float b,float c ); /* Nguyn mu hm*/ main() { float x,y,z; printf("\n Vao ba so x,y,z:"); scanf("%f%f%f",&x&y&z); printf("\n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la : %8.2f", x,y,z,max3s(x,y,z)); } /* Kt thc hm main*/

float max3s(float a,float b,float c) { float max; max=a; if (max<b) max=b; if (max<c) max=c; return(max); } /* Kt thc hm max3s*/ Quy tc hot ng ca hm: Mt cch tng qut li gi hm c dng sau : tn hm ([Danh sch cc tham s thc]) S cc tham s thc t thay vo trong danh sch cc i phi bng s tham s hnh thc v ln lt chng c kiu tng ng vi nhau.

40

Khi gp mt li gi hm th n s bt u c thc hin. Ni cch khc, khi my gp li gi hm mt v tr no trong chng trnh, my s tm di ch v chuyn n hm tng ng. Qu trnh din ra theo trnh t sau : Cp pht b nh cho cc bin cc b. Gn gi tr ca cc tham s thc cho cc i tng ng. Thc hin cc cu lnh trong thn hm. Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc i, bin cc b v ra khi hm. Nu tr v t mt cu lnh return c cha biu thc th gi tr ca biu thc c gn cho hm. Gi tr ca hm s c s dng trong cc biu thc cha n. 4.3. Chuyn tham s cho hm Cc tham s hnh thc: l cc tham s c khai bo phn khai bo (nh ngha hm). Cc tham s ny khng c gi tr thc s, chng ch c ngha v mt hnh thc. Cc tham s thc: l cc tham s c truyn vo khi hm c gi thc hin. Chng thay th cc tham s hnh thc. 4.4. Bin ton cc v bin a phng Bin ton cc l bin nm ngoi tt c cc hm. Bin cc b l bin c khai bo bn trong mt hm no . Tham s hnh thc c th coi l bin cc b. Do i v bin cc b u c phm vi hot ng trong cng mt hm nn i v bin cc b cn c tn khc nhau. i v bin cc b u l cc bin t ng. Chng c cp pht b nh khi hm c xt n v b xo khi ra khi hm nn ta khng th mang gi tr ca i ra khi hm. i v bin cc b c th trng tn vi cc i lng ngoi hm m khng gy ra nhm ln no. Khi mt hm c gi ti, vic u tin l gi tr ca cc tham s thc c gn cho cc i ( trong v d trn hm max3s, cc tham s thc l x,y,z, cc i tng ng l a,b,c ). Nh vy cc i chnh l cc bn sao ca cc tham s thc. Hm ch lm vic trn cc i. Cc i c th b bin i trong thn hm, cn cc tham s thc th khng b thay i. Ch : Khi hm khai bo khng c kiu trc n th n c mc nh l kiu int. Khng nht thit phi khai bo nguyn mu hm. Nhng ni chung nn c v n cho php chng trnh bin dch pht hin li khi gi hm hay t ng vic chuyn dng. Nguyn mu ca hm thc cht l dng u tin ca hm thm vo du ;. Tuy nhin trong nguyn mu c th b tn cc i. 41

Hm thng c mt vi i. V d nh hm max3s c ba i l a,b,c. c ba i ny u c gi tr float. Tuy nhin, cng c hm khng i nh hm main. Hm thng cho ta mt gi tr no . L d nhin gi tr ca hm ph thuc vo gi tr cc i. Hm khng cho cc gi tr Cc hm khng cho gi tr ging nh th tc ( procedure ) trong ngn ng lp trnh PASCAL. Trong trng hp ny, kiu ca n l void. V d hm tm gi tr max trong ba s l max3s trn c th c vit thnh th tc hin th s cc i trong ba s nh sau : void htmax3s(float a, float b, float c) { float max; max=a; if (max<b) max=b; if (max<c) max=c; } Lc ny, trong hm main ta gi hm htmax3s bng cu lnh : htmax3s(x,y,z); 4.5.Tnh quy ca hm 4.5.1. M u: C khng nhng cho php t hm ny gi ti hm khc, m n cn cho php t mt im trong thn ca mt hm gi ti chnh hm . Hm nh vy gi l hm qui. Khi hm gi qui n chnh n, th mi ln gi my s to ra mt tp cc bin cc b mi hon ton c lp vi tp cc bin cc b c to ra trong cc ln gi trc. minh ho chi tit nhng iu trn, ta xt mt v d v tnh giai tha ca s nguyn dng n. Khi khng dng phng php qui hm c th c vit nh sau : long int gt(int n) /* Tnh n! vi n>=0*/ { long int gtphu=1; int i; for (i=1;i<=n;++i) gtphu*=i; return s; } Ta nhn thy rng n! c th tnh theo cng thc truy hi sau : n!=1 nu n=0 42

n!=n*(n-1)!

nu n>0

Hm tnh n! theo phng php qui c th c vit nh sau : long int gtdq(int n) { if (n==0 || n==1) return 1; else return(n*gtdq(n-1)); } Ta i gii thch hot ng ca hm qui khi s dng trong hm main di y : #include "stdio.h" main() { printf("\n 3!=%d",gtdq(3)); } Ln gi u tin ti hm gtdq c thc hin t hm main(). My s to ra mt tp cc bin t ng ca hm gtdq. Tp ny ch gm cc i n. Ta gi i n c to ra ln th nht l n th nht. Gi tr ca tham s thc ( s 3 ) c gn cho n th nht. Lc ny bin n trong thn hm c xem l n th nht. Do n th nht c gi tr bng 3 nn iu kin trong ton t if l sai v do my s la chn cu lnh else. Theo cu lnh ny, my s tnh gi tr biu thc : n*gtdq(n-1) (*) tnh biu thc trn, my cn gi chnh hm gtdq v th ln gi th hai s thc hin. My s to ra i n mi, ta gi l n th hai. Gi tr ca n-1 y li l i ca hm , c truyn cho hm v hiu l n th hai, do vy n th hai c gi tr l 2. By gi, do n th hai vn cha tho mn iu kin if nn my li tip tc tnh biu thc : n*gtdq(n-1) (**) Biu thc trn li gi hm gtdq ln th ba. My li to ra i n ln th ba v y n th ba c gi tr bng 1. i n=1 th ba li c truyn cho hm, lc ny iu kin trong lnh if c tho mn, my i thc hin cu lnh : return 1=gtdq(1) (***) Bt u t y, my s thc hin ba ln ra khi hm gtdq. Ln ra khi hm th nht ng vi ln vo th ba. Kt qu l i n th ba c gii phng, hm gtdq(1) cho gi tr l 1 v my tr v xt gi tr biu thc n*gtdq(1) y l kt qu ca (**) 43

y, n l n th hai v c gi tr bng 2. Theo cu lnh return, my s thc hin ln ra khi hm ln th hai, i n th hai s c gii phng, kt qu l biu thc trong (**) c gi tr l 2.1. Sau my tr v biu thc (*) lc ny l : n*gtdq(2)=n*2*1 n li hiu l th nht, n c gi tr bng 3, do vy gi tr ca biu thc trong (*) l 3.2.1=6. Chnh gi tr ny c s dng trong cu lnh printf ca hm main() nn kt qu in ra trn mn hnh l : 3!=6 Ch : Hm qui so vi hm c th dng vng lp th n gin hn, tuy nhin vi my tnh khi dng hm qui s dng nhiu b nh trn ngn xp v c th dn n trn ngn xp. V vy khi gp mt bi ton m c th c cch gii lp ( khng dng qui ) th ta nn dng cch lp ny. Song vn tn ti nhng bi ton ch c th gii bng qui. 4.5.2. Cc bi ton c th dng qui Phng php qui thng p dng cho cc bi ton ph thuc tham s c hai c im sau : Bi ton d dng gii quyt trong mt s trng hp ring ng vi cc gi tr c bit ca tham s. Ngi ta thng gi l trng hp suy bin. Trong trng hp tng qut, bi ton c th qui v mt bi ton cng dng nhng gi tr tham s th b thay i. Sau mt s hu hn bc bin i d qui n s dn ti trng hp suy bin. Bi ton tnh n giai tha nu trn th hin r nt c iu ny. 4.5.3. Cch xy dng hm qui : Hm qui thng c xy dng theo thut ton sau : if ( trng hp suy bin) { Trnh by cch gii bi ton khi suy bin } else /* Trng hp tng qut */ { Gi qui ti hm ( ang vit ) vi cc gi tr khc ca tham s } 44

4.5.4. Cc v d v dng hm qui : V d 1 : Bi ton dng qui tm USCLN ca hai s nguyn dng a v b. Trong trng hp suy bin, khi a=b th USCLN ca a v b chnh l gi tr ca chng. Trong trng hp chung : uscln(a,b)=uscln(a-b,b) nu a>b uscln(a,b)=uscln(a,b-a) nu a<b Ta c th vit chng trnh nh sau : #include "stdio.h" int uscln(int a,int b ); /* Nguyn mu hm*/ main() { int m,n; printf("\n Nhap cac gia tri cua a va b :"); scanf("%d%d",&m,&n); printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n)) } int uscln(int a,int b) { if (a==b) return a; else if (a>b) return uscln(a-b,b);

else return uscln(a,b-a); } V d 2 : Chng trnh c vo mt s ri in n ra di dng cc k t lin tip. # include "stdio.h" # include "conio.h" void prind(int n); main() 45

{ int a; clrscr(); printf("n="); scanf("%d",&a); prind(a); getch(); } void prind(int n) { int i; if (n<0) { putchar('-'); n=-n; } if ((i=n/10)!=0) prind(i); putchar(n%10+'0'); } 4.6. B tin x l C C a ra mt s cch m rng ngn ng bng cc b tin s l macro n gin. C hai cch m rng chnh l #define m ta hc v kh nng bao hm ni dung ca cc file khc vo file ang c dch. Bao hm file : d dng x l mt tp cc #define v khai bo ( trong cc i tng khc ), C a ra cch bao hm cc file khc vo file ang dch c dng : #include "tn file" Dng khai bo trn s c thay th bi ni dung ca file c tn l tn file. Thng thng c vi dng nh vy xut hin ti u mi file gc gi vo cc cu lnh #define chung v cc khai bo cho cc bin ngoi. Cc #include c php lng nhau. Thng th cc #include c dng nhiu trong cc chng trnh ln, n m bo rng mi file gc u c cung cp cng cc nh ngha v khai bo bin, do vy trnh c cc li kh chu do vic thiu cc khai bo nh ngha. Tt nhin khi thay i file c bao hm vo th mi file ph thuc vo n u phi dch li. 46

Php th MACRO : nh ngha c dng : #define biu thc 1 [ biu thc 2 ] s gi ti mt macro thay th biu thc 2 (nu c) cho biu thc 1. V d : #define YES 1 Macro thay bin YES bi gi tr 1 c ngha l h c ch no trong chng trnh c xut hin bin YES th n s c thay bi gi tr 1. Phm vi cho tn c nh ngha bi #define l t im nh ngha n cui file gc. C th nh ngha li tn v mt nh ngha c th s dng cc nh ngha khc trc . Php th khng thc hin cho cc xu du nhy, v d nh YES l tn c nh ngha th khng c vic thay th no c thc hin trong on lnh c "YES". V vic thit lp #define l mt bc chun b ch khng phi l mt phn ca chng trnh bin dch nn c rt t hn ch v vn phm v vic phi nh ngha ci g. Chng hn nh nhng ngi lp trnh a thch PASCAL c th nh ngha : #define then #define begin { #define end; } sau vit on chng trnh : if (i>0) then begin a=i; ...... end; Ta cng c th nh ngha cc macro c i, do vy vn bn thay th s ph thuc vo cch gi ti macro. V d : nh ngha macro gi max nh sau : #define max(a,b) ((a)>(b) ?(a):(b)) Vic s dng : x=max(p+q,r+s); tng ng vi : x=((p+q)>(r+s) ? (p+q):(r+s)); 47

Nh vy ta c th c hm tnh cc i vit trn mt dng. Chng no cc i cn gi c tnh nht qun th macro ny vn c gi tr vi mi kiu d liu, khng cn phi c cc loi hm max khc cho cc kiu d liu khc nhng vn phi c i cho cc hm. Tt nhin nu ta kim tra li vic m rng ca hm max trn, ta s thy rng n c th gy ra s by. Biu thc c tnh li hai ln v iu ny l khng tt nu n gy ra hiu qu ph kiu nh cc li gi hm v ton t tng. Cn phi thn trng dng thm du ngoc m bo trt t tnh ton. Tuy vy, macro vn rt c gi tr. Ch : Khng c vit du cch gia tn macro vi du m ngoc bao quanh danh sch i. V d : Xt chng trnh sau : main() { int x,y,z; x=5; y=10*5; z=x+y; z=x+y+6; z=5*x+y; z=5*(x+y); z=5*((x)+(y)); printf("Z=%d",z); getch(); return; } Chng trnh s dng MACRO s nh sau : #define BEGIN { #define END } #define INTEGER int #define NB 10 #define LIMIT NB*5 #define SUMXY x+y #define SUM1 (x+y) #define SUM2 ((x)+(y)) main() 48

BEGIN INTEGER x,y,z; x=5; y=LIMIT; z=SUMXY; z=5*SUMXY; z=5*SUM1; z=5*SUM2; printf("\n Z=%d",z); getch(); return; END Bi tp 1. Vit hm tm c s chung ln nht ca 2 s 2. Vit hm tm bi s chung nh nht ca 2 s 3. Vit hm tm s ln nht ca 3 s 4. Vit hm in cc s chn trong mt dy s nhp t bn phm 5. Vit hm tnh tng cc s t 1 - n

49

CHNG 5. MNG V CC KIU D LIU C CU TRC 5.1.D liu kiu mng/con tr Mng l tp hp ca cc bin cng kiu c xp lin tip nhau trong b nh trong. 5.1.1. Mng 1 chiu v nhiu chiu a/ Khai bo mng 1 chiu : < kiu phn t > < tn mng> [ < ch s > ] V d : int a [5 ] ; => a [0] a[1] a[2] a [3] a [4] ( ch s chy t 0 n n - 1 ). char S [20] ; => 'A' 'B' ...... 'X ' S[0]S[1] S[19] b/ Cch nhp s liu cho mng t bn phm ( c th dng hm Random C). + Mng s nguyn : V d : Nhp vo mng s nguyn 5 phn t #include < stdio.h> #include < conio.h> #define n 5 main () { int a [ n ] ; int i ; for ( i = 0 ; i < n ; i ++ ) { printf ( " a [ %d ] = " , i ); scanf ( " % d" , & a [ i ]); } /* Xut s liu mng ra mn hnh */ for ( i = 0 ; i < n ; ++ i) printf ( " \ n a [ % d ] = % d ", i , a [ i ]); getch (); } + Mng s thc float : #include <stdio.h> #include < conio.h> #define n 5 ; main () { float a [ n ] , tam ; .....scanf ( " % f " , &tam) ; /*nhp qua bin trung gian tm */ a [ i ] = tam ; c/Khi to mng : a [ 5 ] = { 1,2,3,5,4 }a[0]=1 a[2]=2 .. a[4]=4 d/ Mng k t : - l chui k t kt thc bng k t NULL c m ASCII l 0 . - V d : char S [3] = { 'L', '0', 'P'] : chui ny khng ng do thiu ch cho k t kt thc l NULL. - Ta c th gn : char S [ 4 ] = " Lop "; Ngn ng C s t ng ghi k t kt thc l NULL, tc l ' \0 '. char S[ ] = " Lop " ; Khng cn khai bo s phn t mng. * V d 1 : Nhp v mt mng s nguyn sau sp xp theo th t tng dn : #include < stdio.h> #define n 5 main ( ) { 50

int a [ n ] ; int i , j, t ; for ( i = 0 ; i > n ; i ++ ); { printf ( " nhp a [ % d] = " , i ); scanf ( " %d", & a [i ]); } /* Sp xp tng dn */ for ( i = 0 ; i < n - 1 ; i ++) for ( j = i + 1 ; j < n ; j ++ ) if ( a [ i ] < a [j ] ) { t = a [ i ] ; a [ i ] = a [ j ]; a [j ] = t ; } /* in kt qu */ for ( i = 0 ; i < n ; i ++ ) printf ( " % 5d " , a [ i ] ); getch ( ); } V d 2 : Lm li v d 1 nhng vit ring hm sp xp v truyn tham s cho mng 1 chiu #include <stdio.h> #include <conio.h> #define N 5 void sapxep ( int a [ ] , int n ); void main ( ) { int a [ N ] ; int i ; /* nhp 1 s liu cho mng */ for ( i = 0 ; i < N , i ++ ) { printf ( " A [ %d ] = ", i ); scanf ( " %d ", & a [ i ] ); } /* gi hm sp xp sp tng dn */ sapxep ( a, N ); /* in kt qu */ for ( i = 0 ; i < N ; i ++ ) printf ( " %5d ", a [ i ] ); getch ( ); } /* hm sp xp tng dn */ void sapxep ( int a [ ], int n ) { int i, j, t ; for ( i = 0 ; i > n - 1 ; i ++) for ( j = i + 1 ; j < n ; j ++ ) if ( a [ i ] > a [ j ] { t = a [ i ] ; a [ i ] = a [ j ] ; a [j ] = t ; } * V d 3 : chuyn i 1 chui k t thng thnh Hoa. Ch : + Hm tolower ( ch ) : i 1 k t ch thnh thng. + Hm toupper ( ch ) : i k t ch thnh Hoa. + C 2 hm trn u nm trong th vin : < ctyte.h> Gii : #include < stdio.h> # include < ctyte.h> 51

#define n 20 main ( ) { char s [ n ] ; int i ; for ( i = 0 ; i < n ; i ++ ) s[ i ] = toupper ( getchar ( ) ) ; /* nhp k t v i thnh hoa lu vo mng */ /* kt xut chui s */ for ( i = 0 ; i < n ; i ++ ) putchar ( s [ i ] ) ; /* putchar ( ch ) : in k t ch ra mn hnh */ getch ( ) } Bi tp : 1/ vit chng trnh nhp s liu cho mng A gm N phn t v mng B gm n phn t , sau ghp 2 mng A v B thnh mng C gm m + n phn t v sp xp tng dn ( Bi ny phi dng hm nhp s liu cho mng v hm sp xp). - Tnh tng cc phn t m, dng, s chn, s l v tng tt c cc phn t ca mng C [ m + n ].In cc s l trn 1 hng v cc s chn trn 1 hng. - Nhp vo mt gi tr v tm xem gi tr c thuc vo mng C khng. Nu c in ra tt c cc phn t tm c. d) Mng nhiu chiu Khai bo mng hai chiu : < kiu phn t > < tn mng > [ < ch s hng > ] [ < ch s ct >] *V d 1 : int a [ 3 ] [ 2 ] ; float b [ 3 ] [ 4 ] ; char c [5 ] [6 ] ; => a [ 0 ] [0 ] a [ 0 ] [ 1 ] a [ 1 ] [ 0 ] a [ 1 ] [ 1] a[2][0]a[2][1] V d 2 : #define Hang 5 # define Cot 6 int a [ Hang ] [ Cot ] ; => ta c cc bin chy i ( ch s chy t 0 n ( Dong - 1)). ta c cc bin chy j ( ch s chy t 0 n ( Cot - 1 )) . a [0] [0] a [0][1] ...... a [ 0 ][Cot - 1] a [1] [0] a [1][1] ...... a [a][Cot - 1] ................................. a[Dong-1][0]...... . . . . . . . . a[Dong-1][Cot-1] *V d : Vit chng trnh tnh tng, tch cc s trong mng s thc a[3][2] ; #include < stdio.h> #define N 3 #define N 2 main ( ) { int i , j ; float a [M][N] ; float tong, tich, tam ; /* nhp s liu */ for ( i = 0 ; i < M ; i ++ ) for ( j = 0 ; j < N ; j ++ ) { printf ( " nhp a [ %d][%d] = " , i , j ); scanf ( " %f " , & tam ) ; a [i][j] = tam ;} /* tnh tng */ Tong = 0 ; Tich = 1; for ( i = 0 ; i < M ; i ++ ) for ( j = 0 ); j < N ; j ++ ) 52

{ Tong = Tong + a [ i ][j] ; Tich = Tich * a [i][j] ; } /* in kt qu */ printf ( " Tng l tng = %f, TONG ); printf ( " tch l TICH = %F, TICH ); getch ( ) ; } Truyn tham s mng nhiu chiu cho hm ( tham s thc l tn mng nhiu chiu ) - gi s a l mng 2 chiu : float a[M][N] + Chng trnh gi : { float a [M][N] Tong ( a ) ;// ( truyn a ch ca mng cho hm ) } + Chng trnh b gi ( chng trnh con ) : float tong ( float a[ ][N] ) /* khai bo i nhn a ch ca mng */ { } Note : hm tong ch dng c i vi cc mng hai chiu c N ct v s hng khng quan trng, khng khai bo ) : * V d : Vit chng trnh tnh tng ca 2 ma trn cp m x n theo cng thc : C[i][j] = a[i][j] + b [i][j] #include <stdio.h> #define m 3 #define n 4 /* cc prototype ( khai bo hm )*/ void nhap ( int a[ ][N] , int M, int N ); void TongMT ( int a[ ][N], int b[ ][N] , int c [ ][N], int M , int N ); void InMT ( int c [ ][N], int M, int N ); /* chng trnh chnh */ { int a [M][N], b[M][N], c[M][N] ; /* gi cc hm */ Nhap ( a, M ,N ) ; nhap ( b, M,N); TONGMT ( a, b, c , M, N ); InMT ( c, M, N ); Getch ( ) ; } /* Hm nhp s liu cho mng 2 chiu m x n phn t */ void Nhap ( int a [ ][N] , int M , int N ) { int i , j ; for ( i= 0 ; i < M ; i ++ ) for ( j = 0 ; j < N ; j++ ) { printf ( " a[%d][5d] = " , i , j ) ; scanf ( " %d " , &a [i][j]) ; } return ; } void TongM ( int a [ ][N], int b [ ][N], int c [ ][N], int M , int N ) { int i, j ; for ( i = 0 ; i < M ; i ++ ) 53

for ( j = 0 ; j < N ; j ++ ) c [i][j] = a [i][j] + b [i][j] ; return ; } /* in kt qu */ void inMT ( int c[ ][N], int M, int N ) { int i, j ; for ( i = o ; i < M ; i ++ ) { for ( j = 0 ; j < N ; j ++ ) printf ( " % 3d", a[i][j] ); printf ( " \n " ) ; /* xung dng */ } return ; } Bi tp mng : 1/ cho mng 2 chiu A, l ma trn vung cp n x n , lp chng trnh : a/ tnh tng tt c cc phn t dng ca mng. b/ tnh tng cc phn t A[i][j] m i + j chia ht cho 5 . c/ In ra cc s nguyn t theo tng hng. d/ Sp xp theo hng. e/ Sp xp theo ct . f/ Tnh tng cc phn t trn ng cho ( i = j ) , ng bin. g/ Tm max ; min theo tng hng, ct v ton b ma trn. 2/ Mt chui gi l palindrone nu n khng thay i khi ta o ngc th t ca cc k t trong n ( v d " 12321 " ) . Lp chng trnh c mt chui ( xu ) k t v xc nh xem c tnh palondrone khng. 5.1.2. Bin con tr a) Khi nim con tr ( pointer ) v a ch : - Mi bin trong ngn ng C u c 1 tn v tng ng vi n l mt vng nh dng cha gi tr ca n. Tu theo bin m vng nh dnh cho bin c di khc nhau. a ch ca bin l s th t ca byte u tin tng ng vi bin . a ch ca bin c kiu khc nhau l khc nhau. a ch v bin kiu int lin tip cch nhau 2 byte , bin kiu float l 4 byte. - Con tr l bin dng cha a ch ca bin khc hoc c th l mt hm. Do c nhiu loi a ch nn cng c nhiu loi bin con tr. Con tr kiu int dng cha a ch ca kiu int. Con tr kiu float dng cha a ch kiu float. - Mun s dng c pointer, trc tin phi c c a ch ca bin m ta cn quan tm bng php ton ly a ch & . Kt qu ca php ly a ch & s l 1 phn t hng. * V d : int num ; => &num l a ch ca num. int pnum ; /* pnum l 1 pointer ch n mt int */ pnum = & num ; /* pnum cha a ch bin int num*/ gi s : num = 5 ; => * pnum = 5 /* do * l ton t ni dung */ Hai cu lnh sau y l tng ng Num = 100 ; ( * pnum ) = 100 ; - Quy tc khai bo bin con tr : < kiu d liu> * < tn bin con tr > *V d 2 : int a, *p ; a = 5 ; /* gi s a ch ca a l < 106 > */ p = & a ; /* p = <106> */ p = a ; /* php gn sai */ 54

* p = a ; /* php gn ng */ scanf ( " %d " , &a ) ; tng ng scanf ( " %d , p ) ; b) Tnh ton trn bin con tr ( pointer ) + Hai bin con tr cng kiu c th gn cho nhau : V d 1 : int a, * p, *a ; float * f; a = 5 ; p = &a ; q = p ; /* ng */ f = p ; /* sai do khc kiu */ f = ( float * )p ; /* ng nh p kiu con tr nguyn v kiu float */ V d 2 : int a ; char *c ; c = &a ; /* sai v khc kiu */ c = ( char*) /* ng */ + Mt bin pointer c th c cng, tr vi mt s nguyn ( int , long ) cho kt qu l mt pointer. * V d : int a , *p , * p10 ; a=5; p = &a ; p10 = p + 10 ; V d : int V[10] ;/* mng 10 phn t */ int *p ; p = & V[0]; for ( i = 0 ; i < 10 ; i ++ ) { *p = i ; /* gn gi tr i cho phn t m p ang tr n */ p ++ /* p c tng ln 1 ch n phn t k tip */ } /* kt qu V[0] = 0 , V [ 1] = 1 ... V[9] = 9 * / + Php tr 2 pointer cho kt qu l mt s int biu th khong cch ( s phn t ) gia 2 pointer . + Php cng 2 pointer l khng hp l, pointer khng c nhn chia vi 1 s nguyn hoc nhn chia vi nhau. + p = NULL : l con tr p khng tr n u c. Ch : khng c s dng bin con tr khi cha c khi gn . V d : int a , *p ; scanf ( "%d", p ) ( sai ) => thay bng cc lnh : p = &a v scanf ( "%d" p ) ( ng) c) Con tr mng + Mng 1 chiu v con tr : - Trong ngn ng C : gia mng v con tr c mi quan h cht ch. Cc phn t ca mng c th xc nh nh ch s hoc thng qua con tr. - V d : int A[5] ; * p ; P=A; + mng b tr 5 nh lin tip ( mi chim 2 byte ). + Tn mng l 1 hng a ch ( khng thay i c ), chnh l a ch ca phn t u tin. => A tng ng vi &A[0] (A + i ) tng ng vi &A[i] *(A + i ) tng ng vi A[i] p = A => p = &A[0] ( p tr ti phn t A[0]) *(p + i ) tng ng vi A[i]. =>bn cch vit nh sau l tng ng : A[i], * ( a + i ), * ( p + i ), p[i]. 55

V d 2 : int a [5] ; *p ; p=a; for ( i = 0; i < 5 ; ++ i) scanf ( " %d ", &a[i]); ( 1) scanf ( " %d ",a + i ); ( 2) scanf ( " %d", p + i ); ( 3) scanf ( " % d", p ++ ); ( 4) scanf ( " %d ", a ++ ); sai v a ch ca a l hng. - Cc lnh (1), (2), (3), (4) tng ng nhau. V d 3 : Nhp 5 s nguyn vo 1 mng gm 5 phn t ( a[5]) sau sp xp tng dn, in ra s ln nht vf nh nht v tnh tng ca 5 s . #include <stdio.h> #define n 5 main ( ) { int a [n], t , *p, i , j, ; int s ; p=a; for ( i = 0; i < n ; i ++ ) { printf ( " a[%d] = " , i ) ; scanf ( " %d ", p + i ) } /* Sp xp tng dn */ for ( i = 0 ; i < n-1 ; i ++ ) for ( j = i + 1 ; j<n ; j++) if ( *(a + i ) > * ( a + j ) { t = * ( a + i ) ; *(a + i ) = * ( a + j) ; *(a + j ) = t ; } s= 0 ; for ( j=0 ; i < n , ++i ) s + = a[ i]; printf ("\n Tong = %5d ", s ); printf ( "\n s ln nht l %d ", a [4] ); printf ( " s nh nht l %d \n ", a [d] ); getch ( ); } + Con tr v mng nhiu chiu : - Php ton ly a ch & ch p dng c vi mng 2 chiu kiu nguyn. Cc kiu khc khng c. * V d 1 : int a[2][3] { scanf ( "%d", & a[1][1]) } ( ng ) * V d 2 : float a[2][3] Scanf (" %f", &a[1][1]); ( sai ). - Mng 2 chiu a[2][3] => gm 2 x 3 = 6 phn t c 6 a ch lin tip theo th t sau : Phn t : a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] ( * ) a ch : 0 1 2 3 4 5 - Ngn ng C quan nim mng 2 chiu l mng mt chiu ca mng a[2][3] tng ng khng phn t m mi phn t ca n gm 3 s nguyn nn : a tr ti hng th nht ( a [0][0] ) a+1 tr ti hng th hai ( a[1][0] ) - Do duyt cc phn t ca mng a[2][3] ta dng con tr theo cch sau : + ( theo * ) => ta c cng thc a[i][j] = ( int*) a + i * n + j trong : int* : con tr a ( a ch a ). n : s ct. - float a[2][3] , *p ; p = ( float*)a ; /* ch lnh ny */ khi : p tr ti a[0][0] /* p = & a[0][0] */ 56

p + 1 tr ti a[0][1] /* *(p+1) = a[0][1] */ P + 2 tr ti a[0][2] .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p + 5 tr ti a[1][2] /* *(p+5) = a[1][2] */ * Tng qut : a[i][j] = * ( p + i* N + 5 ); trong N : s ct ) Kt lun : Mng 2 chiu c th chuyn thnh mng 1 chiu nh con tr. * V d : nhp mt s liu vo mng 2 chiu kiu float a[2][3] ta c th dng cc cch sau: + Cch 1 : #include " stdio.h " main ( ) { float a[2][3] , *p ; int i ; p = (float*)a ; /* lu lnh ny */ for ( i = 0 ; i < 2*3 ; ++i) scanf ( "%f", (p+i)) ; /* (p_+ i ) l a ch */ ( X ) } + Cch 2 : Sa lnh ( X ) nh sau : scanf ( "%f", (float*)a + 1 ) ; + Cch 3 : #include " stdio.h " #define m 2 #define n 3 main ( ) { float a[m][n] ; int i , j ; float *p ; p = ( float* )a ; for ( i=0 ; i<m ; i++ ) for ( j=0 ; j<n ; j++ ) scanf ( "%f" , ( p +i*n + j ) hoc lnh scanf ( " %f" , ( float *)a + i * N + j )); } + Cch 4 : s dng bin trung gian : #include " stdio.h" #define dong 2 #define cot 3 main ( ) { float a[dong][cot] , tam ; int i , j ; for ( i = 0 ; i < dong ; i++ ) ; for ( j=0 ; j < cot ; ++j ) { printf ( "\n a[%d][%d] = " , i , j ); scanf ( " %f " , &tam ) ; a[i][j] = tam ; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; } Bi tp : Sp xp mng 2 chiu theo hng v ton b mng + Mng con tr : l mng m mi phn t ca n c th cha mt a ch no . Khai bo : < kiu d liu > < tn mng > [<ch s>]. * V d : int *a[5] ; - trong : a l mng gm 5 nh lin tip, mi nh l 1 bin con tr tr n kiu int ; bn thn a khng th dng lu tr s liu. - Gi s : a <100> <102> <104> <106> <108> < 110> a[0] a[1] a[2] a[3] a[4] a[5] a ch < 30> < 20> < 10 > < 80 > < 70 > < 100> 7 8 9 10 11 <10> <12> <14> 12345 <20> <22> <24> <26> <28> 6 12 13 <30> <32> <34> 57

- a= &a[0] => a = <100> ( a ch 100 ). - a[0] = < 30 > ( a ch bng 30 : ti a ch 30 con tr a[0] tr n a ch <30 > v gi s ti a ch < 30 > c gi tr l 6 ). => *a[0] = * (<30>> = 6 . a[1] = < 20 > => *a[1] = 1 a [2] = < 10> => *a[2] = 7 . Ch 1: Xem a l con tr 2 ln ( con tr ca con tr ) : - a = <100 > => *a = <30 > ( do a = &a[0] ) => **a = 6 ( do *(<30>)). - *(*(a + 1) + 2 ) *(102) * ( <20> + 2 ) => *<24> = 3 Ch 2 : - int a[5] => a l con tr hng khng thay di a ch ca n c ( nn a++ sai) - int *a[5] ; => a laf con tr ng nn thay i gi tr c ( a++ ng ). V d : int *a[5] For ( i = 0 ; i < 5 ; i++ ) { printf ("%d", *a[0] ); a[0]++ ; } * Ch 3 : mng 2 chiu chng qua l 1 con tr 2 ln ( con tr ca con tr ). L do : a[i][k] ; trong t b = a[i] => b[k] = a[i][k] ; + Cng thc : ( a[i] = *(a+i)) => ( b[i] = *(b+i)). b[k] = *(b+k)). b[k] = *(a[i] + k ) = * ( *(a+i) + j). => a[i][k] = *(*(a+i) + k) ; trong *(*(a+i) l con tr 2 ln. 5.2. D liu kiu xu k t : - Xu k t : l dy k t t trong ngoc kp . V d : " Lp hc ". Xu ny c cha trong 1 mng kiu char. L O P H O C \0 a ch :<100> <101> <102> NULL : kt thc chui => char *lop ; lop = " Lop Hoc " ; ng : gn a ch ca chui cho con tr lp. + puts (" Lop Hoc ") ; v puts (lop ) u hin th dng ch Lop Hoc. V d : char Tenlop[10] ; Printf ("\n Tenlop : " ) ; gets( Tenlop ) ; => ( Nhp vo chui " lp hc " ) Cn nu chng ta khai bo nh sau l sai : Char *lop , tenlop [10] ; Tenlop = " lp hc " ; sai v Tenlop v chui l 2 con tr hng , khng c gn cho nhau . Mun gn ta dng hm strcpy (Tenlop , "lp hc "); + Con tr v vic nh v b nh ng : - V d 1 : #define N=10 ; main ( ) { int a[N] ; int m : printf ( " nhp s phn t m = "); scanf("%d", &m) ; for ( i= 0 ; i < m ; i++ ) scanf ( "%d", &a[i] ); - Nhn xt V d 1 trn : + Nu m <=N ( N =10) : th s b d 1 s bin mng l ( n - m). + Nu m > N ( tc l m > 10 ) : th chng trnh s chy sai v ta khng bin mng. => Do ta phi khc phc bng cch : nh v b nh ng. ( Bng hm malloc v calloc). * V d 2 : 58

#include < stdio.h> #include<alloc.h> hoc #include <stdio.h > main ( ) { int m , *a ; printf (" Nhp s phn t m = " ); scanf ( "%d", &m ); /* Cp pht v nh v b nh ng */ a = ( int*) malloc ( m* size of ( int ) ); (1) if ( a!= NULL ) /* cp pht thnh cng */ for ( i=0 ; i < m ; i++) scanf ( "%d", &a[i] ); free (a) ; /* gii phng vng nh mng */ } - Hm malloc ( ) nm trong th vin <alloc.h> . Hm ny cung cp s lng byte lin tip t phn b nh cn cha s dng trn my tnh. + V d : malloc (num) = num byte v tr v con tr kiu void tr n a ch bt u ca nh. - Size of ( int ) : l s byte m mt bin kiu int yu cu ( gi tr = 2 ) - ( int*) : p kiu ( type - casing) : coi a ch bt u l int ( do malloc tr v con tr kiu void , c bit khng c kiu ) , c th nhn bt k a ch kiu no ( nh p kiu ). - Mun s dng hm calloc thay cho hm malloc => khai bo : a = (int*) calloc ( n, size of (int)); * Ch : Lun gn mt a ch cho mt con tr trc khi s dng ti n. Nu khng bin con tr s mang mt gi tr ngu nhin c th ph hu chng trnh. * Cp pht b nh ng cho mng 2 chiu m x n phn t, m , n nhp t bn phm: + V d : #include <stdio.h> #include <alloc.h> void main ( ) { int **a , m, n, OK ; printf ( " nhp m = " ); scanf ("%d", &m); printf (nhp m = n) ; scanf ( "%d", &n ); a = ( int** ) malloc ( m*seze of (int *)); if (a!=NULL ) /*Cp pht thnh cng */ { OK = 1 ; for ( i=0 ; i < m ; i++ ) } /* gi tr ban u cho bin con tr*/ a[i] = (int*) break ; for ( i=0 ; i <m ; i ++ ) { if !(OK) break ; a[i] = (int*) malloc ( n * size of (int)); if ( a[i] = NULL ) OK = 0 ; } if(OK) { s dng a[0][0] , a[0][1]....., a[i][j] ...., a[m][n] } /* gii phng vng nh cp pht */ if ( a!=NULL ) { for ( i = 0 ; i < m ; i++) if ( a[i] ! = NULL , free ( a[i]); free (a); } } * Ch : ta xem mng 2 chiu l mng 1 chiu nn c th khai bo : a = (int*) malloc ( m*n * size of ( int )); V A[I][J] = A[ I*N + J] 59

Bi tp : 1/ Lm li cc bi tp phn mng nhng dng con tr . 2/ Dng hm malloc hay calloc nhp mng n phn t , sau tnh tng cc phn t v sp xp mng gim dn. 3/ Dng hm malloc hay calloc nhp ma trn m x n , sau tnh tng v sp xp theo tng dn + Mi lin h gia con tr v cc khi nim quan trng: a/ Con tr v hm : - Ch 1 : bn thn tham s truyn cho hm khng bao gi b thay i. Nhng nu tham s l con tr th gi tr ca n khng thay i nhng ni dung c cha a ch li c th thay i. - Ch 2 : Truyn cho hm mt tham s hnh thc c khai bo l con tr, v khi gi hm truyn cho n mt gi tr a ch ca bin mun thay i. - V d :gi s tn xy dng mt hm dng hon v bin thc, ta vit nh sau : Cch 1 : #include<stdio.h> void swap (float x , float y ) /* cch 1 sai */ { float temp ; temp = x ; s<y ; y = temp; } main ( ) { float a, b ; a = 10.0 ; b = 20.0 ; printf (" khi cha hon v a = %4.0f; b = %4.0f \n" , a , b ) ; swap ( a , b ) ; printf ( " sau khi hon v a = %4.0f ; b = %4.0f \n" , a, b ) ; - Phn tch ci sai ca cch 1 ca v d trn : + Do a, b thuc hm main ( ). Khi khai bo s dng 2 khong nh ( mi khong 3 byte) . a, b trong li gi hm swap(a,b) l 2 tham s thc. + Cc i x, y v bin cc b temp c cung cp khong nh nhng a ch khc. Do xx, y ch tn ti hm swap(_), cn a, b tn ti sut c qu trnh ca chng trnh nn hm swap () khng lm thay i ( tc hon v) c gi tr ca a v b => hm vit theo cch 1 khng t yu cu => yu cu vit li theo cch 2. * Cch 2 : void swap (float *x , float *y) /* vit ng*/ { float temp ; temp = *x ; *x = *y ; * y = temp ; } main ( ) b/ S hc con tr ( c th thao tc s hc trn ni dung con tr ) * V d : #include < stdio.h> #include <alloc.h> main ( ) { #define N 3 int *list , i ; list = int*) calloc ( N, size of(int)); *list = 15 ; * (list + 1) = 20 ; *(list + 2 ) = 30 ; printf ( " cc a ch l : "); for ( i=o ; i < N ; i++) printf ("%4d",(list + i)); printf ("\n cha cc gi tr l : "); for ( i=0 ; i < N ; i++) printf("%4d", *(list + i)); 60

printf("\n"); => list tr ti mt di b nh di 6 byte ( 3*2) c cc gi tr l 5,20, 30 . gi tr a ch u l 06A => kt qu cc a ch l : 06A 06AC 06AE cha cc gi tr l : 5 20 30 c/ Con tr v mng : - V d 2 : #include main ( ) { #define N 3 int list [N] , i ; list [0] = 5 ; list [1] = 20 ; list[2]=30; printf ( " Cc a ch l : "); for ( i = 0 ; i < N ; i++) printf ( "%4p ", &list[i] ); printf("\n cha cc gi tr l : "); for ( i=0; i<N ; i++) printf ( "%4d", list [i] )); } -Kt qu chng trnh : + Cc a ch l : 163A 163C 163E + Cha cc gi tr l : 5 20 30 - So vi v d 1 th iu khc duy nht l gi tr a ch thay i. Nh vy ta c th s dng tn ca mt mng nh con tr v ngc li. =>{ list + i) = = &(list[i]) v *(list + i) = = list[i]} d/ Con tr v cu trc : - Ta c th khai bo con tr nh mt bin cu trc, cng nh con tr ca bu k kiu d liu no khc. iu ny cho php to mt danh sch mc ni cc phn t ( s trnh by chng sau ). e/ Con tr ti hm : dng cha a ch ca hm. Nn kiu ca hm v con tr phi ging nhau. V d : #include <stdio.h> Double fmax ( double x, double y ) /* hm tnh max ca 2 s */ { return ( x>y ? x:y ) ; } /* khai bo v gn tn hm cho con tr hm */ double (*pf) (double , double ) = fmax ; main ( ) { printf ( " In max = % f " , pf(15.5, 20.5 )); } 5.3. D liu kiu cu trc - Khi nim : Cu trc l mt kiu d liu kiu bn ghi(record) , cho php nhiu loi d liu c nhm li vi nhau. ( Khi nim cu trc trong C tng t nh pascal hay Foxpro). 5.3.1. Khai bo kiu cu trc : a/ struct tn _ kiu cu trc { khai bo cc thnh phn ca n ( cc field v kiu d liu ca field) } < danh sch bin>; - V d 1 : struct kieu HV -> tn kiu cu trc. { char Ten[30] ; int namsinh ;float diemTB ; } HV ; ( bin HV) - V d 2 : struct kieu HV 61

{ cc thnh phn } struct kieu HV HV ; /* khai bo bin theo cch 2 */ b/ Dng ton t typedef khai bo kiu cu trc ( nh ngha kiu mi) ; - V d 3 : typedef struct { char Ten[30] int namsinh ; float diemTB ; } kieu HV ; kieu HV Hoc vien ; kieu HV DSLop[20]; kieu HV Lop[ ] = { { "nguyn vn ng", 1980, 10.0}, { " Trn vn Ty", 1982, 5.5}, { " Phm vn Nam ", 1979, 6.5} }; - V d 4 : struct ngay{ int ngay ; char Thang[10]; int nam ; }; type struct { char Ten[30] ; ngay namsinh ; /* thnh phn cu trc c kiu cu trc*/ float diemTB; } kieu HV ; kieu HV HV; * Ch : - Khai bo struct phi nm v tr ton cc ca chng trnh, thng sau cc #include. - Cu trc thng dng xy dng mt bng cc cu trc. + V d : kieu HV DSLop[30] ; struct kieu HV person[50]; - C th truyn cu trc nh mt tham s hnh thc, nhng vi nhng cu trc kch thc ln s khng ti u v thi gian ln nh. Khi khng nn s dng con tr cu trc. + V d : struc kieu HV *HV ; 5.3.2. Truy cp n cc thnh phn ca kiu cu trc : Tn cu trc. Tn thnh phn Hoc Tn cu trc. Tn cu trc con. Tn thnh phn. - V d : + nhp vo tn, nm sinh, im cho bin cu trc hc vin ( v d 3). gets(hoc vien.ten) /* nhp " Phm th Bc" v Enter */ scanf("%d ", & hoc vien.namsinh ); scanf("%f", &tam); hoc vien.diem = tam; (*) + Nhp nm sinh cho bin hc vin v d 4 : scanf("%d",&hv.ngay.namsinh); * Ch : Nu cc thnh phn khng phi l nguyn(int) => nhp qua trung gian nh (*). puts(hoc vien.ten); => " Phm th Bc" printf("%d%f", hoc vien.namsinh, hoc vien.diemTB); * Lnh gn : + Ta c th gn 2 bin cu trc c cng kiu cho nhau : V d : hv2=hv1; + Gn gi tr u cho bin cu trc v khai bo mt mng cu TRC( XEM V D 3) Bi tp : vit chng trnh nhp danh sch hc vin gm cc trng h tn, tui, im, v tm kim trong dnhch c ai tn " Phm To " khng. Tn Tui im HV [ 0] Nguyn A 20 5.5 62

HV [1] Trn B 22 6.5 HV [2] Phm To 25 8.5 HV [3] L C 21 7.5 #include <stdio.h> #define n 10 typedef struct { char Ten[30]; int tuoi ; float diem ; } kieu HV ; kieu HV HV[11] void main( ) { int i ; float tam ; kieu HV HV; /* nhp d liu cch 1*/ for ( i = 0 ; i < n ; i++) { printf ("\n Nhp s liu cho hc vin th %d", i ) ; printf (" H v tn = " ) ; gets ( hv[i].ten); printf ("tui = "); scanf ( "%d" , &hv[i].tuoi); printf("im = "); scanf ("%f*c", &tam ); hv[i].diem = tam ; } /* cch 2 nhp vo bin cu trc v gn hv[i] = h */ for ( i = 0 ; i<n ; i++ ) { printf("H v tn = "); gets(h.ten); } hv[i] = h ; /* tm kim Phm To */ thay = 0 ; i = 0 ; /* thay = 0 : khng thy, thy = 1 : tm thy */ while ((!thay)&&(i <n)) if ( strcmp(hv[i].Ten , " Phm To ") = = 0 ) { thay = 1 ; printf ("%s%d%f ", hv[i].ten , hv[i].tui, hv[i].im ); } else i++ ; if (!thay ) puts ("\n khng tm thy Phm To !"); getch( ); } Bi tp : Vit chng trnh nhp danh sch gm na hc vin gm cc thng tin nh : H , tn, im pascal , im c, sau tnh im trung bnh (iemTB) = (diemC*2 + diempascal)/3 . - V xt kt qu u hay rt theo qui c sau : + nu im trung bnh >= 5 th kt qu u. + Nu im trung bnh <5 th kt qua rt. + Nu im trung bnh = 4 m phi = "N" th kt qu l u. 1/ in danh sch va nhp gm h tn, phi , im c, im pascal, im TB , kt qu . 2/ Sp xp gim dn theo im trung bnh v in ra. 3/ Nhp vo tn cn tm v tm trong danh sch hc vin nu khng tm thy th in ra hc vin c tn khng tm thy. Nu c nhiu hc vin c cng tn cn tm th hy in ra ngi cui cng c tm thy. 4/ Ging cu 3 nhng in ra 2 ngi tm thy u tin ( nu c nhiu ngi ). 5/ Ging cu 3 nhng in ra ngi u tin v ngi cui cng ( nu c nhiu ngi). Nn vit theo tng hm. 5.3.3. Con tr tr n cu trc v a ch cu trc : a/ Con tr v a ch : - V d : typedef struct { char Ten[30] ; 63

int tuoi ; float diem ; } kieu HV ; kieu HV *p , HV , lop[50] ; HS [50] ( trong : HV l bin cu trc, *p : con tr cu trc dng lu tr a ch cu trc v mng cu trc ) ( *). main ( ) /* ta c th gn */ p = &HV ; /* ng do (*)*/ p = &lop[i]/*ng do (*) */ p = lp ; /* ng : p = a ch Lop[0] , p = &lop[0] ) do Lop = &Lop[0]) b/ truy cp thng qua con tr : - Cch 1 : tn con tr - tn thnh phn. - Cch 2 : (*tn con tr).tn thnh phn. - V d : p = &HV ; p = &Lop[2] ' => HV.Ten p -- tn; Lop[2].tui (p*).tuoi p - tui ; *p = HV ; *P = Lop[2] - Gi s cn nhp s liu ch vng trn th 3 cch vit sau l tng ng : + (1) : gets(HV.ten) + (2) gets ( p ten) gets( (*p).ten). + (3) scanf("%d",&HV.tuoi) ; scanf("%d", p - tui ); scanf ("%d", (*p).tuoi); - Gi s cn nhp d liu cho mng cu trc th cc cch vit sau y tng ng : + V d : p = lop ; for ( i = 0 ; i < n ; i++) { gets (lop[i].tn); tng ng vi : . gets((*(lop* i ) ).ten); .gets(*(p + i ).ten); .gets ( p[i].ten); .gets (p ten); p++ ; .gets (*p).ten) ; p++; - V d : lm li bi tp mu nhng s dng bin con tr : #include <stdio.h> #define n 10 typedef struct { char ten[30] ; int tuoi ; float diem ; } kieu HV ; main ( ) { kieu HV hv [n], *p , h; int i ; int thay ; float tam ; int tui ; p = hv; for ( i = 0 ; i < n ; i++) { printf (" nhp hc vin th %d ", i ); printf("H v tn"); gets ( p ten); printf("tui : ") ; scanf ("%d", &tui); p tuoi = tuoi; printf ("diem : ") ; scanf ("%f%*c ", &tam ); p diem = tam; p++ ; printf ("%c", getchar(); } /* nhp theo cch 2 qua bin h xong gn *p = h */ /* tm Phm To */ 64

thy = 0 ; i = 0 ; p = hv ; /* di chuyn con tr v u danh sch */ for ( i = 0 ; i < n ; i++ ) if ( strcmp(p ten, " Phm To " ) = = 0 ) { thy = 1 printf ("%s %d%f" , p ten, p tuoi, p im ); break ; else p++ ; if (!thay) puts (" khng c Phm To trong danh sch "); getch( ); } Bi tp : lm li bi tp trc nhng s dng con tr. 5.3.4. Cp pht b nh ng cho kiu d liu cu trc : - Gi s ta cn qun l danh sch hc vin nn dng mng cu trc ( cp pht b nh tnh danh sch c ) ta phi s dng s hc vin ti a => tha vng nh. cp pht va s s hc vin nh ta mun => ta dng phng php cp pht b nh ng hm malloc hoc calloc(.) - V d : Nh danh sch n hc vin gm h tn, im v sp xp gim dn theo im. #include <stdio.h> #include<conio.h> #include<alloc.h> #include< string.h> typedef struct { char ten[30] ; int diem ; char kq[5] ; } kieu HV; kieu HV *lop , *p , tam ; /* Hm nhp dan sch */ void nhapDS ( int n , kieu HV lop[ ]) { int i , diem ; p = lop ; for ( i = 0 ; i < n ; i++) { printf("nhp H tn ngi th %d : " , i +1 ) ; gets ( p ten); printf ( " im = " ) ; scanf ( "%d" , &diem ) ; p diem = diem ; printf ("%c", getchar()); /* kh stdin */ p++ ; } /* Hm sp xp*/ void sapxep ( int n, kieu HV lop[ ]) { int i , j ; kieu HV tam ; for ( i = 0 ; i < n-1 ; i++) for ( j=i + 1 ; j< n ; j++) if ( lop[i].diem < lop[j].diem ) { tam = lop[i] ; lop[j] = lop [j] ; lop [j] = tam ; } /* hm in danh sch */ void inds( intn, kieu HV lop[ ] ) { int i ; for ( i = 0 ; i < n ; i++ ) { printf ("%20s%5d ", lop[i].ten,lop[i].diem ); printf ("\n" ; /* xung hng */ /* chng trnh chnh */ void main ( ) { int i , j, n , t, diem ; printf ("\n Nhp s s : ") ; scanf ( "%d", &n); lop = (kieu HV*)malloc ( n * size of ( kieu HV) ) ; printf ("%c", getchar ()); nhapds (n, lop ) ; sapxep ( n, lop ) ; inds ( in lop ); getch ( ); } 65

Bi tp : 1/ Lm li cc bi tp phn mng nhng dng con tr . 2/ Dng hm malloc hay calloc nhp mng n phn t , sau tnh tng cc phn t v sp xp mng gim dn. 3/ Dng hm malloc hay calloc nhp ma trn m x n , sau tnh tng v sp xp theo tng dn 4/ Nhp v xut 1 danh sch gm n nhn vin 5/ Nhp, xut, sp xp, tm kim danh sch n sinh vin (sp xp theo im trung bnh, tm theo tn)

66

CHNG 6. D LIU KIU TP 6.1. Khi nim v tp tin Tp tin hay tp d liu l mt tp hp cc d liu c lin quan vi nhau v c cng mt kiu c nhm li vi nhau thnh mt dy. Chng thng c cha trong mt thit b nh ngoi ca my tnh (a mm, a cng...) di mt ci tn no . Tn ting Anh ca tp l file, n c dng ch ra mt hp ng cc phiu hay th ghi ca th vin. Mt hnh nh r nt gip ta hnh dung ra tp l t phiu ca th vin. Mt hp c nhiu phiu ging nhau v hnh thc v t chc, song li khc nhau v ni dung. y, t phiu l tp, cc l phiu l cc thnh phn ca tp. Trong my tnh, mt a cng hoc mt a mm ng vai tr chic t ( cha nhiu tp). Tp c cha trong b nh ngoi, iu c ngha l tp c lu tr dng nhiu ln v tn ti ngay c khi chng trnh kt thc hoc mt in. Chnh v l do trn, ch nhng d liu no cn lu tr ( nh h s chng hn) th ta nn dng n tp. Tp l mt kiu d liu c cu trc. nh ngha tp c phn no ging mng ch chng u l tp hp ca cc phn t d liu cng kiu, song mng thng c s phn t c nh, s phn t ca tp khng c xc nh trong nh ngha. Trong C, cc thao tc tp c thc hin nh cc hm th vin. Cc hm ny c chia lm hai nhm : nhm 1 v nhm 2. Cc hm cp 1 l cc hm nhp / xut h thng, chng thc hin vic c ghi nh DOS. Cc hm cp 2 lm vic vi tp thng qua mt bin con tr tp. Do cc hm cp 2 c nhiu kiu truy xut v d dng hn so vi cc hm cp 1 nn trong cc chng trnh vit trong C, cc hm cp 2 hay c s dng hn. 6.2. Cu trc v phn loi tp Mt tp tin d c xy dng bng cch no i na cng ch n gin l mt dy cc byte ghi trn a (c gi tr t 0 n 255). S byte ca dy chnh l di ca tp. C hai kiu nhp xut d liu ln tp : Nhp xut nh phn v nhp xut vn bn. Nhp xut nh phn : D liu ghi ln tp theo cc byte nh phn nh b nh, trong qu trnh nhp Khi c tp, nu gp cui tp th ta nhn c m kt thc tp EOF ( c xut, d liu khng b bin i. nh ngha trong stdio.h bng -1) v hm feof cho gi tr khc 0. 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. 67

M chuyn dng : Khi ghi, mt k t LF (m 10) c chuyn thnh 2 k t CR (m 13) v LF Khi c, 2 k t lin tip CR v LF trn tp ch cho ta mt k t LF

M kt thc tp : Trong khi c, nu gp k t c m 26 hoc cui tp th ta nhn c m kt thc tp EOF ( bng -1) v hm feof(fp) cho gi tr khc 0 ( bng 1). 6.3. To tp mi c/ghi d liu khai bo s dng tp, ta dng lnh sau : FILE bin_con_tr_tp; Trong bin_con_tr_tp c th l bin n hay mt danh sch cc bin phn cch nhau bi du phy ( du , ). V d : FILE *vb, *np; 6.3.2. M tp - hm fopen : Cu trc ng php ca hm : FILE *fopen(const char *tn_tp, const char *kiu); Nguyn hm trong : stdio.h . Trong : i th nht l tn tp, i th hai l kiu truy nhp. Cng dng : Hm dng m tp. Nu thnh cng hm cho con tr kiu FILE ng vi tp va m. Cc hm cp hai s lm vic vi tp thng qua con tr ny. Nu c li hm s tr v gi tr NULL. Bng sau ch ra cc gi tr ca kiu : Tn kiu "r" "rt" ngha M mt tp c theo kiu vn bn. Tp cn c phi tn ti, nu khng s c li "w" "wt" M mt tp ghi theo kiu vn bn. Nu tp tn ti th n s b xo. "a" "at" M mt tp ghi b xung theo kiu vn bn. Nu tp cha tn ti th to tp mi. "rb" M mt tp c theo kiu nh phn. Tp cn c phi tn ti, nu khng s c 68 /* Khai bo hai bin con tr tp */

li. "wb" M mt tp mi ghi theo kiu nh phn. Nu tp tn ti th n s b xo. "ab" M mt tp ghi b xung theo kiu nh phn. Nu tp cha tn ti th to tp mi. "r+" "r+t" M mt tp c/ghi theo kiu vn bn. Tp cn c phi tn ti, nu khng s c li "w+" "w+t" M mt tp c/ghi theo kiu vn bn. Nu tp tn ti th n s b xo. "a+" "a+t" M mt tp c/ghi b xung theo kiu vn bn. Nu tp cha tn ti th to tp mi. "r+b" M mt tp c/ghi theo kiu nh phn. Tp cn c phi tn ti, nu khng s c li. "w+b" M mt tp mi c/ghi theo kiu nh phn. Nu tp tn ti th n s b xo. "a+b" M mt tp c/ghi b xung theo kiu nh phn. Nu tp cha tn ti th to tp mi. Ch : Trong cc kiu c ghi, ta nn lm sch vng m trc khi chuyn t c sang ghi hoc ngc li. Ta s cp n cc hm vi tnh nng xo sau ny. V d : f=fopen("TEPNP","wb"); 6.3.3. ng tp - hm fclose : Cu trc ng php ca hm : int fclose(FILE *fp); Nguyn hm trong : stdio.h . Trong : fp l con tr ng vi tp cn ng. Cng dng : Hm dng ng tp khi kt thc cc thao tc trn n. Khi ng tp, my thc hin cc cng vic sau : 69

V d :

Khi ang ghi d liu th my s y d liu cn trong vng m ln a Khi ang c d liu th my s xo vng m Gii phng bin tr tp. Nu lnh thnh cng, hm s cho gi tr 0, tri li n cho hm EOF.

fclose(f); 6.3.4. ng tt c cc tp ang m- hm fcloseall : Cu trc ng php ca hm : int fcloseall(void); Nguyn hm trong : stdio.h . Cng dng : Hm dng ng tt c cc tp ang m . Nu lnh thnh cng, hm s cho gi tr bng s l s tp c ng, tri li n cho hm EOF. V d : fcloseall(); 6.4. Mt s hm x l tp ca C 6.4.1. Lm sch vng m - hm fflush : Cu trc ng php ca hm : int fflush(FILE *fp); Nguyn hm trong : stdio.h . Cng dng : Dng lm sch vng m ca tp fp. Nu lnh thnh cng, hm s cho gi tr 0, tri li n cho hm EOF. V d : fflush(f); 6.4.2. Lm sch vng m ca cc tp ang m - hm fflushall : Cu trc ng php ca hm : int fflushall(void); Nguyn hm trong : stdio.h . Cng dng : Dng lm sch vng m ca tt c cc tp ang m. Nu lnh thnh cng, hm s cho gi tr bng s cc tp ang m, tri li n cho hm EOF. V d : fflushall(); 6.4.3. Kim tra li file - hm ferror : 70

Cu trc ng php ca hm : int ferror(FILE *fp); Nguyn hm trong : stdio.h . Trong fp l con tr tp. Cng dng : Hm dng kim tra li khi thao tc trn tp fp. Hm cho gi tr 0 nu khng c li, tri li hm cho gi tr khc 0. 6.4.4. Kimtra cui tp - hm feof : Cu trc ng php ca hm : int feof(FILE *fp); Nguyn hm trong : stdio.h . Trong fp l con tr tp. Cng dng : Hm dng kim tra cui tp. Hm cho gi tr khc 0 nu gp cui tp khi c, tri li hm cho gi tr 0. 6.4.5. Truy nhp ngu nhin - cc hm di chuyn con tr ch v : a. Chuyn con tr ch v v u tp - Hm rewind : Cu trc ng php : void rewind(FILE *fp); Nguyn hm trong : stdio.h . Trong fp l con tr tp. Cng dng : Chuyn con tr ch v ca tp fp v u tp. Khi vic nhp xut trn tp fp c thc hin t u. V d : rewind(f); b. Chuyn con tr ch v tr cn thit - Hm fseek : Cu trc ng php : int fseek(FILE *fp, long sb, int xp); Nguyn hm trong : stdio.h . Trong fp l con tr tp. sb l s byte cn di chuyn. xp cho bit v tr xut pht m vic dch chuyn c bt u t . xp c th nhn cc gi tr sau : 71

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 ch v. xp=SEEK_END hay 2 : Xut pht t cui tp. Cng dng : Chuyn con tr ch v ca tp fp v v tr xc nh bi xp qua mt s byte xc nh bng gi tr tuyt i ca sb. Chiu di chuyn l v cui tp nu sb dng, tri li n s di chuyn v u tp. Khi thnh cng, hm tr v gi tr 0. Khi c li hm tr v gi tr khc khng.

Ch : Khng nn dng fseek trn tp tin vn bn, do s chuyn i k t s lm cho vic nh v thiu chnh xc. V d : fseek(stream, SEEK_SET, 0); c. V tr hin ti ca con tr ch v - Hm ftell : Cu trc ng php : int ftell(FILE *fp); Nguyn hm trong : stdio.h . Trong fp l con tr tp. Cng dng : Hm cho bit v tr hin ti ca con tr ch v (byte th my trn tp fp) khi thnh cng. S th t tnh t 0. Tri li hm cho gi tr -1L. V d : Sau lnh Sau lnh fseek(fp,0,SEEK_END); ftell(fp) cho gi tr 3. fseek(fp,-1,SEEK_END); ftell(fp) cho gi tr 2. 6.4.6. Ghi cc mu tin ln tp - hm fwrite : Cu trc ng php ca hm : int fwrite(void *ptr, int size, int n, FILE *fp); Nguyn hm trong : stdio.h . Trong : ptr l con tr tr ti vng nh cha d liu cn ghi. size l kch thc ca mu tin theo byte 72

n fp

l s mu tin cn ghi l con tr tp

Cng dng : Hm ghi n mu tin kch thc size byte t vng nh ptr ln tp fp. Hm s tr v mt gi tr bng s mu tin thc s ghi c. V d : #include "stdio.h" struct mystruct { int i; char ch; }; main() { FILE *stream; struct mystruct s; stream = fopen("TEST.TXT", "wb") /* M tp TEST.TXT */ s.i = 0; s.ch = 'A'; fwrite(&s, sizeof(s), 1, stream); /* Vit cu trc vo tp */ fclose(stream); /* ng tp */ return 0; } 6.4.7. c cc mu tin t tp - hm fread : Cu trc ng php ca hm : int fread(void *ptr, int size, int n, FILE *fp); Nguyn hm trong : stdio.h . Trong : ptr l con tr tr ti vng nh cha d liu cn ghi. size l kch thc ca mu tin theo byte n fp l s mu tin cn ghi l con tr tp

Cng dng : Hm c n mu tin kch thc size byte t tp fp ln ln vng nh ptr. 73

Hm s tr v mt gi tr bng s mu tin thc s c c. V d : #include "string.h" #include "stdio.h" main() { FILE *stream; char msg[] = "Kim tra"; char buf[20]; stream = fopen("DUMMY.FIL", "w+"); /* Vit vi d liu ln tp */ fwrite(msg, strlen(msg)+1, 1, stream); /* Tm im u ca file */ fseek(stream, SEEK_SET, 0); /* c s liu v hin th */ fread(buf, strlen(msg)+1, 1, stream); printf("%s\n", buf); fclose(stream); return 0; } 6.4.8. Nhp xut k t : a. Cc hm putc v fputc : Cu trc ng php : int putc(int ch, FILE *fp); int fputc(int ch, FILE *fp); Nguyn hm trong : stdio.h . Trong : ch l mt gi tr nguyn fp l mt con tr tp. Cng dng : Hm ghi ln tp fp mt k t c m bng m=ch % 256. ch c xem l mt gi tr nguyn khng du. Nu thnh cng hm cho m k t c ghi, tri li cho EOF V d : 74

#include "stdio.h" main() { char msg[] = "Hello world\n"; int i = 0; while (msg[i]) putc(msg[i++], stdout); /* stdout thit b ra chun - Mn hnh*/ return 0; } b. Cc hm getc v fgettc : Cu trc ng php : int gretc(FILE *fp); int fputc(FILE *fp); Nguyn hm trong : stdio.h . Trong : fp l mt con tr tp. Cng dng : Hm c mt k t t tp fp. Nu thnh cng hm s cho m c c ( c gi tr t 0 n 255). Nu gp cui tp hay c li hm s tr v EOF. Trong kiu vn bn, hm c mt lt c hai m 13, 10 v tr v gi tr 10. Khi gp m 26 hm s tr v EOF. V d : #include "string.h" #include "stdio.h" #include "conio.h" main() { FILE *stream; char string[] = "Kiem tra"; char ch; /* M tp cp nht*/ stream = fopen("DUMMY.FIL", "w+"); /*Vit mt xu k t vo tp */ fwrite(string, strlen(string), 1, stream); /* Tm v tr u ca tp */ 75

fseek(stream, 0, SEEK_SET); do { /* c mt k t t tp */ ch = fgetc(stream); /* Hin th k t */ putch(ch); } while (ch != EOF); fclose(stream); return 0; } 6.2.9. Xo tp - hm unlink: Cu trc ng php : int unlink(const char *tn_tp) Nguyn hm trong : dos.h, io.h, stdio.h . Trong tn_tp l tn ca tp cn xo. Cng dng : Dng xo mt tp trn a. Nu thnh cng, hm cho gi tr 0, tri li hm cho gi tr EOF. V d : #include <stdio.h> #include <io.h> int main(void) { FILE *fp = fopen("junk.jnk","w"); int status; fprintf(fp,"junk"); status = access("junk.jnk",0); if (status == 0) printf("Tp tn ti\n"); else printf("Tp khng tn ti\n"); fclose(fp); unlink("junk.jnk"); 76

status = access("junk.jnk",0); if (status == 0) printf("Tp tn ti\n"); else printf("Tp khng tn ti\n"); return 0; } 6.5. Bi tp p dng Xy dng cc chng trnh cho trong chng 5 sao cho d liu c ghi v file.

77

CHNG 7. HO Chng ny s gii thiu cc hm v th tc khi ng h ho, v cc ng v hnh c bn nh hnh trn, cung elip, hnh qut, ng gy khc, a gic, ng thng, hnh ch nht, hnh hp ch nht.... Cc hm v th tc ho c khai bo trong file graphics.h. 7.1. Gii thiu chung Mc ch ca vic khi ng h thng ho l xc nh thit b ho (mn hnh) v mode ho s s dng trong chng trnh. lm cng vic ny, ta c hm sau : void initgraph(int *graphdriver,int graphmode,char *driverpath); Trong : driverpath l xu k t ch ng dn n th mc cha cc tp tin iu khin graphdriver cho bit mn hnh ho s dng trong chng trnh. graphmode cho bit mode ho s dng trong chng trnh. phn gii ho.

Bng di y cho cc gi tr kh d ca graphdriver v graphmode : graphdriver DETECT (0) CGA (1) CGAC0 (0) CGAC1 (1) CGAC2 (2) CGAC3 (3) CGAHi (4) MCGA (2) MCGA0 (0) MCGA1 (1) MCGA2 (2) MCGA3 (3) MCGAMed (4) MCGAHi (5) EGA (3) EGAL0 (0) EGAHi (1) EGA64 (4) EGA64LO (0) EGA64Hi (1) EGAMONO (5) VGA (9) EGAMONOHi (0) VGALO (0) 320x200 320x200 320x200 320x200 640x200 320x200 320x200 320x200 320x200 640x200 640x480 640x200 640x350 640x200 640x350 640x350 640x200 78 graphmode

VGAMED (1) VGAHI (2) HERCMONO (7) ATT400 (8) HERCMONOHI ATT400C0 (0) ATT400C1 (1) ATT400C2 (2) ATT400C3 (3) ATT400MED (4) ATT400HI (5) PC3270 (10) IBM8514 (6) PC3270HI (0) PC3270LO (0) PC3270HI (1) Ch :

640x350 640x480 720x348 320x200 320x200 320x200 320x200 640x400 640x400 720x350 640x480 256 mu 1024x768 256 mu

Bng trn cho ta cc hng v gi tr ca chng m cc bin graphdtriver v

graphmode c th nhn. Chng hn hng DETECT c gi tr 0, hng VGA c gi tr 9, hng VGALO c gi tr 0 vv... Khi lp trnh ta c th thay th vo v tr tng ng ca chng trong hm tn hng hoc gi tr ca hng . V d : Gi s my tnh c mn hnh VGA, cc tp tin ho cha trong th mc C:\TC \BGI, khi ta khi ng h thng ho nh sau : #include "graphics.h" main() { int mh=VGA,mode=VGAHI; /*Hoc mh=9,mode=2*/ initgraph(&mh,&mode,"C:\\TC\\BGI"); /* V k t \ trong C l k t c bit nn ta phi gp i n */ } Bng trn cn cho thy phn gii cn ph thuc c vo mn hnh v mode. V d nh trong mn hnh EGA nu dng EGALo th phn gii l 640x200 ( Hm getmaxx() cho gi tr cc i ca s im theo chiu ngang ca mn hnh. Vi mn hnh EGA trn : 639, Hm getmaxy() cho gi tr cc i ca s im theo chiu dc ca mn hnh. Vi mn hnh EGA trn : 199 ). Nu khng bit chnh xc kiu mn hnh ang s dng th ta gn cho bin 79 graphdriver bng DETECT hay gi tr 0. Khi , kt qu ca initgraph s l :

Kiu mn hnh ang s dng c pht hin, gi tr ca n c gn cho bin graphdriver. Mode ho phn gii cao nht ng vi mn hnh ang s dng cng c pht hin v tr s ca n c gn cho bin graphmode. Nh vy dng hng s DETECT chng nhng c th khi ng c h thng ho vi mn hnh hin c theo mode c phn gii cao nht m cn gip ta xc nh kiu mn hnh ang s dng. V d : Chng trnh di y xc nh kiu mn hnh ang s dng : #include "graphics.h" #include "stdio.h" main() { int mh=0, mode; initgraph(&mh,&mode,"C:\\TC\\BGI"); printf("\n Gia tri so cua man hinh la : %d",mh); printf("\n Gia tri so mode do hoa la : %d",mode); closegraph(); } Nu chui dng xc nh driverpath l chui rng th chng trnh dch s tm kim cc file iu khin ho trn th mc ch ( Th mc hin thi ). 7.2. Cc hm t mu, v im, t mu 7.2.1. Mu v mu : t mu nn : t mu cho nn ta dng th tc sau : void setbkcolor(int mu); t mu ng v : t mu v ng ta dng th tc sau : void setcolor(int mu); t mu (kiu) t v mu t : t mu (kiu) t v mu t ta dng th tc sau : void setfillstyle(int mu, int mu); Trong c ba trng hp mu xc nh m ca mu. Cc gi tr kh d ca mu cho bi bng di y : 80

Bng cc gi tr kh d ca mu Tn hng BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE Gi tr s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 Bng cc gi tr kh d ca mu Tn hng EMPTY_FILL SOLID_FILL LINE_FILL LTSLASH_FILL SLASH_FILL BKSLASH_FILL LTBKSLASH_FILL HATCH_FILL XHATCH_FILL INTERLEAVE_FILL WIDE_DOT_FILL CLOSE_DOT_FILL Chn gii mu : 81 Gi tr s 0 1 2 3 4 5 6 7 8 9 10 11 Kiu mu t T bng mu nn T bng ng lin nt T bng ng -------T bng /// T bng /// in m T bng \\\ in m T bng \\\ T bng ng gch bng nht T bng ng gch bng ch thp T bng ng t qung T bng du chm tha T bng du chm mau Mu hin th en Xanh da tri Xanh l cy Xanh l Tm Nu Xm nht Xm m Xanh xa tri nht Xanh l cy nht Xanh l nht nht Tm nht Vng Trng

Cc gi tr kh d ca mu cho bi bng di y :

thay i gii mu c nh ngha trong bng trn, ta s dng hm : void setpalete(int s_th_t_mu, int mu ); V d : Cu lnh : setpalete(0,lightcyan); bin mu u tin trong bng mu thnh mu xanh l nht. Cc mu khc khng b nh hng. Ly gii mu hin thi : + Hm getcolor tr v mu xc nh bng th tc setcolor ngay trc n. + Hm getbkcolor tr v mu xc nh bng hm setbkcolor ngay trc n. 7.2.2. V v t mu : C th chia cc ng v hnh thnh bn nhm chnh : Cung trn v hnh trn. ng gp khc v a gic. ng thng. Hnh ch nht.

7.2.2.1. Cung trn v ng trn : Nhm ny bao gm : Cung trn, ng trn, cung elip v hnh qut. Cung trn : v mt cung trn ta dng hm : void arc(int x, int y, int gd, int gc, int r); Trong : (x,y) l to tm cung trn. gd l gc u cung trn(0 n 360 ). gc l gc cui cung trn (gd n 360 ). r l bn knh cung trn . V d : V mt cung trn c tm ti (100,50), gc u l 0, gc cui l 180, bn knh 30. arc(100,50,0,180,30); ng trn : v ng trn ta dng hm : void circle(int x, int y, int r); 82

Trong : (x,y) l to tm cung trn. r l bn knh ng trn. V d : V mt ng trn c tm ti (100,50) v bn knh 30. circle(100,50,30); Cung elip v mt cung elip ta dng hm : void ellipse(int x, int y, int gd, int gc, int xr, int yr); Trong : (x,y) l to tm cung elip. gd l gc u cung trn(0 n 360 ). gc l gc cui cung trn (gd n 360 ). xr l bn trc nm ngang. yr l bn trc thng ng. V d : V mt cung elip c tm ti (100,50), gc u l 0, gc cui l 180, bn trc ngang 30, bn trc ng l 20. ellipse(100,50,0,180,30,20); Hnh qut : v v t mu mt hnh qut ta dng hm : void pieslice(int x, int y, int gd, int gc, int r); Trong : (x,y) l to tm hnh qut. gd l gc u hnh qut (0 n 360 ). gc l gc cui hnh qut (gd n 360 ). r l bn knh hnh qut . V d : Chng trnh di y s v mt cung trn gc phn t th nht, mt cung elip gc phn t th ba, mt ng trn v mt hnh qut qut t 90 n 360 . # include "graphics.h" #include "stdio.h" #include "conio.h" main() { 83

int md=0,mode; initgraph(&md,&mode,"C:\\TC\\BGI"); setbkcolor(BLUE); setcolor(YELLOW); setfillstyle(SOLID_FILL,RED);; arc(160,50,0,90,45); circle(160,150,45); pieslice(480,150,90,360,45); getch(); closegraph(); } 7.2.3. V ng gp khc v a gic : V ng gp khc : Mun v ng gp khc i qua n im : (x1,y1), (x2,y2), ...., (xn,yn) th trc ht ta phi gn cc to (xi,yi) cho mt mng a kiu int no theo nguyn tc sau : To x1 gn cho a[0] To y1 gn cho a[1] To x2 gn cho a[2] To y2 gn cho a[3] .... To xn gn cho a[2n-2] To yn gn cho a[2n-1] Sau gi hm : drawpoly(n,a); Nu im cui cng (xn,yn) trng vi im u (x1,y1) th ta nhn c mt ng gp khc khp kn. T mu a gic : Gi s ta c a l mng cp n trong mc trn, khi ta gi hm : fillpoly(n,a); s v v t mu mt a gic c nh l cc im (x1,y1), (x2,y2), ...., (xn,yn) V d : V mt ng gp khc v hai ng tam gic. #include "graphics.h" #include "stdio.h" #include "conio.h" 84

int poly1[]={5,200,190,5,100,300}; int poly2[]={205,200,390,5,300,300}; int poly3[]={405,200,590,5,500,300,405,200}; main() { int md=0,mode; initgraph(&md,&mode,"C:\\TC\\BGI"); setbkcolor(CYAN); setcolor(YELLOW); setfillstyle(SOLID_FILL,MAGENTA); drawpoly(3,poly1); fillpoly(3,poly2); fillpoly(4,poly3); getch(); closegraph(); } V ng thng : v ng thng ni hai im bt k c to (x1,y1) v (x2,y2) ta s dng hm sau : void line(int x1, int y1, int x2, int y2); Con chy ho gi nguyn v tr. v ng thng ni t im con chy ho n mt im bt c to (x,y) ta s dng hm sau : void lineto(int x, int y); Con chy s chuyn n v tr (x,y). v mt ng thng t v tr con chy hin ti ( gi s l im x,y ) n im c to (x+dx,y+dy) ta s dng hm sau : void linerel(int dx, int dy); Con chy s chuyn n v tr (x+dx,y+dy). Di chuyn con chy ho : di chuyn con chy n v tr (x,y), ta s dng hm sau : void moveto(int x, int y); Chn kiu ng : Hm void setlinestyle(int kiu_ng, int mu, int _dy); 85

tc ng n nt v ca cc th tc v ng line, lineto,linerel , circle, rectangle (hm v hnh ch nht, ta s hc trong phn v min di). Hm ny s cho php ta xc nh ba yu t khi v ng thng, l : Kiu ng, b dy v mu t to. Dng ng do tham s kiu_ngxc nh. Bng di y cho cc gi tr kh d ca kiu_ng : Tn hng SOLID_LINE DOTTED_LINE CENTER_LINE DASHED_LINE USERBIT_LINE d ca _dy : Tn hng NORM_WIDTH THICK_WIDTH Gi tr s 1 3 B dy B dy bnh thng B dy gp ba Gi tr s 0 1 2 3 4 Kiu ng Nt lin Nt chm Nt chm gch Nt gch Mu t to

B dy ca ng v do tham s _dy xc nh,. bng di y cho cc gi tr kh

Mu t to : Nu tham s th nht l USERBIT_LINE th ta c th to ra mu ng thng bng tham s mu. V d ta xt on chng trnh : int pattern = 0x1010; setlinestile(USERBIT_LINE,pattern,NORM_WIDTH); line(0,0,100,200); Gi tr ca pattern trong h 16 l 1010, trong h 2 l : 0001 0000 0001 0000 Bit 1 s cho im sng, bit 0 s lm tt im nh. V d : Chng trnh v mt ng gp khc bng cc on thng. ng gp khc i qua cc nh sau : (20,20),(620,20),(620,180),(20,180) v (320,100) #include "graphics.h" #include "stdio.h" #include "conio.h" main() { int mh=0, mode; 86

initgraph(&mh,&mode,"C:\\TC\\BGI"); setbkcolor(BLUE); setcolor(YELLOW); setlinestyle(SOLID-LINE,0,THICK_WIDTH); moveto(320,100); /* con chy v tr ( 320,100 ) */ line(20,20,620,20); /* con chy vn v tr ( 320,100 ) */ linerel(-300,80); lineto(620,180); lineto(620,20); getch(); closegraph(); } 7.2.4. V im, min : V im : Hm : void putpixel(int x, int y, int color); s t im (x,y) theo mu xc nh bi color. Hm : unsigned getpixel(int x, int y); s tr v s hiu mu ca im nh v tr (x,y). Ch : Nu im ny cha c t mu bi cc hm v hoc hm putpixel (m ch mi c to mu nn bi setbkcolor) th hm cho gi tr 0. T min : t mu cho mt min no trn mn hnh, ta dng hm sau : void floodfill(int x, int y, int border); y : (x,y) l to ca mt im no gi l im gieo. Tham s border cha m ca mu. S hot ng ca hm floodfill ph thuc vo gi tr ca x,y,border v trng thi mn hnh. + Khi trn mn hnh c mt ng cong khp kn hoc ng gp khc khp kn m m mu ca n bng gi tr ca border th : - Nu im gieo (x,y) nm trong min ny th min gii hn pha trong ng s c t mu. - Nu im gieo (x,y) nm ngoi min ny th min pha ngoi ng s c t mu. 87

+ Trong trng hp khi trn mn hnh khng c ng cong no nh trn th c mn hnh s c t mu. V d : V mt ng trn mu trn mn hnh mu xanh. To (x,y) ca im gieo c np t bn phm. Tu thuc gi tr c th ca x,y chng trnh s t mu vng cho hnh trn hoc phn mn hnh bn ngoi hnh trn. #include "graphics.h" #include "stdio.h" main() { int mh=mode=0, x, y; printf("\nVao toa do x,y:"); scanf("%d%d",&x,&y); initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(BLUE); setcolor(RED); setfillstyle(11,YELLOW); circle(320,100,50); moveto(1,150); floodfill(x,y,RED); closegraph(); } 7.3. Cc hm v hnh c bn 7.3.1. Hnh ch nht : Hm : void rectangle(int x1, int y1, int x2, int y2); s v mt hnh ch nht c cc cnh song song vi cc cnh ca mn hnh. To nh tri trn ca hnh ch nht l (x1,y1) v to nh phi di ca hnh ch nht l (x2,y2). Hm : void bar(int x1, int y1, int x2, int y2); s v v t mu mt hnh ch nht. To nh tri trn ca hnh ch nht l (x1,y1) v to nh phi di ca hnh ch nht l (x2,y2).

88

Hm : void bar3d(int x1, int y1, int x2, int y2, int depth, int top);

s v mt khi hp ch nht, mt ngoi ca n l hnh ch nht xc nh bi cc to (x1,y1), (x2,y2). Hnh ch nht ny c t mu thng qua hm setfillstyle . Tham s depth xc nh s im nh trn b su ca khi 3 chiu. Tham s top c th nhn cc gi tr 1 hay 0 v khi 3 chiu tng ng s c np hoc khng.

top=1 V d :

top=0

Chng trnh di y to nn mt hnh ch nht, mt khi hnh ch nht v mt hnh hp c np : #include "graphics.h" main() { int mh=mode=0; initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(GREEN); setcolor(RED); setfillstyle(CLOSE_DOT_FILL,YELLOW); rectangle(5,5,300,160); bar(3,175,300,340); bar3d(320,100,500,340,100,1); closegraph(); } 7.3.2. Ca s (Viewport) : Thit lp viewport : Viewport l mt vng ch nht trn mn hnh ho. thit lp viewport ta dng hm : void setviewport(int x1, int y1, int x2, int y2, int clip); trong (x1,y1) l to gc trn bn tri, (x2,y2) l to gc di bn phi. Bn gi tr ny v th phi tho mn : 89

0 x1 x2 0 y1 y2 Tham s clip c th nhn mt trong hai gi tr : clip=1 khng cho php v ra ngoi viewport. clip=0 cho php v ra ngoi viewport. V d : setviewport(100,50,200,150,1); Lp nn mt vng viewport hnh ch nht c to gc tri cao l (100,50) v to gc phi thp l (200,150) (l to trc khi t viewport).

Ch : Sau khi lp viewport, ta c h to mi m gc trn bn tri s c to (0,0). Nhn din viewport hin hnh : nhn viewport hin thi ta dng hm : void getviewsetting(struct viewporttype *vp); y kiu viewporttype c nh ngha nh sau : struct viewporttype { int left,top,right,bottom; int clip; }; Xa viewport : S dng hm : void clearviewport(void); Xo mn hnh, a con chy v to (0,0) ca mn hnh : S dng hm : void cleardevice(void); To m dng : Nh s dng viewport c th vit cc chng trnh ho theo to m dng. Mun vy ta thit lp viewport v cho clip bng 0 c th v ra ngoi gii hn ca viewport. Sau y l on chng trnh thc hin cng vic trn : int xc,yc; xc=getmaxx()/2; yc=getmaxy()/2; 90

setviewport(xc,yc,getmaxx(),getmaxy(),0); Nh th, mn hnh s c chia lm bn phn vi to m dng nh sau : Phn t tri trn : x m, y m. x : t -getmaxx()/2 n 0. y : t -getmaxy()/2 n 0. Phn t tri di : x m, y dng. x : t -getmaxx()/2 n 0. y : t 0 n getmaxy()/2. Phn t phi trn : x dng, y m. x : t 0 n getmaxx()/2. y : t -getmaxy()/2 n 0. Phn t phi di : x dng, y dng. x : t 0 n getmaxx()/2. y : t 0 n getmaxy()/2. V d : Chng trnh v th hm sin x trong h trc to m dng. Honh x ly cc gi tr t -4 n 4. Trong chng trnh c s dng hai hm mi l settextjustify v outtextxy ta s cp ngay trong phn sau. #include "graphics.h" #include "conio.h" #include "math.h" #define TYLEX 20 #define TYLEY 60 main() { int mh=mode=DETECT; int x,y,i; initgraph(mh,mode,""); if (graphresult!=grOK ) exit(1); setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0); setbkcolor(BLUE); setcolor(YELLOW); line(-getmaxx()/2,0,getmaxx()/2,0); line(0,-getmaxy()/2,0,getmaxy()/2,0); settextjustify(1,1); 91

setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i<=400;++i) { x=floor(2*M_PI*i*TYLEX/200); y=floor(sin(2*M_PI*i/200)*TYLEY); putpixel(x,y,WHITE); } getch(); closegraph(); } 7.3.3. X l vn bn trn mn hnh ho Hin th vn bn trn mn hnh ho : Hm : void outtext(char *s); cho hin chui k t ( do con tr s tr ti ) ti v tr con tr ho hin thi. Hm : void outtextxy(int x, int y,char *s); cho hin chui k t ( do con tr s tr ti ) ti v tr (x,y). V d : Hai cch vit di y : outtextxy(50,50," Say HELLO"); v moveto(50,50); outtext(" Say HELLO"); cho cng kt qu. S dng cc Fonts ch : Cc Fonts ch nm trong cc tp tin *.CHR trn a. Cc Fonts ny cho cc kch thc v kiu ch khc nhau, chng s c hin th ln mn hnh bng cc hm outtext v outtextxy. chn v np Fonts ta dng hm : void settextstyle(int font, int direction, int charsize); Tham s font chn kiu ch v nhn mt trong cc hng sau : DEFAULT_FONT=0 TRIPLEX_FONT=1 SMALL_FONT=2 92

SANS_SERIF_FONT=3 GOTHIC_FONT=4 Tham s derection chn hng ch v nhn mt trong cc hng sau : HORIZ_DIR=0 VERT_DIR=1 vn bn hin th theo hng nm ngang t tri qua phi. vn bn hin th theo hng thng ng t di ln trn.

Tham s charsize l h s phng to ca k t v c gi tr trong khong t 1 n 10. Khi charsize=1, font hin th trong hnh ch nht 8*8 pixel. Khi charsize=2 font hin th trong hnh ch nht 16*16 pixel. ............ Khi charsize=10, font hin th trong hnh ch nht 80*80 pixel. Cc gi tr do settextstyle lp ra s gi nguyn ti khi gi mt settextstyle mi. V d : Cc dng lnh : settextstyle(3,VERT_DIR,2); outtextxy(30,30,"GODS TRUST YOU"); s hin th ti v tr (30,30) dng ch GODS TRUST YOU theo chiu t di ln trn, font ch chn l SANS_SERIF_FONT v c ch l 2. t v tr hin th ca cc xu k t cho bi outtext v outtextxy : Hm settextjustify cho php ch nh ra ni hin th vn bn ca outtext theo quan h vi v tr hin ti ca con chy v ca outtextxy theo quan h vi to (x,y); Hm ny c dng sau : void settextjustify(int horiz, int vert); Tham s horiz c th l mt trong cc hng s sau : LEFT_TEXT=0 CENTER_TEXT RIGHT_TEXT ( Vn bn xut hin bn phi con chy). ( Chnh tm vn bn theo v tr con chy). (Vn bn xut hin bn tri con chy).

Tham s vert c th l mt trong cc hng s sau : BOTTOM_TEXT=0 ( Vn bn xut hin pha trn con chy). CENTER_TEXT=1 ( Chnh tm vn bn theo v tr con chy). TOP_TEXT=2 V d : settextjustify(1,1); outtextxy(100,100,"ABC"); s cho dng ch ABC trong im (100,100) s nm di ch B. B rng v chiu cao vn bn : 93 ( Vn bn xut hin pha di con chy).

Chiu cao : Hm : textheight(char *s); cho chiu cao ( tnh bng pixel ) ca chui do con tr s tr ti. V d 1 : Vi font bit map v h s phng i l 1 th textheight("A") ch gi tr l 8. V d 2 : #include "stdio.h" #include "graphics.h" main() { int mh=mode=DETECT, y,size; initgraph(mh,mode,"C:\\TC\\BGI"); y=10; settextjustify(0,0); for (size=1;size<5;++size) { settextstyle(0,0,size); outtextxy(0,y,"SACRIFICE"); y+=textheight("SACRIFICE")+10; } getch(); closegraph(); } B rng : Hm : textwidth(char *s); cho b rng chui ( tnh theo pixel ) m con tr s tr ti da trn chiu di chui, kch thc font ch, h s phng i. Bi tp: 1. V v t mu cc hnh c bn 2. V hnh trn ri cho chy i chy li trn mn hnh Mt s thi mu 1 Cu 1: Vit chng trnh nhp vo mt dy s gm n phn t. In cc s nhp ra mn hnh v tnh tng cc s chn trong dy.

94

Cu 2: Vit chng trnh nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn, m s, im trung bnh). In danh sch ban u v cc sinh vin c im trung bnh >7 ra mn hnh. 2 Cu 1: Nhp vo mt ma trn c n hng, m ct. Tnh tng cc phn t trn ng cho chnh. In kt qu vo file. Cu 2: Nhp vo mt danh sch gm n nhn vin (c cc thng tin: tn nhn vin, h s lng, a ch). Tnh lng cho cc nhn vin theo cng thc lng nhn vin=h s lng * 730000. In danh sch cc nhn vin c lng >5 triu vo file v ra mn hnh. 3 Cu 1: Nhp vo mt ma trn vung c n. In ra cc phn t ln nht ca tng hng trong ma trn. Cu 2: Nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn, m s, im trung bnh). Sp xp danh sch theo h tn v in kt qu ra mn hnh. 4 Cu 1: Nhp vo mt dy s thc c n phn t. Tm phn t ln nht trong dy v v tr ca n. Cu 2: Nhp vo mt danh sch gm n sinh vin (c cc thng tin: h tn, m s, im trung bnh). Tm sinh vin c tn l xyz no , vi xyz l tn bt k nhp vo t bn phm. 5 Cu 1: Tm tt c cc s nguyn t trong on [n, m]. Ghi kt qu tm c vo mt file. Cu 2: Nhp vo mt danh sch gm n nhn vin (c cc thng tin: tn nhn vin, h s lng, a ch). Tnh lng cho cc nhn vin theo cng thc lng nhn vin=h s lng * 730000. In danh sch cc nhn vin c lng mt nm >50 triu vo file v ra mn hnh.

95

TI LIU THAM KHO 1. Cc ti liu ting Vit : 1.1. Ng Trung Vit - Ngn ng lp trnh C v C++ - Bi ging- Bi tp - Li gii mu NXB giao thng vn ti 1995 1.2. Vin tin hc - Ngn ng lp trnh C H ni 1990 1.3. L Vn Doanh - 101 thut ton v chng trnh bng ngn ng C 2. Cc ti liu ting Anh : 2.1. B. Kernighan and D. Ritchie - The C programming language Prentice Hall 1989 2.2. Programmer's guide Borland C++ Version 4.0 Borland International, Inc 1993 2.3. Bile - Nabaiyoti - TURBO C++ The Waite Group's UNIX 1991

96

Das könnte Ihnen auch gefallen