17206 - Bai Giang Ky Thuat Lap Trinh C

Embed Size (px)

Citation preview

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

BI GINGK 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 LCMC 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

3

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

8

4

4

13

7

5

1

14

8

6

4

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

8

1

10

5

4

1

7

4

3

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)

5

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

8

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 // 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 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 #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 */ 64thy = 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 #include #include #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 ( ); } 65Bi 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)66CHNG 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. 67M 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 LFM 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 : 70Cu 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 : 71xp=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 72n fpl s mu tin cn ghi l con tr tpCng 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 tpCng dng : Hm c n mu tin kch thc size byte t tp fp ln ln vng nh ptr. 73Hm 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 */ 75fseek(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 #include 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"); 76status = 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.77CHNG 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 graphmodeVGAMED (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 muBng trn cho ta cc hng v gi tr ca chng m cc bin graphdtriver vgraphmode 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 : 80Bng 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 TrngCc 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); 82Trong : (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() { 83int 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" 84int 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); 85tc 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 toB dy ca ng v do tham s _dy xc nh,. bng di y cho cc gi tr khMu 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; 86initgraph(&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).88Hm : 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=0Chng 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 : 890 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; 90setviewport(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); 91setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i5 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.95TI 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 199196