Giao Trinh Ngon Ngu C

Embed Size (px)

Citation preview

  • 8/6/2019 Giao Trinh Ngon Ngu C

    1/95

    i hc quc gia h nikhoa cng ngh

    gio trnh tin hc c sphn lp trnh trn ngn ng Cv b duy

    h ni thng 1 nm 2003

  • 8/6/2019 Giao Trinh Ngon Ngu C

    2/95

    Gio trnh tin hc c s II - Ngn ngC

    2

    Bn c trn mng ca i hc Quc gia H Ni c phpc, in v download ti liu ny t th vin in t ca KhoaCng ngh v s dng nhng khng c php s dng vi mcch v li.

    Bn quyn thuc nhm tc gi thc hin chng trnh Tinhc cs

    y l phin bn u tin, c th cn nhiu sai st. Chung timong nhn c kin ng gp ca bn c. Cc kin gi vtheo a [email protected] hoc [email protected] .

    Cm n bn c ng gp hon thin gio trnh.

    Thay mt cc tc gi

    o Kin Quc

  • 8/6/2019 Giao Trinh Ngon Ngu C

    3/95

    Gio trnh tin hc c s II - Ngn ngC

    3

    MC LC

    I. MU.......................................................................................................................................4

    I.1. Bng chci, tn v tkho..............................................................................................4 I.2.Cc bc lp trnh gii bi ton .........................................................................................5

    II. BIN, HNG V CC KIU DLIU TRONG C ................................................................8II.1.Bin ......................................................................................................................................8II.2. Hng..................................................................................................................................10 II.3. Cc kiu dliu chun n gin trong C......................................................................11II.4. Biu thc v cc php ton.............................................................................................13

    III. CHNG TRNH C.............................................................................................................26III.1.Cu trc chng trnh....................................................................................................27III.2.Cu lnh v dng ch thch............................................................................................31III.3.Nhp v xut dliu.......................................................................................................33

    IV - CC CU TRC IU KHIN CHNG TRNH .........................................................41IV. Cu trc tun t...................................................................................................................................... 41IV.2.Cu trc r nhnh ................................................................................................................................ 42IV.3.Cu trc switch ..................................................................................................................................... 46IV.4.Cu trc while........................................................................................................................................ 48IV.5.Cu trc do .. while ........................................................................................................................... 53IV.6.Cu trc for ............................................................................................................................................ 57IV.7.Cu lnh continue v break.............................................................................................................. 63

    V - MNG V CON TR.............................................................................................................65 V.1.Khi nim Mng ...............................................................................................................65V.2.Mng 1 chiu.....................................................................................................................65

    V.3 - Mng 2 chiu...................................................................................................................74 V.4 - Con tr v mng ............................................................................................................ 79

    VI CC VN CBN V HM ........................................................................................88VI.1 - Nguyn mu (prototype) hm......................................................................................88VI.2 - nh ngha hm............................................................................................................89VI.3 - Li gi hm v truyn tham s ...................................................................................90

    TI LIU THAM KHO .............................................................................................................95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    4/95

    Gio trnh tin hc c s II - Ngn ngC

    4

    I. MuC l ngn ng lp trnh c thit k bi Dennis Ritchie ti phng th nghim Bell

    Telephone nm 1972. N c vit vi mc tiu chnh l xy dng hiu hnh UNIX.V th ban u n khng hng ti s tin dng cho ngi lp trnh. C c pht trin tmt ngn ng lp trnh c tn l B (B l ngn ng lp trnh c vit bi Ken Thompsonti Bell Labs, v tn ngn ng ly theo tn ca Bell Labs).

    C l ngn ng mnh v mm do, linh hot, n nhanh chng trthnh ngn ng phbin khng ch trong phm vi ca Bell, C c cc lp trnh vin s dng vit nhiu loing dng cc mc khc nhau.

    Cng v n c dng nhiu ni nn xut hin nhng c im khc nhau, cc phinbn pht trin khng thng nht. gii quyt vn ny, nm 1983 Vin tiu chun M(ANSI) thnh lp mt chun cho C v c tn ANSI C (ANSI standard C). Ni chungcc chng trnh dch C ngy nay u tun theo chun ny ngoi tr mt s khc bit nh.

    Hin nay c rt nhiu ngn ng lp trnh bc cao nh C, Pascal, BASIC,.. mi ngnngu c im mnh ring ca n v ph h p cho mt s lnh vc no , C cngkhng ngoi l, C c ph bin bi n c cc c im sau:

    C l ngn ng mnh v mm do. C th ni rng s hn ch ca C ch ph thucvo ngi lp trnh, tc l vi C bn c th lm tt c nhng iu theo tng ca bn. C

    c dng cho nhng d n t nh ti ln nh: Hiu hnh, ho, Chng trnhdch,...

    C d chuyn i sang h h thng khc (tnh kh chuyn), tc l mt chng trnhC c vit trn h thng ny c th d dng dch li chy c trn h thng khc

    C l ngn ng c ng, s lng t kho khng nhiu.

    C l ngn ng lp trnh cu trc. M lnh ca chng trnh C c vit thnh cchm, cc hm ny c th s dng li trong cc ng dng khc.

    Vi cc c im trn C l ngn ng tt cho vic hc l p trnh, hn na sau nychng ta cn c th tip cn vi lp trnh hng i tng, v mt trong nhng ngn ng

    lp trnh chng ta la chn u tin cho lp trnh hng i tng l C++, nhng kinthc v C vn c ch cho bn v C++ l ngn ngc pht trin t C v b sung c tnhhng i tng.

    I.1. Bng chci, tn v tkho

    Bng chci: Mi ngn ng lp trnh u c xy dng t mt b k t no v cc quy tc trn xy dng cc t, cc cu lnh v cu trc chng trnh. Ngnng l p trnh C s dng b k t ASCII (American Standard Code for InformationsInterchange). Theo chun ny, b k t gm c 256 k t l:

  • 8/6/2019 Giao Trinh Ngon Ngu C

    5/95

    Gio trnh tin hc c s II - Ngn ngC

    5

    - Cc ch ci: A,..,Z, a,..,z- Cc ch s: 0,..,9- Cc du php ton s hc: +,-,*,/,...- Cc du ngoc: (, ), [, ],...- Cc k t khc

    Mi k t c tng ng 1 s duy nht gi l m, trong c 128 k tu (c m t 0 ti127) l k t cnh v 128 k t cn li (c m t 128 ti 255) l cc k t mrng, tcl n c th thay i tu theo ngn ng mi quc gia s dng.

    Tkho v tn: Tn l mt xu (dy) cc k t, trong ngn ng lp trnh ni chungu yu cu tn phi tun theo nhng rng buc nht nh.

    Vi C tn l xu k t ch c th gm- cc ch ci- ch s- du gch ni

    Tn phi bt u bng ch ci hoc du gch di, di khng qu 32 k t, khng ctrng vi t kho ca ngn ng. V v C phn bit ch hoa v ch thng nn cc tn chhoa nh XY v xy l khc nhau.

    Mi ngn ngu c ring mt t p cc t vi ngha c bit l cc t kho,chng c dng vi mc ch nh trc nh tn kiu d liu, tn ton t,..

    Sau y l mt s t kho ca C

    asm enum signed

    auto extern sizeof break float staticcase for structchar goto switchconst if typedefcontinue int uniondefault long unsigneddo register voiddouble return volatileelse short while

    I.2.Cc bc lp trnh gii bi ton

    gii mt bi d mc no th bc u tin chng ta cng phi pht biu bi ton,tc l chng ta phi hiu bi ton yu cu g th mi c th tm c thut gii, v ci tthut ton v sau khi c chng trnh bn phi chy kim nghim tnh ng nca n.

    Nh vy gii bi ton bng chng trnh chng ta theo cc bc sau:

    1. Xc nh i tng ca chng trnh

  • 8/6/2019 Giao Trinh Ngon Ngu C

    6/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    7/95

    Gio trnh tin hc c s II - Ngn ngC

    7

    Hnh 1 Cc bc pht trin chng trnh

    Hin nay c rt nhiu chng trnh dch cho C v hu ht (trn nn DOS hoc Windows)trong c tch hp c trnh son tho, bin dch, lin kt - gi l mi trng tch hp.Trong gio trnh ny chng ta sdng BC (Borland C) hoc turbo C lm mi trng lptrnh.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    8/95

    Gio trnh tin hc c s II - Ngn ngC

    8

    II. Bin, hng v cc kiu dliu trong C

    II.1.Bin

    Khi nim

    Bin l i lng c gi tr thuc mt kiu d liu no m c chp nhn bingn ng (xem phn cc kiu dliu), gi tr ca bin c th thay i trong thi gian tnti ca bin (hay ta ni trong vng i ca bin).

    Cc thnh phn ca chng trnh sc lu trong b nhtrong v bin cng khngngoi l. Tc l bin cng c cp pht mt vng nh lu gi gi tr thuc mt kiud liu xc nh. V th theo mt kha cnh no c th ni bin l mt ci tn i din

    cho nhtrong my tnh, chng trnh c th truy xut nh(ly hoc ghi gi tr) thngqua tn bin.

    Mt bin ni chung phi c cc c trng sau:

    - Tn bin

    - Kiu d liu: kiu ca bin

    - Gi tr hin ti n ang lu gi (gi tr ca bin)

    ( tuy nhin sau ny chng ta thy trong C c bin kiu void, ban u coi y l binkhng kiu nhng dn quan nim cng l 1 tn kiu v l kiu khng xc nh)

    Tn binTrong C cng nh cc ngn ng lp trnh khc cc bin u phi c tn, cc tn bin

    hay ni chung l tn (gm tn bin, tn hng, tn hm, hoc t kho) l mt xu k t vphi tun theo cc quy nh ca ngn ng l:

    Tn ch c th cha k t l ch ci (a ,..,z; A,..,Z); ch s( 0,..,9) v kt gch di (_), s k t khng qu 32.

    K tu tin ca tn phi l ch ci hoc k t gch di

    Trong tn phn bit ch hoa v ch thng. Tc l hai xu cng cc k t nhngkhc nhau bi loi ch hoa hoc ch thng l hai tn khc nhau, v d nh vi 2 xu kt AB v Ab l hai tn hon ton phn bit nhau.

    Cc t kho ca ngn ng khng c dng lm tn bin, tn hng, hay tn hm.Hay ni khc i, trong chng trnh c th bn phi dng n tn, tn ny do bn t theo tng ca bn nhng khng c trng vi cc t kho.

    V d cc tn hp l v khng hp l

    Tn bin hp l / khng hp l

    Percent hp l

  • 8/6/2019 Giao Trinh Ngon Ngu C

    9/95

    Gio trnh tin hc c s II - Ngn ngC

    9

    y2x5__fg7h hp l

    ho_ten hp l

    _1990_tax hp l

    A hp l

    ngay-sinh khng hp l v c k t -(du tr)

    double khng hp l v trng vi t kho

    9winter khng hp l v k tu tin l s

    Cu lnh nh ngha bin

    Trong ngn ng lp trnh c cu trc ni chung v trong C ni ring, mi bin u

    phi c nh ngha trc khi s dng. Cu lnh nh ngha bin bo cho chng trnhdch bit cc thng tin tn, kiu d liu v c th c gi tr khi u ca bin.

    C php khai bo bin :

    [ = ] [, [ = ,..];

    trong:

    l tn mt kiu d liu tn ti, c th l tn kiu d liuchun hoc kiu d liu nh ngha bi ngi lp trnh.

    , l cc tn bin cn khai bo, cc tn ny phi tun theo quy

    tc v tn ca ngn ng. , l cc gi tr khi u cho cc bin tng ng ,

    . Cc thnh phn ny l tu chn, nu c th gi tr ny phi ph hp vi kiuca bin.

    Trn mt dng lnh nh ngha c th khai bo nhiu bin cng kiu, vi tn l, ,.. cc bin cch nhau bi du phy (,) dng khai bo kt thc bngdu chm phy (;).

    V d:

    int a = 4, b = 6;

    float x =4.5,y,z;

    unsigned u ;

    char c =A;

    Khi gp cc lnh nh ngha bin, chng trnh dch s cp pht vng nhc kchthc ph hp vi kiu d liu ca bin, nu c thnh phn khi u th s gn gi trkhi u vo vng nh.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    10/95

    Gio trnh tin hc c s II - Ngn ngC

    10

    II.2. Hng

    Khi nim

    Hng l i lng c gi tr thuc mt kiu d liu nht nh, nhng gi tr ca hngkhng th thay i trong thi gian tn ti ca n.

    C hai loi hng mt l cc hng khng c tn (chng ta s gi l hng thng) lcc gi tr c th tc thi nh : 8, hay 9.5 hoc d.

    Loi th hai l cc hng c tn ( gi l hng k hiu). Cc hng k hiu cng phinh ngha trc khi s dng, tn ca hng c t theo quy tc ca tn. Sau y nukhng c iu g c bit th chng ta gi chung l hng

    nh ngha hng

    Cc hng c nh ngha bng t kho const vi c php nh sau:const = ;

    hoc const = ;

    Trong dng th hai, chng trnh dch tng n nh kiu ca hng l kiu ngmnh, vi BC hay TC l int v nh vy chng trnh dch s tng chuyn kiu ca v kiu int.

    V d:

    const int a = 5; // nh ngha hng a kiu nguyn, c gi tr l 5

    const float x = 4; // hng x kiu thc, c gi tr l 4.0const d = 7; // hng d kiu int, gi tr l 7

    const c = 1; // hng c kiu int gi tr = 49

    const char * s = Ngon ngu C;// s l hng con tr, tr ti xu Ngo ngu C

    Cc hng s trong C c ngm hiu l h 10, nhng bn c th vit cc hng trongh 16 hoc 8 bng c php, gi tr s h 16 c bt u bng 0x, v d nh 0x24, 0xA1cc s h 8 bt u bi s 0, v d 025, 057.

    Cc hng k tc vit trong cp du v d a, 2 cc gi tr ny c C hiu l

    s nguyn c gi tr bng m ca k t; a c gi tr l 97, B c gi tr bng 66.Cc xu k t l dy cc k tc vit trong cp , v d Ngon ngu C, a (xu k

    tsc gii thiu trong phn sau)

    Ch : Cc bin, hng c thc nh ngha ngoi mi hm, trong hm hoc trongmt khi lnh. Vi C chun th khi nh ngha bin, hng trong mt khi th dngnhngha phi cc dngu tin ca khi, tc l trc tt c cc lnh khc ca khi,nhng trong C++ bn c tht dngnh ngha bt k v tr no.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    11/95

    Gio trnh tin hc c s II - Ngn ngC

    11

    II.3. Cc kiu dliu chun n gin trong C

    Mt trong mc ch ca cc chng trnh l x l, bin i thng tin, cc thng tin

    cn x l phi c biu din theo mt cu trc xc nh no ta gi l cc kiu d liu.Cc kiu d liu ny c quy nh bi ngn ng lp trnh, hay ni khc i mi ngn ngc tp cc kiu d liu khc nhau. Khng hon ton ging nh khi nim kiu d liutrong ton hc, trong cc ngn ng l p trnh ni chung mi kiu d liu ch biu dinc mt min gi xc nh no . Chng hn nh s nguyn chng ta hiu l cc snguyn t - ti +, nhng trong ngn ng lp trnh min cc gi tr ny b gii hn, sgii hn ny ph thuc vo kch thc ca vng nhbiu din s. V vy khi ni timt kiu d liu chng ta phi cp ti 3 thng tin c trng ca n l:

    - tn kiu d liu- kch thc vng nhbiu din n,min gi tr

    - cc php ton c th s dng.Cc kiu d liu n gin trong C ch l cc kiu s, thuc hai nhm chnh l s

    nguyn v s thc (s du phy ng).

    Nhm cc kiu nguyn gm c: char, unsigned char, int, unsigned int, short, unsignedshort, long, unsigned long c m t trong bng sau:

    Kiu dliutn kiu (t

    kho tn kiu)kch

    thcmin gi tr

    k t c du char 1 byte t -128 ti 127

    k t khng du unsigned char 1 byte t 0 ti 255s nguyn c du int 2 byte t -32768 ti 32767s nguyn khng du unsigned int 2 byte t 0 ti 65535s nguyn ngn c du short 2 byte t -32768 ti 32767s nguyn ngn c du unsigned short 2 byte t 0 ti 65535s nguyn di c du long 4 byte t -2,147,483,648 ti 2,147,438,647s nguyn di khng du unsigned long 4 byte t 0 ti 4,294,967,295

    Khun dng snguyn: mc d nh trn chng ta c kiu s nguyn v k t (char)nhng bn cht trong C chng u l cc s nguyn m thi. H thng biu din cc snguyn di dng dy cc bit (s nh phn). Nh chng ta bit, mt bit ch c th biudin c 2 gi tr l 0 v 1.

    Ta thy vi mt nhm c 2 bit (2 s nh phn) th c th lu c gi tr nh nht khic 2 bit u bng 0 v ln nht khi c 2 bit bng 1 c ngha l n c th biu din ccc s 0,1,2,3 tc 22 gi tr khc nhau. Vi s nguyn 1 byte (unsigned char) th gi tr nc th lu tr l 0,1,..,255.

    Tng qut nu kiu d liu c kch thc n bit th c th biu din 2n gi tr khcnhau l: 0,1,..(2n1).

  • 8/6/2019 Giao Trinh Ngon Ngu C

    12/95

    Gio trnh tin hc c s II - Ngn ngC

    12

    Nhng l trong trng hp tt c cc bit dng biu din gi tr s(cc con s),

    tc l ta c s nguyn khng du (sdng unsigned). Nhng s nguyn chng ta cnc th l s m (sc du signed), trong trng hp ny bit cao nht c dng biudin du, nh vy ch cn n-1 bit biu din gi tr. Nu s m (c du) th bit du cgi tr =1, ngc li, nu s c gi tr dng th bit du c gi tr =0.

    V d vi kiu char (signed char) mt byte th c 7 bit biu din cc con s, vy nc th biu din cc s dng 0,1,..,127 v (theo cch biu din s m xem phn hmv biu din s m) n biu din c cc s m 1,..-128. Min gi tr ca cc kiu snguyn khc c din gii tng t.

    Cc bn c tht cu hi ti sao c kiu int li vn c kiu short hay c s khcnhau gia int v short hay khng?. Thc ra s khc nhau gia chng ph thuc vo h

    thng m bn dng. Trn mi trng 32 bit th int c kch thc l 4 byte, short c kchthc 2 byte, cn trn mi trng 16 bit th chng ging nhau.

    Thc ra squy nh kch thc ca cc kiu nguyn chl: kiu char kch thc l 1 byte kiu short kch thc l 2 byte kiu long kch thc l 4 byte kch thc kiu short

  • 8/6/2019 Giao Trinh Ngon Ngu C

    13/95

    Gio trnh tin hc c s II - Ngn ngC

    13

    khun dng khc m min gi tr ca s thc so vi s nguyn c cng kch thc cngkhc.

    Kiu dliu tn kiukch

    thc(tr tuyt i)min gi tr

    s thc vi chnh xc n float 4 byte 3.4e-38 -> 3.4e38s thc vi chnh xc kp double 8 byte 1.7e-308 -> 1.7e308s thc di vi chnh xc kp long double 10 byte 3.4e-4832 -> 1.1e 4932

    Trong bng trn min gii tr chng ta ni ti gi tr dng ln nht m s thc c thbiu din (gi tr m nh nht ly i) v gi tr dng nh nht cn phn bit c vi 0.

    V d vi kiu float, gi tr dng ln nht l 3.4e38 =3.4*1038 v s dng nh nhtc th biu din l 3.4e-38 = 3.4*10-38.

    Tuy nhin, do s ch s trong phn nh tr l gii hn nn s ch sng tin cy(hay ta ni l s ch s c ngha) cng gii hn vi kiu float l 7-8 ch s, double l 15ch s, v long double l 18-19 ch s.

    Kiu con tr v a ch

    Ngoi hai kiu d liu s m chng ta va cp trong C cn kiu d liu rt hay sdng l kiu con tr. Chng ta bit l cc thnh phn: bin, hng, hm,.. c lutrong b nh, tc l chng c nh v ti mt vng nhc c xc nh. Mt thnh

    phn (bin, hng) c th lu gi tr l a ch ca mt thnh phn khc c gi l con tr.

    Gi s p l mt con tr lu a ch ca a th ta ni p tr ti a v kiu ca con tr p lkiu ca thnh phn m p tr ti.

    Khai bo con tr

    * ; // khai bo bin con tr

    V d:

    int * p,*q; // p, q l 2 con tr kiu int

    Kiu void :Ngoi cc kiu d liu trong C cn c nhng thnh phn (con tr) khng xc

    nh kiu, hoc hm khng cn tr v gi tr trong trng hp ny chng ta c con tr,hm kiu void. Hay ni cc khc void l mt kiu nhng l kiu khng xc nh.

    II.4. Biu thc v cc php ton

    Biu thc

  • 8/6/2019 Giao Trinh Ngon Ngu C

    14/95

    Gio trnh tin hc c s II - Ngn ngC

    14

    Biu thc l s kt hp gia cc ton hng v ton t theo mt cch ph hp dint mt cng thc ton hc no . Cc ton hng c th l hng, bin, hay li gi hmhay mt biu thc con. Cc ton t thuc vo tp cc ton t m ngn ng h tr.

    Biu thc c pht biu nh sau:

    Cc hng, bin, li gi hm l biu thc Nu A, B l biu thc v l mt php ton hai ngi ph hp gia A v B

    th AB l biu thc. Ch nhng thnh phn xy dng t hai kh nng trn l biu thc.

    Mt biu thc phi c thc lng c v tr v gi tr thuc mt kiu d liu cth. Gi tr c gi l gi tr ca biu thc v kiu ca gi tr tr vc gi l kiuca biu thc, v d mt biu thc sau khi c lng tr li mt s nguyn th chng ta

    ni biu thc c kiu nguyn (ni ngn gn l biu thc nguyn).V d : p = (a+b+c)/2;s = sqrt((p-a)*(p-b)*p-c));trong a, b, c l 3 bin s thc.

    Biu thc logic trong C: theo nh trn chng ta ni th biu thc logic l biu thc mtr v kt qu kiu logic. Nhng trong ngn ng lp trnh C khng c kiu d liu ny(nh boolean trong Pascal). Trong C s dng cc s din t cc gi tr logic (nghay sai). Mt gi tr khc 0 nu c dng trong ng cnh l gi tr logic sc coi lng v nu gi tr bng 0 c xem l sai. Ngc li mt gi tr sai(chng hn nhgi tr ca biu thc so snh sai (5==3)) s tr li s nguyn c gi tr 0, v gi tr ca biu

    thc (v d nh 5 < 8) ng s tr li mt s nguyn c gi tr 1. Sau ny chng ta cnthy khng phi ch c cc sc dng din t gi tr ng hay sai m mt contr c gi tr khc NULL (rng) cng c coi l ng, v gi tr NULL c xem lsai.

    Cc ton t(php ton) ca ngn ngC

    a. Php gnC php

    = Trong v tri l tn mt bin v v phi l mt biu thc c kiu ph hp vi kiu

    ca bin. Vi php gn h thng sc lng gi tr ca v phi sau gn gi tr vobin bn tri.

    V d:

    int a, b;

    a = 5;

    b = a +15;

  • 8/6/2019 Giao Trinh Ngon Ngu C

    15/95

    Gio trnh tin hc c s II - Ngn ngC

    15

    S ph hp kiu gia v bn phi v bn tri c hiu l hoc hai v cng kiu hockiu ca biu thc bn phi c thc chuyn tng (p kiu) v kiu ca bin bntri theo quy tc chuyn kiu tng ca ngn ng C l t thp ti cao:

    char int long double.

    Tuy nhin trong thc t s p kiu ph thuc vo chng trnh dch, mt s chngtrnh dch cho php t chuyn cc kiu s bn phi v kiu ca v tri bng m khng cn

    phi tun theo quy tc trn, bng cch ct b phn khng ph hp. V d bn c th gnbn phi l s thc (float) vo v tri l mt bin nguyn (int), trng hp ny chngtrnh dch s ct b phn thp phn v cc byte cao, nhng kt qu c th khng nh bnmong mun.

    Vi C chng ta c th thc hin gn mt gi tr cho nhiu bin theo c php:

    = = ,..=vi lnh trn s ln lt gn cho cc bin t phi qua tri.

    b. Cc php ton shc php ton c php ngha

    + + php cng gia v l s thchoc nguyn

    - - php tr gia v l s thchoc nguyn

    * * php nhn gia v l s thchoc nguyn

    / / php chia ly phn nguyn gia vl s nguyn.

    v d 9/2 kt qu l 4

    / / php chia gia v l s thc

    v d 9.0/2.0 kt qu l 4.5

    % % php chia ly phn d gia vl s nguyn

    v d 15 % 4 = 3; 12%3 =0

    Trong cc php ton s hc ni trn, khi hai ton hng cng kiu th kt qu l s c kiuchung . Nu hai ton hng khng cng kiu (tr %) th ton hng c kiu nh hn sc tng chuyn v kiu ca ton hng cn li, y cng l kiu ca kt qu.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    16/95

    Gio trnh tin hc c s II - Ngn ngC

    16

    c. Cc php ton so snh (quan h)phpton

    c php ngha

    = = th_1 == th_2so snh bng, kt qu ng nu 2 tonhng bng nhau, ngc li tr li sai.

    != th_1> != th_2so snh khc nhau, kt qu ng nu 2

    ton hng khc nhau, ngc li tr li sai.

    > th_1 > th_2so snh ln hn, kt qu ng nu tonhng th nht ln hn, ngc li tr lisai.

    >= th_1 >= th_2so snh ln hn hoc bng, kt qu ngnu ton hng th nht ln hn hay bngton hng th 2, ngc li tr li sai.

    < th_1 < th_2 so snh nh hn, ngc ca >=

    2 tr li gi tr = 15

  • 8/6/2019 Giao Trinh Ngon Ngu C

    17/95

    Gio trnh tin hc c s II - Ngn ngC

    17

    vi l biu thc s nguyn hoc thc, nu c gi tr khc 0th kt qu s =0 v ngc li, nu ==0 th kt qu s = 1.

    Php ton && (php hi - and):C php:

    &&

    trong 2 ton hng l cc biu thc s, kt qu ca php ton ny ch ng (!=0)khi v ch khi c 2 ton hng u c gi tr ng (!=0).

    &&

    0 0 0

    0 khc 0 0

    khc 0 0 0

    khc 0 khc 0 1

    Php ton || (php tuyn - or):

    C php:

    ||

    trong 2 ton hng l cc biu thc s, kt qu ca php ton ny ch sai (0) khi v

    ch khi c 2 ton hng u c gi tr sai (=0).

    ||

    0 0 0

    0 khc 0 1

    khc 0 0 1

    khc 0 khc 0 1

    e. Cc php ton thao tc trn bitTrong ngn ng C c nhm cc ton t m thao tc ca n thc hin trn tng bit ca

    cc ton hng v chng c gi l cc ton t trn bit, cc ton hng ca chng phi ckiu s nguyn.

    Php & (php and theo bit - php hi)

    C php: &

  • 8/6/2019 Giao Trinh Ngon Ngu C

    18/95

    Gio trnh tin hc c s II - Ngn ngC

    18

    Chc nng ca ton t & l thc hin php and trn tng cp bit tng ng ca 2 tonhng v tr v kt qu. Tc l php ton tr v 1 s nguyn (cng kch thc vi 2 tonhng), bit th nht ca kt qu c gi tr bng bit th nht ca hi vi bitth nht ca ,...

    Bng gi tr chn l ca &

    V d int a,b, c;

    1. nu a=7; b = 14; c = a & b;

    th c = 6;

    2. nu a= 2; b = 15; c = a & b;

    th c = 0;

    3. nu a=-2; b = 45; c = a & b;

    th c = 44;4. nu a=-2; b = -3; c = a & b;

    th c = -4;

    (nu kt qu cc v d trn gy thc mc ti sao li nhvy th bn c c th thamkho: cch biu din sm, php AND trong phn hp ng)

    Php | (php or theo bit)

    C php

    | Kt qu ca tr v 1 s nguyn (cng kch thc vi 2 ton hng), cc bit ca gi tr

    tr v c tnh bng kt qu ca php tuyn (or) gia hai bit tng ng ca vi .

  • 8/6/2019 Giao Trinh Ngon Ngu C

    19/95

    Gio trnh tin hc c s II - Ngn ngC

    19

    Bng gi tr chn l php tuyn |

    V d int a,b, c;

    1. nu a=7; b = 14; c = a | b;

    th kt qu c = 15;

    2. nu a= 2; b = 15; c = a | b =15;

    Php ~ (php o bit)

    y l ton t mt ngi thc hin o cc bit ca ton hng, cc bt gi tr 1 trthnh 0v bt gi tr 0 thnh 1.

    C php ~

    V d: 1. unsigned char c =3, d;

    d = ~c; kt qu d = 252;2. unsigned int c =3, d;

    d = ~c; kt qu d = 65532;

    Php ^ (php XOR - tuyn loi tr)

    Php tuyn loi tr trn hai bit l php ton xc nh nu hai bit (ton hng) khc nhauth kt qu theo php tuyn, nu hai bit c cng gi tr th kt qu l 0(loi tr).

    C php

    ^

    Bng gi tr chn l php tuyn loi tr ^

    V d: 1. unsigned char c = 3, d=10;

    kt qu c ^ d = 2;

  • 8/6/2019 Giao Trinh Ngon Ngu C

    20/95

    Gio trnh tin hc c s II - Ngn ngC

    20

    2. unsigned int c =10, d=10;

    kt qu c^d =0;

    Php ton_hng_2

    Lnh ny thc hin tng t nh SHL nhng dch cc bit ca sang phi, ccbit bn tri sc in bng 0, cc bit bn phi s b ghi bi bit bn tri.

    Minh ho ton t >>

    Khi dch sn sang phi k bit, kt qu thu c(n/2k)

    e. Cc php ton tch lu(gn shc)Trong cc biu thc ton s hc chng ta rt hay gp cc biu thc dng nh a = a +k,

    tc l chng ta tng a ln mt lng bng k, hoc nh a = a

  • 8/6/2019 Giao Trinh Ngon Ngu C

    21/95

    Gio trnh tin hc c s II - Ngn ngC

    21

    sang tri k v tr ri li gn vo a. Trong C c cc php ton thc hin chc nng ny v tagi l cc php ton tch lu.

    C php chung:

    = ;

    Trong l mt bin thuc kiu s nguyn hoc thc, l mt gi tr phhp. l du php ton s hc hay trn bit (hai ngi): +,-,*,/,%, ,&,|,^Vi ngha

    = =

    ton t v d v cch dng ngha

    += a += b a = a + b-= a -= b a = a - b*= a *= b a = a * b/= a /= b a = a / b%= a %= b a = a % b> b&= a &= b a = a & b|= a |= b a = a | b

    ^= a ^= b a = a ^ b

    Lu : hai k t v du = phi vit lin v trthnh 1 du ton t ca ngn ng C.

    Bng cch dng ton t tch lu, trong mt s trng hp chng ta c th gim s phctp (v cch vit) ca mt biu thc rt nhiu v nh vy s gim kh nng vit sai mtcch ng k.

    V d: a[f(i)+b[j*2]-srtlen(s)] = a[f(i)+b[j*2]-strlen(s)] +6;c vit thnh a[f(i)+b[j*2]-strlen(s)] += 6;

    f. Ton tiu kin

    C php:

    ?:Trong , v l cc biu thc, nu c gi tr ng th kt qu ca

    biu thc l ngc li nu c gi tr sai th biu thc tr li .V d: (a>b?a:b) ngha ca biu thc trn l nu a >b th kt qu l a ngc li l b, tc l tr li gi trln nht ca a v b.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    22/95

    Gio trnh tin hc c s II - Ngn ngC

    22

    g. Php tng v gim 1

    Vi biu thc dng a = a + 1 hoc a = a - 1 th trong C c dng khc vit ngn gnhn bng cch dng ton t ++ hoc --. Mi ton t ny li c hai dng khc nhau lton t vit trc ton hng (gi l ton t trc) v dng ton t vit sau ton hng (gil ton t sau - nh vy c 4 ton t).

    C php:

    ++++ --

    --

    V d: int a=5,b,c=2;

    b= a++;

    c = ++ a +b;

    ngha ca ++ l tng ton hng (l bin) ln 1 n v v -- l gim ton hng 1. Skhc nhau gia ton t trc v ton t sau c minh ho bng v d sau:

    a = 4; b = 2;

    c= b + a++ ; th sau khi thc hin ta c c = 6 v a = 5hay x = b++; th b = 3 v x=2;nhng nua = 4; b = 2;c= ++a +b ; th sau khi thc hin ta c c = 7 v a = 5v x = ++b th x=3, b=3.

    Nh vy bn thy s khc nhau gia x= b++ ;(1) v x=++b (2); l trong (1) gi tr cab c gn cho x trc khi n c tng 1, cn trong (2) th tng gi tr ca b ln 1 sau mi gn b cho x.

    Tc l c th hiu: x = b++ ; { x = b; b = b+1;}

    cn x = ++b ; { b = b+1; x = b; }Tng t cho ton t --;x = b-- ; { x = b; b = b - 1;}

    cn x = --b ; { b = b -1; x = b; }Vy :

    Trong biu thc n dng a++, ++a, b--, --b th ngha ca ton t trc vsau l nh nhau (cng l tng hay gim 1)

    Trong biu thc ni chung m c a++ (a--) hay ++b (--b) th gi tr ca ac s dng trong biu thc trc khi a c tng (gim) 1, v gi tr ca bc s dng sau khi b c tng (gim) 1.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    23/95

    Gio trnh tin hc c s II - Ngn ngC

    23

    Lu : Bn c th dng kt hp nhiu ln ton t ++, -- vi mt bin. V ++,-- ccng u tin v c kt hp t phi sang tri do vy cc php ton dng ++++a, ----al c php trong khi a++++, a---- l khng c php.

    h. Ton t& - ly a ch

    Cc bin v hng l cc c lu trong b nhv c cp ti a ch no , ton t& tr li a ch ca mt bin hay hng.

    C php: &

    hoc &

    i. Ton t*( truy xut gi tr qua con tr)

    Phn trn chng ta bit * l php nhn, nhng n cn c ngha l ton t 1 ngi vi

    chc nng ly gi tr ca mt thnh phn thng qua con tr.C php: *

    Nh vy vi mt bin c cp pht ti mt vng nhno trong b nhth chngta c th truy xut gii tr ca n thng qua tn bin hoc qua a ch (con tr) ca n.

    Gi s pa l con tr v pa tr ti bin a (c kiu ph hp) th *pa chnh l gi tr ca a.v cch truy xut theo tn bin a hoc qua con tr *pa l nh nhau.

    V d: int a, b, c;int *p;

    p=&a;

    *p = 5; b = a + 3; c =*p -1;Sau cc lnh trn th a c gi tr l 5, b l 8 v c l 4 (truy xut a theo cch *p gi l

    truy xut gin tip thng qua con tr).

    j. Ton t,Du phy (,) thng c dng trong nh du phn cch gia cc bin, cc hng

    c khai bo trn cng mt dng, hoc gia cc tham s ca hm. Trong mt s trnghp no n c dng nh mt ton t to ra mt biu thc dng A,B (vi A, B lhai biu thc con hp l). Cc biu thc con c tnh t tri qua phi v gi tr ca biuthc con cui (bn phi) chnh l gi tr tr v ca ton biu thc.

    V d: a=5; b=6; c=2;

    x= (a+b, a *2 +c);

    kt qu x = 12

    nhng nu x =a+b,a*2+c; th x =11.

    k.Php chuyn kiu

    Trong C cng nh mt s ngn ng lp trnh khc, trong mt biu thc th cc tonhng phi cng kiu. Tuy nhin trong thc t th khng th cng nhc nh vy, chng hn

  • 8/6/2019 Giao Trinh Ngon Ngu C

    24/95

    Gio trnh tin hc c s II - Ngn ngC

    24

    cng mt s nguyn vi mt s thc r rng l khc kiu nhng bn vn c th thc hinc. Thc ra th trc khi thc hin ton t cng chng trnh dch thc hin thaotc chuyn i kiu ca s nguyn thnh s thc chng ta gi l php chuyn kiu (pkiu). Trong mt s tnh hung vic chuyn kiu trong C c thc chng trnh dchthc hin tng (gi l p kiu tng) hoc c p kiu kiu tng minh (ngi lptrnh vit cu lnh - ton t chuyn kiu).

    Ni chung s chuyn kiu tng xy ra trong bn trng hp sau: Cc ton hng trong mt biu thc khc kiu. Gn mt biu thc vo mt bin khc kiu. Truyn tham s thc s khc kiu vi tham s hnh thc. Gi tr tr v ca hm sau cu lnh return khc vi kiu hm c khai bo.Trong trng hp th nht quy tc chuyn kiu t thp ln cao c p dng, tc l

    ton hng c kiu thp hn sc tng chuyn thnh kiu ca ton hng cao hntheo trt t:

    char int long float double

    Trong ba trng hp cui kiu ca gi tr v phi c chuyn theo kiu ca bin bntri, kiu cc tham s thc sc chuyn theo kiu ca tham s hnh thc, kiu gi trtr v (sau return) phi chuyn thnh kiu ca hm.

    Lu l chchuyn kiu gi tr tc thi ca ton hng ri thc hin php ton chkiu ca bn thn ton hng th khng thay i.

    Trong mt s yu cu chng ta cn s chuyn kiu r rng (p kiu tng minh) chkhng s dng quy tc chuyn kiu ngm nh, trong trng hp ny bn c th s dngton t chuyn kiu theo c php sau:

    (kiu_mi) (biu_thc)

    trong cu trc ny (kiu_mi) l tn mt kiu hp l no , v gi tr ca (biu_thc) trv bt buc phi chuyn thnh (kiu_mi)

    V d 1:

    int a=5, b =2;

    float c;

    c = (float) a /b; th c c gi tr =2.5.

    nhng c= a/b ; th c li c gi tr =2.0

    V d 2:

    float a =7.0;

    int b;

    b = (int)a % 3;

  • 8/6/2019 Giao Trinh Ngon Ngu C

    25/95

    Gio trnh tin hc c s II - Ngn ngC

    25

    Trong C yu cu phi dng cp ngoc () bao tn kiu_mi, cn C++ th vi nhngkiu_mi l tn kiu n gin th khng bt buc phi dng cp (), v d trong C++ bnc thdng php chuyn kiu nh int (a).

    l. u tin cc ton t

    Trong biu thc c th c nhiu ton t, vy iu g gip cho chng trnh dch thchin cc ton t mt cch ng n?. Trong cc biu thc nu c cc cp (), th n squyt nh th t thc hin cc php ton: trong ngoc trc, ngoi ngoc sau. Nhng cnhng kh nng du ngoc khng c hoc khng quyt nh tt c cc trng hpth khi C thc hin cc ton t cn c vo u tin ca chng v s dng mt s quytc v cc ton t (v d nh khi chng cng u tin th thc hin t tri qua phi hayt phi qua tri). V d vi cc php ton s hc +, - c cng u tin, nn nu trong

    biu thc c nhiu php ton +, - v khng c cc du ngoc quy nh th t thc hin thchng sc thc hin t tri qua phi. Nhng vi php ton ++, hay cc php gn,..chng hn nh

    ++++ a; hoc a=b=c=d trnh t kt hp li t phi qua tri.

    Sau y l bng cc ton t v u tin ca chng, cc php ton trn cng dng(th t) c cng u tin, cc ton t trn dng c th t nh hn s c u tin caohn, trong bng ny c mt s ton t khng c m t trong phn cc php ton nh [],(), ., -> chng sc m t trong cc phn thch hp.

    STT Cc php ton trnh tkt hp1. (), [], ->,. tri qua phi2. !, ~, & (a ch), * (truy xut gin tip), - (i du),

    ++, --, (p kiu), sizeof

    phi sang tri

    3. *(php nhn), /, % tri sang phi4. +, - (php tr) tri sang phi5. (dch bit) tri sang phi

    6. = tri sang phi7. ==, != tri sang phi8. & (and trn bit) tri sang phi9. ^ tri sang phi10. | tri sang phi11. && tri sang phi12. || tri sang phi

  • 8/6/2019 Giao Trinh Ngon Ngu C

    26/95

    Gio trnh tin hc c s II - Ngn ngC

    26

    13. ? : tri sang phi14. =, +=, -=, *=, /=, %=, =, &=, \+, ^=, |= phi sang tri

    15. , (du phy) tri sang phi

    ( bngu tin cc ton t)

    III. Chng trnh C

    Trc khi ni n cu trc tng qut ca mt chng trnh ngun C, chng ta hy xemmt v dn gin sau y chng trnh in xu Chao cac ban! ra mn hnh

    1: #include

    2: #include

    3: void main()

    4: {

    5: clrscr();

    6: printf("\n\n Chao cac ban !");

    7: getch();

    8: }

    (trongon m ngun trn chng ta thm cc sdng v du : tin cho vicgii thch, cn trong chng trnh th khngc c chng)

    Trong chng trnh trn gm hai phn chnh l :

    - Cc dng bao hm tp dng 1, 2; ng k s dng cc tp tiu . Trong chngtrnh ny chng ta cn dng hai file tiu stdio.h v conio.h.

    - Hm main t dng 3 ti dng 8. y l hm chnh ca chng trnh , dng 3 l tiu

    hm cho bit tn: main, kiu hm: void, v i ca hm (trong v d ny khngc i). Thn ca hm main bt u ngay sau du { (dng 4), v kt thc ti du }(dng 8).

  • 8/6/2019 Giao Trinh Ngon Ngu C

    27/95

    Gio trnh tin hc c s II - Ngn ngC

    27

    III.1.Cu trc chng trnh

    Mt chng trnh C ni chung c dng nh sau1: [ cc bao hm tp ]

    2: [ cc khai bo nguyn mu hm ca ngi dng ]

    3: [ cc nh ngha kiu ]

    4: [ cc nh ngha macro ]

    5: [ cc nh ngha bin, hng ]

    6: main ( [khai bo tham s ] )

    7: {

    8: < thn hm main>

    9: }

    10: [ cc nh ngha hm ca ngi dng]

    ( trong c php trn chng ta thm s hiu dng v du: cho vic gii thch cthun li, cc thnh phn trong ngoc [] l cc thnh phn tu chn)

    a. Cc bao hm tp (dng 1)

    Trong chng trnh C (trong hm main cng nh cc hm khc do ngi l p trnhvit) c th s dng cc hm, hng, kiu d liu,..(gi chung l cc thnh phn) cnh ngha trong th vin ca C. s dng cc thnh phn ny chng ta phi ch dncho chng trnh dch bit cc thng tin v cc thnh cn s dng, cc thng tin ckhai bo trong tp gi l tp tiu (c phn mrng l H vit tt ca header). V phncc bao hm t p l cc ch dn chng trnh g p cc t p ny vo chng trnh cachng ta. trong mt chng trnh chng ta c th khng dng hoc dng nhiu tp tiu.

    C php ca mt dng bao hm tp:

    #include

    hoc

    #include tn_tp

    trong tn_tp l tn c th c cng dn ca tp tiu (.H) m chng ta cn sdng, mi lnh bao hm tp trn mt dng.

    V d:

    #include

    #include

  • 8/6/2019 Giao Trinh Ngon Ngu C

    28/95

    Gio trnh tin hc c s II - Ngn ngC

    28

    #include phanso.h

    S khc nhau gia c p v bao quanh tn tp l vi cp chng trnh dch tm

    tn t p tiu trong th mc ngm nh xc nh bi ng dn trong mcOption/Directories, cn vi cp chng trnh dch tm tp trong th mc hin ti, nukhng c mi tm trong th mc cc tp tiu ngm nh nh trng hp .

    b. Cc khai bo nguyn mu v nh ngha hm ca ngi dngTrong phn ny chng ti nu mt sthng tin vkhai bo nguyn mu v nh ngha

    hm gii thch cu trc chng trnh chkhng c nh trnh by vhm, chi tit vhm sc trnh by trong phn vhm.

    Cc nguyn mu (dng 2)

    Nguyn mu mt hm l dng khai bo cung cp cc thng tin: tn hm, kiu hm, si s v kiu tng i s ca hm.

    C php khai bo nguyn mu

    ([ khai bo i ]);

    V d:int min (int, int);float binhphuong (float y);

    float giatri(int , float);Lu : Phn khai bo i ca nguyn mu, mc ch l xc nh si sv kiu catngi s, do vy bn c thkhng vit tn ca i snhng kiu ca chng th phi cv bn phi lit k y kiu ca tngi.

    Cc nh ngha hm ca ngi dng (dng 10)

    Trong phn ny chng ta nh ngha cc hm ca ngi dng, mt nh ngha hm baogm dng tiu ca hm v thn ca hm, vi c php nh sau:

    ([ khai bo i ]){< thn hm >

    }V d:

    int min(int a, int b) {if(a>=b)

    return b;else return a;

    }

  • 8/6/2019 Giao Trinh Ngon Ngu C

    29/95

    Gio trnh tin hc c s II - Ngn ngC

    29

    Lu :- Tiu hm trongnh ngha hm phi tngng vi nguyn mu hm- Nu trong chng trnh nh ngha hm xut hin trc khi gp li gi hm th cthkhng nht thit phi c dng khai bo nguyn mu hm.

    c. nh ngha kiu mi(dng 4)

    Ngoi nhng kiu chun c cung cp sn ca ngn ng, ngi lp trnh c thnh ngha ra cc kiu mi t nhng kiu c bng cch s dng t kho typedef(typedefine) Vi c php nh sau

    typedef ;

    Trong l tn kiu cn to do ngi lp trnh t theo quy tc v tnca ngn ng, v l phn chng ta nh ngha cc thnh phn cu thnh

    ln kiu mi.V d:

    typedef unsigned char byte;

    typedef long nguyendai;

    Sau nh ngha ny cc tn mi byte c dng vi ngha l tn kiu d liu ntng t nh unsigned char, v nguyendai tng t nh long.

    V d: chng ta c thnh ngha bin a, b kiu byte nh sau

    byte a,b;

    d. nh ngha macro (dng 5)

    Khi nim macro l g? Gi s nh bn c mt ni dung (gi tr) no v bn muns dng n nhiu ln trong chng trnh, nhng bn khng mun vit trc tip n vochng trnh lc bn son tho v mt vi l do no (chng hn nh n s lm chngtrnh kh c, kh hiu, hoc khi thay i s kh,..). Lc ny bn hy gn cho ni dung mt tn v bn s dng tn vit trong chng trnh ngun. Khi bin dchchng trnh, chng trnh dch s tng thay th ni dung ca tn vo ng v trca tn . Thao tc ny gi l php th macro v chng ta gi tn l tn ca macro vni dung ca n c gi l ni dung ca macro.

    Mt macro c nh ngha nh sau:#define tn_macro ni_dung

    Trong tn macro l mt tn hp l, ni dung (gi tr) ca macro c coi thun tu l 1xu cn thay th vo v tr xut hin tn ca macro tng ng, gia tn v ni dung cchnhau 1 hay nhiu khong trng (du cch). Ni dung ca macro bt u t k t khc dutrng u tin sau tn macro cho ti ht dng.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    30/95

    Gio trnh tin hc c s II - Ngn ngC

    30

    V d :

    # define SOCOT 20

    # define max(a,b) (a>?b a:b)Vi hai v d trn, khi gp tn SOCOT chng trnh dch s tng thay th bi 20 vmax(a,b) sc thay th bi (a>b?a:b)

    Ch :

    Php thay thmacro n gin chl thay ni dung macro vo v tr tn ca n do vyskhng c cchkim tra kiu.

    Khi nh ngha cc macro c tham s c thsau khi thay thbiu thc mi thu cc trt ttnh ton khng nhbn mong mun. V d ta c macro tnh bnh phng 1

    snhsau:# define bp(a) a*a

    v bn c cu lnh bp(x+y) sc thay l x+y*x+y v kt qu khng nhta mongi. Trong trng hp ny bn nn sdng du ngoc cho cc tham sca macro

    # define bp(a) ( a)*(a)

    e. nh ngha bin, hng (dng 5)

    Cc bin v hng c nh ngha ti y s trthnh bin v hng ton cc. nghav bin, hng, c php nh ngha c trnh by trong mc bin v hng.

    f. Hm main (dng 6-9)y l thnh phn bt buc duy nht trong mt chng trnh C, thn ca hm main

    bt u t sau du mmc { (dng 7) cho ti du ng mc } (dng 8). Khng ging nhchng trnh ca Pascal lun c phn chng trnh chnh, chng trnh trong C c

    phn thnh cc hm c lp cc hm c c php nh nhau v cng mc, v mt hm mnhim phn thn chnh ca chng trnh, tc l chng trnh s bt u c thc hint dng lnh u tin v kt thc sau lnh cui cng trong thn hm main .

    Trong nh ngha mt hm ni chung u c hai phn l tiu ca hm, dng nybao gm cc thng tin : Tn hm, kiu hm (kiu gi tr hm tr v), cc tham s hnh

    thc (tn tham s v kiu ca chng). Phn th hai l thn ca hm, y l tp cc lnh(hoc khai bo) thc hin cc thao tc theo yu cu v chc nng ca hm . Hm maincng ch l mt trng hp ring ca hm nhng c tn cnh l main, c th c hockhng c cc i s, v c th tr v gi tr cho hiu hnh, kiu ca gi tr ny cxc nh bi (dng 6) chi tit vi, kiu ca hm main sc cp khn trong cc phn sau.

    Thn hm main c bao bi cp {(dng 7), v } (dng 9) c th gm cc lnh, cckhai bo hoc nh ngha bin, hng, kiu, cc thnh phn ny tr thnh cc b tronghm main - vn cc b, ton cc scp ti trong phn phm vi.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    31/95

    Gio trnh tin hc c s II - Ngn ngC

    31

    Lu :

    Cc thnh phn ca chng trnh m chng ta va nu tr hm main l thnh phn

    phi c v duy nht trong mt chng trnh C, cn cc thnh phn khc l tu chn,c th khng c hoc c nhiu.

    Th t cc thnh phn khng bt buc theo trt t nh trn m chng c th xuthin theo trt t tu nhng phi m bo yu cu mi thnh phn phi c khai

    bo hay nh ngha trc khi s dng.

    Cc bin, hng khai bo ngoi mi hm c phm vi s dng l ton cc (tc l cth s dng t sau lnh khai bo cho ti ht file chng trnh). Cc hng, bin khai

    bo trong 1 hm (hoc trong 1 khi) l thnh phn c b (c phm vi s dng tronghm hoc trong khi m thi).

    Cc hm trong C l mt mc (tc l trong hm khng cha nh ngha hm khc).V d: chng trnh nhp bn knh tbn phm, tnh v in din tch hnh trn

    #include

    #include

    #define PI 3.1415

    float r; // Khai bo bin r c kiu float

    void main()

    { printf("\nNhap ban kinh duong tron r =");

    scanf("%f",&r); //nhp s thc t bn phm vo r

    printf("Dien tich = %5.2f", r*r*PI); //tnh v in din tch

    getch();

    }

    III.2.Cu lnh v dng ch thch

    III.2.1. Cu lnhTrong chng trnh c th c nhiu cu lnh, mi cu lnh m nhim mt chc nng

    no . Trong C mt lnh ni chung c th vit trn mt hay nhiu dng (tr xu k t vmacro) v kt thc bi du chm phy (;) v cng c th vit nhiu lnh trn mt dng,gia cc thnh phn ca lnh c th c cc du cch.

    V d:

    a = b +5;

    a = b +

  • 8/6/2019 Giao Trinh Ngon Ngu C

    32/95

    Gio trnh tin hc c s II - Ngn ngC

    32

    5;

    printf("Dien tich = %5.2f", r*r*PI);

    Mt lnh c th vit trn nhiu dng nhng trong 1 xu k t hay nh ngha macro thchng ta phi vit trn 1 dng, trng hp nht thit phi vit trn nhiu dng th bn phithm k t\ vo cui dng trn bo cho chng trnh dch ni ni dung dng di vocui ca dng trn.

    V d

    printf("Dien tich \

    = %5.2f", r*r*PI);

    III.2.2. Lnh v khi lnh

    Cc lnh ca chng trnh C bao gm 2 loi l cu lnh n v khi lnh (cu lnhghp - nhm lnh).

    Cu lnh n l nhng lnh n gin (ch mt pht biu, kt thc bi ;) nh php gn,mt li gi hm,..

    Khi lnh l nhm cc lnh c bao bi cp { v }, bn trong khi lnh l dy cclnh c th l lnh n hoc khi lnh con khc, tc l khi lnh c th lng nhau, ccdu mc { v } phi xut hin tng ng theo cp.

    V d:

    if (a>0){ d = b*b - 4*a*c;

    if(d>=0)

    { x1 = (-b - sqrt(d))/(2*a);

    x2 = (-b + sqrt(d))/(2*a);

    printf( nghiem x1 = %4.2f, x2 = %4.2f,x1,x2);

    }

    else

    printf(phuong trinh khong co nghiem thuc);

    }

    III.2.3. Li ch thch

    Trong chng trnh chng ta c th thm cc li ch thch gii thch cu lnh hocchc nng ca chng trnh ,.. nhm cho chng trnh dc.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    33/95

    Gio trnh tin hc c s II - Ngn ngC

    33

    Cc ch thch c t gia c p /* v */, c th trn mt hoc nhiu dng. Vi ccchng trnh dch ca C++ bn c th s dng // ghi mt ch thch trong chng trnh,vi cch ny ni dung li ch thch bt u sau du // ti ht dng.

    Cc li ch thch ch c tc dng vi ngi c ch khng nh hng ti chngtrnh, tc l chng trnh dch s b qua cc li ch thch.

    V d:

    scanf("%f",&r); /*nhp s thc t bn phm vo r */

    printf("Dien tich = %5.2f", r*r*PI); //tnh v in din tch

    III.3.Nhp v xut dliu

    Trong phn ny chng ta gii thiu c php v ngha mt s hm cbn nhp dliu t thit b vo chun l bn phm v xut d liu ra mn hnh my tnh. s dngcc hm ni chung ca th vin bn phi bao hm cc tp tiu (tp .h) cha khai bonguyn mu ca chng vo chng trnh.

    Mt shm nhp dliu tbn phm

    a. Hm getch, getche nhp 1 k tC php:

    int getch();

    int getche();Chc nng: Hai hm ny thc hin i ngi dng nhp mt k t t bn phm v trv mt s nguyn l m ca k tc bm, v d bn g phm a th hm s tr v 97.

    S khc nhau gia hai hm l hm getche hin k tc nh p ln mn hnh, cngetch th khng.

    Khi phm c bm l phm mrng th h thng sy vo bm nhp liu 2 byte,byte thnht c gi tr 0, byte th2 l m mrng ca phm . V d khi bn bm phmmi tn lnth hai byte c gi tr l 0 72 v hm getch hay getche tr v0, byte c gitr 72 vn cn lu trong bm nhp liu, nu ta gi getch hoc getche snhn c gitr ny.

    b. Hm scanfy l mt trong nhng hm nhp d liu ph bin nht ca C, n cho php nhp

    nhiu loi d liu(c cc kiu khc nhau). Khi nhp d liu bng hm ny bn phi xcnh a ch (vng nh, hay bin) lu d liu v kiu ca d liu cn nhp.

    c php

    int scanf(const char * format, ds_cc_con_tr);

    chc nng

  • 8/6/2019 Giao Trinh Ngon Ngu C

    34/95

    Gio trnh tin hc c s II - Ngn ngC

    34

    Hm scanf cho php chng ta nhp d liu t bn phm theo khun dng c xcnh bi xu k tformat, d liu nhp vo s lu vo cc bin hoc vng nhc a chtng ng l cc con tr trong ds_cc_con_tr( c th c nhiu con tr, mi con tr cchnhau bi du phy).

    V d: nhp gi tr cho 3 bin a c kiu int, x c kiu float, v b c kiu int

    Trong c php trn format l mt xu quy nh quy cch d liu cn nhp, gm nhiuc t d liu tng ng vi cc kiu ca con tr trong phn ds_cc_con_tr, c baonhiu con tr th cn ng by nhiu c t, c t th nht quy nh khun dng d liucho con tr th nht, c t th 2 quy nh khun dng d liu cho con tr th 2,...

    Mi c t bt u bng du % c dng sau (cc thnh phn trong[] l tu chn):

    %[*][n]

    Trong - n l mt s nguyn dng quy nh di ti a (tnh theo s k t) c nhp

    cho thnh phn tng ng

    - l k t quy nh kiu d liu cn nhp v d bn mun nhps nguyn kiu int th k tnh kiu l d, kiu k t l c. Cc k tnh kiu khc

    bn xem bng sau.

    K tnh kiu

    d liu nhp kiu con tr

    cai nh

    p li

    u

    d integer int *argD, ld integer long *arge, E Float float *argf Float float *arg

    g, G Float float *argo Octal int *argO Octal long *argi Decimal,octal, hex int *argI Decimal,octal, hex long *arg

  • 8/6/2019 Giao Trinh Ngon Ngu C

    35/95

    Gio trnh tin hc c s II - Ngn ngC

    35

    u Unsigned int unsigned int *argU Unsigned int unsigned long *arg

    x Hexadecimal int *argX Hexadecimal int *args Character string char arg[]c Character char *arg

    - * y cng l thnh phn tu chn, nu c th tc dng ca n l s b qua mtthnh phn d liu c xc nh bi c t ny, nh vy s khng c i tngng vi c t ny.

    V d:

    scanf(%d%*c%d,&a,&b);

    trong dng ny chng ta s nhp 1 thnh phn (gi l 1 trng) s nguyn vo a,sau b qua mt thnh phn l k t, v tip theo l mt s nguyn vo b.

    Quy cch nhp dliu

    Khi chng ta nhp d liu t bn phm, kt thc nhp bng Enter (), th tt cnhng k t chng ta g trn bn phm u c lu trong vng m nhp d liu (gil dng vo- stdin) - dng vo kt thc bi (), d liu trn dng vo ny sc ctthnh tng trng tun t t tri qua phi v gn vo cc bin (hoc vng nh) xcnh tng ng bi cc con tr, cc phn tch c s b loi khi dng vo.

    Trc khi tch gi tr mt trng th cc khong trng pha trc ca trng nu c

    s b loi b. Nu trong c t khng c thnh phn (n) quy nh di ti a mttrng th cc trng c xc nh bi cc k t du cch, tab, enter (gi chung lkhong trng k hiu l ) hoc khi gp k t khng ph hp vi c t hin ti.

    Nu trn dng vo c nhiu hn cc thnh phn yu cu ca hm nhp th cc thnhphn cha c nhn vn cn lu trn dng vo.

    V d:

    int a,b; float x;

    scanf(%d%%d%f,&a,&b, &x);

    vi dng vo l:143 535 34

    th :

    - khong trng u tin b loi b, 143 l trng th nht c gn vo a,

    - hai khong trng b loi b, 535 l trng th hai c gn vo b,

    - mt khong trng b loi b, 34 c gn vo x ( cn li trong dng vo)

  • 8/6/2019 Giao Trinh Ngon Ngu C

    36/95

    Gio trnh tin hc c s II - Ngn ngC

    36

    Nu trong c t c thnh phn xc nh rng ti a (n) th mt trng s ktthc hoc khi gp khong trng, hay k t khng ph hp hoc di n

    V dint a,b; float x;

    scanf(%d%2d%3f,&a,&b, &x);

    vi dng vo l:

    143 537 34 th :

    - khong trng u tin b loi b, 143 l trng th nht c gn vo a,

    - hai khong tr

    ng b

    loi b

    , 53 l tr

    ng th

    hai

    c gn vo b,

    - mt khong trng b loi b, 7 c gn vo x (cn li 34 trong dngvo)

    Lu :

    - Scc c t phi tngng vi scon tr trong danh sch con tr

    - K tnh kiu trongc t phi ph hp vi kiu ca con tr cn nhp liu.

    - Dliu nhp tbn phm phi ph hp vi cc c t.

    - Hm scanf tr vsnguyn l strngc nhp dliu

    c. Hm getsC php:

    char * gets(char * s);

    Chc nng ca hm gets l nhp mt xu k t t bn phm, khc vi hm scanf vic t %s kt thc ni xu khi gp du cch hoc enter, tc l xu khng th c ducch, hm gets ch kt thc khi gp enter (k t \n). Xu k tc ghi vo s (vi s lmng cc k t hoc con tr k t), du kt thc xu (\0 - k t c m 0 ) c tngthm vo cui xu. Hm tr va ch ca xu c nhp.

    Ch : hm gets loi b k tEnter(\n) trn dng vo nhng k tny khngca vo s m tng thm k tkt thc xu (\0) vo cui ca s.

    Mt shm xut dliu ra mn hnh

    a. Hm printfHm prinntf l hm in d liu ra mn hnh rt a dng ca ngn ng C. Cng nh

    hm scanf, hm printf cng yu cu chng ta phi cung cp cc gi tr v nh dng cad liu cn in thng qua cc i ca hm.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    37/95

    Gio trnh tin hc c s II - Ngn ngC

    37

    C php

    int printf (const char * format [, ]);

    Trong : l phn tu chn, nu c th l cc gi tr cnin, cc gi tr (c th l bin, hng, li gi hm, hay biu thc ni chung) cch nhau bidu phy.

    Lu : sgi tr trong c thnhiu hn scc c t, khi cc gi tr cui (khng c c t tngng) sb b qua.

    format l xu k tiu khin, nhim v chnh ca n l iu khin khun dng thngtin c in ra mn hnh.

    V d:

    Trong format gm ba loi: cc k tiu khin, cc c t, cc k t thng

    Cc k tiu khin

    y l cc k tc bit, bt u bng k t \ ti p theo l 1 k t dng iukhin: chuyn con tr mn hnh, v tr in d liu,..

    - \n : chuyn con tr mn hnh xung dng mi- \t : du tab- \b : (backspace) li mt k t (xo k t trc v tr con tr hin ti)

    Cc k tthng

    L nhng k t khng thuc loi iu khin v c t, cc k t ny c in ra mnhnh ng nh n xut hin trong format. Ngoi ra cn c mt vi k tc bit mkhi mun in ra mn hnh chng ta phi t n ngay sau k t \, l:

    - \\ : in chnh du \- \ : in du nhy n()- \\ : in du nhy kp ()

    Cc c t

    Trong format c th c nhiu c t, cc c t quy nh khun dng d liu cn inra, mi c t c dng nh sau :

    %[-][n[.m]]

  • 8/6/2019 Giao Trinh Ngon Ngu C

    38/95

    Gio trnh tin hc c s II - Ngn ngC

    38

    ngha cc thnh phn

    Thnh phn y l k t quy nh kiu ca d liu cn in

    v d bn mun in mt gi tr int th l d, bn mun in mtk t th k tnh kiu l c. Cc kiu khc c cho trong bng sau:

    K tnhkiu

    Kiu ca gi trcn in

    Khun dng in ra

    d int s nguyn h 10i int s nguyn h 10o int s nguyn khng du h 8u unsigned int s nguyn khng du h 10

    x,X int,unsigned s nguyn khng du h 16f float s thc (dng du phy tnh)

    e, E float s thc (du phy tnh hoc k php khoa hc)c char k ts char * xu k t

    p con tr in gi tr con tr dng Segment:Offset hoc Offset tum hnh b nhc s dng

    Lu : C thdng kt hp ld, lu, lx,.. nh kiu dliu in ra l snguyn di(long), snguyn di khng du (unsigned long),..

    Thnh phn [n[.m]] : n, m l cc s nguyn dng, n quy nh rng ca thngtin (tnh theo s k t) c in ra mn hnh, m s ch s cho phn thp phn (chdng cho s thc), nu c m th s thc c lm trn vi m ch s thp phn.

    Nu rng thc s ca gi tr cn in < rng c dnh cho n (n) th ccdu trng c thm vo (bn tri hay bn phi tu vo s c mt ca thnh

    phn [-] hay khng ).

    Lu : c ththay sn bng k t *, khi thng tin sc in ra theo ngrng thc sca n.

    v d printf(%5.1f,1.37); s in ra 1.4 v chim 5 v tr trn mn hnh, bn tri

    ca s c in 2 du cch. Thnh phn [-]: Xc nh kiu cn bn tri hay bn phi. Khi mt gi trc in

    ra trn mn hnh, nu rng thc s ca n nh hn rng xc nh bi thnhphn n, ngm nh chng c cn bn phi (trong vng n k t trn mn hnh),nu c du - th d liu c cn tri.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    39/95

    Gio trnh tin hc c s II - Ngn ngC

    39

    V d:

    Gi tr tr v ca hm printf l tng di thng tin c in (tnh theo k t).

    V d 1: chng trnh nhp 1 k t t bn phm, in k t v m ca n ra mn hnh

    #include #include void main(){

    int c;printf("\nHay nhap mot ky tu : ");c = getch();printf("\nban vua nhap ky tu %c, co ma la %d ",c,c);printf("\nbam phim bat ky de ket thuc");getch();

    }

    khi thc hin chng trnh trn chng ta sc:

    Hay nhap mot ky tu : A bn nhpmy in ra ban vua nhap ky tu A , co ma la 65

    bam phim bat ky de ket thuc

    nh vy cng l gi tr c (m ca k t chng ta g t bn phm), nhng vi c t khcnhau s cho chng ta khun dng khc nhau (trong v d vi c t %d in ra 65, nhngvi %c li in ra k tA).

    V d 2: chng trnh nh p 2 s nguyn a, b tbn phm (b !=0), in tng, hiu, tch,thng phn nguyn a/b

    #include #include void main() { int a,b,c;printf("\nnhap a, b :");scanf("%d%d",&a,&b);printf("\na+b= %5d \na-b= %5d", a+b, a-b);printf("\na*b= %5d \na/b= %5d", a*b, a/b);getch();}

    kt qu chy chng trnh l

  • 8/6/2019 Giao Trinh Ngon Ngu C

    40/95

    Gio trnh tin hc c s II - Ngn ngC

    40

    nhap a, b : 5 2 a+b= 7a-b= 3a*b= 10a/b= 2

    b. Hm putch

    C php:

    int putch(int ch);

    Chc nng: Hm ny in k t c m l ch ra mn hnh ti v tr hin ti ca con tr,chuyn con tr sang phi 1 k t, hm tr v s nguyn chnh l m k t in ra.

    V d: minh ho putch1: #include 2: #include 3: void main(){4: int c;5: c = 97;6: printf("\nprint c = %d", c);7: printf("\nputch c = "); putch(c);8: c = 354;9: printf("\nprint c = %d" , c);0: printf("\nputch c = "); putch(c);

    1: getch();2: }

    khi thc hin chng trnh trn cc bn s thu c kt qu nh sau:

    print c = 97s putch c = ac = 354print c = 354

    putch c = b

    Cc bn bit l mt k tchc kch thc 1 byte, nhng trong hm putch li c i l int(2 byte), trong trng hp gi tr ca ch >255 th k tc in ra l k tc m ( ch %256), v y cng l gi tr m putch tr v. Cng ging nhvi printf mt sk tcbitc coi l k tiu khin chkhng phi k tin ra mn hnh.

    c. Hm puts

    C php:

    int puts(char * s);

  • 8/6/2019 Giao Trinh Ngon Ngu C

    41/95

    Gio trnh tin hc c s II - Ngn ngC

    41

    Chc nng: Hm ny in xu k t s ra mn hnh ti v tr hin ti ca con tr, sau tng chuyn con tr sang dng mi. Trong trng h p in thnh cng hm tr v snguyn dng, ngc li tr v -1(EOF).

    IV - Cc cu trc iu khin chng trnh

    Mt chng trnh l tp nhiu cu lnh, thng thng mt cch trc quan chng ta hiuchng trnh thc hin tun t cc lnh t trn xung di, bt u t lnh th nht tronghm main v kt thc sau lnh cui cng ca n. Nhng thc t chng trnh c th phctp hn s tun t nhiu, chng hn nh mt cu lnh (hay khi lnh) chc thc hinkhi c mt iu kin no ng, cn ngc li n s b b qua, tc l xut hin kh

    nng la chn mt nhnh no . Hay mt chc nng no c th phi lp li nhiu ln.Nh vy vi mt ngn ng lp trnh c cu trc ni chung phi c cc cu trc iukhin trnh t thc hin cc lnh trong chng trnh (gi ngn gn l cc cu trc hoccc ton tiu khin)

    Sau y chng ta s tm hiu tng cu trc iu khin chng trnh ca C.

    IV.1. Cu trc tun t

    y l cu trc n gin nht ca cc ngn ng lp trnh ni chung, iu khin thchin tun t cc lnh trong chng trnh (bt u t cc lnh trong thn hm main) theoth t t trn xung di (nu khng c iu khin no khc).

    V d 1.1: Chng trnh nhp nm sinh ca mt ngi t bn phm, sau in ra licho v tui ca ngi .

    #include

    #include

    void main()

    { int namsinh;

    printf("Nhap nam sinh cua ban : ");

    scanf("%d", &namsinh);

    printf("\n\nChao ban! nam nay ban %4d tuoi",2002-namsinh);

    getch();

    }

    V d 1.2: Vit chng trnh nhp ba s thc a,b,c t bn phm l so 3 cnh tamgic, sau tnh v in chu vi v din tch ca tam gic.

    Gii

    Dliu vo : a,b,c kiu float l 3 cnh mt tam gic

  • 8/6/2019 Giao Trinh Ngon Ngu C

    42/95

    Gio trnh tin hc c s II - Ngn ngC

    42

    Tnh ton : chu vi p = (a+b+c),

    din tch s = sqrt(q*(q-a)*(q-b)*(q-c))

    vi q = p/2, sqrt l hm tnh cn bc 2Chng ta c chng trnh nhsau:

    #include

    #include

    #include

    void main()

    { float a,b,c, p,q,s;

    printf("Nhap so do 3 canh cua tam giac ");

    printf("\na = "); scanf("%f", &a);printf("\nb = "); scanf("%f", &b);

    printf("\nc = "); scanf("%f", &c);

    p = a+b+c; q = p/2;

    s = sqrt(q*(q-a)*(q-b)*(q-c));

    printf("\n\nChu vi la %5.1f, dien tich la %5.2f ",p,s);getch();}

    v d v kt qu thc hin chng trnh

    Nhap so do 3 canh cua tam giac

    a = 3

    b = 4

    c = 5

    Chu vi la 12.0, dien tich la 6.00

    Lu :

    Trong chng trnh v d trn chng ta sdng hm tnh cn bc 2 sqrt, hm

    ny c khai bo trong tp tiu math.h Chng trnh trn cha xl trng hp a,b,c khng hp l (ba sa,b,c c th

    khng tho mn l 3 cnh mt tam gic)

    IV.2. Cu trc r nhnh

    Chng ta hy xem li chng trnh trong v d 2 trn, iu g xy ra nu d liukhng tho mn, tc l khi bn nhp 3 s a,b,c t bn phm nhng chng khng tho mnl so 3 cnh mt tam gic trong khi chng trnh ca chng ta vn c tnh v in dintch.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    43/95

    Gio trnh tin hc c s II - Ngn ngC

    43

    R rng l c hai kh nng:

    Nu a,b,c tho mn l 3 cnh tam gic th tnh chu vi, din tch v in kt qu

    Ngc li phi thng bo d liu khng ph hp

    Nh vy cn phi c mt s la mt trong hai nhnh tu vo iu kin a,b,c c l bacnh mt tam gic hay khng. iu ny gi l r nhnh, v C cung cp cho chng ta mtcu trc iu khin r nhnh if.

    C php

    dng

    if (bt_E)S1;

    else

    S2;

    hoc dng khuyt

    if (bt_E)

    S1;

    Trong c php trn S1, S2 ch l 1 lnh, l biu thc iu kin ca ifShot ng ca cu trc if:

    Trc ht biu thc iu kin c tnh, c hai kh nng:

    Nu gi tr ca l ng (!=0) th S1 c thc hin v ra khi cu trc if.

    Ngc li nu l sai th

    - vi dng y : thc hin S2 ri kt thc if

    - vi dng khuyt : kt thc cu trc if

  • 8/6/2019 Giao Trinh Ngon Ngu C

    44/95

    Gio trnh tin hc c s II - Ngn ngC

    44

    V d 2.1: chng trnh nhp hai s nguyn a, b t bn phm, in s ln nht ra mn hnh.#include #include void main() {int a,b;

    printf(\nNhap so thu nhat : );scanf(%d, &a);

    printf(\nNhap so thu hai : );scanf(%d, &b);if (a>b)

    printf(\nSo lon nhat la %d, a);else

    printf(\nSo lon nhat la %d, b);getch();}

    V d 2.2: Vit chng trnh theo v d 1.2 vi yu cu nu a,b,c tha mn l 3 cnh mttam gic th tnh v in chu vi, din tch, nu khng tho mn th in thng bo ra mn hnh.

    Gii: Chng ta bit 3 sa, b, c l 3 cnh mt tam gic nu n tho mn tnh cht tng haicnh ln hn cnh thba. Theo cch tnh tv d 1.2 chng ta c chng trnh:

    #include #include

    #include

    void main()

    { float a,b,c, p,q,s;

    printf("Nhap so do 3 canh cua tam giac ");

    printf("\na = "); scanf("%f", &a);

    printf("\nb = "); scanf("%f", &b);

    printf("\nc = "); scanf("%f", &c);

    if(a+b>c)&&(a+c>b)&&(b+c>a)

    {

    p = a+b+c; q = p/2;

    s = sqrt(q*(q-a)*(q-b)*(q-c));

    printf(" \n\nChu vi la %5.1f,\

    dien tich la %5.2f ",p,s);

    }

    else

    printf(\nBa so da cho la ba canh tam giac);getch();}

  • 8/6/2019 Giao Trinh Ngon Ngu C

    45/95

    Gio trnh tin hc c s II - Ngn ngC

    45

    Lu : Cu trc ifcng nhcc cu trc khc ca ngn ngC, chng c thlng nhau,

    tc l chng c thcha cc cu trc iu khin khc.V d 2.3: Chng trnh gii phng trnh bc 2: ax2+ bx + c = 0, vi cc h s a, b, c lcc s thc nhp t bn phm.

    Gii: tm nghim ca phng trnh bc 2 mt n ta thc hin theo cc bc sau:

    Nhp a,b,c t bn phm

    Tnh delta = b2 + 4*a*c

    Nu delta = 0 (phng trnh c nghim kp x)

    tnh nghim x = -b/(2*a).

    Ngc li

    Nu delta > 0 (phng trnh c 2 nghim x1,x2 )

    x1 = (-b - sqrt(delta))/(2*a)

    x1 = (-b + sqrt(delta))/(2*a)

    Ngc li (delta < 0)

    phng trnh khng c thc

    Chng trnh gii phng trnh bc 2

    #include

    #include

    #include

    void main(){

    float a,b,c, delta, x1,x2;

    printf("\nNhap cac he so a,b,c : ");

    scanf("%f%f%f",&a,&b,&c);

    delta = b*b-4*a*c;if(delta==0)

    printf("\nPhuong trinh co nghiem kep \

    x = %5.2f", -b/(2*a));

    else

    if(delta > 0)

    { x1 =(-b-sqrt(delta))/(2*a);

    x2 =(-b+sqrt(delta))/(2*a);

    printf("\nPhuong trinh cos 2 nghiem phan biet\

    \n x1= %5.2f \n x2= %5.2f",x1,x2);

  • 8/6/2019 Giao Trinh Ngon Ngu C

    46/95

    Gio trnh tin hc c s II - Ngn ngC

    46

    }

    else

    printf("\nPhuong trinh khong co nghiem thuc");}

    IV.3. Cu trc switch

    Cu trc switch cho php la chn mt nhnh trong nhiu kh nng tu voiu kin xy ra. C php nh sau

    switch (){case :

    S1 ;case :

    S2 ;. . .

    case :Sn ;

    [ default : S ; ]}

    Trong l biu thc nguyn.

    , ,.., l cc biu thc hng, nguyn v chng phi khc nhau.

    S1,S2, .., Sn , S l mt hoc nhiu lnh c gi l thn ca cu trc switch.

    case, default l cc t kho

    Shotng ca switch u tin c tnh, sau ln lt so snh gi tr ca vi cc

    biu thc hng , ,...

    Nu gi tr ca mt biu thc hng th k trong cc biu thc ny trng vi gi trca th chng trnh s thc hin cc lnh bt u t Sk v tip tc cclnh pha di cho ti khi:

    - gp cu lnh : break (tt nhin nu gp cc cu lnh return, exit thcng kt thc)

    - gp du ng mc } ht cu trc switch

    Nu khng trng vi gi tr no trong cc biu thc hng th cu lnh S(cc lnh sau mnh default nu c) sc thc hin, ri ra khi cu trcswitch.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    47/95

    Gio trnh tin hc c s II - Ngn ngC

    47

    V d 3.1: Chng trnh nhp mt biu thc n gin dng ab (a, b l cc s nguyn, l mt trong cc du php ton s hc +, -, *, x, /, :,) tnh v in kt qu.

    Gii : y chng ta gi s c th dng php nhn l du * hoc ch x, php chia c thl du : hay /. Gi thit ngi dng nhp biu thc ng dng ab.

    Chng ta c chng trnh nhsau:

    1: #include 2: #include 3: void main()4: {5: int a,b;6: char tt; // du ton t

    7: printf("\nnhap bieu thuc don gian :");8: scanf("%d%c%d",&a,&tt,&b);9: switch(tt)10: {11: case '+': printf("\n %d %c %d = %d ",a,tt,b, a+b);12: break;13: case '-': printf("\n %d %c %d = %d ",a,tt,b, a-b);14: break;15: case 'x':16: case '*': printf("\n %d %c %d = %d ",a,tt,b, a*b);17: break;

    18: case ':':19: case '/': if(b!=0)20: printf("\n %d %c %d = %d ",a,tt,b, a/b);21: else22: printf("loi chia cho 0");23: break;24: default: printf("\n\nkhong hieu phep toan %c",tt);25: }26: getch();27: }

    Trong chng trnh v d ny nu bn nhp biu thc v d nh 9+2 tc l ta c a=9, b=2,tt (du ton t) = +.Nh vy mnh case + (dng 11) ng, chng trnh thc hin cu lnh

    printf("\n %d %c %d = %d ",a,tt,b, a+b);

    break;

    v chng trnh in ra kt qu

    9 + 2 = 11

    v thot khi cu trc switch (nhy ti dng 26)

  • 8/6/2019 Giao Trinh Ngon Ngu C

    48/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    49/95

    Gio trnh tin hc c s II - Ngn ngC

    49

    ngc li (a !=b) th ti bc 2b2:

    -nu a > b th ta tnh a = a- b

    - ngc li ta tnh b =b a- quay li bc 1

    Nh vy chng ta c th pht biu nh sauChng no (a !=b) th lp li

    nu a >b th a = a-bngc li b = b -a

    kt thc vng lp ny th a=b v l c chung ln nht ca x v y.

    ch xt trng hp x, y l s nguyn >0. Trong trng hp nu mt trong hai s bng

    0 th c s chung ln nht l tr tuyt i ca s cn li, nu c 2 s bng 0 th khngxc nh c c s chung ln nht.

    chng ta c chng trnh sau

    #include #include #include

    void main() {int a,b,x,y;

    printf("nhap 2 so x, y : ");scanf("%d%d", &x,&y);a = abs(x); // a bng tr tuyt i ca xb = abs(y); // b bng tr tuyt i ca yif(a+b==0)

    printf("ca hai so bang 0");elseif(a*b==0)

    printf("uoc so chung lon nhat la %d ", a+b);else

    {while(a!=b)

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

    printf("uoc so chung lon nhat la %d", a);}

    getch();}

  • 8/6/2019 Giao Trinh Ngon Ngu C

    50/95

    Gio trnh tin hc c s II - Ngn ngC

    50

    V d 4.2: Vit chng trnh cho php ngi s dng nhp mt k t trn bn phm, in kt v m ca n ra mn hnh, kt thc chng trnh khi ngi dng bm phm ESC (m27)

    Gii: chng ta c thm t cc bc ca chng trnh nhsau

    1: nhn 1 k t t bn phm, m lu trong bin ch

    ch= getch();

    2 : nu ch ==ESC th kt thc, ngc li chuyn sang bc 3

    3 : in k t v m ca n

    printf(\nKy tu %c co ma %d, ch,ch)

    4: quay li 1

    Vy c chng trnh

    // In ki tu

    #include

    #include

    #include

    const int ESC =27; // ma phim ESC

    void main(){

    int ch;

    while((ch=getch())!=ESC)

    printf("\nKi tu %c co ma %d",ch,ch);

    }

    Nhn xt:

    while l cu trc iu khin lp vi iu kin trc, tc l iu kin lp ckim tra trc khi vo thn ca vng lp, do vy nu biu thc iu kin c gitr sai ngay tu th thn ca while c thkhngc thc hin ln no.

    trong thn ca while phi c lnh lm thay i gi tr ca biu thc iu kin.Hoc nu biu thc iu kin lun c gi tr ng - chng ta gi vng lp khngkt thc, th trong thn ca while phi c lnh chm dt vng lp (xem lnhbreak).

    v d

    while (1) // biu thc iu kin lun ng

    { printf(\n Hay bam mot phim: );

    ch = getch();

  • 8/6/2019 Giao Trinh Ngon Ngu C

    51/95

    Gio trnh tin hc c s II - Ngn ngC

    51

    if(ch==27) break;

    printf(ky tu %c co ma la %d,ch,ch);

    }V d 4.3: Vit chng trnh nhp s nguyn n t bn phm, n 0, tnh v in gitr n! (giai tha ca n), vi n! = 1*2*,..,*(n-1)*nGii:

    Theo yu cu n nhp t bn phm phi tho mn n > 0 v n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    52/95

    Gio trnh tin hc c s II - Ngn ngC

    52

    Gii: Bn thy l tnh S th phi tnh c cc s hng l 1/(k!) vi k 1,2,..,n sau cng vo tng. Nh vy chng ta c th thc hin nh sau:

    1: S=1; k=2;2: nu k > n th thc hin 4:ngc li th thc hin 3:3: thc hin cc thao tc

    3.1: tnh d = k!3.2: tnh pt = 1/d3.3: S = S + pt3.4: k = k+13.5: lp li 2:

    4: in kt qu l S v kt thcNhng nh vy vi mi s hng (pt) ca tng chng ta phi tnh giai tha mt ln,

    trong khi chng ta thy rng s hng (pt) th k l 1/(k1!) = 1/(((k-1)!)*k) tc l bnggi tr ca pt th k-1 nhn vi 1/k. V vy ta c th sa i li cch tnh nh sau:

    1: S=1; pt=1; k = 22: nu k > n th thc hin 4:ngc li th thc hin 3:3: thc hin cc thao tc

    3.1: tnh pt = pt * 1/k3.2: S = S + pt3.3: k = k+13.4: lp li 2:

    4: in kt qu l S v kt thcChng trnh l

    #include #include const int Max =10; // gioi hanvoid main(){int n, k ; float S, pt;printf("\nNhap n = ");

    scanf("%d",&n);while((nMax)) {

    printf("\nNhap lai n (0

  • 8/6/2019 Giao Trinh Ngon Ngu C

    53/95

    Gio trnh tin hc c s II - Ngn ngC

    53

    S=pt=1; k=2;while(k

  • 8/6/2019 Giao Trinh Ngon Ngu C

    54/95

    Gio trnh tin hc c s II - Ngn ngC

    54

    V d 5.1: Vit chng trnh cho php ngi s dng nhp mt k t trn bn phm, in kt v m ca n ra mn hnh, kt thc chng trnh khi ngi dng bm phm ESC (m27)

    Gii: tng tnhv d 4.2 nhngy chng ta sdng cu trc do, vy c chngtrnh

    // In ki tu

    #include

    #include

    #include

    const int ESC =27; // ma phim ESC

    void main(){int ch;

    do{

    printf(\n Hay nhap mot ki tu : )

    ch = getch()

    printf("\nKi tu %c co ma %d",ch,ch);

    }while(ch!=ESC)

    }

    V d 5.2: Chng trnh tnh tng sin(x ) theo cng thc khai trin Taylor:

    Cc bn bit rng sin(x) c tnh theo tng chui v hn an du nh sau:

    S = x - x3/3! + x5/5! - x7/7! +...

    Nhng r rng chng trnh khng th tnh v hn c, chng ta ch c th tnh vimt gii hn no . C hai cch gii hn mt l theo s cc s hng trong tng tc lch tnh tng vi n s hng u tin ca chui, cch ny c u im l s bc lp xcnh, nhng khng c lng c sai s. Cch th hai chng ta hn ch s bc theo

    chnh xc ca kt qu. Chng ta c th pht biu li bi ton l: Tnh sin(x) theo cngthc khai trin trn vi chnh xc (epsilon) cho trc. C ngha l kt qu tnh c(S) c sai s so vi gi tr thc ca n khng qu , hay fabs(S-sin(x))

  • 8/6/2019 Giao Trinh Ngon Ngu C

    55/95

    Gio trnh tin hc c s II - Ngn ngC

    55

    pk = (-1)2kx 2k +1 /(2k+1)!

    v pk+1 = (-1)2k+1x 2(k+1) +1 /(2(k+1)+1)!

    = -pk* x2 /(2k*(2k+1))

    Chng ta c s khi thut gii nhsau:

    s khi tnh S sin(x)

  • 8/6/2019 Giao Trinh Ngon Ngu C

    56/95

    Gio trnh tin hc c s II - Ngn ngC

    56

    cc bn c chng trnh tnh sin( x)

    #include #include void main(){

    float x, eps;float s, sh;int k;printf("\nNhap gia tri (radian) x = ");scanf("%f",&x);printf("\nNhap sai so duoc phep eps = ");scanf("%f",&eps);s=x;sh=x; k=1;

    do {sh =-sh*x*x/(2*k*(2*k+1));s+=sh;k++;

    } while(fabs(sh)>eps);printf("s= %f ",s);

    }

    V d 5.3: Vit chng trnh nhp mt s nguyn dng n t bn phm, kim tra v thngbo s c l s nguyn t hay khng.

    Yu cu- Chng trnh ch kim tra s n >2- Sau khi kim tra xong mt s, chng trnh hi ngi dng c mun kim tra

    tip hay khng, nu tr li c(C) th chng trnh vn tip tc cho nhp v kimtra s tip, ngc li s kt thc chng trnh.

    Gii : kim tra s n c l s nguyn t hay khng chng ta cn kim tra cc s t 2 ti

    xem c s no l c ca n hay khng, nu khng th thng bo n l s nguyn t,ngc li thng bo n l hp s.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    57/95

    Gio trnh tin hc c s II - Ngn ngC

    57

    #include #include

    #include #include void main(){

    int k, n, tl;do{

    printf("\nNhap gia tri can kiem tra = ");scanf("%d",&n);if(n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    58/95

    Gio trnh tin hc c s II - Ngn ngC

    58

    C php

    for([bt_1]; [bt_2]; [bt_3])S;

    Trong S l mt lnh (n hoc khi) c gi l thn ca vng lp, bt_1, bt_2,bt_3 l cc biu thc hp l, vi ngha l:

    bt_1: biu thc khi u

    bt_2: biu thc iu kin - iu kin lp

    bt_3: bc nhy - thng dng vi ngha l thay i bc nhy

    C 3 biu thc ny u l tu chn, chng c th vng mt trong cu lnh c th nhngcc du chm phy vn phi c.

    Hotng ca for

    Hot ng ca for theo cc bc sau:

    b1: Thc hin biu thc khi u - bt_1

    b2: Tnh gi trbt_2 xc nh iu kin lp.

    Nu bt_2 c gi tr sai (==0) th ra khi vng lp

    Ngc li, nu bt_2 c gi tr ng ( khc 0) th chuyn ti bc 3

    b3: Thc hin lnh S ( thn ca for), chuyn ti b4

    b4: Thc hin bt_3, ri quay v b2.

    s cu trc for

  • 8/6/2019 Giao Trinh Ngon Ngu C

    59/95

    Gio trnh tin hc c s II - Ngn ngC

    59

    Nh trong c php cc bn thy cc biu thc (bt_1, bt_2, bt_3) ca for c th vng,hn na mi thnh phn (biu thc) li c th l mt hoc nhiu biu thc(n) phncch nhau bi du phy (,) v d nh:

    Nu , vng mt th n thun l cc lnh rng (khng thc hing), nu chng c nhiu biu thc n cch nhau bi du phy th cc biu thc n c thc hin tun t t tri qua phi - thc ra vn c thcoi y chl mt biu thc,trong c cc ton tdu phy (, ) v trt ttnh ton theo u tin ca cc ton ttrong biu thc.

    Tng t nh bt_1, bt_3; biu thc iu kin trong trng hp n ch gm mt biuthc n th gi tr ca n quyt nh vng lp c cn c tip tc hay khng, nhng nun c nhiu biu thc n v d nh:

    for(i=0, j= i +2; i

  • 8/6/2019 Giao Trinh Ngon Ngu C

    60/95

    Gio trnh tin hc c s II - Ngn ngC

    60

    1: #include 2: void main(void)3: {4: int i;5: for(i=32; i max th max = ai ngc li, nu ai < min th min =ai i =i+1

    4. lp li bc 3

    Khi kt thc chng ta c gi tr ln nht l max, gi tr nh nht l min.Nhng cho ti by gichng ta cha th lu c n s (trong yu cu ny chng ta cngkhng cn phi lu chng) , v th chng ta thc hin theo phng php sau:

    1: Nhp s th nht t bn phm vo a2: max = min = a ( xem mt su tin l ln nht v cng l nh nht)3: i=24: nu i > n th th kt thc, ngc li th

    Nhp s th i t bn phm vo a nu a> max th max = a

  • 8/6/2019 Giao Trinh Ngon Ngu C

    61/95

    Gio trnh tin hc c s II - Ngn ngC

    61

    ngc li, nu a< min th min =a i =i+1

    5: lp li bc 4

    Cc bn c chng trnh nh sau

    #include #include void main(){

    int n,a,max,min,i;do{

    printf("Nhap so phan tu cua day : ");scanf("%d", &n);

    }while(n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    62/95

    Gio trnh tin hc c s II - Ngn ngC

    62

    y chng ta s dng cch kim tra cc b s gm 3 s nguyn dng (d,n,g) tngng vi s tru ca tng loi vi d,n,g [1,..100], nu tho mn hai phng trnh trn th

    l mt nghim. Vy ta thc hin nh sau:Vi d = 1 ti 20 // ti a chc 20 tru ngth thc hinVi n = 1 ti 33 // ti a chc 23 tru nm

    thc hing = 100 d n ; // stru ginu (g%3==0) v (5*d + 3 * n + g/3 ==100)th in (d,n,g) l mt nghim

    #include

    #include void main(){int d,n,g;clrscr();printf("\nCac nghiem la\n");

    printf("\ntrau_dung trau_nam trau_gia\n");for(d=1; d

  • 8/6/2019 Giao Trinh Ngon Ngu C

    63/95

    Gio trnh tin hc c s II - Ngn ngC

    63

    IV.7. Cu lnh continue v break

    Trong thn ca for cng nh cc cu trc lp khc, c th c cu lnh continue v break,

    vi chc nng l: break: kt thc vng l p (trong cng) cha n. break cho ta kh nng kt thc

    mt vng lp t mt v tr bn trong ca vng lp m khng cn n gi tr cabiu thc iu kin. Nu trong nhiu cu trc lp lng nhau th break ch c tcdng kt thc mt cu trc lp trong cng cha n m thi.

    continue: Tri vi break, continue l cu lnh c chc nng chuyn chu trnh vu bc lp tip theo. C ngha l s b qua cc lnh trong thn ca vng lp kt lnh sau continue cho ti ht thn ca vng lp. Nu c nhiu cu trc lp baonhau th lnh continue cng ch c tc dng vi cu trc lp trong cng cha n.

    Ta c th minh ho break v continue nh sau:

    .....

    while (bt_dk){

    L1;break;L3;

    }L5;

    ....

    minh ho shotng ca break

    .....

    while (bt_dk){

    L1;continue;L3;

    }

    L5;

    ....

    minh ho shotng ca break

  • 8/6/2019 Giao Trinh Ngon Ngu C

    64/95

    Gio trnh tin hc c s II - Ngn ngC

    64

    Ch : Trong for khi gp continue th cc lnh pha sau continue ti ht khi b b qua vchuyn ti thao tc thc hin bt_3 ( bc nhy) sau bt u vng lp mi (kim traiu kin).

    V d 6.4: chng trnh nhp s nguyn dng n t bn phm, tm v in cc c ca n vtng cc c ra mn hnh.

    #include #include void main(){

    int n,i, tonguoc=0;do{

    printf("Nhap so n : ");scanf("%d", &n);}while(n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    65/95

    Gio trnh tin hc c s II - Ngn ngC

    65

    V - Mng v con tr

    V.1. Khi nim Mng

    Mt bin (bin n) ti mt thi im ch c th biu din c mt gi tr. Vy cth lu trc mt dy cc gi tr cng kiu chng hn nh cc thnh phn ca vectortrong khng gian n chiu chng ta cn n bin a1, a2,..,an. rt cng knh v rt bt tin nhtl khi n ln v li khng phi l cnh. Cc ngn ng lp trnh a ra mt khi nimmng gii quyt vn ny.

    Mng l mt tp cc phn t cng kiu d liu, cc phn t cng tn phn bit nhau bich s. Tng phn t ca mng c th s dng nh mt bin n, kiu ca mng chnh lkiu ca cc phn t.

    Cc thng tin vmng: Vi mt mng phi xc nh cc thng tin: tn mng, kiu ccphn t (kiu mng), s phn t trong mng (kch thc mng). V d nh chng ta ni al mng c 20 phn t, kiu nguyn.

    Mng cng nhcc bin n khc trong ngn ngC, trc khi sdng n phi mbo l n c cp pht trong b nhv sn sngsdng

    Schiu ca mng: trong v d chng ta nu trn v vector, chng ta c mt dy n cc

    s, nu nh chng ta dng mt mng lu tr cc s th chng ta cn mng c n phnt v ch cn 1 ch s xc nh cc phn t - y l mng mt chiu. Nu nh chng tacn mt mng biu din mt bng c n dng, m ct, v xc nh mt phn t trongmng chng ta cn 2 ch s: ch s dng v ch s ct, nh vy chng ta c mng 2 chiu.Mt cch tng t chng ta cng c th c mng 3 chiu, 4 chiu,.. hay ni cch ngn gnhn: mng mt chiu l mng c mt ch s, mng 2 chiu c 2 ch s,...Trong gio trnhny chng ta cng ch s dng n mng 2 chiu.

    V.2. Mng 1 chiu

    V.2.1 - nh ngha mng

    C php

    Kiu_mng tn_mng [ s_phn_t];

    Trong:

    - Kiu_mng: y l kiu ca mng, l tn mt kiu d liu tn ti, c th lkiu chun hoc kiu d liu do ngi lp trnh nh ngha .

    - tn_mng : l tn ca mng, do ngi lp trnh t, theo quy tc v tn ca C.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    66/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    67/95

    Gio trnh tin hc c s II - Ngn ngC

    67

    int b[5] ={1,2}; th gi tr ca b[0] l 1, b[1] l 2, b[3]=b[4] l 0.

    vi mng cc k thoc xu k tth c hai cch khi u nhsau

    char c[4] ={a,b,c }; // c[0] l a, c[1] l b, c[2] l c, c[3] l \0char s[10] =ABC; // tng ng vi char s[10] ={A,B,C,\0}

    (nu sgi tr trong b khi u > sphn tmng chng trnh dch sbo li)

    Trong dng thhai, chng ta khng xc nh s phn t ca mng, trong trng hpny chng trnh bin dch s tng xc nh kch thc (s phn t) ca mng theo sgi tr trong b khi u.

    V d:int a[] ={1,3,4};

    th a l mng c 3 phn t, gi tr ca a[0] l 1, a[1] l 3, a[2] l 4.

    V.2.4 - Mt s v d

    V d V.1: Chng trnh nhp mt mng A c n phn t kiu nguyn , n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    68/95

    Gio trnh tin hc c s II - Ngn ngC

    68

    #include #include

    void main(){clrscr();const int max =20;int A[max];int n,i;do{

    printf("\nNhap so phan tu mang = ");scanf("%d",&n);

    }while(nmax); //nhp s pt mng 1

  • 8/6/2019 Giao Trinh Ngon Ngu C

    69/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    70/95

    Gio trnh tin hc c s II - Ngn ngC

    70

    Kho k chng ta c th hiu l mt thnh phn no ca cc phn t nh l tui camt ngi, hay im trung bnh hc tp ca mt sinh vin, hoc l mt tiu ch no pdng cho cc phn t ca mng.

    Trong trng hp n gin nh cc mng s m chng ta s ni trong v d sau y thkho k chnh l gi tr ca cc phn t.

    Hin nay c nhiu thut ton sp xp mt mng: thut ton ni bt, thut ton ich, thut ton chn, thut ton chia i,.. trong gio trnh ny chng ti gii thiu bathut ton sp xp n gin sp mt mng A c n phn t kiu s nguyn.

    a. Sp xp bng phng php ni bt

    tng ca phng php ny l c n phn t (bt nc) u c xu hng ni lntrn mt nc, th phn t no nh hn (nh hn) sc u tin ni ln trn. Tc l

    vi mi cp phn t k nhau nu phn t sau (di) nh hn phn t pha trc th phnt nh hn s ni ln trn, phn t nng hn s chm xung di.

    S thut ton sp xp mng A(n) nh sau:

    (sp xp bng phng php ni bt)

    b. Sp xp bng phng php i chtrc tip

    tng ca phng php ny cng rt n gin l: gi s cc phn tu mng A[0],A[1],.., A[i-1] c sp ng v tr tc l c:

    A[0]

  • 8/6/2019 Giao Trinh Ngon Ngu C

    71/95

    Gio trnh tin hc c s II - Ngn ngC

    71

    Cng vic tip theo l sp cc phn t cn li vo ng v tr ca n. Cc bn thy v trth i l v tr u tin cha c sp, nu c sp th A[i] phi c gi tr nh nht trongcc phn t cn li {A[i],A[i+1],..,A[n-1]}, vy chng ta s duyt cc phn t mngtrong phn cn li A[j] vi j =i+1 ti n-1, nu A[j] < A[i] th chng ta i ch A[i] viA[j]. Nh vy phn t i c xp ng v tr.

    Vy chng ta thc hin lp cng vic trn vi i t 0 ti n-2 chng ta s c mng csp.

    (sp xp bng phng php i chtrc tip)

    c. Sp xp bng phng php chn

    Cc bn c nhn xt l trong phng php i ch trc tip t c phn t vo vtr i c th phi s dng (n-1) php i ch. Trong khi ch c mt phn t st ti .

    Phng php chn cng xut pht t tng nh phng php i ch trc tip nhng

    thay v i ch A[i] vi [j] trong mi bc duyt (theo j) th chng ta xc nh phn tnh nht trong cc phn t A[i+1],..A[n-1] gi s l A[k], sau di chA[k] v A[i].

    Nh vy vi mi v tr i chng trnh ch thc hin i ch mt ln, v ngi ta tnh thigian thc hin trung bnh ca phng php ny t hn thi gian trung bnh ca hai phng

    php trn.

    Cc bn c s khi nh sau

  • 8/6/2019 Giao Trinh Ngon Ngu C

    72/95

    Gio trnh tin hc c s II - Ngn ngC

    72

    (sp xp bng phng php chn)

    V d V.3: chng trnh minh ho sp xp mng bng phng php ni bt

    #include #include void main(){

    const max=10;int n,a[max], i,j,tg;do{

    printf("Nhap so n : ");scanf("%d", &n);

    }while(n

  • 8/6/2019 Giao Trinh Ngon Ngu C

    73/95

    Gio trnh tin hc c s II - Ngn ngC

    73

    Tm kim trn mng

    Gi s cho trc mt mng cc s nguyn A(n), v mt s x. hy kim tra x c thuc

    mng A hay khng?Vi bi ton tm kim trn mng ni chung, chng ta phn hai trng hp:

    Trng hp 1: Mng A khng c trt t (cha c sp) th tm kim mt gitr no th chng ta phi duyt tun t mng t phn tu tin cho ti khi gpgi tr hoc ti phn t cui cng th mi khng nh c gii tr c thucmng hay khng. Nh vy trong trng hp km nht th s ln so snh l n.

    c thminh ho nhsau:

    // Nhp n, A(n), x

    i = 0 ;while((i n-1) printf(%d khong co trong mang,x );

    else printf(%d co trong mang tai vi tri %d, x, i);

    Trng hp 2: Mng A c sp (khng mt tng qut gi s tng dn), trongtrng hp ny chng ta c th p dng phng php tm kim nh phn gims bc phi so snh. tng l ta chia i mng A thnh hai phn, so snh x vi

    phn tgia ca mng A[g] xy ra ba trng hp :

    A[g] = = x th kt lun x thuc vo A v kt thc A[g] > x th chng ta lp li vic tm x trong na cui ca mng

    A[g] < x th chng ta lp li vic tm x trong na u ca mng

    Nh vy sau mt bc so snh chng ta c th gim s phn t cn duyt cn mtna. Nh vy s ln kim tra so snh trung bnh s gim so vi phng php duyttun t.

    c thminh ho nhsau:

    // Nhp n, A(n), x

    // Mng A theo tht tng dn

    l = 0, r =n-1 ; // l, r chsu, cui ca cc phn tcn duyt

    while(l x)

    l = g+1 ; // lp timg trong na cui

  • 8/6/2019 Giao Trinh Ngon Ngu C

    74/95

    Gio trnh tin hc c s II - Ngn ngC

    74

    else

    r = g-1; // tim trong na u.

    }printf(%d khong co trong mang,x );

    //.......

    V d V.4: Chng trnh sinh ngu nhin mt mng c n phn t, sp xp mng theoth t tng bng phng php chn, Nhp x tbn phm kim tra x c trong mng haykhng

    V.3 - Mng 2 chiuV.3.1 - nh ngha mng hai chiu

    Mng hai chiu c th hiu nh bng gm cc dng cc ct, cc phn t thuc cng mtkiu d liu no . Mng hai chiu c nh ngha nh sau.

    C php

    Kiu_mng tn_mng [sd][sc];

    Trong:

    - Kiu_mng: y l kiu ca mng, l tn mt kiu d liu tn ti, c th lkiu chun hoc kiu d liu do ngi lp trnh nh ngha.

    - tn_mng : l tn ca mng, do ngi lp trnh t, theo quy tc v tn ca C.

    - sd, sc : l hng (hoc biu thc hng) nguyn, dng tng ng l s dng vs ct mng, s phn t ca mng s l sd*sc.

    V d:

    int a[2][5]; // a l mng s nguyn c 2 dng, 5 ct (c 10 phn t)

    float D[3][10]; // D l mng s thc c 3 dng, 10 ct (c 30 phn t)

    char DS[5][30]; // DS l mng k t c 5 dng, 30 ctKhi gp mtnh ngha mng, chng trnh dch scp pht mt vng nhlin tip

    c kch thc l sd*sc*sizeof (Kiu_mng) cho mng.

    C thcoi mng 2 chiu n dng, m ct l mng 1 chiu c n phn t, mi phn tli l1 mng mt chiu c m phn t(mng ca mng). V d vi float D[3][10] c thxem Dl mng c 3 phn tD[0], D[1], D[2], mi phn tny l mng c 10 phn t.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    75/95

    Gio trnh tin hc c s II - Ngn ngC

    75

    V.3.2 Truy xut cc phn tmng hai chiu

    Mt phn t ca mng 2 chiu c xc nh qua tn (tn ca mng) v ch s dng,ch s ct ca n trong mng theo c php sau:

    tn_mng [csd][csc]

    Vi csd l s nguyn xc nh ch s dng v csc l s hiu ct cng nh trong mng 1chiu cc ch s c tnh t 0. Tc l 0 csd sd-1 v 0 csc sc-1.Lu : Cc phn t ca mng 2 chiu cng c dng nh cc bin n, tr trng hpkhi nhp gi tr cho cc phn t mng kiu float bng hm scanf th bn nn s dng bin(n) trung gian, sau gn gi tr ca bin vo phn t mng ch khng nn s dngton t & nhp trc tip phn t ca mng.

    V.3.3 Khi u gi tr cc phn t mng hai chiuCc phn t mng hai chiu cng c thc khi u gi tr theo c php (4 dng sau):

    1. Kiu_mng tn_mng [sd][sc] = {{k_dng_1},{ k_dng_2},..,{ k_dng_k}};

    2. Kiu_mng tn_mng [ ][sc] = {{k_dng_1},{ k_dng_2},..,{ k_dng_k}};

    3. Kiu_mng tn_mng [sd][sc] = { gt_1, gt_2,...,gt_n };

    4. Kiu_mng tn_mng [ ][sc] = { gt_1, gt_2,...,gt_n };

    C php trn c th gii thch nh sau:

    dng 1: c k b gi tr sc gn cho k dng u tin ca mng (k sd ), vi midng (c coi nh mng mt chiu) c khi to gi tr nh mng mt chiu:

    dng th nht c khi u bi {k_dng_1}, dng th hai c khi u bi{k_dng_1},.., dng th kc khi u bi {k_dng_k}. Yu cu k sd, ngcli chng trnh s bo li.

    Cc dng cui ca mng nu khng c b khi u tng ng th sc tng gngi tr 0 (hoc NULL nu l con tr).

    dng 2: (khng xc nh s dng) chng trnh dch s tng n nh s dng camng bng s b khi u ( = k), sau thc hin khi u nh dng 1.

    dng 3: n gi tr trong b khi u c gn cho cc phn t mng theo cch: sc gitru tin trong cc gi tr khi u (gt_1,..,gt_sc) c gn tun t cho cc phn tca dng th nht trong mng, sc phn t k tip s gn cho cc phn tdng th2,... nu phn t no ca mng khng c gi tr khi u sc gn 0 (con tr l

    NULL) - vi iu kin n sd*sc, ngc li l li. dng 4: s dng ca mng sc chng trnh t tnh theo s gi tr trong b khi

    u theo cng thc sd = (n/sc) +1, v khi u nh dng 3.

    V d:

  • 8/6/2019 Giao Trinh Ngon Ngu C

    76/95

    Gio trnh tin hc c s II - Ngn ngC

    76

    int a[3][2] = {{1,2},{3},{4,5}}; th cc phn t ca a nh sau:

    a[0][0]=1, a[0][1]=2, a[1][0]=3, a[1][1]= 0, a[2][0]=4,a[2][1]=5;

    int b[ ][2] = {{1,2},{3},{4,5}};th l mng 3 dng, 2 ct cc phn t ca a nh sau:

    b[0][0]=1, b[0][1]=2, b[1][0]=3,b[1][1]= 0, b[2][0]=4,b[2][1]=5;

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

    th s dng ca c l mng 5/2 +1 =3 dng, cc phn t ca a nh sau:

    c[0][0]=1, c[0][1]=2, c[1][0]=3,c[1][1]= 4, b[2][0]=5,b[2][1]=0;

    V.3.3 - Mt s v d v mng hai chiu

    V d V.5: Chng trnh nhp mng A(n,m), 1 n,m 5, cc s nguyn t bn phm, inmng ra mn hnh theo yu cu cc phn t cng mt hng c in trn mt dng camn hnh, cc phn t cch nhau mt du trng.

    #include #include void main(){

    clrscr(); //xa mn hnhconst int max =5; // kch thc ti a

    int A[max][max];int n,m,i,j;do{printf("\nNhap so dong cua mang = ");

    scanf("%d",&n);printf("\nNhap so cot cua mang = ");scanf("%d",&m);

    } while(nmax|| mmax);printf("\nNhap mang co %d dong, %d cot \n",n,m);for(i=0; i

  • 8/6/2019 Giao Trinh Ngon Ngu C

    77/95

    Gio trnh tin hc c s II - Ngn ngC

    77

    V d V.6: Chng trnh nhp 2 ma trn A(n,m), B(n,m), 1 n,m 5, cc s thc t bnphm, tnh in ra mn hnh ma trn C = A+B.

    Gii: Trc khi vit chng trnh chng ta lu n my vn : C = A+B c ngha l cc phn ca C c tnh C[i][j] = A[i][j] + B[i][j]

    ch c th cng hai ma trn A,B cng kch thc v C cng cng kch thc vi A,B

    do cc phn t mng c kiu l float v vy khi nhp ta nn dng bin ph.

    #include #include void main(){

    clrscr();

    const int max =5; //s dng, ct ti afloat A[max][max],B[max][max],C[max][max];int n,m,i,j;float x;do{

    printf("\nNhap so dong cua ma tran = ");scanf("%d",&n);printf("\nNhap so cot cua ma tran = ");scanf("%d",&m);

    } while(nmax|| mmax);printf("\nNhap A co %d dong, %d cot \n",n,m);

    for(i=0; i

  • 8/6/2019 Giao Trinh Ngon Ngu C

    78/95

    Gio trnh tin hc c s II - Ngn ngC

    78

    printf("\nCac phan tu ma tran C la \n");for(i=0; i

  • 8/6/2019 Giao Trinh Ngon Ngu C

    79/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    80/95

    Gio trnh tin hc c s II - Ngn ngC

    80

    Mt con tr lu tra ch ca mt thnh kiu T th ta ni p l con tr kiu T, c bitnu T l mt kiu con tr, hay ni cch khc, p lu tra ch ca mt con tr khc th tani p l con tr tr ti con tr.

    C php khai bo con tr

    * ;

    V d:

    int *p; // p l con tr kiu int

    float * q ; // q l con tr kiu float

    char *s ; // s l con tr kiu char hay xu k t

    int ** r; // r l con tr ti con tr kiu int

    Cng ging nh bin bnh thng khi khai bo mt bin con tr, chng trnh dchcng cp pht vng nhcho bin , lu rnggi tr trong vng nh ang l baonhiu th quan nim l a ch m con tr ny tr ti. V vy cc bn phi ch khidng con tr phi bo m n tr ti ng vng nhcn thit.

    Mt con tr cha lu tra ch ca thnh phn no ta gi l con tr rng v c gi trl NULL (l mt hngnh ngha sn thc ra = 0).

    Khi gp cc lnh khai bo bin trong chng trnh th chng trnh dch s cp phtvng nhph hp v 'gn' tn bin vi vng nh .

    V d:

    int tuoi; float luong;

    Nu chng ta c con trp kiu float, p lu a ch ca luong v luong 65000 nh sau:

    float luong;

    float * p;

    gi sa ch 1000

  • 8/6/2019 Giao Trinh Ngon Ngu C

    81/95

    Gio trnh tin hc c s II - Ngn ngC

    81

    p = &luong;

    *p = 650000

    Khi con tr tr ti mt vng nhv d nhp tr ti luong th khi truy xut *p chnh l

    gi tr ca vng nhdo p tr ti tc l *p luong.Vi con tr tr ti mt con tr khc chng hn nh v d sau:

    int a = 10;

    int *pa;

    int **ppa;

    pa = &a; // p tr ti a

    ppa = &pa; // ppa tr ti pa

    th chng ta c:*ppa pa &a;

    **ppa *pa a;

    Cc php ton trn con tr (a ch )

    a. Php so snh hai con tr

    Trn con tr tn ti cc php so snh (= =, !=, =) hai con tr bng nhau lhai con tr cng tr ti mt i tng (c gi tr bng nhau), ngc li l khc nhau. Contr tr ti vng nhc a ch nh hn l con tr nh hn.

  • 8/6/2019 Giao Trinh Ngon Ngu C

    82/95

    Gio trnh tin hc c s II - Ngn ngC

    82

    b. Php cng con tr vi s nguyn

    Gi s p l con tr kiu T, k l s nguyn th (p + k) cng l con tr kiu T, khng

    mt tng qut gi s p tr ti phn tt th p+1 l con tr tr ti mt phn t kiu T k tip sau t

    p+2 tr ti mt phn t kiu T k tip sau t 2 phn t,...

    p -1 l con tr tr ti mt phn t kiu T k tip trc t

    p -2 tr ti mt phn t kiu T k tip trc t hai phn t,...

    tng qut p+ktr ti phn t cch t mt khong k phn t kiu T (nu k >0 dchv pha a ch ln, k

  • 8/6/2019 Giao Trinh Ngon Ngu C

    83/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    84/95

  • 8/6/2019 Giao Trinh Ngon Ngu C

    85/95

    Gio trnh tin hc c s II - Ngn ngC

    85

    Nh trn chng ta bit, mng c cp pht ti vng nhno v a ch ca vngnh chnh l a ch ca mng. Tn mng l con tr tr ti chnh a ch ca n hayni khc tn mng l con tr lu a ch ca mng, nhng l hng con tr. Chng ta giithch c th hn qua v d sau:

    V d vi khai bo

    int A[3], D[2][5];

    th A, D l cc con tr v: A chnh l a ch ca mng A, hay bng &A[0]; tng t chomng D ta cng c D &D[0].

    V theo nh cch gi ca con tr th ta ni A l con tr tr ti phn tu tin ca mng.Vi mng hai chiu D th cng tng t, D cng l mt con tr tr ti D[0], v D[0] li lmt con tr tr ti D[0][0], c th ni D l con tr tr ti con tr.

    Nh vy A l mng kiu int tc l cc phn t ca n c kiu int, v nh vy A l contr kiu int, hay A c kiu l int *.

    Tng t, D[i] (n chung l cc hng ca mng D) l con tr kiu int,