136725085-su-dung-dev-c

Upload: kuteboy290690

Post on 11-Oct-2015

47 views

Category:

Documents


0 download

DESCRIPTION

as

TRANSCRIPT

  • I HC QUC GIA H NI TRNG I HC CNG NGH

    Khoa Cng ngh Thng tin

    PHM HNG THI

    Bi ging

    NGN NG LP TRNH C/C++

    H Ni 2003

  • LI NI U

    Ngn ng lp trnh (NNLT) C/C++ l mt trong nhng ngn ng lp trnh hng i tng mnh v ph bin hin nay do tnh mm do v a nng ca n. Khng ch cc ng dng c vit trn C/C++ m c nhng chng trnh h thng ln u c vit hu ht trn C/C++. C++ l ngn ng lp trnh hng i tng c pht trin trn nn tng ca C, khng nhng khc phc mt s nhc im ca ngn ng C m quan trng hn, C++ cung cp cho ngi s dng (NSD) mt phng tin lp trnh theo k thut mi: lp trnh hng i tng. y l k thut lp trnh c s dng hu ht trong cc ngn ng mnh hin nay, c bit l cc ngn ng hot ng trong mi trung Windows nh Microsoft Access, Visual Basic, Visual Foxpro

    Hin nay NNLT C/C++ c a vo ging dy trong hu ht cc trng i hc, Cao ng thay th mt s NNLT c nh FORTRAN, Pascal Tp bi ging ny c vit ra vi mc ch , trang b kin thc v k nng thc hnh cho sinh vin bt u hc vo NNLT C/C++ ti Khoa Cng ngh, i hc Quc gia H Ni. ph hp vi chng trnh, tp bi ging ny ch cp mt phn nh n k thut lp trnh hng i tng trong C++, l cc k thut ng gi d liu, phng thc v nh ngha mi cc ton t. Tn gi ca tp bi ging ny ni ln iu , c ngha ni dung ca bi ging thc cht l NNLT C c m rng vi mt s c im mi ca C++. V k thut lp trnh hng i tng (trong C++) s c trang b bi mt gio trnh khc. Tuy nhin ngn gn, trong tp bi ging ny tn gi C/C++ s c chng ti thay bng C++.

    Ni dung tp bi ging ny gm 8 chng. Phn u gm cc chng t 1 n 6 ch yu trnh by v NNLT C++ trn nn tng ca k thut lp trnh cu trc. Cc chng cn li (chng 7 v 8) s trnh by cc cu trc c bn trong C++ l k thut ng gi (lp v i tng) v nh ngha php ton mi cho lp.

    Tuy c nhiu c gng nhng do thi gian v trnh ngi vit c hn nn chc chn khng trnh khi sai st, v vy rt mong nhn c s gp ca bn c bi ging ngy cng mt hon thin hn.

    Tc gi.

  • Chng 1. Cc khi nim c bn ca C++

    CHNG 1

    CC KHI NIM C BN CA C++

    Cc yu t c bn Mi trng lm vic ca C++ Cc bc to v thc hin mt chng trnh Vo/ra trong C++

    I. CC YU T C BN Mt ngn ng lp trnh (NNLT) bc cao cho php ngi s dng (NSD) biu

    hin tng ca mnh gii quyt mt vn , bi ton bng cch din t gn vi ngn ng thng thng thay v phi din t theo ngn ng my (dy cc k hiu 0,1). Hin nhin, cc tng NSD mun trnh by phi c vit theo mt cu trc cht ch thng c gi l thut ton hoc gii thut v theo ng cc qui tc ca ngn ng gi l c php hoc vn phm. Trong gio trnh ny chng ta bn n mt ngn ng lp trnh nh vy, l ngn ng lp trnh C++ v lm th no th hin cc tng gii quyt vn bng cch vit thnh chng trnh trong C++.

    Trc ht, trong mc ny chng ta s trnh by v cc qui nh bt buc n gin v c bn nht. Thng thng cc qui nh ny s c nh dn trong qu trnh hc ngn ng, tuy nhin c mt vi khi nim tng i h thng v NNLT C++ chng ta trnh by s lc cc khi nim c bn . Ngi c tng lm quen vi cc NNLT khc c th c lt qua phn ny.

    1. Bng k t ca C++ Hu ht cc ngn ng lp trnh hin nay u s dng cc k t ting Anh, cc k

    hiu thng dng v cc con s th hin chng trnh. Cc k t ca nhng ngn ng khc khng c s dng (v d cc ch ci ting Vit). Di y l bng k t c php dng to nn nhng cu lnh ca ngn ng C++.

    Cc ch ci la tinh (vit thng v vit hoa): a .. z v A .. Z. Cng mt ch ci nhng vit thng phn bit vi vit hoa. V d ch ci 'a' l khc vi 'A'.

    Du gch di: _ Cc ch s thp phn: 0, 1, . ., 9.

    1

  • Chng 1. Cc khi nim c bn ca C++

    Cc k hiu ton hc: +, -, *, /, % , &, ||, !, >,

  • Chng 1. Cc khi nim c bn ca C++

    4. Ch thch trong chng trnh Mt chng trnh thng c vit mt cch ngn gn, do vy thng thng bn

    cnh cc cu lnh chnh thc ca chng trnh, NSD cn c php vit vo chng trnh cc cu ghi ch, gii thch lm r ngha hn chng trnh. Mt ch thch c th ghi ch v nhim v, mc ch, cch thc ca thnh phn ang c ch thch nh bin, hng, hm hoc cng dng ca mt on lnh ... Cc ch thch s lm cho chng trnh sng sa, d c, d hiu v v vy d bo tr, sa cha v sau.

    C 2 cch bo cho chng trnh bit mt on ch thch:

    Nu ch thch l mt on k t bt k lin tip nhau (trong 1 dng hoc trn nhiu dng) ta t on ch thch gia cp du ng m ch thch /* (m) v */ (ng).

    Nu ch thch bt u t mt v tr no cho n ht dng, th ta t du // v tr . Nh vy // s dng cho cc ch thch ch trn 1 dng.

    Nh nhc trn, vai tr ca on ch thch l lm cho chng trnh d hiu i vi ngi c, v vy i vi my cc on ch thch s c b qua. Li dng c im ny ca ch thch i khi tm thi b qua mt on lnh no trong chng trnh (nhng khng xo hn khi phi g li khi cn dng n) ta c th t cc du ch thch bao quanh on lnh ny (v d khi chy th chng trnh, g li ...), khi cn s dng li ta c th b cc du ch thch.

    Ch : Cp du ch thch /* ... */ khng c php vit lng nhau, v d dng ch thch sau l khng c php /* y l on ch thch /* cha on ch thch ny */ nh on ch thch con */

    cn phi sa li nh sau:

    hoc ch gi li cp du ch thch ngoi cng /* y l on ch thch cha on ch thch ny nh on ch thch con */

    hoc chia thnh cc on ch thch lin tip nhau /* y l on ch thch */ /*cha on ch thch ny*/ /*nh on ch thch con */

    II. MI TRNG LM VIC CA C++

    1. Khi ng - Thot khi C++ 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

    3

  • Chng 1. Cc khi nim c bn ca C++

    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

    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 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

    4

  • Chng 1. Cc khi nim c bn ca C++

    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 cc phm 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 Shift-Delete (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 bng cch 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

    5

  • Chng 1. Cc khi nim c bn ca C++

    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 menu

    Compile (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 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.

    6

  • Chng 1. Cc khi nim c bn ca C++

    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.

    3. Cu trc mt chng trnh trong 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 2 gi.

    #include // khai bo tp nguyn mu void main() // c s dng ton t in cout

  • Chng 1. Cc khi nim c bn ca C++

    int h = 2, // Khai bo v khi to bin h = 2 cout

  • Chng 1. Cc khi nim c bn ca C++

    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.

    3. Dch chng trnh Sau khi son tho xong chng trnh ngun, bc tip theo thng l dch (n

    t hp phm 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-F9.

    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. Sau khi xem xong quay li ca s son tho n phm bt k.

    IV. VO/RA TRONG C++ Trong phn ny chng ta lm quen mt s lnh n gin cho php NSD nhp d

    liu vo t bn phm hoc in kt qu ra mn hnh. Trong phn sau ca gio trnh chng ta s kho st cc cu lnh vo/ra phc tp hn

    9

  • Chng 1. Cc khi nim c bn ca C++

    1. Vo d liu t bn phm nhp d liu vo cho cc bin c tn bin_1, bin_2, bin_3 chng ta s dng

    cu lnh: cin >> bin_1 ; cin >> bin_2 ; cin >> bin_3 ;

    hoc: cin >> bin_1 >> bin_2 >> bin_3 ;

    bin_1, bin_2, bin_3 l cc bin c s dng lu tr cc gi tr NSD nhp vo t bn phm. Khi nim bin s c m t c th hn trong chng 2, y bin_1, bin_2, bin_3 c hiu l cc tn gi ch 3 gi tr khc nhau. Hin nhin c th nhp d liu nhiu hn 3 bin bng cch tip tc vit tn bin vo bn phi sau du >> ca cu lnh.

    Khi chy chng trnh nu gp cc cu lnh trn chng trnh s "tm dng" ch NSD nhp d liu vo cho cc bin. Sau khi NSD nhp xong d liu, chng trnh s tip tc chy t cu lnh tip theo sau ca cc cu lnh trn.

    Cch thc nhp d liu ca NSD ph thuc vo loi gi tr ca bin cn nhp m ta gi l kiu, v d nhp mt s c cch thc khc vi nhp mt chui k t. Gi s cn nhp di hai cnh ca mt hnh ch nht, trong cnh di c qui c bng tn bin cd v chiu rng c qui c bi tn bin cr. Cu lnh nhp s nh sau:

    cin >> cd >> cr ;

    Khi my dng ch nhp d liu NSD s g gi tr c th ca cc chiu di, rng theo ng th t trong cu lnh. Cc gi tr ny cn cch nhau bi t nht mt du trng (ta qui c gi du trng l mt trong 3 loi du c nhp bi cc phm sau: phm spacebar (du cch), phm tab (du tab) hoc phm Enter (du xung dng)). Cc gi tr NSD nhp vo cng c hin th trn mn hnh NSD d theo di.

    V d nu NSD nhp vo 23 11 th chng trnh s gn gi tr 23 cho bin cd v 11 cho bin cr.

    Ch : gi s NSD nhp 2311 (khng c du cch gia 23 v 11) th chng trnh s xem 2311 l mt gi tr v gn cho cd. My s tm dng ch NSD nhp tip gi tr cho bin cr.

    2. In d liu ra mn hnh in gi tr ca cc biu thc ra mn hnh ta dng cu lnh sau:

    cout

  • Chng 1. Cc khi nim c bn ca C++

    cout

  • Chng 1. Cc khi nim c bn ca C++

    Din tch = 253 Chu vi = 68

    y 253 v 68 ln lt l cc gi tr m my tnh c t cc biu thc cd * cr, v 2 * (cd + cr) trong cu lnh in trn.

    Ch : s dng cc cu lnh nhp v in trong phn ny, u chng trnh phi c dng khai bo #include .

    Thng thng ta hay s dng lnh in in cu thng bo nhc NSD nhp d liu trc khi c cu lnh nhp. Khi trn mn hnh s hin dng thng bo ny ri mi tm dng ch d liu nhp vo t bn phm. Nh vo thng bo ny NSD s bit phi nhp d liu, nhp ni dung g v nh th no ... v d:

    cout > cd; cout > cr;

    khi my s in dng thng bo "Hy nhp chiu di: " v ch sau khi NSD nhp xong 23 , my s thc hin cu lnh tip theo tc in dng thng bo "V nhp chiu rng: " v ch n khi NSD nhp xong 11 chng trnh s tip tc thc hin cc cu lnh tip theo.

    V d 2 : T cc tho lun trn ta c th vit mt cch y chng trnh tnh din tch v chu vi ca mt hnh ch nht. chng trnh c th tnh vi cc b gi tr khc nhau ca chiu di v rng ta cn lu gi tr ny vo trong cc bin (v d cd, cr).

    #include // khai bo tp nguyn mu dng c cin, cout void main() // y l hm chnh ca chng trnh {

    float cd, cr ; // khai bo cc bin c tn cd, cr cha di cc cnh cout > cd ; // nhp d liu cout > cr ; cout

  • Chng 1. Cc khi nim c bn ca C++

    k ch khng ch trong trng hp hnh c chiu di 23 v chiu rng 11 nh trong v d c th trn.

    3. nh dng thng tin cn in ra mn hnh Mt s nh dng n gin c chng ti trnh by trc y. Cc nh dng

    chi tit v phc tp hn s c trnh by trong cc phn sau ca gio trnh. s dng cc nh dng ny cn khai bo file nguyn mu u chng trnh bng ch th #include .

    endl: Tng ng vi k t xung dng '\n'. setw(n): Bnh thng cc gi tr c in ra bi lnh cout

  • Chng 1. Cc khi nim c bn ca C++

    getch(); // tm dng ( xem kt qu) return ; // kt thc thc hin hm main() }

    Chng trnh ny khi chy s in ra bng sau:

    CHI TIU ========

    Sch v 123.46 Thc n 2453.60 Qun o lnh 3200.00

    Ch : ton t nhp >> ch yu lm vic vi d liu kiu s. nhp k t hoc xu k t, C++ cung cp cc phng thc (hm) sau:

    cin.get(c): cho php nhp mt k t vo bin k t c, cin.getline(s,n): cho php nhp ti a n-1 k t vo xu s. cc hm trn khi thc hin s ly cc k t cn li trong b nh m (ca ln nhp

    trc) gn cho c hoc s. Do ton t cin >> x s li k t xung dng trong b m nn k t ny s lm tri cc lnh sau nh cin.get(c), cin.getline(s,n) (my khng dng nhp cho c hoc s). V vy trc khi s dng cc phng thc cin.get(c) hoc cin.getline(s,n) nn s dng phng thc cin.ignore(1) ly ra k t xung dng cn st li trong b m. V d on lnh sau cho php nhp mt s nguyn x (bng ton t >>) v mt k t c (bng phng thc cin.get(c)):

    int x; char c; cin >> x; cin.ignore(1); cin.get(c);

    4. Vo/ra trong C Trong phn trn chng ti trnh by 2 ton t vo/ra v mt s phng thc,

    hm nhp v nh dng trong C++. Phn ny chng ti trnh by cc cu lnh nhp xut theo khun dng c trong C. Hin nhin cc cu lnh ny vn dng c trong chng trnh vit bng C++, tuy nhin ch nn s dng hoc cc cu lnh ca C++ hoc ca C, khng nn dng ln ln c hai v d gy nhm ln. Do mc ny ch c

    14

  • Chng 1. Cc khi nim c bn ca C++

    gi tr tham kho bn c c th hiu c cc cu lnh vo/ra trong cc chng trnh vit theo NNLT C c.

    a. In kt qu ra mn hnh

    in cc gi tr bt_1, bt_2, , bt_n ra mn hnh theo mt khun dng mong mun ta c th s dng cu lnh sau y:

    printf(dng nh dng, bt_1, bt_2, ..., bt_n) ; trong dng nh dng l mt dy k t t trong cp du nhy kp () qui nh

    khun dng cn in ca cc gi tr bt_1, bt_2, , bt_n. Cc bt_i c th l cc hng, bin hay cc biu thc tnh ton. Cu lnh trn s in gi tr ca cc bt_i ny theo th t xut hin ca chng v theo qui nh c cho trong dng nh dng.

    V d, gi s x = 4, cu lnh: printf(%d %0.2f, 3, x + 1) ;

    s in cc s 3 v 5.00 ra mn hnh, trong 3 c in di dng s nguyn (c qui nh bi %d) v x + 1 (c gi tr l 5) c in di dng s thc vi 2 s l thp phn (c qui nh bi %0.2f). C th, cc k t i sau k hiu % dng nh dng vic in gm c:

    d in s nguyn di dng h thp phn o in s nguyn dng h 8 x, X in s nguyn dng h 16 u in s nguyn dng khng du c in k t s in xu k t e, E in s thc dng du phy ng f in s thc dng du phy tnh

    Cc k t trn phi i sau du %. Cc k t nm trong dng nh dng nu khng i sau % th s c in ra mn hnh. Mun in % phi vit 2 ln (tc %%).

    V d cu lnh: printf(T l hc sinh gii: %0.2f %%, 32.486) ; s in cu T l hc sinh gii: , tip theo s in s 32.486 c lm trn n 2 s l

    thp phn lp vo v tr ca %0.2f, v cui cng s in du % (do c %% trong dng nh dng). Cu c in ra mn hnh s l:

    T l hc sinh gii: 32.49%

    Ch : Mi bt_i cn in phi c mt nh dng tng ng trong dng nh dng.

    15

  • Chng 1. Cc khi nim c bn ca C++

    V d cu lnh trn cng c th vit: printf(%s %0.2f , T l hc sinh gii: , 32.486);

    trong cu lnh ny c 2 biu thc cn in. Biu thc th nht l xu k t T l hc sinh gii: c in vi khun dng %s (in xu k t) v biu thc th hai l 32.486 c in vi khun dng %0.2f (in s thc vi 2 s l phn thp phn).

    Nu gia k t % v k t nh dng c s biu th rng cn in th gi tr in ra s c ging ct sang l phi, trng cc du cch pha trc. Nu rng m (thm du tr pha trc) s ging ct sang l tri. Nu khng c rng hoc rng bng 0 (v d %0.2f) th rng c t iu chnh ng bng rng ca gi tr cn in.

    Du + trc rng in gi tr s km theo du (dng hoc m) Trc cc nh dng s cn thm k t l (v d ld, lf) khi in s nguyn di long

    hoc s thc vi chnh xc gp i double. V d 4 :

    main() { int i = 2, j = 3 ; printf(Chng trnh tnh tng 2 s nguyn:\ni + j = %d, i+j); }

    s in ra: Chng trnh tnh tng 2 s nguyn: i + j = 5.

    b. Nhp d liu t bn phm scanf(dng nh dng, bin_1, bin_2, ..., bin_n) ;

    Lnh ny cho php nhp d liu vo cho cc bin bin_1, , bin_n. Trong dng nh dng cha cc nh dng v kiu bin (nguyn, thc, k t ) c vit nh trong m t cu lnh printf. Cc bin c vit di dng a ch ca chng tc c du & trc mi tn bin. V d cu lnh:

    scanf(%d %f %ld, &x, &y, &z) ;

    cho php nhp gi tr cho cc bin x, y, z trong x l bin nguyn, y l bin thc v z l bin nguyn di (long). Cu lnh:

    16

  • Chng 1. Cc khi nim c bn ca C++

    scanf(%2d %f %lf %3s, &i, &x, &d, s);

    cho php nhp gi tr cho cc bin i, x, d, s, trong i l bin nguyn c 2 ch s, f l bin thc ( di ty ), d l bin nguyn di v s l xu k t c 3 k t. Gi s NSD nhp vo dy d liu: 12345 67abcd th cc bin trn s c gn cc gi tr nh sau: i = 12, x = 345, d = 67 v s = abc. K t d v du enter () s c lu li trong b nh v t ng gn cho cc bin ca ln nhp sau.

    Cui cng, chng trnh trong v d 3 c vit li vi printf() v scanf() nh sau:

    V d 5 : #include // s dng cc hm printf() v scanf() #include // s dng cc hm clrscr() v getch() void main() { clrscr(); // xo mn hnh printf("CHI TIU\n=======\n") ; printf("Sch v %20.2f\n" , 123.456) ; printf("Thc n %20.2f\n" , 2453.6) ; printf(Qun o lnh %15.2f\n" , 3200.0) ; getch(); // tm dng ( xem kt qu) return ; // kt thc thc hin hm main() }

    BI TP

    1. Nhng tn gi no sau y l hp l: x 123variabe tin_hoc toan tin so-dem RADIUS one.0 number# Radius nam2000

    2. Bn hy th vit mt chng trnh ngn nht c th c. 3. Tm cc li c php trong chng trnh sau:

    17

  • Chng 1. Cc khi nim c bn ca C++

    #include (iostream.h) void main(); / Gii phng trnh bc 1 {

    cout > nam ; ; cin.get(a); cin.get(b); cin.get(c); ; ;

    18

  • Chng 1. Cc khi nim c bn ca C++

    // in kt qu cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    CHNG 2

    KIU D LIU, BIU THC V CU LNH

    Kiu d liu n gin Hng - khai bo v s dng hng Bin - khai bo v s dng bin Php ton, biu thc v cu lnh Th vin cc hm ton hc

    I. KIU D LIU N GIN

    1. Khi nim v kiu d liu Thng thng d liu hay dng l s v ch. Tuy nhin vic phn chia ch 2 loai

    d liu l khng . d dng hn cho lp trnh, hu ht cc NNLT u phn chia d liu thnh nhiu kiu khc nhau c gi l cc kiu c bn hay chun. Trn c s kt hp cc kiu d liu chun, NSD c th t t ra cc kiu d liu mi phc v cho chng trnh gii quyt bi ton ca mnh. C ngha lc mi i tng c qun l trong chng trnh s l mt tp hp nhiu thng tin hn v c to thnh t nhiu loi (kiu) d liu khc nhau. Di y chng ta s xt n mt s kiu d liu chun c qui nh sn bi C++.

    Mt bin nh bit l mt s nh lin tip no trong b nh dng lu tr d liu (vo, ra hay kt qu trung gian) trong qu trnh hot ng ca chng trnh. qun l cht ch cc bin, NSD cn khai bo cho chng trnh bit trc tn bin v kiu ca d liu c cha trong bin. Vic khai bo ny s lm chng trnh qun l cc bin d dng hn nh trong vic phn b b nh cng nh qun l cc tnh ton trn bin theo nguyn tc: ch c cc d liu cng kiu vi nhau mi c php lm ton vi nhau. Do , khi cp n mt kiu chun ca mt NNLT, thng thng chng ta s xt n cc yu t sau:

    tn kiu: l mt t dnh ring ch nh kiu ca d liu. s byte trong b nh lu tr mt n v d liu thuc kiu ny: Thng

    thng s byte ny ph thuc vo cc trnh bin dch v h thng my khc nhau, y ta ch xt n h thng my PC thng dng hin nay.

    Min gi tr ca kiu: Cho bit mt n v d liu thuc kiu ny s c th ly

    20

  • Chng 2. Kiu d liu, biu thc v cu lnh

    gi tr trong min no, v d nh nht v ln nht l bao nhiu. Hin nhin cc gi tr ny ph thuc vo s byte m h thng my qui nh cho tng kiu. NSD cn nh n min gi tr ny khai bo kiu cho cc bin cn s dng mt cch thch hp.

    Di y l bng tm tt mt s kiu chun n gin v cc thng s ca n c s dng trong C++.

    Loi d liu Tn kiu S nh Min gi tr K t char 1 byte 128 .. 127 unsigned char 1 byte 0 .. 255 S nguyn int 2 byte 32768 .. 32767 unsigned int 2 byte 0 .. 65535 short 2 byte 32768 .. 32767 long 4 byte 215 .. 215 1 S thc float 4 byte 10 -37 . . 10 +38 double 8 byte 10 -307 . . 10 +308

    Bng 1. Cc loi kiu n gin

    Trong chng ny chng ta ch xt cc loi kiu n gin trn y. Cc loi kiu c cu trc do ngi dng nh ngha s c trnh by trong cc chng sau.

    2. Kiu k t Mt k t l mt k hiu trong bng m ASCII. Nh bit mt s k t c mt

    ch trn bn phm (v d cc ch ci, ch s) trong khi mt s k t li khng (v d k t biu din vic li li mt trong vn bn, k t ch vic kt thc mt dng hay kt thc mt vn bn). Do vy biu din mt k t ngi ta dng chnh m ASCII ca k t trong bng m ASCII v thng gi l gi tr ca k t. V d pht biu "Cho k t 'A'" l cng tng ng vi pht biu "Cho k t 65" (65 l m ASCII ca k t 'A'), hoc "Xo k t xung dng" l cng tng ng vi pht biu "Xo k t 13" v 13 l m ASCII ca k t xung dng.

    Nh vy mt bin kiu k t c th c nhn gi tr theo 2 cch tng ng - ch hoc gi tr s: v d gi s c l mt bin k t th cu lnh gn c = 'A' cng tng ng vi cu lnh gn c = 65. Tuy nhin s dng gi tr s ca mt k t c no ta phi yu cu i c sang gi tr s bng cu lnh int(c).

    Theo bng trn ta thy c 2 loi k t l char vi min gi tr t -128 n 127 v

    21

  • Chng 2. Kiu d liu, biu thc v cu lnh

    unsigned char (k t khng du) vi min gi tr t 0 n 255. Trng hp mt bin c gn gi tr vt ra ngoi min gi tr ca kiu th gi tr ca bin s c tnh theo m b (256 c). V d nu gn cho char c gi tr 179 (vt khi min gi tr c qui nh ca char) th gi tr thc s c lu trong my s l (256 179) = 77.

    V d 1 : char c, d ; // c, d c php gn gi tr t -128 n 127 unsigned e ; // e c php gn gi tr t 0 n 255 c = 65 ; d = 179 ; // d c gi tr ngoi min cho php e = 179; f = 330 ; // f c gi tr ngoi min cho php cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    float m bo s s l sau mt s thc c th tng ln m bo tnh chnh xc cao hn so vi s kiu float. Tuy nhin, trong cc bi ton thng dng thng ngy chnh xc ca s kiu float l dng.

    Nh nhc n trong phn cc lnh vo/ra chng 1, lin quan n vic in n s thc ta c mt vi cch thit t dng in theo mun, v d rng ti thiu in mt s hay s s l thp phn cn in ...

    V d 2 : Chng trnh sau y s in din tch v chu vi ca mt hnh trn c bn knh 2cm vi 3 s l.

    #include #include void main() { float r = 2 ; // r l tn bin dng cha bn knh cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    2. Hng thc Mt s thc c th c khai bo di dng kiu float hoc double v cc gi tr

    ca n c th c vit di mt trong hai dng.

    a. Dng du phy tnh

    Theo cch vit thng thng. V d: 3.0, -7.0, 3.1416, ...

    b. Dng du phy ng

    Tng qut, mt s thc x c th c vit di dng: men hoc mEn, trong m c gi l phn nh tr, n gi l phn bc (hay m). S men biu th gi tr x = m x 10n. V d s = 3.1416 c th c vit:

    = = 0.031416e2 = 0.31416e1 = 3.1416e0 = 31.416e1 = 314.16e2 = v = 0.031416 x 102 = 0.31416 x 101 = 3.1416 x 100 = Nh vy mt s x c th c vit di dng mEn vi nhiu gi tr m, n khc

    nhau, ph thuc vo du phy ngn cch phn nguyn v phn thp phn ca s. Do vy cch vit ny c gi l dng du phy ng.

    3. Hng k t

    a. Cch vit hng C 2 cch vit mt hng k t. i vi cc k t c mt ch th hin ta thng

    s dng cch vit thng dng l t mt ch gia 2 du nhy n nh: 'A', '3', ' ' (du cch) ... hoc s dng trc tip gi tr s ca chng. V d cc gi tr tng ng ca cc k t trn l 65, 51 v 32. Vi mt s k t khng c mt ch ta buc phi dng gi tr (s) ca chng, nh vit 27 thay cho k t c nhn bi phm Escape, 13 thay cho k t c nhn bi phm Enter ...

    biu din k t bng gi tr s ta c th vit trc tip (khng dng cp du nhy n) gi tr di dng h s 10 (nh trn) hoc t chng vo cp du nhy n, trng hp ny ch dng cho gi tr vit di dng h 8 hoc h 16 theo mu sau:

    '\kkk': khng qu 3 ch s trong h 8. V d '\11' biu din k t c m 9. '\xkk': khng qu 2 ch s trong h 16. V d '\x1B' biu din k t c m 27. Tm li, mt k t c th c nhiu cch vit, chng hn 'A' c gi tr l 65 (h 10)

    hoc 101 (h 8) hoc 41 (h 16), do k t 'A' c th vit bi mt trong cc dng sau: 65, 0101, 0x41 hoc 'A' , '\101' , '\x41' Tng t, du kt thc xu c gi tr 0 nn c th vit bi 0 hoc '\0' hoc '\x0',

    trong cc cch ny cch vit '\0' c dng thng dng nht.

    24

  • Chng 2. Kiu d liu, biu thc v cu lnh

    b. Mt s hng thng dng

    i vi mt s hng k t thng dng nhng khng c mt ch tng ng, hoc cc k t c dnh ring vi nhim v khc, khi thay v phi nh gi tr ca chng ta c th vit theo qui c sau:

    '\n' : biu th k t xung dng (cng tng ng vi endl) '\t' : k t tab '\a' : k t chung (tc thay v in k t, loa s pht ra mt ting 'bp') '\r' : xung dng '\f' : ko trang '\\' : du \ '\?' : du chm hi ? '\'' : du nhy n ' '\"' : du nhy kp " '\kkk' : k t c m l kkk trong h 8 '\xkk' : k t c m l kk trong h 16

    V d: cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    "rng". ch xu rng (khng c k t no) ta phi vit "" (2 du nhy kp lin nhau). Tm li mt gi tr c th c vit di nhiu kiu d liu khc nhau v do

    cch s dng chng cng khc nhau. V d lin quan n khi nim 3 n v c th c cc cch vit sau tuy nhin chng hon ton khc nhau:

    3 : s nguyn 3 n v 3L : s nguyn di 3 n v 3.0 : s thc 3 n v '3' : ch s 3 "3" : xu cha k t duy nht l 3

    5. Khai bo hng Mt gi tr c nh (hng) c s dng nhiu ln trong chng trnh i khi s

    thun li hn nu ta t cho n mt tn gi, thao tc ny c gi l khai bo hng. V d mt chng trnh qun l sinh vin vi gi thit s sinh vin ti a l 50. Nu s sinh vin ti a khng thay i trong chng trnh ta c th t cho n mt tn gi nh sosv chng hn. Trong sut chng trnh bt k ch no xut hin gi tr 50 ta u c th thay n bng sosv. Tng t C++ cng c nhng tn hng c t sn, c gi l cc hng chun v NSD c th s dng khi cn thit. V d hng c t sn trong C++ vi tn gi M_PI. Vic s dng tn hng thay cho hng c nhiu im thun li nh sau:

    Chng trnh d c hn, v thay cho cc con s t c ngha, mt tn gi s lm NSD d hnh dung vai tr, ni dung ca n. V d, khi gp tn gi sosv NSD s hnh dung c chng hn, "y l s sinh vin ti a trong mt lp", trong khi s 50 c th l s sinh vin m cng c th l tui ca mt sinh vin no .

    Chng trnh d sa cha hn, v d by gi nu mun thay i chng trnh sao cho bi ton qun l c thc hin vi s sinh vin ti a l 60, khi ta cn tm v thay th hng trm v tr xut hin ca 50 thnh 60. Vic thay th nh vy d gy ra li v c th khng tm thy ht cc s 50 trong chng trnh hoc thay nhm s 50 vi ngha khc nh tui ca mt sinh vin no chng hn. Nu trong chng trnh s dng hng sosv, by gi vic thay th tr nn chnh xc v d dng hn bng thao tc khai bo li gi tr hng sosv bng 60. Lc trong chng trnh bt k ni no gp tn hng sosv u c chng trnh hiu vi gi tr 60.

    khai bo hng ta dng cc cu khai bo sau:

    26

  • Chng 2. Kiu d liu, biu thc v cu lnh

    #define tn_hng gi_tr_hng ; hoc:

    const tn_hng = gi_tr_hng ; V d:

    #define sosv 50 ; #define MAX 100 ; const sosv = 50 ;

    Nh trn ch mt gi tr hng cha ni ln kiu s dng ca n v vy ta cn khai bo r rng hn bng cch thm tn kiu trc tn hng trong khai bo const, cc hng khai bo nh vy c gi l hng c kiu.

    V d: const int sosv = 50 ; const float nhiet_do_soi = 100.0 ;

    III. BIN - KHAI BO V S DNG BIN

    1. Khai bo bin Bin l cc tn gi lu gi tr khi lm vic trong chng trnh. Cc gi tr c

    lu c th l cc gi tr d liu ban u, cc gi tr trung gian tm thi trong qu trnh tnh ton hoc cc gi tr kt qu cui cng. Khc vi hng, gi tr ca bin c th thay i trong qu trnh lm vic bng cc lnh c vo t bn phm hoc gn. Hnh nh c th ca bin l mt s nh trong b nh c s dng lu cc gi tr ca bin.

    Mi bin phi c khai bo trc khi s dng. Mt khai bo nh vy s bo cho chng trnh bit v mt bin mi gm c: tn ca bin, kiu ca bin (tc kiu ca gi tr d liu m bin s lu gi). Thng thng vi nhiu NNLT tt c cc bin phi c khai bo ngay t u chng trnh hay u ca hm, tuy nhin thun tin C++ cho php khai bo bin ngay bn trong chng trnh hoc hm, c ngha bt k lc no NSD thy cn thit s dng bin mi, h c quyn khai bo v s dng n t tr i.

    C php khai bo bin gm tn kiu, tn bin v c th c hay khng khi to gi tr ban u cho bin. khi to hoc thay i gi tr ca bin ta dng lnh gn (=).

    a. Khai bo khng khi to tn_kiu tn_bin_1 ; tn_kiu tn_bin_2 ;

    27

  • Chng 2. Kiu d liu, biu thc v cu lnh

    tn_kiu tn_bin_3 ;

    Nhiu bin cng kiu c th c khai bo trn cng mt dng: tn_kiu tn_bin_1, tn_bin_2, tn_bin_3 ;

    V d: void main() { int i, j ; // khai bo 2 bin i, j c kiu nguyn float x ; // khai bo bin thc x char c, d[100] ; // bin k t c, xu d cha ti a 100 k t unsigned int u ; // bin nguyn khng du u }

    b. Khai bo c khi to Trong cu lnh khai bo, cc bin c th c gn ngay gi tr ban u bi php

    ton gn (=) theo c php: tn_kiu tn_bin_1 = gt_1, tn_bin_2 = gt_2, tn_bin_3 = gt_3 ;

    trong cc gi tr gt_1, gt_2, gt_3 c th l cc hng, bin hoc biu thc. V d: const int n = 10 ; void main() { int i = 2, j , k = n + 5; // khai bo i v khi to bng 2, k bng 15 float eps = 1.0e-6 ; // khai bo bin thc epsilon khi to bng 10-6

    char c = 'Z'; // khai bo bin k t c v khi to bng 'A' char d[100] = "Tin hc"; // khai bo xu k t d cha dng ch "Tin hc"

    }

    2. Phm vi ca bin Nh bit chng trnh l mt tp hp cc hm, cc cu lnh cng nh cc khai

    bo. Phm vi tc dng ca mt bin l ni m bin c tc dng, tc hm no, cu lnh

    28

  • Chng 2. Kiu d liu, biu thc v cu lnh

    no c php s dng bin . Mt bin xut hin trong chng trnh c th c s dng bi hm ny nhng khng c bi hm khc hoc bi c hai, iu ny ph thuc cht ch vo v tr ni bin c khai bo. Mt nguyn tc u tin l bin s c tc dng k t v tr n c khai bo cho n ht khi lnh cha n. Chi tit c th hn s c trnh by trong chng 4 khi ni v hm trong C++.

    3. Gn gi tr cho bin (php gn) Trong cc v d trc chng ta s dng php gn d n cha c trnh by,

    n gin mt php gn mang ngha to gi tr mi cho mt bin. Khi bin c gn gi tr mi, gi tr c s c t ng xo i bt k trc n cha gi tr no (hoc cha c gi tr, v d ch mi va khai bo xong). C php ca php gn nh sau:

    tn_bin = biu thc ; Khi gp php gn chng trnh s tnh ton gi tr ca biu thc sau gn gi tr

    ny cho bin. V d: int n, i = 3; // khi to i bng 3 n = 10; // gn cho n gi tr 10 cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    int i, j, k ; i = j = k = 1;

    Biu thc gn trn c th c vit li nh (i = (j = (k = 1))), c ngha u tin thc hin php ton gn gi tr cho bin i chng trnh phi tnh biu thc (j = (k = 1)), tc phi tnh k = 1, y l php ton gn, gn gi tr 1 cho k v tr li gi tr 1, gi tr tr li ny s c gn cho j v tr li gi tr 1 tip tc gn cho i.

    Ngoi vic gn kp nh trn, php ton gn cn c php xut hin trong bt k biu thc no, iu ny cho php trong mt biu thc c php ton gn, n khng ch tnh ton m cn gn gi tr cho cc bin, v d n = 3 + (i = 2) s cho ta i = 2 v n = 5. Vic s dng nhiu chc nng ca mt cu lnh lm cho chng trnh gn gng hn (trong mt s trng hp) nhng cng tr nn kh c, chng hn cu lnh trn c th vit tch thnh 2 cu lnh i = 2; n = 3 + i; s d c hn t nht i vi cc bn mi bt u tm hiu v lp trnh.

    IV. PHP TON, BIU THC V CU LNH

    1. Php ton C++ c rt nhiu php ton loi 1 ngi, 2 ngi v thm ch c 3 ngi. h

    thng, chng ti tm phn chia thnh cc lp v trnh by ch mt s trong chng. Cc php ton cn li s c tm hiu dn trong cc phn sau ca gio trnh. Cc thnh phn tn gi tham gia trong php ton c gi l hng thc hoc ton hng, cc k hiu php ton c gi l ton t. V d trong php ton a + b; a, b c gi l ton hng v + l ton t. Php ton 1 ngi l php ton ch c mt ton hng, v d a (i du s a), &x (ly a ch ca bin x) Mt s k hiu php ton cng c s dng chung cho c 1 ngi ln 2 ngi (hin nhin vi ng ngha khc nhau), v d k hiu c s dng cho php ton tr 2 ngi a b, hoc php & cn c s dng cho php ton ly hi cc bit (a & b) ca 2 s nguyn a v b

    a. Cc php ton s hc: +, -, *, /, %

    Cc php ton + (cng), (tr), * (nhn) c hiu theo ngha thng thng trong s hc.

    Php ton a / b (chia) c thc hin theo kiu ca cc ton hng, tc nu c hai ton hng l s nguyn th kt qu ca php chia ch ly phn nguyn, ngc li nu 1 trong 2 ton hng l thc th kt qu l s thc. V d: 13/5 = 2 // do 13 v 5 l 2 s nguyn 13.0/5 = 13/5.0 = 13.0/5.0 = 2.6 // do c t nht 1 ton hng l thc

    30

  • Chng 2. Kiu d liu, biu thc v cu lnh

    Php ton a % b (ly phn d) tr li phn d ca php chia a/b, trong a v b l 2 s nguyn. V d: 13%5 = 3 // phn d ca 13/5 5%13 = 5 // phn d ca 5/13

    b. Cc php ton t tng, gim: i++, ++i, i--, --i

    Php ton ++i v i++ s cng tng i ln 1 n v tc tng ng vi cu lnh i = i+1. Tuy nhin nu 2 php ton ny nm trong cu lnh hoc biu thc th ++i khc vi i++. C th ++i s tng i, sau i mi c tham gia vo tnh ton trong biu thc. Ngc li i++ s tng i sau khi biu thc c tnh ton xong (vi gi tr i c). im khc bit ny c minh ho thng qua v d sau, gi s i = 3, j = 15.

    Php ton Tng ng Kt qu i = ++j ; // tng trc j = j + 1 ; i = j ; i = 16 , j = 16 i = j++ ; // tng sau i = j ; j = j + 1 ; i = 15 , j = 16 j = ++i + 5 ; i = i + 1 ; j = i + 5 ; i = 4, j = 9 j = i++ + 5 ; j = i + 5; i = i + 1; i = 4, j = 8

    Ghi ch: Vic kt hp php ton t tng gim vo trong biu thc hoc cu lnh (nh v d trong phn sau) s lm chng trnh gn nhng kh hiu hn.

    c. Cc php ton so snh v lgic y l cc php ton m gi tr tr li l ng hoc sai. Nu gi tr ca biu thc

    l ng th n nhn gi tr 1, ngc li l sai th biu thc nhn gi tr 0. Ni cch khc 1 v 0 l gi tr c th ca 2 khi nim "ng", "sai". M rng hn C++ quan nim mt gi tr bt k khc 0 l "ng" v gi tr 0 l "sai".

    Cc php ton so snh == (bng nhau), != (khc nhau), > (ln hn), < (nh hn), >= (ln hn hoc bng),

  • Chng 2. Kiu d liu, biu thc v cu lnh

    3 + (5 >= 2) // = 4 v 5>=2 bng 1

    Ch : cn phn bit php ton gn (=) v php ton so snh (==). Php gn va gn gi tr cho bin va tr li gi tr bt k (l gi tr ca ton hng bn phi), trong khi php so snh lun lun tr li gi tr 1 hoc 0.

    Cc php ton lgic: && (v), || (hoc ), ! (khng, ph nh)

    Hai ton hng ca loi php ton ny phi c kiu lgic tc ch nhn mt trong hai gi tr "ng" (c th hin bi cc s nguyn khc 0) hoc "sai" (th hin bi 0). Khi gi tr tr li ca php ton l 1 hoc 0 v c cho trong bng sau:

    a b a && b a || b ! a 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1

    Tm li:

    Php ton "v" ng khi v ch khi hai ton hng cng ng Php ton "hoc" sai khi v ch khi hai ton hng cng sai Php ton "khng" (hoc "ph nh") ng khi v ch khi ton hng ca n

    sai. V d:

    3 && (4 > 5) // = 0 v c hng thc (4>5) sai (3 >= 1) && (7) // = 1 v c hai hng thc cng ng !1 // = 0 ! (4 + 3 < 7) // = 1 v (4+3= 6) // = 1 v c mt hng thc (5) ng (5 < !0) || (4 >= 6) // = 0 v c hai hng thc u sai

    Ch : vic nh gi biu thc c tin hnh t tri sang phi v s dng khi bit kt qu m khng ch nh gi ht biu thc. Cch nh gi ny s cho nhng kt qu ph khc nhau nu trong biu thc ta "tranh th" a thm vo cc php ton t tng gim. V d cho i = 2, j = 3, xt 2 biu thc sau y:

    x = (++i < 4 && ++j > 5) cho kt qu x = 0 , i = 3 , j = 4

    32

  • Chng 2. Kiu d liu, biu thc v cu lnh

    y = (++j > 5 && ++i < 4) cho kt qu y = 0 , i = 2 , j = 4

    cch vit hai biu thc l nh nhau (ngoi tr hon i v tr 2 ton hng ca php ton &&). Vi gi thit i = 2 v j = 3 ta thy c hai biu thc trn cng nhn gi tr 0. Tuy nhin cc gi tr ca i v j sau khi thc hin xong hai biu thc ny s c kt qu khc nhau. C th vi biu thc u v ++i < 4 l ng nn chng trnh phi tip tc tnh tip ++j > 5 nh gi c biu thc. Do vy sau khi nh gi xong c i v j u c tng 1 (i=3, j=4). Trong khi vi biu thc sau do ++j > 5 l sai nn chng trnh c th kt lun c ton b biu thc l sai m khng cn tnh tip ++i < 4. C ngha chng trnh sau khi nh gi xong ++j > 5 s dng v v vy ch c bin j c tng 1, t ta c i = 2, j = 4 khc vi kt qu ca biu thc trn. V d ny mt ln na nhc ta ch kim sot k vic s dng cc php ton t tng gim trong biu thc v trong cu lnh.

    2. Cc php gn

    Php gn thng thng: y l php gn c trnh by trong mc trc. Php gn c iu kin:

    bin = (iu_kin) ? a: b ; iu_kin l mt biu thc logic, a, b l cc biu thc bt k cng kiu vi kiu

    ca bin. Php ton ny gn gi tr a cho bin nu iu kin ng v b nu ngc li. V d:

    x = (3 + 4 < 7) ? 10: 20 // x = 20 v 3+4 b) ? a: b // x = s ln nht trong 2 s a, b.

    Cch vit gn ca php gn: Mt php gn dng x = x @ a ; c th c vit gn di dng x @= a trong @ l cc php ton s hc, x l bit ... V d:

    thay cho vit x = x + 2 c th vit x += 2; hoc x = x/2 ; x = x*2 c th c vit li nh x /= 2; x *= 2;

    Cch vit gn ny c nhiu thun li khi vit v c chng trnh nht l khi tn bin qu di hoc i km nhiu ch s thay v phi vit hai ln tn bin trong cu lnh th ch phi vit mt ln, iu ny trnh vit lp li tn bin d gy ra sai st. V d thay v vit:

    ngay_quoc_te_lao_dong = ngay_quoc_te_lao_dong + 365;

    c th vit gn hn bi: ngay_quoc_te_lao_dong += 365;

    33

  • Chng 2. Kiu d liu, biu thc v cu lnh

    hoc thay cho vit : Luong[Nhanvien[3][2*i+1]] = Luong[Nhanvien[3][2*i+1]] * 290 ;

    c th c vit li bi: Luong[Nhanvien[3][2*i+1]] *= 290;

    3. Biu thc Biu thc l dy k hiu kt hp gia cc ton hng, php ton v cp du () theo

    mt qui tc nht nh. Cc ton hng l hng, bin, hm. Biu thc cung cp mt cch thc tnh gi tr mi da trn cc ton hng v ton t trong biu thc. V d:

    (x + y) * 2 - 4 ; 3 - x + sqrt(y) ; (-b + sqrt(delta)) / (2*a) ;

    a. Th t u tin ca cc php ton

    tnh gi tr ca mt biu thc cn c mt trt t tnh ton c th v thng nht. V d xt biu thc x = 3 + 4 * 2 + 7

    nu tnh theo ng trt t t tri sang phi, ta c x = ((3+4) * 2) + 7 = 21, nu u tin du + c thc hin trc du *, x = (3 + 4) * (2 + 7) = 63, nu u tin du * c thc hin trc du +, x = 3 + (4 * 2) + 7 = 18. Nh vy cng mt biu thc tnh x nhng cho 3 kt qu khc nhau theo nhng

    cch hiu khc nhau. V vy cn c mt cch hiu thng nht da trn th t u tin ca cc php ton, tc nhng php ton no s c u tin tnh trc v nhng php ton no c tnh sau ...

    C++ qui nh trt t tnh ton theo cc mc u tin nh sau: 1. Cc biu thc trong cp du ngoc () 2. Cc php ton 1 ngi (t tng, gim, ly a ch, ly ni dung con tr ) 3. Cc php ton s hc. 4. Cc php ton quan h, logic. 5. Cc php gn. Nu c nhiu cp ngoc lng nhau th cp trong cng (su nht) c tnh trc.

    Cc php ton trong cng mt lp c u tin theo th t: lp nhn (*, /, &&), lp cng (+, , ||). Nu cc php ton c cng th t u tin th chng trnh s thc hin t tri sang phi. Cc php gn c u tin cui cng v c thc hin t phi sang tri. V d. theo mc u tin qui nh, biu thc tnh x trong v d trn s c tnh nh x = 3 + (4 * 2) + 7 = 18.

    34

  • Chng 2. Kiu d liu, biu thc v cu lnh

    Phn ln cc trng hp mun tnh ton theo mt trt t no ta nn s dng c th cc du ngoc (v cc biu thc trong du ngoc c tnh trc). V d:

    tnh = b2 - 4ac ta vit delta = b * b 4 * a * c ; tnh nghim phng trnh bc 2: x =

    ab2

    + vit : x = b + sqrt(delta) / 2*a; l sai v theo mc u tin x s c tnh nh b + ((sqrt(delta)/2) * a) (th t tnh s l php ton 1 ngi i du b, n php chia, php nhn v cui cng l php cng). tnh chnh xc cn phi vit (b + sqrt(delta)) / (2*a).

    Cho a = 1, b = 2, c = 3. Biu thc a += b += c cho gi tr c = 3, b = 5, a = 6. Th t tnh s l t phi sang tri, tc cu lnh trn tng ng vi cc cu lnh sau:

    a = 1 ; b = 2 ; c = 3 ; b = b + c ; // b = 5 a = a + b ; // a = 6

    r rng, tt nht nn vit biu thc cn tnh trc trong cc du ngoc.

    b. Php chuyn i kiu Khi tnh ton mt biu thc phn ln cc php ton u yu cu cc ton hng

    phi cng kiu. V d php gn thc hin c th gi tr ca biu thc phi c cng kiu vi bin. Trong trng hp kiu ca gi tr biu thc khc vi kiu ca php gn th hoc l chng trnh s t ng chuyn kiu gi tr biu thc v thnh kiu ca bin c gn (nu c) hoc s bo li. Do vy khi cn thit NSD phi s dng cc cu lnh chuyn kiu ca biu thc cho ph hp vi kiu ca bin.

    Chuyn kiu t ng: v mt nguyn tc, khi cn thit cc kiu c gi tr thp s c chng trnh t ng chuyn ln kiu cao hn cho ph hp vi php ton. C th php chuyn kiu c th c thc hin theo s nh sau:

    char int long int float double V d:

    int i = 3; float f ; f = i + 2;

    trong v d trn i c kiu nguyn v v vy i+2 cng c kiu nguyn trong khi f c kiu thc. Tuy vy php ton gn ny l hp l v chng trnh s t ng chuyn kiu

    35

  • Chng 2. Kiu d liu, biu thc v cu lnh

    cu i+2 (bng 5) sang kiu thc (bng 5.0) ri mi gn cho f.

    p kiu: trong chuyn kiu t ng, chng trnh chuyn cc kiu t thp n cao, tuy nhin chiu ngc li khng th thc hin c v n c th gy mt d liu. Do nu cn thit NSD phi ra lnh cho chng trnh. V d: int i; float f = 3 ; // t ng chuyn 3 thnh 3.0 v gn cho f i = f + 2 ; // sai v mc d f + 2 = 5 nhng khng gn c cho i

    Trong v d trn cu lnh i = f+2 thc hin c ta phi p kiu ca biu thc f+2 v thnh kiu nguyn. C php tng qut nh sau:

    (tn_kiu)biu_thc // c php c trong C hoc:

    tn_kiu(biu_thc) // c php mi trong C++ trong tn_kiu l kiu cn c chuyn sang. Nh vy cu lnh trn phi c

    vit li: i = int(f + 2) ;

    khi f+2 (bng 5.0) c chuyn thnh 5 v gn cho i. Di y ta s xt mt s v d v li ch ca vic p kiu.

    Php p kiu t mt s thc v s nguyn s ct b tt c phn thp phn ca s thc, ch li phn nguyn. Nh vy tnh phn nguyn ca mt s thc x ta ch cn p kiu ca x v thnh kiu nguyn, c ngha int(x) l phn nguyn ca s thc x bt k. V d kim tra mt s nguyn n c phi l s chnh phng, ta cn tnh cn bc hai ca n. Nu cn bc hai x ca n l s nguyn th n l s chnh phng, tc nu int(x) = x th x nguyn v n l chnh phng, v d: int n = 10 ; float x = sqrt(n) ; // hm sqrt(n) tr li cn bc hai ca s n if (int(x) == x) cout c ; cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    Ghi ch: Xt v d sau: int i = 3 , j = 5 ; float x ; x = i / j * 10; // x = 6 ? cout > x >> y ; x = 3 + x ; y = (x = sqrt(x)) + 1 ; cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    V. TH VIN CC HM TON HC Trong phn ny chng ti tm tt mt s cc hm ton hc hay dng. Cc hm

    ny u c khai bo trong file nguyn mu math.h.

    1. Cc hm s hc

    abs(x), labs(x), fabs(x) : tr li gi tr tuyt i ca mt s nguyn, s nguyn di v s thc.

    pow(x, y) : hm m, tr li gi tr x ly tha y (xy). exp(x) : hm m, tr li gi tr e m x (ex). log(x), log10(x) : tr li lgarit c s e v lgarit thp phn ca x (lnx, logx) . sqrt(x) : tr li cn bc 2 ca x. atof(s_number) : tr li s thc ng vi s vit di dng xu k t s_number.

    2. Cc hm lng gic

    sin(x), cos(x), tan(x) : tr li cc gi tr sinx, cosx, tgx.

    BI TP

    1. Vit cu lnh khai bo bin lu cc gi tr sau: Tui ca mt ngi S lng cy trong thnh ph di cnh mt tam gic Khong cch gia cc hnh tinh Mt ch s Nghim x ca phng trnh bc 1 Mt ch ci Bit thc ca phng trnh bc 2

    2. Vit cu lnh nhp vo 4 gi tr ln lt l s thc, nguyn, nguyn di v k t. In ra mn hnh cc gi tr ny kim tra.

    3. Vit cu lnh in ra mn hnh cc dng sau (khng k cc s th t v du: u mi dng) 1: B Gio dc v o to Cng ho x hi ch ngha Vit Nam 2:

    38

  • Chng 2. Kiu d liu, biu thc v cu lnh

    3: S Gio dc H Ni c lp - T do - Hnh phc Ch : khong trng gia ch o to v Cng ho (dng 1) l 2 tab. Dng 2:

    trng. 4. Vit chng trnh nhp vo mt k t. In ra k t v m ascii ca n. 5. Vit chng trnh nhp vo hai s thc. In ra hai s thc vi 2 s l v cch

    nhau 5 ct. 6. Nhp, chy v gii thch kt qu t c ca on chng trnh sau:

    #include void main() { char c1 = 200; unsigned char c2 = 200 ; cout

  • Chng 2. Kiu d liu, biu thc v cu lnh

    hn cnh cn li). Tnh chu vi, din tch, di 3 ng cao, 3 ng trung tuyn, 3 ng phn gic, bn knh ng trn ni tip, ngoi tip ln lt theo cc cng thc sau:

    C = 2p = a + b + c ; S = )cp)(bp)(ap(p ;

    aSha

    2= ; ma = 222 2221 acb + ; ga = )ap(bcp

    cb+

    2 ;

    pSr = ;

    SabcR4

    = ;

    14. Tnh din tch v th tch ca hnh cu bn knh R theo cng thc: S = 4R2 ; V = RS/3

    15. Nhp vo 4 ch s. In ra tng ca 4 ch s ny v ch s hng chc, hng n v ca tng (v d 4 ch s 3, 1, 8, 5 c tng l 17 v ch s hng chc l 1 v hng n v l 7, cn in ra 17, 1, 7).

    16. Nhp vo mt s nguyn (c 4 ch s). In ra tng ca 4 ch s ny v ch s u, ch s cui (v d s 3185 c tng cc ch s l 17, u v cui l 3 v 5, kt qu in ra l: 17, 3, 5).

    17. Hy nhp 2 s a v b. Vit chng trnh i gi tr ca a v b theo 2 cch: dng bin ph t: t = a; a = b; b = t; khng dng bin ph: a = a + b; b = a - b; a = a - b;

    In kt qu ra mn hnh kim tra. 18. Vit chng trnh on s ca ngi chi ang ngh, bng cch yu cu ngi

    chi ngh mt s, sau thc hin mt lot cc tnh ton trn s ngh ri cho bit kt qu. My s in ra s m ngi chi ngh. (v d yu cu ngi chi ly s ngh nhn i, tr 4, bnh phng, chia 2 v tr 7 ri cho bit kt qu, my s in ra s ngi chi ngh).

    19. Mt sinh vin gm c cc thng tin: h tn, tui, im ton (h s 2), im tin (h s 1). Hy nhp cc thng tin trn cho 2 sinh vin. In ra bng im gm cc chi tit nu trn v im trung bnh ca mi sinh vin.

    20. Mt nhn vin gm c cc thng tin: h tn, h s lng, phn trm ph cp (theo long) v phn trm phi ng BHXH. Hy nhp cc thng tin trn cho 2 nhn vin. In ra bng lng gm cc chi tit nu trn v tng s tin cui cng mi nhn vin c nhn.

    40

  • Chng 3. Cu trc iu khin v d liu kiu mng

    CHNG 3

    CU TRC IU KHIN V D LIU KIU MNG

    Cu trc r nhnh Cu trc lp Mng d liu Mng hai chiu

    I. CU TRC R NHNH Ni chung vic thc hin chng trnh l hot ng tun t, tc thc hin tng

    lnh mt t cu lnh bt u ca chng trnh cho n cu lnh cui cng. Tuy nhin, vic lp trnh hiu qu hn hu ht cc NNLT bc cao u c cc cu lnh r nhnh v cc cu lnh lp cho php thc hin cc cu lnh ca chng trnh khng theo trnh t tun t nh trong vn bn.

    Phn ny chng ti s trnh by cc cu lnh cho php r nhnh nh vy. thng nht mi cu lnh c trnh by v c php (tc cch vit cu lnh), cch s dng, c im, v d minh ho v mt vi iu cn ch khi s dng lnh.

    1. Cu lnh iu kin if

    a. ngha Mt cu lnh if cho php chng trnh c th thc hin khi lnh ny hay khi

    lnh khc ph thuc vo mt iu kin c vit trong cu lnh l ng hay sai. Ni cch khc cu lnh if cho php chng trnh r nhnh (ch thc hin 1 trong 2 nhnh).

    b. C php

    if (iu kin) { khi lnh 1; } else { khi lnh 2; } if (iu kin) { khi lnh 1; }

    Trong c php trn cu lnh if c hai dng: c else v khng c else. iu kin l mt biu thc lgic tc n c gi tr ng (khc 0) hoc sai (bng 0).

    Khi chng trnh thc hin cu lnh if n s tnh biu thc iu kin. Nu iu kin ng chng trnh s tip tc thc hin cc lnh trong khi lnh 1, ngc li nu

    41

  • Chng 3. Cu trc iu khin v d liu kiu mng

    iu kin sai chng trnh s thc hin khi lnh 2 (nu c else) hoc khng lm g (nu khng c else).

    c. c im

    c im chung ca cc cu lnh c cu trc l bn thn n cha cc cu lnh khc. iu ny cho php cc cu lnh if c th lng nhau.

    Nu nhiu cu lnh if (c else v khng else) lng nhau vic hiu if v else no i vi nhau cn phi ch . Qui tc l else s i vi if gn n nht m cha c ghp cp vi else khc. V d cu lnh

    if (n>0) if (a>b) c = a; else c = b;

    l tng ng vi if (n>0) { if (a>b) c = a; else c = b;}

    d. V d minh ho

    V d 1 : Bng php ton gn c iu kin c th tm s ln nht max trong 2 s a, b nh sau: max = (a > b) ? a: b ;

    hoc max c tm bi dng cu lnh if: if (a > b) max = a; else max = b;

    V d 2 : Tnh nm nhun. Nm th n l nhun nu n chia ht cho 4, nhng khng chia ht cho 100 hoc chia ht 400. Ch : mt s nguyn a l chia ht cho b nu phn d ca php chia bng 0, tc a%b == 0.

    #include void main() { int nam; cout > nam ; if (nam%4 == 0 && year%100 !=0 || nam%400 == 0)

    cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    #include // tp cha cc phng thc vo/ra #include // tp cha cc hm ton hc void main() {

    float a, b, c; // khai bo cc h s float delta;

    float x1, x2; // 2 nghiem

    cout > a >> b >> c ; // qui c nhp a 0 delta = b*b - 4*a*c ; if (delta < 0) cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    switch (biu thc iu khin) { case biu_thc_1: dy lnh 1 ; case biu_thc_2: dy lnh 2 ; case ...: ............... ; case biu_thc_n: dy lnh n ; default: dy lnh n+1; }

    biu thc iu khin: phi c kiu nguyn hoc k t, cc biu_thc_i: c to t cc hng nguyn hoc k t, cc dy lnh c th rng. Khng cn bao dy lnh bi cp du {}, nhnh default c th c hoc khng v v tr ca n c th nm bt k trong

    cu lnh (gia cc nhnh case), khng nht thit phi nm cui cng.

    c. Cch thc hin thc hin cu lnh switch u tin chng trnh tnh gi tr ca biu thc iu

    khin (btk), sau so snh kt qu ca btk vi gi tr ca cc biu_thc_i bn di ln lt t biu thc u tin (th nht) cho n biu thc cui cng (th n), nu gi tr ca btk bng gi tr ca biu thc th i u tin no th chng trnh s thc hin dy lnh th i v tip tc thc hin tt c dy lnh cn li (t dy lnh th i+1) cho n ht (gp du ngoc ng } ca lnh switch). Nu qu trnh so snh khng gp biu thc (nhnh case) no bng vi gi tr ca btk th chng trnh thc hin dy lnh trong default v tip tc cho n ht (sau default c th cn nhng nhnh case khc). Trng hp cu lnh switch khng c nhnh default v btk khng khp vi bt c nhnh case no th chng trnh khng lm g, coi nh thc hin xong lnh switch.

    Nu mun lnh switch ch thc hin nhnh th i (khi btk = biu_thc_i) m khng phi thc hin thm cc lnh cn li th cui dy lnh th i thng thng ta t thm lnh break; y l lnh cho php thot ra khi mt lnh cu trc bt k.

    d. V d minh ho V d 1 : In s ngy ca mt thng bt k no c nhp t bn phm.

    int th; cout > th ; switch (th)

    44

  • Chng 3. Cu trc iu khin v d liu kiu mng

    { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout dau ; switch (dau) { case '+': c = a + b ; break ;

    case '': c = a - b ; break ; case 'x': case '.': case '*': c = a * b ; break ; case ':': case '/': c = a / b ; break ; } cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    4 2 88 m chn, b qua 5 1 176 m l, cng thm 176 vo kq = 55 + 176 = 231 6 0 m = 0, dng cho kt qu kq = 231

    Sau y l chng trnh c vit vi cu lnh goto. void main() { long m, n, kq = 0; // Cc s cn nhn v kt qu kq cout > m >> n ; lap: // y l nhn chng trnh quay li if (m%2) kq += n; // nu m l th cng thm n vo kq m = m >> 1; // dch m sang phi 1 bit tc m = m / 2 n = n

  • Chng 3. Cu trc iu khin v d liu kiu mng

    a. C php for (dy biu thc 1 ; iu kin lp ; dy biu thc 2) { khi lnh lp; }

    Cc biu thc trong cc dy biu thc 1, 2 cch nhau bi du phy (,). C th c nhiu biu thc trong cc dy ny hoc dy biu thc cng c th trng.

    iu kin lp: l biu thc lgic (c gi tr ng, sai). Cc dy biu thc v/hoc iu kin c th trng tuy nhin vn gi li cc du

    chm phy (;) ngn cch cc thnh phn vi nhau.

    b. Cch thc hin

    Khi gp cu lnh for trnh t thc hin ca chng trnh nh sau:

    Thc hin dy biu thc 1 (thng thng l cc lnh khi to cho mt s bin),

    Kim tra iu kin lp, nu ng th thc hin khi lnh lp thc hin dy biu thc 2 quay lai kim tra iu kin lp v lp li qu trnh trn cho n bc no vic kim tra iu kin lp cho kt qu sai th dng.

    Tm li, biu thc 1 s c thc hin 1 ln duy nht ngay t u qu trnh lp sau thc hin cc cu lnh lp v dy biu thc 2 cho n khi no khng cn tho iu kin lp na th dng.

    c. V d minh ho V d 1 : Nhn 2 s nguyn theo phng php n

    void main() { long m, n, kq; // Cc s cn nhn v kt qu kq cout > m >> n ; for (kq = 0 ; m ; m >>= 1, n

  • Chng 3. Cu trc iu khin v d liu kiu mng

    Dy biu thc 2: m >>= 1 v n 1 (tng ng vi m = m / 2) v n = n

  • Chng 3. Cu trc iu khin v d liu kiu mng

    cout > n ; for (i = 1 ; i < n ; i += 2) cout = 1, n = 1; n

  • Chng 3. Cu trc iu khin v d liu kiu mng

    v my con ch, bit tng s con l 36. gii bi ton ny ta gi g l s g v c l s ch. Theo iu kin bi ton ta

    thy g c th i t 0 (khng c con no) v n ti a l 50 (v ch c 100 chn), tng t c c th i t 0 n 25. Nh vy ta c th cho g chy t 0 n 50 v vi mi gi tr c th ca g li cho c chy t 0 n 25, ln lt vi mi cp (g, c) c th ta kim tra 2 iu kin: g + c == 36 ? (s con) v 2g + 4c == 100 ? (s chn). Nu c 2 iu kin u tho th cp (g, c) c th chnh l nghim cn tm. T ta c chng trnh vi 2 vng for lng nhau, mt vng for cho g v mt vng cho c.

    void main() { int g, c ; for (g = 0 ; g

  • Chng 3. Cu trc iu khin v d liu kiu mng

    if (t10*10 + t20*20 + t50*50 == 100) // nu tho th {

    sopa++; // tng s phng n

    if (t10) cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    long m, n, kq; // Cc s cn nhn v kt qu kq cout > m >> n ; kq = 0 ; while (m) { if (m%2) kq += n ; m >>= 1; n > n ; kq = 0 ; while (1) { if (m%2) kq += n ; m >>= 1; n

  • Chng 3. Cu trc iu khin v d liu kiu mng

    { int g, c ;

    g = 0 ; while (g n ; if (m < n) { int t = m; m = n; n = t; } // nu m < n th i vai tr hai s while (m != n) {

    r = m - n ; if (r > n) m = r; else { m = n ; n = r ; }

    } cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    < 0). Ta bit vi iu kin ny chc chn th ca hm f(x) s ct trc honh ti mt im x0 no trong on [a, b], tc x0 l nghim ca phng trnh f(x) = 0. Tuy nhin vic tm chnh xc x0 l kh, v vy ta c th tm xp x x' ca n sao cho x' cng gn x0 cng tt. Ly c l im gia ca on [a, b], c s chia on [a, b] thnh 2 on con [a, c] v [c, b] v do f(a), f(b) tri du nn chc chn mt trong hai on con cng phi tri du, tc nghim x0 s nm trong on ny. Tip tc qu trnh bng cch chia i on va tm c cho n khi ta nhn c mt on con (tri du, cha x0) sao cho di ca on con ny b hn xp x cho trc th dng. Khi ly bt k im no trn on con ny (v d hai im mt hoc im gia ca a v b) th chc chn khong cch ca n n x0 cng b hn xp x cho trc, tc c th ly im ny lm nghim xp x ca phng trnh f(x) = 0.

    Trong v d ny hm f(x) chnh l ex - 1.5 v xp x l 10-6. y l hm lin tc trn ton trc s v i du trn on [0, 1] (v f(0) = 1 1.5 < 0 cn f(1) = e - 1.5 > 0). Sau y l chng trnh.

    void main() { float a = 0, b = 1, c; // cc im mt a, b v im gia c float fa, fc; // gi tr ca f(x) ti cc im a, c

    while (b-a > 1.0e-6) // trong khi di on cn ln hn {

    c = (a + b)/2; // tm im c gia on [a,b] fa = exp(a) - 1.5; fc = exp(c) - 1.5; // tnh f(a) v f(c) if (fa*fc == 0) break; // f(c) = 0 tc c l nghim if (fa*fc > 0) a = c; else b = c; } cout 0) th hm f(x) phi tri du trn on con [c, b] do t li on ny l [a, b] ( quay li vng lp) tc t a = c v b gi nguyn, ngc li nu hm f(x) tri du trn on con [a, c] th t li b = c cn a gi nguyn. Sau vng lp quay li kim tra di on [a, b] (mi) nu b hn xp x th dng v ly c lm nghim xp x, nu khng th tnh li c v tip tc qu trnh.

    tnh f(a) v f(c) chng trnh s dng hm exp(x), y l hm cho li kt qu ex, dng hm ny hoc cc hm ton hc ni chung, cn khai bo file nguyn

    55

  • Chng 3. Cu trc iu khin v d liu kiu mng

    mu math.h.

    3. Lnh lp do ... while

    a. C php

    do { khi lnh lp } while (iu kin) ;

    b. Thc hin

    u tin chng trnh s thc hin khi lnh lp, tip theo kim tra iu kin, nu iu kin cn ng th quay li thc hin khi lnh v qu trnh tip tc cho n khi iu kin tr thnh sai th dng.

    c. c im Cc c im ca cu lnh do while cng ging vi cu lnh lp while tr

    im khc bit, l khi lnh trong do while s c thc hin t nht mt ln, trong khi trong cu lnh while c th khng c thc hin ln no (v lnh while phi kim tra iu kin trc khi thc hin khi lnh, do nu iu kin sai ngay t u th lnh s dng, khi lnh khng c thc hin ln no. Trong khi lnh do while s thc hin khi lnh ri mi kim tra iu kin lp cho php thc hin tip hoc dng).

    d. V d minh ho

    V d 1 : Tnh xp x s pi theo cng thc Euler 22222 1

    31

    21

    11

    6 n... ++++= , vi

    62 10

    1 n ; i = 2 ; do { if (n%i == 0) {

    cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    trong mt ng cnh c th vic s dng cu lnh ph hp trong chng lm cho chng trnh sng sa, r rng v tng tin cy ln cao hn. Theo thi quen lp trnh trong mt s ngn ng c trc v da trn c trng ring ca tng cu lnh, cc lnh lp thng c dng trong cc ng cnh c th nh sau:

    FOR thng c s dng trong nhng vng lp m s ln lp c bit trc, ngha l vng lp thng c t chc di dng mt (hoc nhiu) bin m chy t mt gi tr no v n khi t c n mt gi tr khc cho trc th dng. V d dng thng dng ca cu lnh for l nh sau:

    for (i = gt1 ; i = gt1 ; i--) tc i gim t gt2 xung gt1 Ngc li vi FOR, WHILE v DO WHILE thng dng trong cc vng

    lp m s ln lp khng bit trc, chng thng c s dng khi vic lp hay dng ph thuc vo mt biu thc lgic.

    WHILE c s dng khi kh nng thc hin khi lp khng xy ra ln no, tc nu iu kin lp c gi tr sai ngay t u, trong khi DO WHILE c s dng khi ta bit chc chn khi lnh lp phi c thc hin t nht mt ln.

    III. MNG D LIU

    1. Mng mt chiu

    a. ngha Khi cn lu tr mt dy n phn t d liu chng ta cn khai bo n bin tng ng

    vi n tn gi khc nhau. iu ny s rt kh khn cho ngi lp trnh c th nh v qun l ht c tt c cc bin, c bit khi n ln. Trong thc t, hin nhin chng ta gp rt nhiu d liu c lin quan n nhau v mt mt no , v d chng c cng kiu v cng th hin mt i tng: nh cc to ca mt vect, cc s hng ca mt ma trn, cc sinh vin ca mt lp hoc cc dng k t ca mt vn bn Li dng c im ny ton b d liu (cng kiu v cng m t mt i tng) c th ch cn chung mt tn gi phn bit vi cc i tng khc, v phn bit cc d liu trong cng i tng ta s dng cch nh s th t cho chng, t vic qun l bin s d dng hn, chng trnh s gn v c tnh h thng hn.

    Gi s ta c 2 vect trong khng gian ba chiu, mi vec t cn 3 bin lu 3 to , v vy lu to ca 2 vect chng ta phi dng n 6 bin, v d x1, y1, z1 cho vect th nht v x2, y2, z2 cho vect th hai. Mt kiu d liu mi c gi l mng mt chiu cho php ta ch cn khai bo 2 bin v1 v v2 ch 2 vect, trong mi v1

    59

  • Chng 3. Cu trc iu khin v d liu kiu mng

    hoc v2 s cha 3 d liu c nh s th t t 0 n 2, trong ta c th ngm nh thnh phn 0 biu din to x, thnh phn 1 biu din to y v thnh phn c s th t 2 s biu din to z.

    Tm li, mng l mt dy cc thnh phn c cng kiu c sp k nhau lin tc trong b nh. Tt c cc thnh phn u c cng tn l tn ca mng. phn bit cc thnh phn vi nhau, cc thnh phn s c nh s th t t 0 cho n ht mng. Khi cn ni n thnh phn c th no ca mng ta s dng tn mng v km theo s th t ca thnh phn .

    Di y l hnh nh ca mt mng gm c 9 thnh phn, cc thnh phn c nh s t 0 n 8.

    0 1 2 3 4 5 6 7 8

    b. Khai bo [s thnh phn] ; // khng khi to [s thnh phn] = { dy gi tr } ; // c khi to [ ] = { dy gi tr } ; // c khi to

    Tn kiu l kiu d liu ca cc thnh phn, cc thnh phn ny c kiu ging nhau. Thnh thong ta cng gi cc thnh phn l phn t.

    Cch khai bo trn ging nh khai bo tn bin bnh thng nhng thm s thnh phn trong mng gia cp du ngoc vung [] cn c gi l kch thc ca mng. Mi tn mng l mt bin v phn bit vi cc bin thng thng ta cn gi l bin mng.

    Mt mng d liu c lu trong b nh bi dy cc lin tip nhau. S lng bng vi s thnh phn ca mng v di (byte) ca mi cha thng tin ca mi thnh phn. u tin c nh th t bi 0, tip theo bi 1, v tip tc cho n ht. Nh vy nu mng c n thnh phn th cui cng trong mng s c nh s l n - 1.

    Dng khai bo th 2 cho php khi to mng bi dy gi tr trong cp du {}, mi gi tr cch nhau bi du phy (,), cc gi tr ny s c gn ln lt cho cc phn t ca mng bt u t phn t th 0 cho n ht dy. S gi tr c th b hn s phn t. Cc phn t mng cha c gi tr s khng c xc nh cho n khi trong chng trnh n c gn mt gi tr no .

    Dng khai bo th 3 cho php vng mt s phn t, trng hp ny s phn t c xc nh bi s gi tr ca dy khi to. Do nu vng mt c dy khi

    60

  • Chng 3. Cu trc iu khin v d liu kiu mng

    to l khng c php (chng hn khai bo int a[] l sai). V d:

    Khai bo bin cha 2 vect a, b trong khng gian 3 chiu: float a[3] , b[3] ;

    Khai bo 3 phn s a, b, c; trong a = 1/3 v b = 3/5: int a[2] = {1, 3} , b[2] = {3, 5} , c[2] ;

    y ta ngm qui c thnh phn u tin (s th t 0) l t v thnh phn th hai (s th t 1) l mu ca phn s.

    Khai bo mng L cha c ti a 100 s nguyn di: long L[100] ;

    Khai bo mng dong (dng), mi dng cha c ti a 80 k t: char dong[80] ;

    Khai bo dy Data cha c 5 s thc chnh xc gp i: double Data[] = { 0,0,0,0,0 }; // khi to tm thi bng 0

    c. Cch s dng i. ch thnh phn th i (hay ch s i) ca mt mng ta vit tn mng km

    theo ch s trong cp ngoc vung []. V d vi cc phn s trn a[0], b[0], c[0] ch t s v a[1], b[1], c[1] ch mu s ca 3 phn s a,b,c.

    ii. Tuy mi mng biu din mt i tng nhng chng ta khng th p dng cc thao tc ln ton b mng m phi thc hin thao tc thng qua tng thnh phn ca mng. V d chng ta khng th nhp d liu cho mng a[10] bng cu lnh:

    cin >> a ; // sai m phi nhp cho tng phn t t a[0] n a[9] ca a. D nhin trong trng hp ny chng ta phi cn n lnh lp for:

    int i ; for (i = 0 ; i < 10 ; i++) cin >> a[i] ;

    Tng t, gi s chng ta cn cng 2 phn s a, b v t kt qu vo c. Khng th vit:

    c = a + b ; // sai m cn phi tnh tng phn t ca c:

    61

  • Chng 3. Cu trc iu khin v d liu kiu mng

    c[0] = a[0] * b[1] + a[1] * b[0] ; // t s c[1] = a[1] * b[1] ; // mu s

    khc phc nhc im ny, trong cc chng sau C++ cung cp mt kiu d liu mi gi l lp, v cho php NSD c th nh ngha ring php cng cho 2 mng tu , khi c th vit mt cch n gin v quen thuc c = a + b cng 2 phn s.

    d. V d minh ho V d 1 : Tm tng, tch 2 phn s.

    void main() { int a[2], b[2], tong[2], tich[2] ; cout > a[0] ; cout > a[1] ; cout > b[0] ; cout > b[1] ; tong[0] = a[0]*b[1] + a[1]*b[0] ; tong[1] = a[1] * b[1] ; tich[0] = a[0]*b[0]; tich[1] = a[1] * b[1] ; cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    for (i=0; i

  • Chng 3. Cu trc iu khin v d liu kiu mng

    char monhoc[31] = "NNLT C++" ; xu mn hc cha ti a 30 k t, c khi to vi ni dung "NNLT C++" vi

    di thc s l 10 k t (chim 11 u tin trong mng monhoc[31]).

    Cch khai bo th 3 t chng trnh s quyt nh di ca mng bi xu khi to (bng di xu + 1). V d:

    char thang[] = "Mi hai" ; // di mng = 9

    b. Cch s dng

    Tng t nh cc mng d liu khc, xu k t c nhng c trng nh mng, tuy nhin chng cng c nhng im khc bit. Di y l cc im ging v khc nhau .

    Truy cp mt k t trong xu: c php ging nh mng. V d: char s[50] = "I\'m a student" ; // ch k t ' phi c vit l \' cout > vn dng c nhng c nhiu hn ch. V d char s[60] ; cin >> s ; cout > ch nhp "Tin" cho s (b tt c cc k t ng sau du trng), v vy khi in ra trn mn hnh ch c t "Tin".

    V cc php ton khng dng c trc tip trn xu nn cc chng trnh dch vit sn cc hm th vin c khai bo trong file nguyn mu string.h. Cc hm ny gii quyt c hu ht cc cng vic cn thao tc trn xu. N cung cp cho NSD phng tin thao tc trn xu nh gn, so snh, sao chp, tnh di xu, nhp, in, s dng c cc hm ny u chng trnh cn c khai bo string.h. Phn ln cc hm ny s c gii thiu trong phn tip sau.

    65

  • Chng 3. Cu trc iu khin v d liu kiu mng

    c. Phng thc nhp xu (#include )

    Do ton t nhp >> c hn ch i vi xu k t nn C++ a ra hm ring (cn gi l phng thc) cin.getline(s,n) nhp xu k t. Hm c 2 i vi s l xu cn nhp ni dung v n-1 l s k t ti a ca xu. Ging phng thc nhp k t cin.get(c), khi gp hm cin.getline(s,n) chng trnh s nhn vo b m bn phm ly ra n-1 k t (nu hoc ly tt c k t cn li, tr k t enter) v gn cho s. Nu ti thi im b m ang rng, chng trnh s tm dng ch NSD nhp d liu (dy k t) vo t bn phm. NSD c th nhp vo dy vi di bt k cho n khi nhn Enter, chng trnh s ly ra n-1 k t u tin gn cho s, phn cn li vn c lu trong b m (k c k t Enter) dng cho ln nhp sau. Hin nhin, sau khi gn cc k t cho s, chng trnh s t ng t k t kt thc xu vo tip theo ca xu s. V d 1 : Xt on lnh sau

    char s[10] ; cin.getline(s, 10) ; cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    VN[6] = US[6]; VN[7] = US[7] ; // nm cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    trnh ngn thay th mt on con bt k no trong s bi mt on con bt k (c di tng ng) trong t. V d cc dng lnh chuyn i ngy thng trong v d trc c th vit li bng cch dng hm strncpy nh sau:

    strncpy(VN+0, US+3, 2) ; // ngy strncpy(VN+3, US+0, 2) ; // thng strncpy(VN+6, US+6, 2); // nm

    strcat(s, t); Ni mt bn sao ca t vo sau s (thay cho php +). Hin nhin hm s loi b k

    t kt thc xu s trc khi ni thm t. Vic ni s m bo ly c k t kt thc ca xu t vo cho s (nu s ch) v vy NSD khng cn thm k t ny vo cui xu. Tuy nhin, hm khng kim tra xem liu di ca s c ch ni thm ni dung, vic kim tra ny phi do NSD m nhim. V d:

    char a[100] = "Mn", b[4] = "ti"; strcat(a, v ); strcat(a, b); cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    Hm so snh 2 xu s v t (thay cho cc php ton so snh). Gi tr tr li l hiu 2 k t khc nhau u tin ca s v t. T , nu s1 < s2 th hm tr li gi tr m, bng 0 nu s1==s2, v dng nu s1 > s2. Trong trng hp ch quan tm n so snh bng, nu hm tr li gi tr 0 l 2 xu bng nhau v nu gi tr tr li khc 0 l 2 xu khc nhau.

    V d: if (strcmp(s,t)) cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    strlen(s) ; Hm tr gi tr l di ca xu s. V d:

    char s[10] = "Ha Noi" ; cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    while ((t[i] = s[i]) != '\0') i++; // copy c du kt thc xu '\0' cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    khng qu nhanh chng trnh s dng hm tr delay(n) (thuc dos.h, tm dng trong n phn nghn giy) vi n c iu chnh thch hp theo tc ca my. Hm gotoxy(x, y) (thuc conio.h) trong chng trnh t con tr mn hnh ti v tr ct x dng y m bo dng ch lun lun hin ra ti ng mt v tr trn mn hnh.

    #include #include #include main() {

    char qc[100] = "Qung co min ph: Khng c tin th khng c kem. "; int dd = strlen(qc); char tam[100] ; strcpy(tam, qc) ;

    strcat(qc, tam) ; // nhn i dng qung co clrscr(); // xo mn hnh

    char hien[31] ; // cha xu di 30 k t hin i = 0; while (!kbhit()) { // trong khi cha n phm bt k strncpy(hien, s+i, 30);

    hien[30] = '\0'; // copy 30 k t t qc[i] sang hien gotoxy(20,10); cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    #include void main() { char pw[11]; int solan = 0; // Cho phep nhap 3 lan do {

    clrscr(); gotoxy(30,12) ; int i = 0;

    while ((pw[i]=getch()) != 13 && ++i < 10) cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    trong b nh tt c 12 phn t ca mng c sp lin tip theo tng dng ca mng nh minh ho trong hnh di y.

    dng 0 dng 1 dng 2

    a. Khai bo

    [m][n] ; m, n l s hng, s ct ca mng. kiu thnh phn l kiu ca m x n phn t trong mng. Trong khai bo cng c th c khi to bng dy cc dng gi tr, cc dng

    cch nhau bi du phy, mi dng c bao bi cp ngoc {} v ton b gi tr khi to nm trong cp du {}.

    b. S dng

    Tng t mng mt chiu cc chiu trong mng cng c nh s t 0. Khng s dng cc thao tc trn ton b mng m phi thc hin thng qua

    tng phn t ca mng.

    truy nhp phn t ca mng ta s dng tn mng km theo 2 ch s ch v tr hng v ct ca phn t. Cc ch s ny c th l cc biu thc thc, khi C++ s t chuyn kiu sang nguyn.

    V d:

    Khai bo 2 ma trn 4 hng 5 ct A, B cha cc s nguyn: int A[3][4], B[3][4] ;

    Khai bo c khi to: int A[3][4] = { {1,2,3,4}, {3,2,1,4}, {0,1,1,0} };

    vi khi to ny ta c ma trn:

    1 2 3 4 3 2 1 4 0 1 1 0

    trong : A[0][0] = 1, A[0][1] = 2, A[1][0] = 3, A[2][3] = 0

    74

  • Chng 3. Cu trc iu khin v d liu kiu mng

    Trong khai bo c th vng s hng (khng c vng s ct), s hng ny c xc nh thng qua khi to.

    float A[][3] = { {1,2,3}, {0,1,0} } ; trong khai bo ny chng trnh t ng xc nh s hng l 2.

    Php khai bo v khi to sau y l cng hp l: float A[][3] = { {1,2}, {0} } ;

    chng trnh cng xc nh s hng l 2 v s ct (bt buc phi khai bo) l 3 mc d trong khi to khng th xc nh c s ct. Cc phn t cha khi to s cha c xc nh cho n khi no n c nhp hoc gn gi tr c th. Trong v d trn cc phn t A[0][2], A[1][1] v A[1][2] l cha c xc nh.

    c. V d minh ho V d 1 : Nhp, in v tm phn t ln nht ca mt ma trn.

    #include #include #include main() { float a[10][10] ; int m, n ; // s hng, ct ca ma trn int i, j ; // cc ch s trong vng lp int amax, imax, jmax ; // s ln nht v ch s ca n clrscr(); cout > m >> n ; for (i=0; i

  • Chng 3. Cu trc iu khin v d liu kiu mng

    { amax = a[i][j]; imax = i; jmax = j;

    } cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    clrscr(); cout > m >> n >> p;

    // Nhp ma trn A for (i=1; i

  • Chng 3. Cu trc iu khin v d liu kiu mng

    BI TP

    Lnh r nhnh 1. Nhp mt k t. Cho bit k t c phi l ch ci hay khng. 2. Nhp vo mt s nguyn. Tr li s nguyn : m hay dng, chn hay l ? 3. Cho n = x = y v bng: a. 1 b. 2 c. 3 d. 4

    Hy cho bit gi tr ca x, y sau khi chy xong cu lnh: if (n % 2 == 0) if (x > 3) x = 0; else y = 0;

    4. Tnh gi tr hm

    a.

    +>+=

    0403

    x,ex,xx)x(f

    x

    b.

    +

  • Chng 3. Cu trc iu khin v d liu kiu mng

    11. Gi tr ca i bng bao nhiu sau khi thc hin cu trc for sau: for (i = 0; i < 100; i++);

    12. Gi tr ca x bng bao nhiu sau khi thc hin cu trc for sau: for (x = 2; i < 10; x+=3) ;

    13. Bn b sung g vo lnh for sau: for ( ; nam < 1997 ; ) ;

    khi kt thc nam c gi tr 2000. 14. Bao nhiu k t X c in ra mn hnh khi thc hin on chng trnh sau:

    for (x = 0; x < 10; x ++) for (y = 5; y > 0; y --) cout

  • Chng 3. Cu trc iu khin v d liu kiu mng

    22. Nhp dy k t n khi gp k t . th dng. Thng k s ch ci vit hoa, vit thng, s ch s v tng s cc k t khc nhp. Loi k t no nhiu nht ?

    23. Tm s nguyn dng n ln nht tho mn iu kin:

    a. 101999212

    151

    311 .

    n...

  • Chng 3. Cu trc iu khin v d liu kiu mng

    ca dy. 28. Tm v ch ra v tr xut hin u tin ca phn t x trong dy. 29. Nhp vo dy n s. Hy in ra s ln nht, b nht ca dy. 30. Nhp vo dy s. In ra dy c sp xp tng dn, gim dn. 31. Cho dy c sp tng dn. Chn thm vo dy phn t x sao cho dy vn sp

    xp tng dn. 32. Hy nhp vo 16 s nguyn. In ra thnh 4 dng, 4 ct. 33. Nhp ma trn A v in ra ma trn i xng ca n. 34. Cho mt ma trn nguyn kch thc m*n. Tnh:

    Tng tt c cc phn t ca ma trn. Tng tt c cc phn t dng ca ma trn. Tng tt c cc phn t m ca ma trn. Tng tt c cc phn t chn ca ma trn. Tng tt c cc phn t l ca ma trn.

    35. Cho mt ma trn thc kch thc m*n. Tm: S nh nht, ln nht (km ch s) ca ma trn. S nh nht, ln nht (km ch s) ca tng hng ca ma trn. S nh nht, ln nht (km ch s) ca tng ct ca ma trn. S nh nht, ln nht (km ch s) ca ng cho chnh ca ma trn. S nh nht, ln nht (km ch s) ca ng cho ph ca ma trn.

    36. Nhp 2 ma trn vung cp n A v B. Tnh A + B, A B, A * B v A2 - B2. Xu k t 37. Hy nhp mt xu k t. In ra mn hnh o ngc ca xu . 38. Nhp xu. Thng k s cc ch s '0', s ch s '1', , s ch s '9' trong xu. 39. In ra v tr k t trng u tin t bn tri (phi) mt xu k t. 40. Nhp xu. In ra tt cc cc v tr ca ch 'a' trong xu v tng s ln xut hin ca

    n. 41. Nhp xu. Tnh s t c trong xu. In mi dng mt t.

    81

  • Chng 3. Cu trc iu khin v d liu kiu mng

    42. Nhp xu h tn, in ra h, tn di dng vit hoa. 43. Thay k t x trong xu s bi k t y (s, x, y c c vo t bn phm) 44. Xo mi k t x c trong xu s (s, x c c vo t bn phm). (Gi : nn xo

    ngc t cui xu v u xu). 45. Nhp xu. Khng phn bit vit hoa hay vit thng, hy in ra cc k t c mt

    trong xu v s ln xut hin ca n (v d xu Trach Van Doanh c ch a xut hin 3 ln, c(1), d(1), h(2), n(2), o(1), r(1), t(1), (2), space(4)).

    82

  • Chng 4. Hm v chng trnh

    CHNG 4

    HM V CHNG TRNH

    Con tr v s hc a ch Hm qui T chc chng trnh

    I. CON TR V S HC A CH Trc khi bn v hm v chng trnh, trong phn ny chng ta s ni v mt

    loi bin mi gi l con tr, ngha, cng dng v s dng n nh th no. Bin con tr l mt c trng mnh ca C++, n cho php chng ta thm nhp trc tip vo b nh x l cc bi ton kh bng ch vi cu lnh n gin ca chng trnh. iu ny cng gp phn lm cho C++ tr thnh ngn ng gn gi vi cc ngn ng cp thp nh hp ng. Tuy nhin, v tnh n gin, ngn gn nn vic s dng con tr i hi tnh cn thn cao v giu kinh nghim ca ngi lp trnh.

    1. a ch, php ton & Mi chng trnh trc khi chy u phi b tr cc bin do NSD khai bo vo

    u trong b nh. to iu kin truy nhp d dng tr li cc bin ny, b nh c nh s, mi byte s c ng vi mt s nguyn, c gi l a ch ca byte t 0 n ht b nh. T , mi bin (vi tn bin) c gn vi mt s nguyn l a ch ca byte u tin m bin c phn phi. S lng cc byte phn phi cho bin l khc nhau (nhng t lin nhau t thp n cao) tu thuc kiu d liu ca bin (v tu thuc vo quan nim ca tng NNLT), tuy nhin ch cn bit tn bin hoc a ch ca bin ta c th c/vit d liu vo/ra cc bin . T ngoi vic thng qua tn bin chng ta cn c th thng qua a ch ca chng truy nhp vo ni dung. Tm li bin, nh v a ch c quan h khng kht vi nhau. C++ cung cp mt ton t mt ngi & ly a ch ca cc bin (ngoi tr bin mng v xu k t). Nu x l mt bin th &x l a ch ca x. T cu lnh sau cho ta bit x c b tr u trong b nh:

    int x ; cout

  • Chng 4. Hm v chng trnh

    i vi bin kiu mng, th tn mng chnh l a ch ca mng, do khng cn dng n ton t &. V d a ch ca mng a chnh l a (khng phi &a). Mt khc a ch ca mng a cng chnh l a ch ca byte u tin m mng a chim v n cng chnh l a ch ca phn t u tin ca mng a. Do vy a ch ca mng a l a ch ca phn t a[0] tc &a[0]. Tm li, a ch ca mng a l a hoc &a[0].

    Tm li, cn nh: int x; // khai bo bin nguyn x long y; // khai bo bin nguyn di y cout

  • Chng 4. Hm v chng trnh

    lm vic vi a ch ca cc bin cn phi thng qua cc bin con tr tr n bin .

    b. Khai bo bin con tr ;

    a ch ca mt bin l a ch byte nh u tin ca bin . V vy ly c ni dung ca bin, con tr phi bit c s byte ca bin, tc kiu ca bin m con tr s tr ti. Kiu ny cng c gi l kiu ca con tr. Nh vy khai bo bin con tr cng ging nh khai bo mt bin thng ngoi tr cn thm du * trc tn bin (hoc sau tn kiu). V d:

    int *p ; // khai bo bin p l bin con tr tr n kiu d liu nguyn. float *q, *r ; // hai con tr thc q v r.

    c. S dng con tr, php ton *

    con tr p tr n bin x ta phi dng php gn p = a ch ca x. Nu x khng phi l mng ta vit: p = &x. Nu x l mng ta vit: p = x hoc p = &x[0].

    Khng gn p cho mt hng a ch c th. V d vit p = 200 l sai. Php ton * cho php ly ni dung ni p tr n, v d gn ni dung ni p

    tr n cho bin f ta vit f = *p.

    & v * l 2 php ton ngc nhau. C th nu p = &x th x = *p. T nu p tr n x th bt k ni no xut hin x u c th thay c bi *p v ngc li.

    V d 1 : int i, j ; // khai bo 2 bin nguyn i, j int *p, *q ; // khai bo 2 con tr nguyn p, q p = &i; // cho p tr ti i q = &j; // cho q tr ti j cout

  • Chng 4. Hm v chng trnh

    (*q)++ ; cout

  • Chng 4. Hm v chng trnh

    V d 3 : int a[100] = { 1, 2, 3, 4, 5, 6, 7 }, *p, *q; p = a; cout

  • Chng 4. Hm v chng trnh

    d. Hiu ca 2 con tr

    Php ton ny ch thc hin c khi p v q l 2 con tr cng tr n cc phn t ca mt dy d liu no trong b nh (v d cng tr n 1 mng d liu). Khi hiu p - q l s thnh phn gia p v q (ch p - q khng phi l hiu ca 2 a ch m l s thnh phn gia p v q).

    V d: gi s p v q l 2 con tr nguyn, p c a ch 200 v q c a ch 208. Khi p - q = 4 v q - p = 4 (4 l s thnh phn nguyn t a ch 200 n 208).

    e. Php ton so snh Cc php ton so snh cng c p dng i vi con tr, thc cht l so snh

    gia a ch ca hai ni c tr bi cc con tr ny. Thng thng cc php so snh = ch p dng cho hai con tr tr n phn t ca cng mt mng d liu no . Thc cht ca php so snh ny chnh l so snh ch s ca 2 phn t c tr bi 2 con tr . V d 5 :

    float a[100], *p, *q ; p = a ; // p tr n mng (tc p tr n a[0]) q = &a[3] ; // q tr n phn t th 3 (a[3]) ca mng cout

  • Chng 4. Hm v chng trnh

    cn lm vic vi hn 1000 s nguyn. Khi vng nh m chng trnh dch dnh cho mng l khng s dng. y chnh l hn ch th hai ca mng c khai bo trc.

    Khc phc cc hn ch trn ca kiu mng, by gi chng ta s khng khai bo (b tr) trc mng d liu vi kch thc c nh nh vy. Kch thc c th s c cp pht trong qu trnh chy chng trnh theo ng yu cu ca NSD. Nh vy chng ta c s nh lm vic m vn tit kim c b nh, v khi khng dng na ta c th thu hi (cn gi l gii phng) s nh ny chng trnh s dng vo vic khc. Hai cng vic cp pht v thu hi ny c thc hin thng qua cc ton t new, delete v con tr p. Thng qua p ta c th lm vic vi bt k a ch no ca vng c cp pht. Cch thc b tr b nh nh th ny c gi l cp pht ng. Sau y l c php ca cu lnh new.

    p = new ; // cp pht 1 phn t p = new [n] ; // cp pht n phn t

    V d: int *p ; p = new int ; // cp pht vng nh cha c 1 s nguyn p = float int[100] ; // cp pht vng nh cha c 100 s thc

    Khi gp ton t new, chng trnh s tm trong b nh mt lng nh cn ri v lin tc vi s lng theo yu cu v cho p tr n a ch (byte u tin) ca vng nh ny. Nu khng c vng nh vi s lng nh vy th vic cp pht l tht bi v p = NULL (NULL l mt a ch rng, khng xc nh). Do vy ta c th kim tra vic cp pht c thnh cng hay khng thng qua kim tra con tr p bng hay khc NULL. V d:

    float *p ; int n ; cout > n; p = new double[n]; if (p == NULL) {

    cout

  • Chng 4. Hm v chng trnh

    gii phng b nh cp pht cho mt bin (khi khng cn s dng na) ta s dng cu lnh delete.

    delete p ; // p l con tr c s dng trong new v gii phng ton b mng c cp php thng qua con tr p ta dng cu lnh:

    delete[] p ; // p l con tr tr n mng Di y l v d s dng tng hp cc php ton trn con tr.

    V d 1 : Nhp dy s (khng dng mng). Sp xp v in ra mn hnh. Trong v d ny chng trnh xin cp pht b nh cha n s nguyn v c

    tr bi con tr head. Khi a ch ca s nguyn u tin v cui cng s l head v head+n-1. p v q l 2 con tr chy trn dy s ny, so snh v i ni dung ca cc s ny vi nhau sp thnh dy tng dn v cui cng in kt qu.

    main() { int *head, *p, *q, n, tam; // head tr n (nh du) u dy cout > n ; head = new int[n] ; // cp pht b nh cha n s nguyn

    for (p=head; p

  • Chng 4. Hm v chng trnh

    a[i] = *(a+i). Ch khi vit *(p+1) = *(a+1) ta thy vai tr ca p v a trong biu thc ny l

    nh nhau, cng truy cp n gi tr ca phn t a[1]. Tuy nhin khi vit *(p++) th li khc vi *(a++), c th vit p++ l hp l cn a++ l khng c php. L do l tuy p v a cng th hin a ch ca mng a nhng p thc s l mt bin, n c th thay i c gi tr cn a l mt hng, gi tr khng c php thay i. V d vit x = 3 v sau c th tng x bi x++ nhng khng th vit x = 3++. V d 1 : In ton b mng thng qua con tr.

    int a[5] = {1,2,3,4,5}, *p, i; 1: p = a; for (i=1; i

  • Chng 4. Hm v chng trnh

    strcpy(s, "Hello") ; // trong trng hp ny khng cn cp pht b t = s ; // nh cho t v t v s cng s dng chung vng nh

    nhng: char *s = new char[30], *t ; strcpy(s, "Hello") ; t = new char[30]; // trong trng hp ny phi cp b nh cho t v strcpy(t, s) ; // c ch strcpy sao chp sang ni dung ca s.

    c. Con tr v mng hai chiu d hiu vic s dng con tr tr n mng hai chiu, chng ta nhc li v

    mng 2 chiu thng qua v d. Gi s ta c khai bo: float a[2][3], *p;

    khi a c b tr trong b nh nh l mt dy 6 phn t float nh sau

    a a+1

    tuy nhin a khng c xem l mng 1 chiu vi 6 phn t m c quan nim nh mng mt chiu gm 2 phn t, mi phn t l 1 b 3 s thc. Do a ch ca mng a chnh l a ch ca phn t u tin a[0][0], v a+1 khng phi l a ch ca phn t tip theo a[0][1] m l a ch ca phn t a[1][0]. Ni cch khc a+1 cng l tng a ch ca a ln mt thnh phn, nhng 1 thnh phn y c hiu l ton b mt dng ca mng.

    Mt khc, vic ly a ch ca tng phn t (float) trong a thng l khng chnh xc. V d: vit &a[i][j] (a ch ca phn t dng i ct j) l c i vi mng nguyn nhng li khng ng i vi mng thc.

    T cc tho lun trn, php gn p = a l d gy nhm ln v p l con tr float cn a l a ch mng (1 chiu). Do vy trc khi gn ta cn p kiu ca a v kiu float. Tm li cch gn a ch ca a cho con tr p c thc hin nh sau:

    Cch sai: p = a ; // sai v khc kiu

    Cc cch ng: p = (float*)a; // p kiu ca a v con tr float (cng l kiu ca p) p = a[0]; // gn vi a ch ca mng a[0] p = &a[0][0]; // gn vi a ch s thc u tin trong a

    92

  • Chng 4. Hm v chng trnh

    trong cch dng p = (float*)a; l trc quan v ng trong mi trng hp nn c dng thng dng hn c.

    Sau khi gn a cho p (p l con tr thc), vic tng gim p chnh l dch chuyn con tr trn tng phn t (thc) ca a. Tc:

    p tr ti a[0][0] p+1 tr ti a[0][1] p+2 tr ti a[0][2] p+3 tr ti a[1][0] p+4 tr ti a[1][1] p+5 tr ti a[1][2]

    Tng qut, i vi mng m x n phn t: p + i*n + j tr ti a[i][j] hoc a[i][j] = *(p + i*n + j)

    T truy nhp n phn t a[i][j] thng qua con tr p ta nn s dng cch vit sau:

    p = (float*)a; cin >> *(p+i*n+j) ; // nhp cho a[i][j] cout *(p+i); // nhp nh dy mxn phn t

    *(p+2*n+3) = 100; *(p+4*n) = 100; // gn a[2,3] = a[4][0] = 100 for (i=0; i

  • Chng 4. Hm v chng trnh

    } getch();

    }

    Ch : vic ly a ch phn t a[i][j] ca mng thc a l khng chnh xc. Tc: vit p = &a[i][j] c th dn n kt qu sai.

    6. Mng con tr

    a. Khi nim chung Thc cht mt con tr cng l mt bin thng thng c tn gi (v d p, q, ),

    do cng ging nh bin, nhiu bin cng kiu c th t chc thnh mt mng vi tn gi chung, y cng vy nhiu con tr cng kiu cng c t chc thnh mng. Nh vy mi phn t ca mng con tr l mt con tr tr n mt mng no . Ni cch khc mt mng con tr cho php qun l nhiu mng d liu cng kiu. Cch khai bo:

    *a[size]; V d:

    int *a[10];

    khai bo mt mng cha 10 con tr. Mi con tr a[i] cha a ch ca mt mng nguyn no .

    b. Mng xu k t L trng hp ring ca mng con tr ni chung, trong kiu c th l char.

    Mi thnh phn mng l mt con tr tr n mt xu k t, c ngha cc thao tc tin hnh trn *a[i] nh i vi mt xu k t. V d 1 : Nhp vo v in ra mt bi th.

    main() {

    clrscr(); char *dong[100]; // khai bo 100 con tr k t (100 dng) int i, n; cout > n ; // nhp s dng thc s

    cin.ignore(); // loi du trong lnh cin trn for (i=0; i

  • Chng 4. Hm v chng trnh

    { dong[i] = new char[80]; // cp b nh cho dng i cin.getline(dong[i],80); // nhp dng i

    } for (i=0; i

  • Chng 4. Hm v chng trnh

    c s dng (v d s dng cc hm ton hc ta cn khai bo file nguyn mu math.h). i vi cc hm do NSD t vit, cng cn phi khai bo. Khai bo mt hm nh sau:

    (d/s kiu i) ; trong , kiu gi tr tr li cn gi l kiu hm v c th nhn kiu bt k chun

    ca C++ v c kiu ca NSD t to. c bit nu hm khng tr li gi tr th kiu ca gi tr tr li c khai bo l void. Nu kiu gi tr tr li c b qua th chng trnh ngm nh hm c kiu l int (phn bit vi void !). V d 1 :

    int bp(int); // Khai bo hm bp, c i kiu int v kiu hm l int int rand100(); // Khng i, kiu hm (gi tr tr li) l int void alltrim(char[]) ; // i l xu k t, hm khng tr li gi tr (khng kiu). cong(int, int); // Hai i kiu int, kiu hm l int (ngm nh).

    Thng thng chng trnh c r rng chng ta nn trnh lm dng cc ngm nh. V d trong khai bo cong(int, int); nn khai bo r c kiu hm (trong trng hp ny kiu hm ngm nh l int) nh sau : int cong(int, int);

    b. nh ngha hm

    Cu trc mt hm bt k c b tr cng ging nh hm main() trong cc phn trc. C th:

    Hm c tr v gi tr (danh sch tham i hnh thc) { khai bo cc b ca hm ; // ch dng ring cho hm ny dy lnh ca hm ; return (biu thc tr v); // c th nm u trong dy lnh. }

    Danh sch tham i hnh thc cn c gi ngn gn l danh sch i gm dy cc i cch nhau bi du phy, i c th l mt bin thng, bin tham chiu hoc bin con tr, hai loi bin sau ta s trnh by trong cc phn ti. Mi i c khai bo ging nh khai bo bin, tc l cp gm .

    Vi hm c tr li gi tr cn c cu lnh return km theo sau l mt biu thc. Kiu ca gi tr biu thc ny chnh l kiu ca hm c khai bo

    96

  • Chng 4. Hm v chng trnh

    phn tn hm. Cu lnh return c th nm v tr bt k trong phn cu lnh, tu thuc mc ch ca hm. Khi gp cu lnh return chng trnh tc khc thot khi hm v tr li gi tr ca biu thc sau return nh gi tr ca hm.

    V d 2 : V d sau nh ngha hm tnh lu tha n (vi n nguyn) ca mt s thc bt k. Hm ny c hai u vo (i thc x v s m nguyn n) v u ra (gi tr tr li) kiu thc vi chnh xc gp i l xn.

    double luythua(float x, int n) { int i ; // bin ch s double kq = 1 ; // lu kt qu for (i=1; i

  • Chng 4. Hm v chng trnh

    c. Ch v khai bo v nh ngha hm

    Danh sch i trong khai bo hm c th cha hoc khng cha tn i, thng thng ta ch khai bo kiu i ch khng cn khai bo tn i, trong khi dng u tin ca nh ngha hm phi c tn i y .

    Cui khai bo hm phi c du chm phy (;), trong khi cui dng u tin ca nh ngha hm khng c du chm phy.

    Hm c th khng c i (danh sch i rng), tuy nhin cp du ngoc sau tn hm vn phi c vit. V d clrscr(), lamtho(), vietgiaotrinh(),

    Mt hm c th khng cn phi khai bo nu n c nh ngha trc khi c hm no gi n n. V d c th vit hm main() trc (trong vn bn chng trnh), ri sau mi vit n cc hm "con". Do trong hm