lap trinh c phan dang cau - smith.n studio

Upload: smith-nguyen-studio

Post on 06-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    1/131

    Lp trnh C

    Bin son

    TS. Phan ng Cu

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    2/131

    2

    H ni, thng 01/ 2004

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    3/131

    li ni u

    Ti liu ny chng ti bin son nhm mc ch h trcc bn hc vin trong qu trnh tip thu biging mn hc "Lp trnh C". Thc ra c th gi chnh xc hn l Lp trnh C trong mi trng C++, vmi trng chng ta s dng l C++, v cc lnh cng khng hon ton l ca C m c s dng c phpca C++ khi cn thit; thm ch chng 13 ni v tnh ng gi, tha k v a hnh l ca C++ (chng tivit chng ny ch yu cc bn tham kho v t tm hiu). Chng ti mun nhn mnh rng ti liu nych h trcc bn, ch khng thay th bi ging v cc vn c trnh by mt cch tm tt, cn nhiuiu cha c gii thch y , nu chc m khng nghe ging th rt kh hiu. V d khi trnh by cphp cc lnh th du [ ] hm l nhng g nm gia hai du ny l khng bt buc, cn nhng g nm gia2 du < > li l bt buc phi c. Tuy nhin du [] li c dng bao cc ch s trong mt mng. V da[i][j] l phn thng i, ct j ca mt mng a 2 chiu Trong qu trnh ging dy chng ti s da vos tip thu ca cc bn a ra cch gii thch v cc v d minh ha ph hp.

    Chng ti lun sn sng lng nghe cc kin ng gp ca cc bn v ti liu cng nh bi ging, s hptc gia gio vin v hc vin ngy cng hiu qu hn.

    H ni, thng 01/2004

    `

    TS. Phan ng Cu

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    4/131

    Mc lc

    Chng 1. Tng quan v C v C++ .......................................... .................................................. ................. 11.1. Ngn nglp trnh v thut ton .......................................................................................... 1

    1.1.1. Ngn ng lp trnh ......................................................................................................... 11.1.2. Thut ton (Algorithm) .................................................................................................. 21.1.3. S ra i v pht trin ca ngn ng C .......................................................................... 2

    1.2. Cc phn tcbn trong ngn ng C ................................................................................. 31.2.1. B k t (character set) .................................................................................................. 31.2.2. Cc t kha (key words, reserved words) ....................................................................... 31.2.3. Tn v cch t tn (identifier) ....................................................................................... 31.2.4. Li gii thch (comment) ............................................................................................... 31.2.5. Mt vi chng trnh C n gin ................................................................................... 3

    1.3. Cu trc chng trnh trong C ............................................................................................ 41.3.1. Cc thnh phn ca mt chng trnh C ........................................................................ 41.3.2. Son tho v chy mt chng trnh C .......................................................................... 4

    Chng 2. Hng, bin v mng ...................................................................................................................... 82.1. Cc kiu dliu cs......................................................................................................... 8

    2.2. Hng ................................................................................................................................... 92.3. Kiu enum ..................................................................................................................... 102.4. Bin ............................................................................................................................... 112.5. Mng v chui .............................................................................................................. 122.6. nh ngha kiu bng typedef ........................................................................................ 132.7. Khi lnh ....................................................................................................................... 132.8. Vi nt v hm v chng trnh ..................................................................................... 132.9. Bin, mng tng ....................................................................................................... 132.10. Bin, mng ngoi ......................................................................................................... 142.11. Ton t sizeof .............................................................................................................. 152.12. Bin tnh, mng tnh .................................................................................................... 15

    Chng 3. Biu thc ...................................................................................................................................... 16

    3.1. Khi nim biu thc(expression).................................................................................... 163.2. Php ton s hc ............................................................................................................ 163.3. Cc php thao tc bit...................................................................................................... 163.4. Cc php ton quan h v logic ...................................................................................... 163.5. Php chuyn i kiu gi tr........................................................................................... 163.6. Php ton tng gim ...................................................................................................... 163.7. Cu lnh gn v biu thc .............................................................................................. 163.8. Biu thc iu kin ........................................................................................................ 163.9. Th tu tin cc php ton .......................................................................................... 17

    Chng 4. Vo ra .......................................................................................................................................... 184.1. Hm printf ..................................................................................................................... 184.2. Hm scanf ..................................................................................................................... 19

    4.3. a ra my in- hm fprintf ............................................................................................ 204.4. Dng vo stdin v cc hm nhp d liu ........................................................................ 214.5. Nhp /xut s liu cho chui v k t ............................................................................ 224.6. Mt s hm x l chui ................................................................................................. 224.7. S khc bit gia mng v chui ................................................................................... 234.8. Cc hm vo ra v dch chuyn v tr trn mn hnh ....................................................... 244.9. Cc lung nhp xut cin,cout ........................................................................................ 24

    Chng 5. Cc ton tiu khin ............................................................................................................... 255.1. Nhc li khi nim cu lnh v khi lnh ....................................................................... 25

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    5/131

    2

    5.2. Ton t if ....................................................................................................................... 255.3. else if ............................................................................................................................. 255.4. Ton t switch ............................................................................................................... 255.5. Ton t goto v nhn ..................................................................................................... 255.6. Ton t for..................................................................................................................... 255.6. Ton t while ................................................................................................................ 265.7. do ... while ..................................................................................................................... 26

    5.8. Lnh break v lnh continue ......................................................................................... 26Chng 6. Hm v cu trc chng trnh .................................................................................................. 28

    6.1. Khai bo v nh ngha hm........................................................................................... 286.2. Cc hm void ................................................................................................................. 296.3. Li gi hm ................................................................................................................... 306.4. S dng hm assert() kim tra iu kin trc ........................................................... 306.5. Cc i s mc nh ....................................................................................................... 316.6. Truyn tham s cho hm ................................................................................................ 316.7. Hm chng(Overloaded function) .................................................................................. 346.8. Cc mu (template) ........................................................................................................ 356.9. Hm vi cc tham s l mng ........................................................................................ 35

    Chng 7. Con tr, cp pht ng v hm ................................................................................................. 37

    7.1. Con tr v a ch .......................................................................................................... 377.2. Con tr v mng mt chiu ............................................................................................ 397.3. Con tr ti hm .............................................................................................................. 407.4. Kh nng quy ca hm .............................................................................................. 417.5. Hm main c i (tham kho ti liu [2], trang 198) ..................................................... 41

    Chng 8. Cu trc ....................................................................................................................................... 428.1. Kiu cu trc ................................................................................................................. 428.2. Truy nhp n thnh phn cu trc ................................................................................ 438.3. Php gn cu trc........................................................................................................... 438.4. Cu trc trong C++ ........................................................................................................ 438.5. Thnh phn kiu fields................................................................................................... 448.6. Union ............................................................................................................................ 44

    Chng 9. Thao tc trn tp ......................................................................................................................... 45Chng 10. Qun l mn hnh vn bn ................................................ .................................................. ..... 50

    10.1. Chn kiu mn hnh vn bn ........................................................................................ 5010.3. S khc bit gia cc hm nhp xut d liu ................................................................ 5110.4. Mt s hm thao tc mn hnh khc ............................................................................. 5110.5. V dng dng: To thc n trn ca s ................................................................... 52

    Chng 11. ha ........................................................................................................................................ 5511.1. Khi nim v ha .................................................................................................... 5511.2. phn gii mn hnh ha ..................................................................................... 5611.3. V hnh trong mn hnh ha .................................................................................... 5711.4. t mu nn, mu v, mu t ....................................................................................... 5711.5. V mt sng v hnh cbn .................................................................................. 58

    11.6. Ca s (viewport) ........................................................................................................ 6011.7. X l vn bn trn mn hnh ha ............................................................................. 6311.8. To hnh nh chuyn ng ............................................................................................ 65

    Chng 12. m thanh, m nhc .................................................................................................................. 67Chng 13. Tnh ng gi, tha k v a hnh ............................................ ............................................... 69

    13.1. Mu ........................................................................................................................ 69Cu hi v bi tp n tp chun b cho thi ht mn ................................................................................... 73Ph lc. Cc chng trnh mu ................................................................................................................... 85

    01. Tm c schung ln nht ca 2 snguyn ......................................................................... 90

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    6/131

    3

    02. Chuyn i mt sthp phn sang dng nh phn ............................................................... 9003. Chuyn i mt sthp phn sang sc csbt k .......................................................... 9104. Chuyn i mt sthp phn sang sc cs11 ............................................................... 9205. Nhp v sp xp danh sch cc sthc ............................................................................... 9206.o li mt chui k t....................................................................................................... 9307. Mt schong trnh quy: tnh giai tha ca mt snguyn khng m, tnh sFibonacci,tm c schung ln nht ca hai snguyn khng m, bi ton thp H ni. ......................... 94

    08. Sng Erastothen lit k cc snguyn tkhng vt qu mt stnhin n cho trc. ..... 9509. Tm sln nht trong dy cc sthc ................................................................................. 9510. Tm xem mt sthc x c xut hin trong dy sthc hay khng ........... ........... .......... ....... 9611. Tnh gi tra thc bc n theo phng php Horner ........................................................ 9712. Tm thp ca cc loi giy bc ......................................................................................... 9813. Loi trcc du cch tha trong chui tn (chli mt du cch) ................................. 9814.m schtrong chui k t.............................................................................................. 9915. Tnh s theo cng thc: ................................................................................................. 10016. Nhp v in danh sch sinh vin (phin bn 1) .................................................................... 10217. Nhp v in danh sch sinh vin (phin bn 2) .................................................................... 10318. Nhp, sp xp v in danh sch sinh vin (phin bn 3) ...................................................... 10419. Nhp, sp xp, tm kim v in danh sch sinh vin (phin bn 4) ...................................... 10620. Nhp, sp xp, tm kim v in danh sch sinh vin (phin bn 5) ...................................... 10721. Nhp, sp xp, tm kim v in danh sch sinh vin (phin bn 6) ...................................... 10922. Danh sch ci t bng danh sch lin kt (phin bn 1) .................................................. 11123. Danh sch ci t bng danh sch lin kt (phin bn 2) .................................................. 11424. Danh sch ci t trn tp (phin bn 1) ........................................................................... 11725. Danh sch ci t trn tp (phin bn 2) ........................................................................... 120

    Ti liu tham kho ....................................................................................................................................... 125

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    7/131

    Chng 1. Tng quan v C v C++

    1.1. Ngn nglp trnh v thut ton

    1.1.1. Ngn nglp trnh

    Trong phn Nhp mn tin hc chng ta tm hiu Winword v Excel, l cc phn mmng dng trong cng vic son tho vn bn v lm cc bng tnh ton c. c im ca ccphn mm ng dng l lun nh r phm vi ng dng v cung cp cng nhiu cng tt cc cng c hon thnh chc nng . Tuy nhin ngi s dng cng hu nh b b buc trong phm vi quynh ca chng trnh. Chng hn ta kh c th dng Excel gii mt bi ton gm nhiu bctnh ton nh tnh nghim gn ng mt phng trnh vi phn hay gii mt h phng trnh tuyntnh. Mc du cc phn mm ng dng ngy cng nhiu v thuc cc lnh vc nh xy dng,thit k, hi ha, m nhc...nhng khng th bao trm ht cc vn ny sinh trong thc t v cngphong ph. R rng khng ch nhng chuyn gia tin hc m ngay c nhng ngi s dng, nht lcc cn b k thut, rt cn n nhng phn mm uyn chuyn v mm do hn, c kh nng thchin c nhiu hn cc ch th ca ngi s dng gip h gii quyt nhng cng vic a dngbng my tnh. Phn mm c tnh cht nh thc gi l ngn ng lp trnh. Chnh xc hnngn

    nglp trnh l mt ngn ngnhn to bao gm mt tp cc tvng (m ta s gi l t kha phn bit vi ngn ng thng thng) v mt tp cc quy tc (gi l Syntax - c php) m ta c th

    sdng bin son cc lnh cho my tnh thc hin.Nh ta bit, cc nhca my tnh ch c th biu din cc s 0 v 1. V vy ngn ng m myc th hiu trc tip l ngn ng trong cc lnh l cc dy s nh phn v do c gi lngn ng my (machine language) . Mi ngn ng khc u phi thng dch hoc bin dch sangngn ng my (Interpreter - thng dch v cho chy tng lnh. Compiler - bin dch thnh 1 chngtrnh ngn ng my hon chnh, do vy chy nhanh hn thng dch).C nhiu loi ngn ng lp trnh, v hu ht cc nh khoa hc v my tnh u cho rng khng cmt ngn ngc nht no c kh nng phc v cho cc yu cu ca tt c cc lp trnh vin.Theo truyn thng, cc ngn ng lp trnh c phn lm 2 loi: cc ngn ng bc thp v ngnng bc cao.

    Ngn nglp trnh bc thp (low-level programming language):Ngn ng my, hp ng (asembler: chng trnh dch hp ng, assembly language: ngn ng hpng). Hp ng l ngn ng mt bc t ngn ng my. N ch khc vi ngn ng my trong vic sdng cc m biu th cc chc nng chnh m my thc hin.Lp trnh bng hp ng rt phin toi: c n vi t dng m cn thit ch thc hin php cng 2con s. Cc chng trnh hp ng rt kh vit; chng khng c cu trc hoc modun ha r rng.Chng trnh hp ng cng khng d chuyn t loi my tnh ny sang loi my tnh khc. Ccchng trnh ny c vit theo cc tp lnh c th ca loi b vi x l nht nh. Lp trnh bnghp ng th m gn v chy nhanh. Do hu ht cc chng trnh iu hnh h thng u cvit bng hp ng. Tuy nhin do s phc tp ca cng vic lp trnh nn cc hng sn xut phn

    mm chuyn dng thch vit chng trnh bng ngn ng C (do Bell Laboratories ca hng AT&Txy dng) l loi ngn ng kt hp c cu trc ca ngn ng bc cao hin i vi tc v tnhhiu qu ca hp ng bng cch cho php nhng cc lnh hp ng vo chng trnh.

    Ngn nglp trnh bc cao:Cc ngn ng lp trnh bc cao nh Basic, Pascal, C, C++... cho php cc lp trnh vin c th dint chng trnh bng cc t kha v cc cu lnh gn ging vi ngn ng t nhin. Cc ngn ngny dc gi l bc cao v chng gii phng cc lp trnh vin khi nhng quan tm v tng lnhsc my tnh tin hnh nh th no, b phn thng dch hoc bin dch ca chng trnh s gii

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    8/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 2

    quyt cc chi tit ny khi m ngun c bin i thnh ngn ng my. Mt cu lnh trong ngnng bc cao tng ng vi mt s lnh ngn ng my, cho nn bn c th tho chng theo ngnng bc cao nhanh hn so vi bc thp. Tuy nhin bn cng phi tr gi cho vic ny. Chng trnhngn ng my c dch ra t m ngun c vit bng ngn ng bc cao cha rt nhiu chi tittha, do tc chy s chm hn nhiu so vi chng trnh vit bng hp ng. Thng thngmt trnh bin dch c trng thng sinh ra s lnh m my gp 2 ln hay nhiu hn s lnh cnthit nu vit bng m my.

    Mt cch phn loi khc ca cc ngn nglp trnh:Ngn ngth tc (Procedural Language) vngn ngkhai bo (Declarative Language)Ngn ng th tc: Lp trnh vin phi xc nh mt th tc m my tnh s tun theo hon thnhmt cng vic nh trc. Th d: Basic, C, Fortran, ...Ngn ng khai bo: Ngn ng snh ngha mt lot cc yu t v cc quan h, ng thi cho phpbn c th tin hnh xp hng i vi nhng kt qu xc nh. Th d: Prolog, SQL (StructuredQuery Language)iu then cht trong vic lp trnh chuyn dng l mdun ha ngn ng - l s pht trin saocho nhim v lp trnh c th phn phi c cho cc thnh vin ca mt nhm lp trnh, v kt qut c l cc b phn khc nhau s hot ng ph hp vi nhau khi nhim v ca tng ngihon thnh. Ngn ng lp trnh mdun, nh Module-2 hoc ngn ng hng i tng nh C++, s

    cho php tng lp trnh vin c th tp trung vo vic lp m, bin dch v g ri cc modulechng trnh ring bit, ng thi c th cho chy (kim tra th) ring tng module ca mnh. Khitng module ring chy tt chng sc lin kt vi nhau m khng gy trc trc no.

    1.1.2. Thut ton (Algorithm)Thut ng Algorithm c dch ra ting Vit l thut ton, thut gii hoc gii thut. y chng ti dngt thut ton l cch gi quen thuc vi nhiu ngi.

    Thut ton l mtdy hu hn cc bc, mi bc m t chnh xc cc php ton hoc hnh ng cnthc hin, gii quyt mt vn .

    hiu y ngha ca khi nim thut ton, chng ta nu ra 6 c trng sau y ca thut

    ton:1. Input Mi thut ton thng c mt s d liu vo.2. Ouput Mi thut ton thng c mt s d liu ra.3. Tnh xc nh (Definiteness) Mi bc c m t chnh xc, ch c mt cch hiu duy nht v n

    gin c th thc hin c.4. Tnh dng (Finiteness) Thut ton phi dng sau mt s hu hn bc thc hin5. Tnh hiu qu (Effectiveness) Cc php ton trong cc bc phi n gin c th thc hin c.6. Tnh tng qut (Generalness) Thut ton phi c tnh tng qut, c th p dng cho mt lp i tng.

    V d:Thut ton Euclid: Tm c s chung ln nht ca hai s t nhin m,n.

    Input: m,n nguyn dngOutput: g l c s chung ln nht ca m v nPhng php:1. r= m mod n2. Nu r=0 th g:=n

    Ngc li (r>0) m:=n; n:=r v quay li bc 1.

    1.1.3. Sra i v pht trin ca ngn ngCNm 1970 Ken Thompson sng to ra ngn ng B dng trong mi trng hiu hnh UNIX trn

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    9/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 3

    my in ton DEC PD-7. B l k t u ca cm ch vit tt BCPL (Basic CombinedProgramming Language) do Martin Richards vit. Nm 1972 Dennis Ritchie ca hng BellLaboratories (v Ken Thompson) sng to nn ngn ng C nhm tng hiu qu cho ngn ng B.Lc u ngn ng C khng c mi ngi a dng. Nhng sau khi D.Ritchie cho xut bncun "The C Programming Language" th ngn ng C c ch v c s dng rng ri.Ngi ta dng C vit hiu hnh a nhim UNIX, O/S 2 v ngn ng Dbase. C cci tin qua nhiu phin bn: trnh bin dch Turbo C t phin bn 1 n phin bn 5, Microsoft

    C t phin bn 1 n phin bn 6. Hin nay, C li c pht trin thnh C++ vi 3 trnhbin dch: Borland C++ (dng trong DOS v trong Windows), Visual C++ (dng trong DOS vtrong Windows) v Turbo C++ (dng trong DOS). C th ni rng hin nay hu ht cc phnmm ng dng u c vit trc tip hoc gin tip bng C hoc C++Trong ti liu ny chng ti s gii thiu C v mt s lnh ca C++.

    1.2. Cc phn tcbn trong ngn ng C

    1.2.1. B k t(character set)1.2.2. Cc tkha (key words, reserved words)Cc t kha thng dng trong C

    auto default float long static unsignedbreak do for register struct voidbase double goto return switch publicchar else if short typedef whilecontinue extern int sizeof union volatile

    1.2.3. Tn v cch t tn (identifier)i vi C, mi tn cn phi khai bo trc khi s dng. Tn ta dy cc k t lin nhau, bt ubng k t hoc du gch di, tip theo l cc k t, cc s hoc du gch di.Ch : Tn khng cha du cch. C phn bit ch hoa v ch thng.

    1.2.4. Li gii thch (comment)

    Li gii thch t mt vi trn cui dng: //Li gii thch trn mt hoc nhiu dng: /* */

    1.2.5. Mt vi chng trnh C n ginChng trnh C n gin nht chy khng bo li: Khng lm g cvoid main(){}

    Hin cu cho//002CHAO1.cpp Hien cau chao tren man hinh

    #include void main(){printf("\nTurbo C xin chao ban");}

    Xa mn hnh ri hin cu cho#include #include void main()

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    10/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 4

    {clrscr();printf("Turbo C xin chao ban!");getch();

    }

    1.3. Cu trc chng trnh trong C

    1.3.1. Cc thnh phn ca mt chng trnh C

    Phn quan trng nht khng th thiu ca mt chng trnh C l hm main(). Thng thng hmmain() c dngvoid main(){//cc lnh}

    hocint main(){//cc lnhreturn(0);

    }

    Thng thng mt chng trnh C y c cc phn sau: Ch dn tin x l (preprocessor directive)- Cc bao hm (#include)- Cc vlnh (#define)

    Khai bo ton cc- Khai bo cc nguyn mu cho hm (function prototype)- Khai bo cc bin ton cc

    Hm main() nh ngha chi tit cc hm do ngi s dng va khai bo trn.

    Phn "nh ngha chi tit cc hm " c tht ngay sau phn khai bo ton cc.

    Mt s hm cbn v cc tp bao hm tng ng:

    Tp bao hm Cc hm c nh ngha trong tpstdio.h printf,scanf,getsconio.h getch,clrscrmath.h sqrt,abs,fabsstdlib.h abs,random,randomize,calloc,malloc,atof,atoictype.h toupper,islower,isdigit

    string.h strcmp,strcmpi,strcpy,strcat,strlen,strlwr,strupriostream.h cin,coutiomanip.h setw,setprecision, (cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    11/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 5

    b. Dch v ch y chng trnhKhi nhn F9 th u tin chng trnh c dch sang tp c ui l *.obj, sau lin kt cc tpv dch sang tp c ui *.exe c th chy c trong mi trng DOS.Khi dch chng trnh c th xut hin 3 loi li sau y:

    Li c thng bo bi tkha error (li c php):Li ny thng xy ra do khi ta son tho chng trnh khng tun theo ng nhng quy tc ca C,

    th d int th ta g thnh Int; hay ta g thiu ngoc n, ngoc kp chng hn...Sau y l mt s thng bo li thng gp loi ny.

    Unknown preprocessor directive

    Ch th tin x l khng ng. Trong trng hp ny bn phi xem li cc lnh #include xem bn c vit saikhng.

    Declaration terminated incorrectly

    Khai bo kt thc khng ng. V d bn nh du ; sau hm main nh sau:

    void main();

    chng hn. Nn lu l sau tn hm khng c nh du ; nh trn y. Sau tn hm phi l du { v ktthc hm l du }.

    Unexpected }

    Tha du }. Mi ln nh du { th bn nn nh du } ri sau g cc lnh vo on gia, nh vytrnh c tnh trng tha thiu du { hoc }.

    Compound statement missing }

    Thiu du }.

    Declaration syntax error

    Khai bo sai. V d bn vit

    int a,b

    printf("Chao");

    th my bo li dng th 2. Sdnh vy l v khi c qua dng th nht khng c du ; my cho rnglnh cha kt thc v cn chuyn tip sang dng th 2. Tuy nhin sang dng th 2 th my li thy lnhkhng ph hp nn bo li dng ny. Cch vit trn y tng ng vi cch vit:

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    12/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 6

    int a,b printf("Chao");

    V my thy rng y l mt lnh khng ng. Cn nu ta s li cc lnh trn l

    int a,b

    ;printf("Chao");

    th my khng cn bo li na v n chuyn xung dng th 2 gp du ; v bit l lnh int a,b;ckhai bo ng.

    Undefined symbol

    Bn s dng mt bin no m cha khai bo. V d bn cha khai bo bin n nhng li s dng tronglnh:

    printf("%d",n);

    chng hn th my bo l Undefined symbol 'n'

    Function ... should have a prototype

    V d trong lnh trn bn vit sai l

    prinf("%d",n);

    th my bo l Function 'prinf' should have a prototype. Ngha ca cu ny l: hm prinf cn phi cnguyn mu.

    Li c thng bo bi tkha Warning (li cnh bo):Li ny thng xy ra do khi ta khai bo bin nhng khng s dng ti.V d... is assigned a value that is never used

    Khai bo v gn gi tr cho bin nhng khng s dng.

    V d bn vit cc lnh

    int n; n=10;

    nhng trong cc phn tip theo khng s dng n ( hin ra mn hnh chng hn, hay dng tnh gi tr

    ca bin khc...) th my bo l'n' is assigned a value that is never used

    tuy nhin y ch l thng bo (warning). Khi bn nhn F9 dch chng trnh th my vn bo lsuccess

    Hai loi li trn y c thng bo ngay khi dch chng trnh thnh file *.obj

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    13/131

    Lp trnh C v C++ - Chng 1. Tng quan v C v C++ 7

    Loi li th3 c thxy ra trong qu trnh lin kt:Li ny thng xy th d khi c li gi hm nhng hm ch mi c nguyn mu m cha c khaibo chi tit.

    Dch v chy chng trnh:

    Nu chng trnh cha vit xong ta c thnhn F9 dch v sa li. Khi chng trnh tng

    i hon chnh th ta c th nhn Ctrl+F9 dch v chy chng trnh.

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    14/131

    Chng 2. Hng, bin v mng

    2.1. Cc kiu dliu cs

    C c mt s kiu d liu csnh sau:

    Kiu Min xc nh Kch thc(byte)char (signed char) -128 127 1unsigned char 0 255 1int -32 000 32 000 2long -2 t 2 t 4unsigned int 0 65 000 2unsigned long 0 4 t 4float 3.4e-38 3.4e+38 4double 1.7e-308 1.7e+308 8long double 3.4e-4932 3.4e+4932 10

    1. Kiu char

    Mt gi tr kiu char chim mt byte v c biu din mt k t tng ng trong bng ASCII.Khc vi Pascal, trong C gi tr ca bin char c thc hiu l s. Th d nu ta khai bo charch; th c hai cch gn ch=65 hay ch='A' cng cho mt kt qu. Khi hin th ch nu ta dngkhun dng "%d" th c gi tr 65, cn dng khun dng "%c" th c k t A. Bng sau ycho s khc bit gia char v unsigned char.

    M ASCII 0 1 . . . 127 128 129 . . . 254 255Gi tr bin kiu char 0 1 . . . 127 -128 -127 . . . -2 -1Gi tr bin kiu unsigned char 0 1 . . . 127 128 129 . . . 254 255

    Nu ta khai bo mt bin ch c kiu k t bng lnhchar ch;v sau gn ch=200 th thc cht ch ch nhn gi tr -56, do php th ch= = 200 s cho ktqu sai. Ni chung, c th thy rng nu ta dng lnh gn ch=n , trong 0n255, sau dnglnh printf(%d,ch) in gi tr ca k t ch th nu nu n 127 ta s thy gi tr n trn mnhnh, cn nu 128 n 255 th ta s thy gi tr -(255-m+1) .

    Phn loi k t:Cc k t c th phn lm 3 nhm: 0-31,32-126, 127-254; trong cc k t t 0 n 32 l cc ktiu khin, khng th nhn thy trn mn hnh.

    Ch :Trong chng trnh mt k t phi c bao trong du nhy n. Th d char ch='A'; ch='1's cho ta ch=49, cn ch=1 li cho ta ch biu din k t coa m ASCII l 1.

    2. Kiu nguyn

    Vy c th xem kiu k t cng l mt dng c bit ca kiu nguyn. Khi ta dng khun dng"%c" hin mt s nguyn n > 255 th k t n%256 sc hin. Th d nu n = 304 th k tng vi m ASCII l 48 c in, tc l k t '0'.

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    15/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 9

    3. Kiu du phy ng

    float chim 4 byte, double chim 8 byte.

    2.2. Hng

    Hng l cc i lng (c th c tn hoc khng) m gi tr ca n khng th thay i trong qu trnh chychng trnh.

    1. Hng k t

    V d; 'a', '1', 'B', ...

    2. Hng s nguyn (h 10,8,16)

    Hng int trong h 8 (Octal) c bt u bng s 0, cn hng int trong h 16 (Hexadecimal)bt u bng s 0 v k t x (in thng hoc in hoa). Th d

    011 = 90x11 = 17

    Ch . Khi hin mt s nguyn di dng bt phn bng lnh printf() ta dng khun dng % vch 0, cn vi dng thp lc phn th dng % v k t x (in thng hoc in hoa). V d

    printf("%o",9) hoc printf("%x",17) cho kt qu trn mn hnh l 11

    printf("%o",011) hoc printf("%x",0x11) cho kt qu trn mn hnh l 11

    3. float v double (s thc v s thc c chnh xc gp i)

    V d; 12.5, 36.98, ...

    4. Mt s hng c sn: M_PI, M_E,... (trong math.h)

    5. Cc hng k tc bit

    '\'', '\"', '\n', '\0',...Lu : hng '0' c m l 48, cn '\0' ng vi k t \0, c m l 0.

    6. Hng xu k t

    L mt dy k t bt kt trong 2 du "", th d "Ha noi".Ch : 'a' l hng k t gm mt byte, cn "a" l hng xu k t gm 2 byte, 1 byte cha k t a,

    byte cui cng cha k t '\0' l k tbo kt thc xu.

    Ch :Khi ta dng hm strlen(st) xc nh di ca chui k t th k t '\0' khng c tnh vo di ny. Th d 3 bin st1,st2,st3 sau y u c di l 3

    char st1[]="123";

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    16/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 10

    char st2[7]="123";char *st="123";

    Tuy nhin thc ra trong b nh lu tr mt chui di 3 th my cn 4 v tr v mt v tr lutr k t '\0'. Do khc vi thao tc vi mng, khi thao tc vi chui ta khng nn nhp s liucho v tr cui cng. Th d nu khai bo char st[10] th ta khng nn nhp s liu cho v tr 9.iu ny c th thy c qua v d sau:

    Gi s ta khai bo:

    char st[5]="123";

    th khi chui c di 3, 3 v tr cha s liu l st[0]=='1', st[1]=='2', st[2]=='3'; v trst[3]=='\0'. Cn nu ta khai bo

    char st[3]="012";

    Th tuy my khng bo li nhng thc ra c mt siu khng hp l. Nu ta dng hm strlen(st) kim tra di th thy rng di l 4 (mc duthc ra di ca st l 3), v tr st[3] khngphi l '\0' m l mt k t no , k tv tr st[4] mi l '\0'. Do nu ta dng lnh

    while(st[i]!='\0') putch(st[i]);

    chng hn th sau khi my in ra cc k t '0', '1', '2' th cn in tip mt k t no na ri midng.

    7. Tn hng v cch gn gi tr cho hng#define max 100#define str "Ha Noi"const float a=10.123;

    const char str2[]="Hai Phong";const char *str3="Tay Ho";Khng nn dng const char str2[5]= "Hai Phong" chng hn, v c th di ca hng vt qu di nh ngha.Ch : Hng c th l cc bin chim dng b nhth d int m =10; nhng cng c th l nhng gitr tm thi, khng c phn phi b nhth d M_PI, M_E, printf("\n%s","Ha Noi");

    2.3. Kiu enumGi s ta phi tin hnh mt s cng vic lp li theo cc ngy trong tun. Trong chng trnh tavit

    for(int i=2;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    17/131

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    18/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 12

    int *p;const int m=10;p=&m;//Dng lnh ny sai

    Phi sa li lconst int *p;

    const int m=10;p=&m;

    4. Bin a cha ch ca mt bin l s nguyn nhng ta khng th thao tc chng nh cc s nguyn thngthng. Th d ta khng th gn

    int m; float x;m=&x;

    a ch ca mt bin ngoi ln ch v tr ca bin trong b nh cn mang thng tin l a chca bin loi g. Ta bit rng a ch ca 2 bin nguyn lin tip th cch nhau 2 byte, 2 s thclin tip cch nhau 4 byte,... c th lu tr v thc hin cc php ton trn cc gi tra ch, Cnh ngha mt kiu bin nguyn c bit m gi tr ca chng l a ch ca cc bin v gi binny l con tr. Khi nh ngha con tr ta phi ch r l con tr ca bin loi g. Th d khaibo mt con tr kiu nguyn ta vit

    int *p;V khi ta c th gn p = &x; trong x l bin nguyn no .

    4. Ly gi trca mt bin thng qua a chGi s ta p l mt con tr. Khi *p s l gi tr c cha trong vng b nhm p tr ti.

    Nh vy vi bin x bt k th ta c *&x chnh l gi tr x.2.5. Mng v chuiTrong phn trn ta hiu bin l mt vng b nhc t tn v c th lu tr mt kiu gi tr no. biu din nhiu gi tr ta phi dng nhiu bin. Tuy nhin nhiu khi s bin li ph thucmt tham s no . Th d s thnh phn ca mt vectph thuc vo mt s n, cn s cc phnt ca mt ma trn li ph thuc s hng v s ct. Trong nhng trng hp ny ngi ta dng mtkiu d liu c cu trc l mng biu din s liu. Mng l mt tp hp nhiu phn t c cngmt kiu gi tr v c chung mt tn. V mt no c th coi mng cng l bin, nhng l bin ccu trc phc tp hn.

    nh ngha mng

    Khai bo int a[10] s dnh 10 v tr lin tip trong b nh, mi v tr gm 2 byte c th lu trc mt s nguyn v cc v tr ny tng ng l a[0], a[1], ..., a[9]

    Khai bo int a[8][10] s dnh 80 v tr lin tip trong b nh, mi v tr gm 2 byte c th lu trc mt s nguyn v cc v tr ny tng ng l a[0][0], a[0][1], ..., a[0][9], a[1][0], a[1][1], ...,a[1][9], . . ., a[7][0], a[7][1], ..., a[7][9].

    Ch : Khi ta khai bo mt mng c kch cnh trc, th d

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    19/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 13

    int a[10]; th a l mt hng a ch, do ta khng th gn a = . Tuy nhin nu ta nhngha mt bin con tr, th d int *pn; th ta c th dng php gn cho pn. Vi mt chui

    char *s="123"; chng hn, ta c s l a ch ca bin u tin ca chui, tc l s[0], do *schnh l gi tr ca s[0], cn *(s+1) l gi tr ca s[1],...

    2.6. nh ngha kiu bng typedeftypedef int ng;typedef int matran[8][10];

    ng x,y;matran a,b;

    Cc bin x,y c kiu nguyn v a,b c kiu l ma trn cp 8 x 10 vi cc phn t nguyn. bo rng mt identifier no l kiu d liu ch khng phi l bin, ta ch vit nh khai boidentifier l bin, sau thm t kha typedefpha trc. V d lnhfloat a[20][20];khai bo mt bin a c kiu l mng thc hai chiu c 20x20. Cn lnhtypedef float a[20][20];li khai bo kiu d liu a l kiu mng thc 2 chiu c c20x20.

    2.7. Khi lnhCc khi lnh lng nhau, phm vi hot ng ca cc bin:Khi lnh l tp hp cc lnh c bao trong hai du { }. Khi lnh c th gm nhiu khi lnhkhc. Mt bin c khai bo trong khi lnh th min tc dng ca n l khi lnh trong cng chakhai bo ca bin . Nu c cc bin cng tn th bin c khai bo sau cng s l bin tch cc,tc l thc s tham gia trong mi php ton c tn bin chung.

    2.8. Vi nt v hm v chng trnh

    Khc vi Pascal, C khng cho php cc hm lng nhau. Chng trnh c th c nhiu hm trong hm main() l thnh phn bt buc.

    2.9. Bin, mng tng1.nh nghaCc bin c khai nbo bn trong thn hm (k c hm main()) c gi l bin tng hay ccb.

    2. Phm vi hot ng v thi gian tn tiBin tng ch tn ti trong khi lnh m n c nh nghaV d

    void main(){auto int x;}

    Bin tng l ngm nh cho cc bin cc b, do t kha auto thng c b qua.Ch : Bin tng chc khai bo trong cc hm. Sau y l v d c lnh khai bo sai:

    auto int i; //Dng lnh ny saivoid main()

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    20/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 14

    {auto int x;}

    l sai.

    3.Khi u cho bin v mng tngBin ngoi (ton cc) khi khai bo th c tng gn bng 0 hoc rng. Nhng vi bin t

    ng khi khai bo xong m khng gn gi tr khi u hoc gn gi tr th gi tr khng xc nh, lmt gi tr v ngha no .Khc vi C, trong C++ c th khi u cho mng hoc bin, th d

    void main(){float a[4] = {2.3,1.5,2.6,3.8};

    int b[][3] = {1,2,3,4,5,6};int c[2][3] ={2,3,4,5,6,7};

    }

    2.10. Bin, mng ngoi1.nh nghaCc bin c khai bo bn ngoi hm (k c hm main()) c gi l bin ngoi.

    2. Phm vi hot ng v thi gian tn tiBin ngoi tn ti t v trc khai bo cho n ht chng trnh.

    V d:

    void v1();void v2();void main()

    {clrscr();v1();

    v2();getch();}

    int i;void v1(){i=10;printf("%d",i);

    }void v2(){printf("%d",i);

    }Chng trnh trn cho kt qu l

    10

    10

    Cn nu ta thm lnh

    printf("%d",i);

    trong chng trnh main() th my s bo li l bin i cha c nh ngha.

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    21/131

    Lp trnh C v C++ - Chng 2.Hng, bin v mng 15

    Ch : Nu trong mt hm no ta khai bo mt bin cng tn vi bin ngoi th bin ngoi khng ctc dng trong hm ny. Khi ta dng n bin cng tn th bin lun c hiu l bin aphng.

    V d sau minh ha cho iu ny:

    void v1();void v2();void main() {clrscr(); v1(); v2(); getch(); }int i;void v1() {int i=10; printf("\n%d",i); }voidv2() {printf("\n%d",i); }

    Kt qu chy chng trnh l

    100

    Nu chng trnh vit trn nhiu tp v cc tp c dch c lp, th phm vi s dng ca bin,mng ngoi c th mrng t tp ny sang tp khc bng t kha extern (xem chng 11)

    3. Khi u cho bin v mng ngoi

    Bin ngoi (ton cc) khi khai bo th c tng gn bng 0 hoc rng. Quy tc khai bo v khiu cng ging nh bin tng. Tuy nhin vi bin tng th sau khi khai bo bin c th nhnmt gi tr vu vno .

    2.11. Ton tsizeofsizeof(Kiu d liu)sizeof(i tng d liu)

    ng dng:int x[] = {1,2,3,4};int n = sizeof(x)/sizeof(int);// Xc nh cca mng.

    2.12. Bin tnh, mng tnh ngha ca bin tnh c th thy r qua v d sau:

    void vv(){static int i=1;printf("%d ",i++);

    }void main()

    {clrscr();for(int j=1;j

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    22/131

    Chng 3. Biu thc

    3.1. Khi nim biu thc(expression)Biu thc l mt gi trc to nn do s kt hp cc php ton vi cc hng, bin, phn t mng,hm... Nh vy bn thn cc hng, bin, phn t mng, hm cng l cc biu thc.

    3.2. Php ton s hc+, - *, / %

    3.3. Cc php thao tc bit& : Php hi cc bit, v d: 3 & 5 = 0000 0000 0000 0011 & 0000 0000 0000 0101 = 1| : Php tuyn cc bit, v d 3 | 5 =7^ : Php tuyn c loi tr, v d 3 ^ 5 = 6> 2 = 2 (1011 -> 10)

    m>>k = m/ 2k~ : Php ly phn b (trong chui bit 0 -> 1 v ngc li)

    3.4. Cc php ton quan h v logic>, >=,

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    23/131

    Lp trnh C v C++ - Chng 3.Biu thc 17

    e1 l biu thc logic

    V d:

    max = a>b? a:b;

    Cu lnh

    printf("\n%8.2f",a

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    24/131

    Chng 4. Vo ra

    4.1. Hm printfint printf(const char *dk, [danh sch cc i]);

    i dk l con tr kiu char cha a ch ca chui iu khin.

    1. Chui iu khin gm 3 loi k t:- Cc k tiu khin nh: \n Xung dng, \t Du tab- Cc c t chuyn dng v to khun (gi tt l c t)- Cc k t hin th ra mn hnh. i vi mt s k tc bit nh du ', '', \ th c cch vit cbit hn: Trc cc k t c thm k t \.

    Phn quan trng v ng ch nht trong chui iu khin l phn c t c dng tng qut nhsau:

    %[-][fw][.pp]Vy mtc t phi btu bng du % v kt thc bng k tchuyn dng.

    a. fw l rng dnh cho trng ra. Nu fw < rng trng th rng in ra bng rngthc t ca trng. Nu fw bt u bng s 0 th v tr trng bn tri c thay bng cc s 0.fw c thc thay bng du, th d printf("%*.2f ",a); Khi rng ca i tng ng l rng thc t

    b. Du tr (-): Nu c du - th dn tri, khng c th dn phi.c. pp ch nn dng cho s thc. pp l s ch s sau du chm thp phn, nu khng c th c

    hiu l pp=6.d. K t chuyn dng: quy nh dng in ra ca i tng, th d d l s nguyn, f l s thc, o l

    s bt phn, x l s thp lc phn...

    Bng cc k t chuyn dng

    K t chuyn dng Kiu ca i i c hin th nhc char k td hoc i int s nguyn h 10ld hoc li long S nguyn diu int S nguyn khng mo int S nguyn khng m h 8lo long S nguyn khng m h 8x int S nguyn khng m h 16lx long S nguyn khng m h 16f float hoc double S thc dng thp phne float hoc double S thc dng khoa hc.g float hoc double Dng khoa hc hoc thp phn tu thuc loi

    no ngn hn. Khng c cc s 0 v ngha.s Xu k t Cc k t

    V d:

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    25/131

    Lp trnh C v C++ - Chng 4.Vo ra 19

    Ta cn in ra dng thng tin:

    Nng sut tng 19.25%

    Trong gi tr 19.25 l gi tr ca bin thc ns, ta vit:

    printf("\nNang suat tang %5.2f%",ns);

    Gi s ta cn in ra

    Nng sut tng 19.25% trong nm 2000

    Trong gi tr 19.25 l gi tr ca bin thc ns, 2000 l gi tr ca bin nguyn nam c th thayi tu thuc tng trng hp, nu ta vit:

    printf("\nNang suat tang %5.2f% trong nam %4d",ns,nam);

    th v mt c php l ng nhng lnh khng in ra iu ta mong mun. Trong trng hp ny tann tch lm 2 lnh:

    printf("\nNang suat tang %5.2f%",ns);printf(" trong nam %4d",nam);

    2. Danh sch cc iCc i cn c phn cch nhau bi du phy. i c th l hng, bin, hm hay l kt hp cachng bng cc php ton. Vy cc i chnh l cc biu thc. Ni chung c bao nhiu c t th cby nhiu i. Nu si nhiu hn sc t th cc i khng c c t tng ng s b b qua.Cn nu si t hn sc t th my s b ri v c th dn n nhng kt qu sai.

    4.2. Hm scanf

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

    1. Danh sch cc iCc i cn c phn cch nhau bi du phy. i phi l mt con tr cha a ch ca mt binno . V tn ca chui k t l a ch nn khng cn du ly a chng trc tn chui.

    2. Chui iu khinGm cc k tc t chuyn dng. Mi c t thng c mt i tng ng

    phn c t c dng tng qut nh sau:

    %[*][dr]

    a. Nu c du * th trng vo vn c c nhng gi tr ca n khng c lu trong b nh.Th d:scanf("%d%*d%d,&a,&b);V khi chng trnh chy lnh ny ta nhp cc s 1 2 3 th ta c a=1,b=3 cn gi tr 2 thb b qua. Cch ny trong thc t t khi dng.

    b. dr ni chung vng mt, nu c mt th ngha ca n c th hiu qua v d sau:

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    26/131

    Lp trnh C v C++ - Chng 4.Vo ra 20

    char a,b;scanf("%2s%3s,&a,&b);

    Nu ta nhp dng vo l 12345678 chng hn th 2 k t 12 c gn cho a, 3 k t tiptheo c gn cho b, tc l 345. cc k t cn li b b qua.

    Ni chung c t ch gm k t % v c t chuyn dng c thng k trong bng sau:

    Bng cc k t chuyn dng

    K t chuyn dng Kiu ca i i c hin th nhc char k td hoc i int s nguyn h 10ld hoc li long S nguyn diu int S nguyn khng mo int S nguyn khng m h 8lo long S nguyn khng m h 8x int S nguyn khng m h 16

    lx long S nguyn khng m h 16f ho c e float Sdu phy nglf ho c le double Sdu phy ng

    g (Khng c) Khng c dng nys Xu k t Cc k t

    Ch : K tchuyn dng ca snguyn khng m h 8 l cho, snguyn khng m h 16l ox; nhng biu din snguyn khng m h 8 btu bng s 0, cn sh 16 th btubng s 0 v ch x.

    Cc dng nghing v m chnh l s khc bit gia hm scanf v printf.Ta c th nhp cc trng vo lin tip nhau, sao cho mi trng cch nhau t nht mt khong

    trng. Trong khotng trng c hiu l du cch, du tab hoc du xung dng. Nh vygia cc trng vo c th cha mt s khong trng tu . Nh vy ta khng th nhp mtchui k t c cha khong trng.

    V d v hm scanf:

    int n;float a;double b;char st[5]scanf("%d%f%lf%s",&n,&a,&b,st);

    Nhvy c ththy skhc bit ca chui iu khin trong hm printf v hm scanf l: chuiiu khin trong hm printf c thco 3 thnh phn: cc k tiu khin, cc k tc t vcc k thin trn mn hnh; cn trong lnh scanf th chc cc k tc t.

    4.3. a ra my in- hm fprintf

    int fprintf(stdprn,const char *dk, [danh sch cc i]);

    Tt c nhng iu ni lnh printf u ng. Ch c mt im khc bit: trong lnh printf thitb ra l mn hnh cn vi lnh fprintf th thit b ra l my in.

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    27/131

    Lp trnh C v C++ - Chng 4.Vo ra 21

    4.4. Dng vo stdin v cc hm nhp dliuTrc ht ta hy chy thon chng trnh n gin sau:

    char ca,cb;ca=cb='z';scanf("%c",&ca);scanf("%c",&cb);printf("\n%c %c",ca,cb);

    Nu ta g a th lnh scanf th 2 b b qua.Lnh printf tip theo ch hin ln mn hnh k tamc d ta gn cb='z'. Nh vy lnh scanf th 2 tuy c v nh khng c thc hin, nhngtrong thc t gi tr ca cb thay i.

    Trc khi gii thch hin tng trn y chng ti gii thiu thm mt vi khi nim lin quan ncc thao tc vo ra.Turbo C nh ngha mt s dng xut nhp chun, thc cht l cc vng m chuyn cho cc thaotc vo ra. Cc dng ny c t tn v c th thao tc trong chng trnh.

    Predefined streams automatically opened when the program is started.Name Meaningstdinstdoutstderrstdauxstdprn

    Standard input deviceStandard output deviceStandard error output deviceStandard auxiliary deviceStandard printer

    Khi gp mt lnh nhp s liu v ta bt u g t bn phm th cc k tc gi vo stdin.Chng trnh s chcho n khi ta g phm bo hiu kt thc lnh nhp s liu th chng trnhbt u c cc k t t stdin gn cho cc trng nhp. Nu s liu trong stdin cha thchng trnh li dng ta nhp tip. Cn nu s liu c nhiu hn th chng trnh ch ly va gn cho cc trng vo, phn cn li vn cn li trong stdin. Khi gp lnh nhp s liu tip theoth trc ht chng trnh xem trong stdin c s liu khng, nu c s liu th chng trnh lyngay cc s liu gn cho trng vo mi v lnh nhp s liu b b qua. Ta c cm gic llnh khng c thc hin nhng thc ra c thc hin nhng c th khng nh ta mun.Trli on chng trnh trn y. Khi nhp s liu cho ca ta g a v nhn th c k t a vk t (\n, LF c m l 10) u c a vo stdin. Lnh scanf c k t a t stdin nhngkhng loi k t \n ra khi stdin. Do vy khi ti lnh scanf tip theo th chng trnh ly ngay gitr \n gn cho cb m khng cn chngi s dng nhp s liu mi. Khi hin ra mn hnh thk t \n khng nhn thy do ta ch thy cha a m thi. Nu by gita sa li lnh printf thnh

    printf("\n%d %d",ca,cb);

    Ta s thy kt qu l97 10

    97 l m ca a, cn 10 l m ca \n.

    Turbo C khc phc vn ny bng cch cung cp hm lm sch vng m stdin nh sau:

    fflush(stdin);

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    28/131

    Lp trnh C v C++ - Chng 4.Vo ra 22

    Hm ny s lm sch vng m bn phm, nh vy s xa ht hu qu ca cc thao tc nhp s liutrc mt mt thao tc nhp s liu mi. Chng trnh trn y c th thm lnh ny trc khi thchin lnh scanf th 2 nh sau:

    char ca,cb;ca=cb='z';

    scanf("%c",&ca);fflush(stdin);scanf("%c",&cb);printf("\n%c %c",ca,cb);

    V ta khng cn gp iu bt thng trn y na. Sau lnh scanf th nht my s ch ta nhps liu cho lnh th 2. Kt qu hin ra trn mn hnh l nhng k t ta nhp vo.

    C mt cch khc kh k t '\n' l trong lnh scanf th nht thm c t %*c

    scanf("%c%*c",&ca);Khi k t '\n' cng c c (khng lu vo bin no c) v b loi khi stdin.

    Tuy nhin nh ta s thy, khng phi lnh nhp s liu no cng hot ng nh lnh scanf. Cng clnh loi b du \n sau khi c s liu trc . Th d trong on chng trnh sau y nu saukhi g a th my vn ch ta nhp tip d liu cho lnh scanf tip theo.

    char a,b;a=b='z';cin>>a;//Lnh C++, cn ti cin>>b; //Lnh C++printf("\n%c %c",a,b);

    4.5. Nhp /xut s liu cho chui v k t

    Mt s hm thao tc trn k t v chui:int getc(FILE *stream);int putc(int c, FILE *stream);int getch(void);//Nhn k t trc tip t bn phm, k t khng hin trn mn hnhint getche(void); //Nhn k t trc tip t bn phm, k t hin trn mn hnhint putch(int ch); //Mu tu thuc vo lnh textcolorint getchar(void);//Nhn k t t stdinint putchar(int c); //Lun hin mu en trngchar *gets(char *s);int puts(const char *s);

    Cc hm scanf, cin ch nhp c chui khng c du cch.Hm gets nhp c chui cha du cch: Nhn dy k t t stdin cho n khi gp k t '\n'. Kt '\n' b loi khi stdin nhng khng c t vo cui chui. Chui c b sung k t kt thc'\0'.Cc hm printf, cout v puts c th hin c cc chui c cha du cch

    4.6. Mt s hm xl chuistrcmp(st1,st2)>0 ngha l st1>st2, phn bit ch hoa ch thngstrcmpi(st1,st2)>0 ngha l st1>st2, khng phn bit ch hoa ch thngstrcat(st1,st2) ghp st2 vo st1

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    29/131

    Lp trnh C v C++ - Chng 4.Vo ra 23

    char* strchr(char *s, int kt);Tm ln xut hin u tin ca kt trong s. Nu tm thy tr va ch ca k t tm c, nu khngtr v NULL.strcpy(st1,st2); thc cht l gn st1=st2;strlen(st); cho di chui st.strlwr(st) chuyn thnh ch thng (ging tolower(ch) i vi k t).strupr(st);

    4.7. Skhc bit gia mng v chuiTrc ht ta chy thon chng trnh sau yint a[]={1,2,3};cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    30/131

    Lp trnh C v C++ - Chng 4.Vo ra 24

    char a1[4]="123";char *a3="123";

    Hoc khai bo v dng php gn:

    char *a;a="123";

    Tuy nhin nu ta vit:char a[4];a = "123";Th my bo li. Nguyn nhn l v a l mng c nh sn kch c, khng th thay ic, a khng phi l bin con tr nn khng thng pha bn tri trong php gn.

    4.8. Cc hm vo ra v dch chuyn v tr trn mn hnhHm gotoxy(cm,rn); sa con trn v trct th cm v hng th rn trn mn hnh.Hm kbhit() nhn gi tr 1 nu c phm c bm.

    4.9. Cc lung nhp xut cin,coutC++ cung cp cc dng (stream c cha trong iostream.h) cin v cout nhp xut s liu. Sauy l vi v d:

    float a;int m;cin>>a;cin>>m;cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    31/131

    Lp trnh C v C++ - Chng 5. Cc ton tiu khin

    Chng 5. Cc ton tiu khin

    5.1. Nhc li khi nim cu lnh v khi lnh5.2. Ton tifif if else

    Th d:

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

    5.3. else ifKhi mun thc hin mt trong n lnh ta c th s dng if nhh sau

    if

    else if . . .else if

    else

    5.4. Ton tswitchswitch{case n1: case n2:

    . . .case nk: [default: ]}

    Cch hot ng: Nu =ni th chng trnh bt u thc hin t case ni chon ht khi lnh. Nh vy nu mun thot khi khi lnh on gia th ta phi dng lnh break.Nu khng c gi tr ni no trng vi th chng trnh nhy n default,hoc ra khi lnh switch nu khng c default.

    5.5. Ton tgoto v nhnnhan: x+=y;. . .

    goto nhan;

    5.6. Ton tforfor([cc lnh A]; [biu thc B]; [cc lnh C]) [lnh D];[lnh E];Ch rng ba phn A, B, C cch nhau bng du ; cch hot ng ca ton t for nh sau:1. Nu c [cc lnh A] th thc hin cc lnh ny. Nu phn ny gm nhiu lnh th cc lnh

    cch nhau bng du , (ch khng phi l du ;), v d cc lnh A c th l int i=1, int j=2; Saukhi thc hin cc lnh A th chuyn sang bc th 2 sau y.

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    32/131

    Kthut lp trnh C - Chng 5.Cc ton tiu khin 26

    2. Xc nh [biu thc B],nu biu thc ny sai th kt thc lnh for tc l chuyn sang bc 4,nu B ng th thc hin [lnh D] sau chuyn sang bc 3 sau y.

    3. Thc hin cc lnh C, (thng thng cc lnh ny lm thay i gi tr biu thc B), trli bc2. V d c th l i++, hoc i++, j++

    4. Kt thc lnh for, tc l chuyn sang thc hin [lnh E] ngay sau lnh for.

    Nh vy nu [biu thc B] lun lun ng th vng lp s v hn. Trong trng hp [biu thc B]vng mt chng hn, th c hiu l biu thc B lun lun ng. Trong phn B c th khng phil mt biu thc duy nht, m c th c cc biu thc cch nhau bng du , v d i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    33/131

    Kthut lp trnh C - Chng 5.Cc ton tiu khin 27

    i=1;for(i=1;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    34/131

    Lp trnh C v C++ - Chng 5. Cc ton tiu khin

    Chng 6. Hm v cu trc chng trnh

    6.1. Khai bo v nh ngha hmTng t nh mt bin, mt hm phi khai bo trc khi n c gi. Mt khai bo hm c 3 phn:Kiu cho ra, tn v danh sch tham s.

    Hm c vai tr ngang nhau, C++ khng cho php xy dng mt hm bn trong hm khc.

    V d:Khai bo hm:

    double power(double x, int n);

    Trong double l kiu cho ra, power l tn ca hm v (double x,int n) l danh sch cc thams. Hm ny c 2 tham s l x v n. Cc tham s ny cn c gi l cc tham s hnh thc.Danh sch cc tham s c th trng, nhng cc du ngoc n vn cn thit. Mt khai bo hm cnc gi l cc nguyn mu hm (prototype). Phn ny cha cc thng tin ti thiu m b bin dchcn bin dch cc lnh gi n hm. V vy trong phn khai bo c th b bt tn cc tham schng hn nh:

    double max(double,double);

    Tuy nhin nu bin l mng th khng th b tn bin c. Ta ch c th vit mt cch n ginhn, v d

    int x[],float y[][10]

    chng hn. Lu l vi mng 2 chiu phi c thng tin v s ct.

    Phn khai bo phi v tr trc li gi hm trong chng trnh. Tuy nhin nh ta c th thy,phn khai bo cha xc nh mt hm. Hm cn c phn nh ngha nm v tr bt k trong

    chng trnh (tt nhin l khng phi bn trong mt hm khc).

    V d:nh ngha hm:

    double max(double x,double y){return (x>y?x:y);}

    Ch : Nu nh ngha hm nm trc li gi n th khng cn khai bo mu na. Trong thn hm c th khai bo cc bin cc b. Cc bin ny khng c trng tn vi cctham s. Trong thn hm ta c th s dng cc tham s m khng khai bo li. Nu ta khai boli th chng trnh s bo li.

    Trong phn nh ngha hm khng c b tn cc tham s nh trong phn khai bo. Nu hm c kiu cho ra th cui thn hm phi c lnh return ; trong c cng kiu gi tr vi hm. Trong thn hm c th c mt hoc nhiu lnh return ; Khi chng trnh gp lnh ny th gi tr hm c tr v v chng trnh thot khihm. Tn hm cng l mt identifier, do khng c t tn hm trng vi tn bin hoc ngcli. Khi ta khai bo tham s l mng mt chiu hay con tr th khi gi c th gi tham s thc lcon tr hoc mng. Th d khai bo char st[]; v char *st; l hon ton tng ng. Tuy

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    35/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 29

    nhin vi mng 2 chiu th khng cn ng na. Th don chng trnh sau y l khnghp l:

    void v(int **mm){printf("\n%d",mm[0][0]);}void main(){clrscr();int m[2][3]={1,2,3,4};v(m);getch();

    }

    Sau y l v dng v khai bo v gi hm:#include ...void v(int **a,int m,int n){for(int i=0;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    36/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 30

    {switch(n){case 2: return "Monday";case 3: return "Tuesday";case 4: return "Wednesday";case 5: return "Thursday";case 6: return "Friday";case 7: return "Saturday";

    }return ;

    }

    Trong chng trnh main() ta s dng lnh printf("%s",weekday(n)) in ra cc ngy.

    Cch 2:void weekday(int n){switch(n)

    {case 2: printf("\n%s","Monday");break;case 3: printf("\n%s","Tuesday"); break;case 4: printf("\n%s","Wednesday"); break;case 5: printf("\n%s","Thursday"); break;case 6: printf("\n%s","Friday"); break;case 7: printf("\n%s","Saturday"); break;}

    return;}

    6.3. Li gi hmKhi khai bo hm cc tham sc gi l tham s hnh thc. Khi s dng hm cc tham scthay bng cc tham s c kiu tng ng. Khi gi hm ta khng cn ch r cc tham s c kiu g vkiu ca chng c khai bo trc khi gi. Ch c tn ca cc tham sc thay vo cc v tr

    tng ng ca cc tham s hnh thc. Th d xc nh max trong 2 s a,b ta git=max(a,b);

    6.4. Sdng hm assert() kim tra iu kin trcHu ht cc hm khng thc thi tt trn tt c cc gi tr ca cc tham s. Th d hm doublepower(double x,int n) m chng ta s xt ti sau y ch c ngha vi x>0. i vi cc hm c trv gi tr khc vi kiu void th i khi rt kh tm mt kiu ra tng ng vi cc trng hpkhng thch hp. Trong cc trng hp ny ta c th dng hm assert() c nh ngha trongassert.h kim tra trc cc iu kin. Khi iu kin khng tha mn th chng trnh dngthc hin hm v km li thng bo.

    V d:

    double power(double x,int n){assert(x>0);double y=1.0;int m=abs(n);//Nu l double th dng fabs()for(int i=0;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    37/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 31

    6.5. Cc i s mc nhNu ta sa li hm nh sau

    double power(double x=1.0,int n=2){assert(x>0);

    double y=1.0;int m=abs(n);//Nu l double th dng fabs()for(int i=0;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    38/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 32

    Nu hm f1 c sa li nh sau:

    void f1(const int x){x*=3;

    printf("\n%d",x);}

    Th my s bo li. V khi khai bo kiu tham tr hng th trong thn hm khng c php thay igi tr ca bin kiu tham tr hng.

    2. Truyn theo a ch

    Ta xt on chng trnh sau:

    void f1(int *px){*px*=3;

    printf("\n%d",*px);}

    void main(){int a=1;

    printf("\n%d",a);f1(&a);printf("\n%d",a);

    }

    Kt qu trn mn hnh l:

    133

    Ngha l sau khi ra khi chng trnh th x ly gi tr thay i trong chng trnh con. y lcch truyn tham s theo a ch. Qua cch truyn ny th chng trnh con lm vic trc tip vigi tr m tham sa ch tr ti, tc l gi tr thc s ca bin. Do vy nu trong hm gi tr bin bthay i th khi thot khi hm nhng s thay i vn c gi li. Khi truyn tham s theo ach ta cn ch ti nhng im sau: Mng ch c th truyn cho hm qua a ch, do i vi d liu kiu mng th mi s thay

    i trong hm vn cn tc dng khi ra khi hm. C th dng 2 cch khai bo bin * hoc * (th d int* pi hoc int *pi, trong pi l con tr kiu int). C 2 cch nyhon ton tng ng. Cch th nht thng c dng khi khai bo nguyn mu hm, v khi ta ch khai bo kiu ca bin, cha cn khai no tn.

    Con tr khng cn phi khi to khi khai bo nhng phi khi to trc khi s dng. Khng c gn gi tr khc kiu cho con tr. Th d trong hm trn y ta khng th gi f1(2);hoc f1(&(x+1));

    3. Truyn bng tham chiu (reference parameter):

    Trong C++ ngi ta cn a thm khi nim bin tham chiu. C th xem bin tham chiu l mtbc tin ca con tr. Ta hy xt on chng trnh sau:

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    39/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 33

    int i=10;int& j=i;

    j=20;printf("\n%d",i);

    on chng trnh trn y s cho kt qu l

    20

    ngha l gi tr i b thay i mc du trong chng trnh khng c lnh no lm thay i gi tri. Nguyn do l v bin j cng chim vng b nhnh bin i. Do mi s thay i ca i utng ng vi thay i trn j v ngc li. Vy ta c th hnh dung mt bin tham chiu gingnh b danh ca bin khc. Ta c my iu ch sau y v bin tham chiu: Bin tham chiu cng cha a ch ca mt hc th nh cc bin khc. Bin tham chiu cn phi c khi to khi khai bo. Th d nu ta khai bo int& i; th my s

    bo li. iu ny cng d hiu, v bin tham chiu l bin "n theo", do phi c khi tokhi khai bo. Tt nht l ta khi to bin tham chiu theo mt bin khc c. Cn nu ta khito bng mt hng, th d int &m=2; th my khng bo li nhng c dng cnh boTemporary used to initialize 'm' .

    Khng cp pht b nhng cho bin tham chiu. Khng dng cc php ton nh tng hoc gim a chi vi bin tham chiu.Mc d bn cht ca bin tham chiu l con tr, nhng ta c th s dng tn bin tham chiu truy nhp n gi tr ca n. y l im khc bit gia bin thuc kiu tham chiu v bin kiucon tr. Nu trong on chng trnh trn ay ta sa li l

    const int i=10;int& j=i;

    j=20;printf("\n%d",i);

    Th kt qu l

    10

    Ngha l gi tr ca i khng b thay i. iu ny c v nh mu thun vi iu ta ni trn y lbin j thc ra l b danh ca i m thi. Chng ti s khng i su thm v vn ny m ch munnhc nhc gi mt iu l ta phi vit cc dng lnh sao cho chng c ngha. Th d nu ta khng mun thay i gi tr ca i th khng nn gn b danh cho n na.

    Truyn tham s theo kiu tham chiu:Trli vn truyn tham s cho hm, nu trong chng trnh trn ta sa li hm f1 nh sau:

    void f1(int &x){x*=3;

    printf("\n%d",x);}

    void main(){int a=1;

    printf("\n%d",a);f1(a);

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    40/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 34

    printf("\n%d",a);}

    Th kt qu trn mn hnh s l:

    13

    3

    Nh vy gi tr x thc s b thay i khi ra khi hm. L do l v khi c li gi hm th mtbin tham chiu n bin x tham gia vo cc tnh ton trong thn hm, v nh vy gi tr gc ca x b thay i.Nu ta khai bo cc tham s hm theo kiu tham chiu th khi gi khng cn gi theo a ch nhtrng hp truyn theo a ch m ch cn vit tn bin nh trong trng hp truyn theo gi tr.

    6.7. Hm chng(Overloaded function)Trong khi sp xp cc dy s ta thng xuyn phi i ch 2 phn t. khi phi lp li mt slnh ging nhau ta nh ngha hm swap nh sau:

    void swap(int &x, int &y){int tmp=x;

    x=y;y=tmp;

    }Tuy nhin hm ny ch c thi ch cho 2 s nguyn. Ta bit rng C khng cho php nh ngha2 hm cng tn, v nu mun vit hm i ch 2 s thc ta li phi vit hm khc vi tn khc. Tuynhin vic nh ngha ny li hp l trong C++. Ta c thnh ngha thm 2 hm swap cho s thcfloat v double nh sau:

    void swap(float &x, float &y)

    {float tmp=x;x=y;y=tmp;

    }

    void swap(double &x, double &y){double tmp=x;

    x=y;y=tmp;

    }

    Khi ta gi hm bng lnh swap(a,b); chng hn th C++ s xem kiu ca a, b m chn kiu hm

    thch hp.

    C++ s dng h thng trong cc hm c nhn bit duy nht bng tn v loi tham s cachng. Trong qu trnh bin dch tn hm c bin i thnh mt tn mi thng qua qu trnh gil "my cn tn" (name-mangling). Trong qu trnh ny, tn ca hm v danh sch cc kiu tham sc nhp chung thnh mt tn duy nht. Th d c 2 hm f(int,int); v f(float,float); scb bin dch i tn thnh hai tn khc bit nhau

    _f_int_int

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    41/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 35

    _f_float_float

    Nh vy trong tn mi khng c s tham gia ca kiu gi tr hm.Do b bin dch skhng ckh nng phn bit hai hm c cng tn danh sch tham snhng c kiu tr vkhc nhau.

    6.8. Cc mu (template)Trn y ta phi nh ngha 3 hm cho th tc trao i gi tr 2 bin. C++ c mt phng php tt

    hn thay i kiu phn t m khng cn ghi r kiu phn t khi khai bo hay nh ngha.Phng php ny c thc hin vi mu.

    Mu hm:Ta c thnh ngha hm swap vi mu nh sau:

    template void swap(T& x, T& y){T tmp=x;

    x=y;y=tmp;

    }

    Khi ta gi hm swap, th d swap(a,b); th kiu ca cc tham s sc b bin dch thay vo hm.Th d nu kiu ca a,b l float th thc cht b bin dch to nh ngha hm sau y:

    void swap(float &x, float &y){float tmp=x;

    x=y;y=tmp;

    }

    Ch :

    mu template phi ng trc phn khai bo v c phn nh ngha hm.

    6.9. Hm vi cc tham s l mngTrong Pascal mng khng th xut hin vi khai bo trc tip trong phn khai bo cc tham shm, m ta phi nh ngha bng lnh type trc.Trong C th iu c thc. Vic dng hm c tham s l cc mng c thc minh habng 2 v d sau y:

    Mng 1 chiu:

    void f(int x[],int);//======================void main()

    {clrscr();int n=2;int x[4]={1,2,3,4};f(x,4);getch();}

    //=======================void f(int x[],int n){for(int i=0;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    42/131

    Lp trnh C v C++ - Chng 6.Hm v cu trc chng trnh 36

    printf("\n%d",x[i]);return;

    }

    Mng 2 chiu:

    void f(int x[][2],int);//======================void main()

    {clrscr();int n=2;int x[2][2]={1,2,3,4};f(x,n);getch();}

    //=======================void f(int x[][2],int n){for(int i=0;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    43/131

    Lp trnh C v C++ - Chng 7. Con tr, cp phtng v hm

    Chng 7. Con tr, cp pht ng v hm

    7.1. Con tr v a chTrong chng 2 chng ta cp n loi bin a ch. Trong phn ny ta s kho st k hn mtcht vn ny.

    1.a chv bin con trLin quan n mt bin ta c khi nim:- Tn bin- Kiu bin- Gi tr ca bin

    V d cu lnhfloat a=12.5;nh ngha mt bin c tn l a, kiu l thc v nhn gi tr l 12.5.Kiu bin v tn bin sau khi nh ngha th khng ththay i, nhng gi trca n th c ththay i bng cc lnh cachng trnh. Ta bit rng mt bin float chim 4 byte b nh. Khi bin c khai bo th 4 byte

    ny cng c xc nh trong b nh. Ta bit rng cc byte ca b nhu c nh s v s tht ca chng c gi l a ch. Tt nhin a ch ny c my tng tnh ra, ch khng nhs trn cc byte nhnh s nh. Vy khi khai bo mt bin th a ch ca n c xc nh. ach ca cc bin tuy l s nguyn nhng khng c nh ng vi cc s nguyn bnh thngkhc v n c mt sc th ring. a ch ca mt bin l mt i lng kh quan trng v vyngi ta nh ngha thm kiu bin a ch d thao tc. Cc bin ny c gi l cc con tr, vthc ra n tr ti cc vng nh lu tr cc bin. Mc du a ch l mt khi nim chung cho ccbin, nhng cc bin con tr li c phn loi theo kiu bin m n tr ti. Nh vy c bao nhiukiu d liu th c by nhiu kiu con tr. Cng nh bt k mt bin no khc, mt con tr cn khaibo trc khi s dng. Vic khai bo c thc hin theo mu sau:

    * ;

    hoc *;

    C 2 cch ny hon ton tng ng. Cch th nht thng c dng khi khai bo nguyn muhm, v khi ta ch khai bo kiu ca bin, cha cn khai bo tn.

    Ta cng c th dng lnh typedefnh ngha trc mt kiu d liu con tr v khai bo bin contr theo mu sau:

    ;

    V d:

    typedef double* pdouble;

    Sau ta c th khai bo:

    pdouble pa,pb;

    Lnh

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    44/131

    Lp trnh C v C++ - Chng 7.Con tr, cp pht ng v hm 38

    int m, n, *p;

    Khai bo 2 bin nguyn m, n v 1 bin con tr p c kiu nguyn (tc l tr ti cc bin nguyn).Lu rng mc du *p nhn gi tr nguyn nn v hnh thc c th xem lnh khai bo trn l khaibo 3 bin nguyn m, n v *p. Tuy nhin vn c s khc bit rt ln y: trong b nhch dnhch cho cc bin m, n v con tr p. Mc du con tr ny chn vng nhcha gi tr nguyn,nhng vng ny cha c bo m. Nu vng nhcha *p b thay i bi chng trnh khc, v

    d mt phn mm no trong Windows chng hn, th gi tr *p b thay i theo. Ch khi ta cppht b nhcho cc vng con tr ch ti th cc vng ny mi c bo m. Nh vy ta thy rngnu dng con tr ta tn hai ln b nh: b nhcho con tr v b nhchng ch ti.

    V con tr p c kiu a ch nguyn do nu c mt bin nguyn x no th php gn

    p=&x

    l hon ton c ngha.Sau php gn ny th gi tr x v *p hon ton c th thay th nhau trong cc biu thc.Th d ta c th thay lnh

    y=x+3

    bng lnh

    y= *p +3

    2. Con tr NULLKhi khai bo m cha s dng (tc l cha gn cho con tr mt gi tra ch no c cppht b nh, hoc cha cp pht b nhcho con tr) th con tr c th chn mt vng vu vno trong b nh. Vng ny c th cha s liu m chng trnh ang hoc s s dng. c tha con tr cha s dng v v tr an ton ngi ta nh ngha con tr rng, vi tn l NULL. Con

    tr NULL ch va ch 0x0, tc l byte u tin trong b nh. Chc chn byte ny nm ngoi btk phn on b nh cp pht cho mt chng trnh.

    3. Hm c i l con trCon tr c th l tham s ca mt hm. Khi gi hm nh vy th i con tr phi l bin con trhoc a ch ca mt bin no . Khi ta gi hm vi a ch ca mt bin no v trong chngtrnh ny ta dng a ch thay i gi tr bin th l s thay i thc s, ngha l khi ra khihm th s thay i vn cn tc ng ln bin.

    V d:Trong chng trc ta dng kiu truyn tham s theo kiu tham chiu vit hm trao i gi tr2 bin. By gita s vit hm bng cc dng bin con tr.

    void swap(float *px, float *py){float tmp=*px;

    *px=*py;*py=tmp;

    }

    Khi gi s trong chng trnh chnh c cc dng lnh

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    45/131

    Lp trnh C v C++ - Chng 7.Con tr, cp pht ng v hm 39

    float x=2,y=3;swap(&x,&y)

    Th gi tr ca x v y thc sc trao i cho nhau.

    Bn c hy suy nghv tr li xem v sao nu trong hm trn ta vit l

    void swap(float *px, float *py){float* tmp=px;

    px=py;py=tmp;

    }

    Th thc ra ta cha trao i c cc gi tr x v y khi gi swap(&x,&y);

    Tuy nhin cch dng tham chiu vn n gin hn, v vy chng ti khuyn bn c l ni chungnn dng kiu truyn tham chiu nu mun gi li nhng thay i ca cc bin trong chng trnh.

    7.2. Con tr v mng mt chiu

    1. Php ton ly a chV d sau y minh ha cho quan h gia tn mng v a ch mng

    void main(){clrscr();float *px,x[]={1,2,3};px=x;printf("\n%f",*px);printf("\n%f",*(px+1));printf("\n%f",*(px+2));getch();}

    Kt qu l123Nh vy nu px = x th px+1 == &x[1], px+2 = = &x[2], ...

    Ch :C th vitfloat y[] = {1.2, 3.2, 4.3, 6.5};

    Nhngkhng thvit:float *py = {1.2, 3.2, 4.3, 6.5};//Dng lnh ny sai

    Nhng vi chui th li c:char st1[]="123";char st2[7]="123";char *st="123";

    2. Hm vi i l mng mt chiu

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    46/131

    Lp trnh C v C++ - Chng 7.Con tr, cp pht ng v hm 40

    Nu tham s hnh thc ca hm l mng mt chiu c kiu l int, float, double,... th tham s tc cth l con tr c kiu int, float, double,... v ngc li, th d

    void f1(int *pa,float *pb);

    cch khai bo ny tng ng nh khai bo sau:

    void f1(int pa[],float pb[]);

    3. Mng, con tr v xu k tCng ging nh tn mng, xu k t l mt hng a ch biu tha chu ca mng cha n.Tuy nhin nh chng ti ni ti, a chu ca chui st c truy xut bi &st, cn st thc dng truy xut ton b chui.

    Cp pht b nh:

    #include ...void main(){clrscr();double *a,*b,*c;a=new double [7];b= (double*) malloc(7*sizeof(double));c= (double*) calloc(7,sizeof(double));*a=15;//Tc l a[0]=15;int **q;q=new int*;*q=new int;**q=10;// Tc l q[0][0]=10;printf("\n%d",**q);

    getch();}

    7.3. Con tr ti hmTrong mt s bi ton thc t, nht l cc bi ton kho st cc hm s nh v th, tm nghim,...ta thng phi lp chng trnh lin quan n hm s f(x), trong f(x) l mt hm s c dngtng qut. tnh ton trn f th ta phi bit dng ca f c th, m nu ta lp trnh cho trng hpc th th mi ln gp mt hm mi ta li phi sa chng trnh, nh th rt bt tin. C cung cpcho chng ta mt cng c gii quyt vn ny: l con tr tr ti hm, m cch s dng bnc c th nhn bit c qua chng trnh sau y:

    //CHIADOI.CPP/*Phuong phap chia doi de tim nghiem*/#include #define epsix 1.0E-03#define epsiy 1.0E-03#define kmax 10double g(double);double h(double x);int chiadoi(double (*f)(double),double &x, double a, double b, int kmax);double g(double x){return sin(x)-x*x*cos(x);

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    47/131

    Lp trnh C v C++ - Chng 7.Con tr, cp pht ng v hm 41

    }//===============================================double h(double x){return x*x*x-x-1;}

    //===============================================//Ham de tim nghiem.int chiadoi(double (*f)(double),double &x, double a, double b, int kmax)

    {clrscr();double c;int k;k=0;if(f(a)==0) {x=a;return true;}if(f(b)==0) {x=b;return true;}if(f(a)*f(b)>0){printf("\nf(a) va f(b) khong trai dau",);delay(1000);return false;}while(b-a>epsix){c = (a+b)/2;if(fabs(f(c))

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    48/131

    Lp trnh C v C++ - Chng 8. Cu trc

    Chng 8. Cu trc

    8.1. Kiu cu trc1.nh ngha kiu cu trcC 2 cch nh ngha kiu cu trc

    cch 1:

    struct {//Khai bo thnh phn ca n};

    cch 2:

    typedef struct {//Khai bo thnh phn ca n};

    2. Khai bo bi n c kiu cu trcSau khi nh ngha kiu cu trc theo mt trong 2 cch trn, ta c th khai bo mt hoc nhiubin c kiu cu trc nh ngha ging nh khai bo cc bin thc, bin nguyn. Th d ta cnkhai bo 2 bin v1,v2 c kiu cu trc va nh ngha, ta vit

    v1,v2;hocstruct v1,v2;

    3. Kt hp nh ngha kiu v khai bo c kiu cu trcTa c th kt hp nh ngha v khai bo cc bin c kiu cu trc v1,v2 nh sau:

    struct {//Khai bo thnh phn ca n} v1,v2;

    Ch :Khng thvittypedef struct {//Khai bo thnh phn ca n} v1,v2;

    4. Khai bo trc tip cc bi n c kiu cu trc

    Ta c th khai bo cc bin c kiu cu trc v1,v2 mt cch trc tip nh sau:

    struct{Khai bo thnh phn ca n} v1,v2;

    Ch :Vi cch va nh ngha va khai bo nh3. ta c c kiu cu trc v ccbin c kiu l v1,v2. Cn bng cch 4. th ta ch c c cc bin v1,v2. Nu

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    49/131

    Kthut lp trnh C - Chng 8.Cu trc 43

    cn khai bo thm mt bin v3 c kiu cu trc nh v1, v2 ta li phi vit y l

    struct{Khai bo thnh phn ca n} v3;

    Khng thvittypedef struct{Khai bo thnh phn ca n} v1,v2;

    8.2. Truy nhp n thnh phn cu trcon chng trnh sau m t cch truy nhp n thnh phn cu trc:

    void main(){clrscr();struct ngay {int day,month,year;};struct ns

    {char *ten;ngay ngsinh;int tuoi,luong;};ns v;v.ten="Nguyen Kien Cuong";v.ngsinh.day=10;v.ngsinh.month=7;v.ngsinh.year=99;v.tuoi=50;v.luong=500;printf("\n%s", v.ten);

    ns* pv;pv=&v;printf("\n%s", pv->ten);//Hoacprintf("\n%s",(*pv).ten);getch();}

    8.3. Php gn cu trcKhc vi mng, ta c th gn 2 cu trc cng kiu vi nhau.Th d nu v1 v v2 l 2 bin cu trc c cng kiu, khi ta c th gn v1=v2;

    Cc v d v cu trc:S gii thiu trong bi ging.

    8.4. Cu trc trong C++Thnh phn ca cu trc c th l cc hm v c gi l cc phng thc. Cc thnh phn ca cutrc ngm nh l public(class ngm nh l private cn union lun lun l public, khng th thayi)

    1. Dliu thnh phn kiu private,publicCh c cc hm thnh phn ca lp hoc ca lp bn c th truy nhp c n cc thnh phnny.

    2. V d vclass

    //STACKKE.CPP...#define true 1

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    50/131

    Kthut lp trnh C - Chng 8.Cu trc 44

    #define false 0#define StackLength 3 //default stack lengthtemplate class Stack{private:

    T *a; //the stack itself: a dynamic array of T;int max; //the maximum number of elements on the stackint top; //the element at the top of stack top

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    51/131

    Lp trnh C v C++ - Chng 9. Thao tc trn tp

    Chng 9. Thao tc trn tp

    Chng trnh sau m t cc thao tc trn tp:

    //ZFILE.CPP//=====================================================================/*Chuong trinh sau day dung, mo tep o dang nhi phan, nhu vay ky tuEOF khong dong nhat voi feof(). Ky tu EOF co the nam khoang giuatep.Neu ta mo tep o dang van ban thi chuong trinh hoat dong khongdung vi may ly do:- Khi doc duoc ky tu co ma ASCII la 10, thi chuong trinh tu dong them

    ma 13 vao tep f2. Nhu vay tep f2 se them 1 byte.- Khi doc duoc ky tu c==EOF thi chuong trinh cung hieu la feof(), va

    dung qua trinh, nhu vay chi mot phan tep duoc doc. Vi voi tep van banthi ky tu ket thuc tep la EOF (Ky tu EOF khong duoc tinh vao do loncua tep neu no duoc tu dong them vao cuoi tep, nhu vay tep chi co motky tu co do lon la 1 byte. Con neu ta doc ky tu EOF va ghi vao tep f2sau do dong tep thi may tu dong them mot ky tu EOF nua vao cuoi tep,ky tu EOF do ta ghi vao duoc tinh vao do lon tep va co hien thi khita soan thao, con ky tu may them vao thi khong tinh va khong hienthi neu ta soan thao)

    Neu ta mo tep o dang nhi phan nhung lai thao tac nhu sau:- Neu ta thay if(feof(f1)) break; bang lenh if(c==EOF) break; thi cung

    sai, vi voi tep nhi phan c==EOF chua co nghia la feof().

    - Neu ta thay lenh trong chuong trinh bang lenhwhile(!feof(f1)) fputc(fgetc(f1),f2);thi cung sai, vi sau ky tu cuoi cung feof() van nhan gia tri falsedo do byte sau do ung voi feof() van duoc doc va ghi sang f2.Chi sau do thi con tro tep f1 moi o vi tri feof(). Nhu vay tep f2nhieu hon tep f1 1 byte.

    */void fcopy(char *filename1,char *filename2){FILE *f1,*f2;char c;if(!(f1=fopen(filename1,"rb")))

    {printf("\n Tep %s khong ton tai",filename1);getch();exit(1);}f2=fopen(filename2,"wb");while(true){c=fgetc(f1);if(feof(f1)) break;fputc(c,f2);

    }fcloseall();

    };//==================================================

    //==================================================void main(){clrscr();int mcase=2;//1-Text && Binary file, 2-Text file, 3-Binary fileFILE *f;int n,m,i,j;

    switch(mcase){case 1://Text and Binary Files

    clrscr();f=fopen("vb.txt","wt");fputc('A',f);fputc(EOF,f);fputc(10,f);fputc(26,f);fputc('B',f);

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    52/131

    Kthut lp trnh C - Chng 9. Thao tc trn tp 46

    fclose(f);f=fopen("vb.txt","rt");while(!feof(f)) printf("%d ",fgetc(f));fclose(f);printf("\n");f=fopen("vb.txt","rb");while(!feof(f)) printf("%d ",fgetc(f));fclose(f);

    getch();/*Ket qua tren man hinh65 255 10 -165 255 13 10 26 66 -1Khi ghi vao tep van ban ma 10 thi ma 13 duoc chen vao phia truoc,tuy nhien khi doc thi ma 13 duoc bo quaNeu mo tep theo kieu nhi phan thi ma 13 cung duoc doc

    */clrscr();f=fopen("vb.txt","wb");fputc('A',f);fputc(EOF,f);fputc(10,f);fputc(26,f);fputc('B',f);fclose(f);f=fopen("vb.txt","rt");while(!feof(f)) printf("%d ",fgetc(f));

    fclose(f);printf("\n");f=fopen("vb.txt","rb");while(!feof(f)) printf("%d ",fgetc(f));fclose(f);break;/*Ket qua tren man hinh

    65 255 10 -165 255 10 26 66 -1Khi ghi vao tep nhi phan ma 10 thi ma 13 khong duoc chen vao.

    Khi copy tep ta phai mo tep theo kieu nhi phan nhu chuong trinhfcopy() tren day.Lenh rewind(f),unlink() hay remove(), fflush(f),fflushall(), fcloseall() cung duoc dung cho ca 2 loai. Cac ham fseek,ftell cung vay.Thi du doan chuong trinh sau cho biet so byte cua tep

    fseek(f,0,2);printf("\%d",ftell(f));

    *///==============================================================

    case 2://Text fileFILE *f1,*f2;char str[256];fcopy("AFILE.CPP","AFILE.TXT");f1=fopen("AFILE.TXT","r");f2=fopen("AFILE.TX","w");while(fgets(str,255,f1)!=NULL) fputs(str,f2);//Lenh fgets() doc n-1 ky tu cua mot dong hoac ca dong vao bien strfcloseall;

    //Nhap so lieu vao tep van banclrscr();float xx,yy;coutn;f = fopen("DATA.TXT", "wt");fprintf(f,"%d",n);cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    53/131

    Kthut lp trnh C - Chng 9. Thao tc trn tp 47

    //Doc so lieu tu tep va gan cho bien x[i],y[i]n=0;//Dat lai gia tri n de dam bao la n khong phai co tu truocf = fopen("DATA.TXT", "rt");fscanf(f,"%d",&n);float *x=new float [n+1];float *y=new float [n+1];for(i=1;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    54/131

    Kthut lp trnh C - Chng 9. Thao tc trn tp 48

    //Cap nhat lai gia tri nfseek(f,0,2);n=(ftell(f)-sizeof(n))/sizeof(aa);cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    55/131

    Kthut lp trnh C - Chng 9. Thao tc trn tp 49

    {fgets(s,255,f);fgets(s,255,f);for(j=0;j

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    56/131

    Lp trnh C v C++ - Chng10. Qun l mn hnh vn bn

    Chng 10. Qun l mn hnh vn bn

    Trong chng ny s gii thiu mt s hm dng qun l mn hnh mu v to ca s vi musc khc nhau nhm lm cho cc giao din trn mn hnh p hn. Cc hm ny u nm trongtp conio.h.

    10.1. Chn kiu mn hnh vn bn1. Hm chn mode vn bnvoid textmode(int mode);Mt vi mode hay dng

    Cc tn hng Gi tr s videoLASTMODE -1 mode vn bn trc C40 1 16 mu, 40 ctC80 3 16 mu, 80 ctC4350 643 EGA 43 hng hay VGA

    50 hng (80 ct)Ch :

    - Mn hnh lun lun c 25 dng- Trong mode C40 cc k t c b ngang ln gp i cc k tmode C80.

    2. V dtextmode(C40);

    3. Cch xc nh vtr trn mn hnhH trc ta trn mn hnh nhn im gc trn bn tri lm gc. im ny c ta (1,1). Nugi maxco l s ct ca mn hnh (40 hoc 80) th (maxco,1) l gc trn bn phi, (1,25) l gcdi bn tri, (maxco,25) l gc di bn phi.

    Cc hm

    wherex() v hm wherey() cho v tr hin thi ca con tr. Cc hm ny c phm vi tc dngton mn hnh cho d c mt ca s no ang c kch hot.

    10.2. t mu nn v mu chMu nn:void textbackground(int color);

    Mu ch:void textcolor(int color);

    Bng m cc mu nn v mu ch:

    Cc tn hng Gi tr s Mu chhay nn?BLACK (en) 0 C haiBLUE (xanh gia tri) 1 C haiGREEN (xanh l cy) 2 C haiCYAN (xanh l) 3 C haiRED () 4 C haiMAGENTA (tm) 5 C hai

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    57/131

    Kthut lp trnh C - Chng 10.Qun l mn hnh vn bn 51

    BROWN (nu) 6 C haiYELLOW (vng) 14 Ch cho mu chWHITE (trng) 15 Ch cho mu ch

    Ch :- Cc hng c nh ngha trong conio.h v graphics.h.- Cc hm trn y khng lm thay i mu sc ca cc ca s v cc dng ch c t trc trnmn hnh.- Khi gp lnh textbackground th l mu ca cc ca sc xy dng sau lnh ny v trclnh textbackground tip theo. Lnh textcolor ch c tc dng i vi d liu nhp xut bi cclnh cprintf v cscanf.

    Ta xt mt chng trnh to ca s nh sau:

    #include "define_h.cpp"void main()

    {mot: textbackground(BLUE);hai: clrscr();ba: textbackground(CYAN);bon: window(5,5,35,20);nam: clrscr();sau: textcolor(YELLOW);bay: gotoxy(10,10);tam: cprintf("123");getch();}

    Sau lnh textbackground() th nn ca mn hnh vn khng i mu. V lnh ny ch bt u chiu lc i vi cc lnh ng sau n m khng c kh nng xa nhng g c trn mn hnh c.Mun lnh ny c hiu lc ta phi xa tt c nhng g c trn mn hnh.

    Lnhhai: clrscr();xa tt c nhng g c trn mn hnh c, v do ton b mn hnh c mu xanh da tri. Lnh th

    3 t li mu nn thnh mu xanh l, sau ta nh ngha mt ca s. Ta lu rng sau khi nhngha ca s th mn hnh c coi nh thu nh v ca si vi cc lnh clrscr, gotoxy, cprintf,cscanf, cgets, cputs. Vy v tr gc bn tri ca ca s by gil (1,1).10.3. Skhc bit gia cc hm nhp xut dliuNh chng ti nhc ti trn, sau khi nh ngha ca s th cc lnh

    clrscr, gotoxy, cprintf, cscanf

    ch c phm vi hot ng trong ca s. Th d khi dng cprintf hin th s liu th nu s liuvut qu chiu di ca s th s t ng xung dng hin tip dng di. Hm cscanf c th hinmu nhng c nhc im l khi ta nhp s liu th nu b sai khng th sa c nh lnh scanf.Cc lnh khc nh puts, gets, printf, scanf c phm vi hot ng trong c mn hnh.

    Lnh gotoxy chn c cc v tr trong ca s. Nu mun a con trn v 1,24 ca mn hnhchng hn, ta dng lnh window(1,24,1,24);10.4. Mt s hm thao tc mn hnh khcvoid clreol(void);void delline(void);int wherex(void);int wherey(void);void gettextinfo(struct text_info *r);

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    58/131

    Kthut lp trnh C - Chng 10.Qun l mn hnh vn bn 52

    10.5. V dng dng: To thc n trn ca s

    //AMENU.CPP#include #include #include #include #include const int menuitems=20;char *pmenu[menuitems];void (*ham[menuitems])(void);//=============================================void nhapsl(){window(10,6,70,8);textbackground(CYAN);textcolor(BLACK);clrscr();gotoxy(5,2);cprintf("Chuong trinh nhap so lieu");getch();clrscr();

    }//=============================================void kiemtrasl(){window(10,6,70,8);textbackground(GREEN);textcolor(RED);clrscr();gotoxy(4,2);cprintf("Chuong trinh kiem tra so lieu");getch();clrscr();

    }//=============================================void inbaocao()

    {window(10,6,70,8);textbackground(BROWN);textcolor(YELLOW);clrscr();gotoxy(4,2);cprintf("Chuong trinh in bao cao");getch();clrscr();

    }//=============================================void khungdon(int x1,int y1,int x2,int y2){int i;gotoxy(x1,y1);putch('');for(i=x1+1;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    59/131

    Kthut lp trnh C - Chng 10.Qun l mn hnh vn bn 53

    gotoxy(x1,y1);putch('');for(i=x1+1;i

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    60/131

    Kthut lp trnh C - Chng 10.Qun l mn hnh vn bn 54

    window(1,1,80,25);textbackground(BLUE);clrscr();int n=3;pmenu[0]="Nhap so lieu ";pmenu[1]="Kiem tra so lieu";pmenu[2]="In bao cao ";ham[0]=nhapsl;ham[1]=kiemtrasl;ham[2]=inbaocao;

    menu(n);window(1,1,80,25);textbackground(BLUE);clrscr();

    }

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    61/131

    Lp trnh C v C++ - Chng11. ha

    Chng 11. ha

    Trong chng ny s gii thiu mt s hm v cc ng v hnh cbn nhng trn, cungelip, hnh qut, ng gp khc, hnh a gic, ng thng, hnh ch nht, hp ch nht,... Ngoi racn xt cc vn l th khc nh: x l vn bn trn mn hnh ha, k thut to nh di ng...Cc hm ha c khai bo trong tp graphics.h.

    11.1. Khi nim v haTrong ch vn bn mn hnh c chia thnh cc , mi c th hin th mt k t. Cc v trtrn mn hnh c nh s t tri sang phi v t trn xung di. Trong ch bnh thng thmn hnh c 25 dng v 80 ct. V trgc tri trn c ta (1,1). Hm gotoxy(int x,int y) sa con trn v tr ct th x v hng th y.ch th, mn hnh c chia thnh nhiu chm im m mi im c gi l mt pixel.S lng chm ty thuc vo phn gii ca mn hnh. Khc vi ch vn bn, trong chth, im gc tri trn c ta l (0,0). V cng ging ch vn bn, cc im c dnh stng dn t tri qua phi v t trn xung di. im (x,y) trong mn hnh th l im ct xv hng y.

    Ngm nh mn hnh C ch vn bn. chuyn sang ch th ta phi khi to chth. Hm khi to ch th v cc hm x l mn hnh thc cha trong tp "graphics.h",do trong phn mu ca chng trnh phi c lnh

    #include

    Trc khi c th s dng mn hnh th ta phi dng lnh

    initgraph(&gd,&gm,);

    gd = graphics driver, l biu hp mn hnh hay cn gi l card mn hnhgm = graphics mode, l ch th

    l ng dn n th mc BGI cha cc tp tin *bgi iu khin ha v cc tptin *.chr cha cc phng ch khc nhau v cc kiu ch trn mn hnh ha.Tn cc bin gd hoc gm c th thay i.Th don chng trnh sau khi to ch ha:

    #include void main(){int mh=VGA, mhmode=VGAHI;

    initgraph(&mh,&mhmode,"\\TC\\BGI");

    }

    Thng thng ta rt kh bit l mn hnh ang s dng l loi g. Lnh initgraph c kh nng t tmkiu mn hnh v ch thch hp nu ta t bin gd=DETECT, hng DETECT c gi tr bng 0,do lnh ny tng ng lnh gd=0.

    on chng trnh trn y c sa li nh sau:

    #include void main()

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    62/131

    Kthut lp trnh C - Chng 11. ha 56

    {int mh=DETECT, mhmode;initgraph(&mh,&mhmode,"\\TC\\BGI");

    }

    Khi ta t khng ng cc tham s, th dt sai ng dn chng hn, th chng trnh cngkhng thng bo g c. Khi ta bt u dng ch ha th d v mt vng trn th chng trnh

    cng khng bo li nh thng thng m ch hin dng thng bo trn mn hnh:

    BGI Error: Graphics not initialized (use 'initgraph')

    Tuy nhin ta c th kim tra kt qu khi to bng hm graphresult(). Hm graphresult()==0 cngha l vic khi to thnh cng. ch vn bn hm graphresult() cng bng 0, do ta chnn kim tra hm ny sau khi dng lnh initgraph. on chng trnh trn y c th sa li cthm phn kim tra vic khi to ha nh sau:

    #include void main(){int mh=DETECT, mhmode;

    initgraph(&mh,&mhmode,"\\TC\\BGI");if(graphresult()!=0) {cout

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    63/131

    Kthut lp trnh C - Chng 11. ha 57

    Ch :Cc hm getmaxx()+1, getmaxy()+1 cho sim nh theo chiu ngang v chiu ng trong mnhnh cho d c mt viewport no ang c kch hot.

    11.3. V hnh trong mn hnh haMn hnh ha gm nhiu im nh c sp xp trn cc g thng nm ngang v thng ng.Nguyn tc chung hin th hnh nh trn mn hnh th l hin cc im vi cc mu khc

    nhau. t mu mt im no ta dng hm:

    void putpixel(int x,int y,int color);

    Hm

    unsigned getpixel(int x,int y);

    tr v s hiu mu ca im nh (x,y). Nu im nh ny cha c t mu bi cc hm v hochm putpixel m ch mi c to mu bi setbkcolor th hm getpixel(x,y) s cho gi tr 0 (chod trong thc t mu nn hay mu ca im nh khc mu en, mu c s hiu 0). V nguyn tc tac th dng hm putpixel v mt hnh bt k trn mn hnh. Tuy nhin vic v theo kiu ny tnrt nhiu cng sc, do ngi ta nh ngha nhiu hm trgip v cc ng v cc hnh cbn.

    11.4. t mu nn, mu v, mu t1. Mu nnMu nn l mu lm nn trn ta v cc hnh. Ta c tht mu nn bng lnh

    void setbkcolor(int color);

    Lnh ny gn ging vi lnh textbackground trong ch vn bn, nhng c my im khc bit:lnh textbackground(int color) th khi lnh c thc hin nhng g c trn mn hnh c khng

    bnh hng. Nu ta nh ngha mt ca s th lnh ny ch c tc dng trn ca s.Cn lnh setbkcolor(int color) thc tc dng ngay khi c thc hin, v phm vi tc dng can l c mn hnh, cho d ta c nh ngha mt ca s bng lnh viewport.

    2. Mu nt v chn mu nt v ta dng lnh

    void setcolor(int color);

    Khc vi lnh setbkcolor, lnh ny ch c tc dng i vi cc lnh v sau n. Nh vy ta c th vnhiu mu khc nhau trn mn hnh.

    3. Kiu t v mu t chn kiu t v mu t cc min do ta chn, ta dng lnh

    void setfillstyle(int pattern, int color);

    4. Bng m mu v bng kiu t(pattern)

    Sau y lbng m mu thng dng ca gii mu (pallette) ngm nh

    Smith Nguyen Studio.

  • 8/3/2019 Lap Trinh C Phan Dang Cau - Smith.N Studio

    64/131

    Kthut lp trnh C - Chng 11. ha 58

    Tn hng Gi tr s Mu hin thBLACK 0 enBLUE 1 Xanh da triGREEN 2 Xanh l cyCYAN 3 Xanh lRED 4 MAGENTA 5 TmBROWN 6 NuLIGHTGRAY 7 Xm nhtDARKGRAY 8 Xm smLIGHTBLUE 9 Xanh da tri nhtLIGHTGREEN 10 Xanh l cy nhtLIGHTCYAN 11 Xanh lnhtLIGHTRED 12 nhtLIGHTMAGENTA 13 Tm nhtYELLOW 14 VngWHITE 15 Trng

    Ta c th thay i gii mu bng lnh setpalette(int , int )

    Cc