Giao Trinh Bai Tap Ky Thuat Lap Trinh C

Embed Size (px)

Citation preview

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    1/152

    Li mu

    Gio trnh Bi Tp K Thut Lp Trnh Trang1

    LI MU

    Khi bt u lm quen vi ngn ng lp trnh C th l ngn ng C Sinh Vin thng

    g p kh khn trong vic chuyn vn l thuyt sang ci t c th trn my. Sch

    Gio Trnh Bi Tp K Thut Lp Trnh nhm cung cp cho cc Hc Sinh - Sinh

    Vin Trng C Cng Ngh Thng Tin Tp. H Ch Minh h thng cc bi tp, nhng

    k nng thc hnh cbn v nng cao v ngn nglp trnh C. Cun sch ny c

    xem nh ti liu hng dn tng bc cho Hc Sinh - Sinh Vin ca Trng trong vic

    hc v p dng kin thc l thuyt trn lp mt cch thnh tho v su rng.

    Gio trnh c chia thnh 10 chng theo tng ni dung kin thc, km theo Cc

    thi mu v 1 ph lc hng dn vit chng trnh, chun on li v sa li. Mi

    chng gm 2 phn:

    Phn l thuyt: c tm tt ngn gn vi y v d minh ho km theo.

    Phn bi tp: vi nhiu bi tp c chia lm hai mc cbn v luyn tpnng cao, bi tp c nh du * l bi tp kh dnh cho sinh vin luyn tp thm.

    Phn kt lun: Tm tt ni dung v cc thao tc m sinh vin cn nm hay

    nhng lu ca chng .

    Trong qu trnh bin son, chng ti c gng trch lc nhng kin thc rt cbn,

    nhng li hay gp i vi ngi mi l p trnh. Bn cnh chng ti cng b sung

    thm mt s bi tp nng cao rn luyn thm k nng lp trnh.

    Tuy nhin, chch chnh ca gio trnh ny l phc v cho mt mn hc nn chc chn

    khng th trnh khi nhng thiu st, v th, rt mong nhn c nhng gp qu bu

    ca cc thy c, cc ng nghip v cc bn Hc Sinh Sinh Vin gio trnh ny

    ngy cng hon thin hn.

    Chn thnh cm n.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    2/152

    Lch trnh thc hnh

    Gio trnh Bi Tp K Thut Lp Trnh Trang2

    LCH TRNH THC HNH

    Tng thi gian: 90 tit.

    STT NI DUNG S TIT

    1 Chng 1: Lu thut ton 03

    2 Chng 2: Cu trc iu khin 06

    3 Chng 3: Hm con 12

    4 Chng 4: Mng mt chiu 24

    5 Chng 5: Chui k t 06

    6 Chng 6: Mng hai chiu 12

    7 Chng 7: Kiu d liu c cu trc 12

    8 Chng 8: Tp tin 06

    9 Chng 9: qui 06

    10 Chng 10: Hng dn lp trnh bng phng php Project 03

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    3/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang3

    CHNG 1 LU THUT TON (FLOWCHART)

    Cc k hiu biu din lu thut ton, cch biu din cc cu trc iu khin r

    nhnh, cu trc lp v cc kthut lin quan n lu thut ton.

    I. TM TT L THUYTI.1. Khi nim

    Lu thut ton l cng c dng biu din thut ton, vic m tnhp

    (input), d liu xut (output) v lung x l thng qua cc k hiu hnh hc.

    I.2. Phng php duyt

    Duyt t trn xung.

    Duyt t tri sang phi.

    I.3. Cc k hiu

    STT K HIU DIN GII

    1 Bt u chng trnh

    2 Kt thc chng trnh

    3 Lung x l

    4 iu khin la chn

    5 Nhp

    6 Xut

    7 X l, tnh ton hoc gn

    8 Tr v gi tr (return)

    9im ni lin kt tip theo (S dng khi lu vt qu trang)

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    4/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang4

    I.4. Cc cu trc iu khin cbn

    a. Cu trc tun tTun t thc thi tin trnh. Mi lnh c thc thi theo mt chui t trn

    xung, xong lnh ny ri chuyn xung lnh k tip.

    V d: Nhp vo 3 snguyn a, b, c v xut ra mn hnh vi gi tr ca mi

    stng ln 1.

    a = a + 1

    b = b + 1

    c = c + 1

    a, b, c

    BAT AU

    KET THUC

    a, b, c

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    5/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang5

    b. Cu trc la chnim quyt nh cho php chn mt trong hai trng hp.

    if

    Ch xt trng hp ng.

    Bieu thcieu kien ung

    V d: Nhp vo snguyn n. Kim tra nu n > 0 tng n ln 1 n v.

    Xut kt qu.

    ung

    n

    BAT AU

    KET THUC

    n

    n > 0

    n = n+1

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    6/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang6

    ifelse

    Xt trng hp ng v trng hp sai.

    Bieu thcieu kien ungSai

    V d: Nhp vo snguyn n. Kim tra nu n chn xut ra mn hnh n

    chn, ngc li xut n l.

    c. Cu trc lpThc hin lin tc 1 lnh hay tp lnh vi s ln lp da vo iu kin.

    Lp s kt thc khi iu kin c tha.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    7/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang7

    for / while (Kim tra iu kin trc khi lp)

    ieukien lap ung

    Sai

    V d: Nhp vo snguyn n. Xut ra mn hnh t1 n n.

    ung

    n

    BAT AU

    KET THUC

    i

    i n

    Sai

    i=1

    i = i + 1

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    8/152

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    9/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang9

    BAT AU

    a, b, c

    Vo

    Nghiem

    KET THUC

    a=0

    b 0

    ung

    ung

    Vo So

    Nghiem

    Sai

    Sai

    Nghiemx=-b/a

    V d 2: Tnh tng: nS ++++= L321 , vi n>0

    V d 3: Tnh tng:22

    12...

    6

    5

    4

    3

    2

    1)(

    ++

    ++++=n

    nnS , vi n>0

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    10/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang10

    BAT AU

    n

    i = 0S = 0t = 1

    m = 2

    i 0

    BAT AU

    n

    i = 1S = 0

    dau = 1

    i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    11/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang11

    II. BI TPV lu thut ton sau

    II.1. Bi tp cbn

    1. Nhp vo hai s x, y. Xut ra mn hnh tng, hiu, tch, thng ca hai strn.

    2. Nhp vo s nguyn n, kim tra xem n chn hay l v xut ra mn hnh.

    3. Nhp vo ba cnh a, b, c ca tam gic. Xut ra mn hnh tam gic thuc

    loi tam gic g? (Thng, cn, vung, u hay vung cn).

    4. Nhp vo s nguyn n. Xut ra n mn hnh (Nu n chn th gp i gi tr).

    5. Nhp vo s nguyn n. Nu n>5 th tng n ln 2 n v v tr v gi tr n,

    ngc li tr v gi tr 0.

    6. Tnh n!, vi 0n

    7. Tnh )12(5.3.1)( += nnP K , vi 0n

    8. Tnh )12(531)( +++++= nnS L , vi 0n

    9. Tnh nnS n 1)1(4321)( ++++= L , vi 0>n

    10. Tnh nnS KL 3.2.13.2.12.11)( ++++= , vi 0>n

    11. Tnh 2222 321)( nnS ++++= L , vi 0>n

    12. Tnhn

    nS1

    3

    1

    2

    11)( ++++= L , vi 0>n

    13. (*) Tnhn

    nS++++

    ++++

    ++

    +=L

    L321

    1

    321

    1

    21

    11)( , vi 0>n

    14. Tnh yxyxP =),( .

    15. Tnh )321()321()21(1)( nnS +++++++++++= LL , vi 0>n

    16. Cho s nguyn n. Tnh tr tuyt i ca n.

    17. Cho s nguyn dng n gm k ch s. Tm ch s c gi tr ln nht.

    18. m s lng c s chn ca s nguyn dng n.

    19. In ra ch su tin ca s nguyn dng n gm k ch s.

    20. Cho 2 s nguyn dng a, b. Tm USCLN ca a v b.

    21. Cho 2 s nguyn dng a, b. Tm BSCNN ca a v b.

    22. Cho s nguyn dng x. Kim tra xem x c phi l s nguyn t khng?23. Cho s nguyn dng x. Kim tra x c phi l s chnh phng khng?

    24. Cho s nguyn dng x. Kim tra xem x c phi l s hon thin khng?

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    12/152

    Lu thut ton

    Gio trnh Bi Tp K Thut Lp Trnh Trang12

    II.2. Bi tp luyn tp v nng cao

    25. Tnh nnnS ++++= L32 321)( , vi 0n

    26. Tnh 143

    3

    2

    2

    1)(

    +++++=

    n

    nnS L

    , vi 0>n

    27. Tnh !1

    !3

    1

    !2

    11)(

    nnS ++++= L

    , vi 0>n

    28. Tnh !321

    !3

    321

    !2

    211)(

    n

    nnS

    ++++++

    +++

    ++=

    LL

    , vi 0>n

    29. Gii v bin lun phng trnh: 02 =++ cbxax

    30. Gii v bin lun phng trnh: 024 =++ cbxax

    31. (*) Tnh 1...)2()1()( ++++= nnnnS , vi 0>n

    32. (**) Tnh nnS ++++= ...321)( , vi 0>n

    III. KT LUNLu thut ton rt hu ch trong vic m t cch gii quyt ca mt bi ton.

    Vic m t ny rt trc quan thng qua cc k hiu hnh hc, y l giai on u

    tin trc khi bt tay vo lp trnh trn mt ngn ng lp trnh c th.Khi xy dng lu thut ton, chng ta cn ch mt vi im sau:

    Mt lu phi c im bt u v im kt thc (iu kin kt thc).

    Phi c dliu vo, dliu ra sau khi x l tnh ton.

    Ti mi v tr quyt nh la chn r nhnh phi ghi r iu kin ng hoc

    sai th i theo nhnh no.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    13/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang13

    CHNG 2 CU TRC IU KHIN

    Tm hiu v ci t cc cu trc rnhnh, la chn, lp v cc k hiu php ton trong

    ngn ngC. M t cch hotng v hng dn chy tng bc chng trnh.

    I. TM TT L THUYT

    I.1. Cc k hiu

    STTK

    HIUDIN GII V D

    1 { }Bt u v kt thc hm hay khi

    lnh.

    void main(){

    }

    2 ;Kt thc khai bo bin, mt lnh,mt li gi hm, hay khai bonguyn mu hm.

    int x;void NhapMang(int a[], int &n);

    3 //Ch thch (ghi ch) cho mt dng.Ch c tc dng i vi ngi cchng trnh.

    //Ham nay dung de nhap mangvoid NhapMang(int a[], int &n);

    4/*

    */

    Tng t nh k hiu //, nhngcho trng hp nhiu dng.

    /* Dau tien nhap vao n. Sau donhap cho tung phan tu */

    void NhapMang(int a[], int &n);

    I.2. Cc kiu dliu cbn trong C

    STT KIU GHI CHKCH

    THCNHDNG

    KIU LIN TC (S THC)1 float 4 bytes %f2 double 8 bytes %lf3 long double 10 bytes %lf

    KIU RI RC (S NGUYN)K t 1 byte %c

    1 charS nguyn 1 byte %d

    2 unsigned char S nguyn dng 1 byte %d

    3 int S nguyn 2 bytes %d

    4 unsigned int S nguyn dng 2 bytes %u

    5 long S nguyn 4 bytes %ld

    6 unsigned long S nguyn dng 4 bytes %lu

    7 char * Chui %s

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    14/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang14

    I.3. Bng k hiu cc php ton

    STTPHPTON

    NGHA GHI CH

    PHP TON S HC

    1 + Cng

    2 - Tr

    3 * Nhn

    4 / Chia ly phn nguyn

    5 % Chia ly phn d

    PHP TON QUAN H

    1 > Ln hn2 < Nh hn

    3 >= Ln hn hoc bng

    4 Dch phi

    6 ~ Ly phn b theo bit

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    15/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang15

    I.4. Cc hm cbn

    STTTNHM

    THVIN DIN GII V D

    1 printf #include Xut ra mn hnh.

    2 scanf #include Ly d liu t bnphm.

    3 gotoxy #includeDi chuyn du nhyn ta (x, y) trnmn hnh vn bn.

    4 textcolor #includet mu cho ch (cgi tr t 0 n 15).

    5 cprintf #includeXut ra mn hnh vimu ch nh lintrc .

    6 delay #include Dng thc hin lnhtip sau mt khongthi gian.

    7 kbhit #includeKim tra xem cnhn phm.

    #include

    #include#include

    void main()

    {

    int c = 1, n;

    clrscr();

    printf(Nhap n:);

    scanf(%d, &n);

    do{

    textcolor(c);gotoxy(20, 10);

    cprintf(%d, n);

    c++;

    if (c>15)

    c = 1;

    delay(200);

    } while(!kbhit());

    }

    I.5. Cu trc r nhnh

    a. Cu trc ifif(biu thc iu kin){

    ;}

    Nu biu thc iu kin cho kt qu khc khng th thc hin khi lnh.

    V d:#include

    #include

    void main ()

    {float number ;

    printf ( Nhap mot so trong khoang tu 1 den 10 => ) ;

    scanf ( %f, &number) ;

    if (number >5)

    printf ( So ban nhap lon hon 5. \n) ;printf ( %f la so ban nhap. , number);

    }

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    16/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang16

    b. Cu trc if elseif(biu thc iu kin){

    ;}

    else{

    ;}

    Nu biu thc iu kin cho kt qu khc khng th thc hin khi lnh 1,

    ngc li th cho thc hin khi lnh th2. Biu thc iu kin phi t trong

    cp du ngoc trn.

    V d: Gii v bin lun phng trnh: ax+b=0

    #include

    #include

    void main (){

    float a, b;

    printf ( \n Nhap vao a:);

    scanf ( %f, &a);

    printf ( Nhap vao b:);

    scanf ( %f, &b) ;

    if (a= = 0)if (b= = 0)

    printf ( \n PTVSN);

    else

    printf ( \n PTVN);

    else

    printf ( \n Nghiem x=%f, -b/a);

    getch ();

    }

    I.6. Cu trc la chn switchswitch (biu thc){

    case n1:cc cu lnh ;

    break ;case n2:

    cc cu lnh ;break ;

    case nk: ;

    break ;

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    17/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang17

    [default: cc cu lnh]}

    ni l cc hng s nguyn hoc k t.

    Ph thuc vo gi tr ca biu thc vit sau switch, nu:

    o Gi tr ny = ni th thc hin cu lnh sau case ni.o Khi gi tr biu thc khng tha tt c cc ni th thc hin cu lnh sau

    default nu c, hoc thot khi cu lnh switch.

    o Khi chng trnh thc hin xong cu lnh ca case ni no th n s

    thc hin lun cc lnh thuc case bn di n m khng xt li iu kin

    (do cc ni c xem nh cc nhn) V vy, chng trnh thot khi

    lnh switch sau khi thc hin xong mt trng hp, ta dng lnh break.

    V d: To menu cp 1 cho php chn menu bng s nhp t bn phm.

    #include

    #include

    int ChonTD ()

    {int chon ;

    printf ("Thuc Don") ;

    printf ("\n1. Lau thai!") ;

    printf ("\n2. Nuoc ngot!") ;printf ("\n3. Ca loc hap bau!") ;

    printf ("\n4. Chuot dong!") ;

    printf ("\n Xin moi ban chon mon an!") ;

    scanf ("%d",&chon) ;

    return chon ;

    }void TDchon(int chon)

    {switch (chon)

    {case 1:

    printf ("\nBan chon lau thai!") ;

    break ;

    case 2:

    printf ("\nBan chon nuoc ngot!") ;

    break ;

    case 3:

    printf ("\nBan chon ca loc hap bau!") ;

    break ;

    case 4:

    printf ("\Ban chon chuot dong!") ;

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    18/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang18

    break ;

    default:

    printf ("\nBan chon khong dung!") ;

    }}void main()

    {clrscr() ;

    int c ;

    c=ChonTD() ;

    TDchon(c) ;

    getch() ;

    }

    I.7. Cu trc lp

    a. for

    for (; ; ){

    ;}

    Bt k biu thc no trong 3 biu thc ni trn u c thvng nhng phi

    gidu chm phy (;).Hot ng ca cu trc iu khin for:

    Bc 1: Khi gn cho biu thc 1

    Bc 2: Kim tra iu kin ca biu thc 2.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    19/152

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    20/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang20

    getch () ;

    }

    c. do while

    do{< khi lnh> ;

    } while (biu thc iu kin) ;

    Thc hin khi lnh cho n khi biu thc c gi tr bng 0.

    V d: Nhp k t t bn phm hin th ln mn hnh m ASCII ca k t,

    thc hin n khi nhn phm ESC (M ASCII ca phm ESC l 27).

    #include

    #include

    void main()

    {int ma ;

    do{ma=getch ();

    if (ma !=27)

    printf ("Ma ASCII %c:%d\t", ma, ma);

    }while (ma!=27) ;getch () ;

    }

    Lp while kim tra iu kin trc khi thc hin l p, cn vng lp dowhile

    thc hin lnh lp ri mi kim tra iu kin. Do vng lp do...while thc hin

    lnh t nht mt ln.

    I.8. break v continue

    a. breakDng kt thc vng lp trc tip cha n khi tha iu kin no .

    V d: Cho php ngi dng nhp lin tc gi tr n cho n khi nhp m th

    dng.

    #include

    #include

    void main()

    {

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    21/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang21

    while (1)

    {

    printf(\nNhap n: );

    scanf(%d, &n);

    if(n

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    22/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang22

    Lu tng lnh v biu thc iu kin trongon chng trnh

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    23/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang23

    V d: Cho bit kt qu ca on chng trnh sau:

    void main()

    {

    int i, a = 4;

    clrscr();

    for(i = 0 ; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    24/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang24

    if(a%2==0)

    printf("Gia tri cua a la chan);

    printf(Tong cua a va b la: %d, a+b) ;

    2. Cho bit kt qu ca on chng trnh sau:

    int a=7, b=8;

    a++;

    a=a+(b--);

    --b;

    a--;

    a=(--a)+(--b);

    if(a%2!=0)

    printf("\n a la so le");

    else

    printf("\n a la so chan");

    printf("\na = %d",a);

    3. Cho bit kt qu ca on chng trnh sau:

    int x=5, y;

    y=x++ + 5;

    printf(x=%d, y=%d\n, x, y);

    y*=6;

    x=y%7;

    printf(x=%d,y=%d,y/x=%d, x, y, y/x);

    4. Nhp vo hai s nguyn a, b. In ra mn hnh gi tr ln nht.

    5. Cho ba s a, b, c c vo t bn phm. Hy tm gi tr ln nht ca ba strn v in ra kt qu.

    6. Cho ba s a, b, c c vo t bn phm. Hy in ra mn hnh theo th t tng

    dn cc s. (Chc dng thm hai bin ph).

    7. Vit chng trnh nhp vo mt s nguyn n gm ba ch s. Xut ra mn

    hnh ch s ln nht v tr no?

    V d: n=291. Chsln nht nm hng chc (9).

    8. Vit chng trnh nhp vo s nguyn n gm ba ch s. Xut ra mn hnh

    theo th t tng dn ca cc ch s.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    25/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang25

    V d: n=291. Xut ra 129.

    9. Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp l

    hay khng? In kt qu ra mn hnh.

    10. Nh p vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay

    khng? In kt qu ra mn hnh.

    11. Vit chng trnh nhp vo ngy, thng, nm hp l. Cho bit nm ny c

    phi l nm nhun hay khng? In kt qu ra mn hnh.

    12. Vit chng trnh tnh din tch v chu vi cc hnh: tam gic, hnh vung,

    hnh ch nht v hnh trn vi nhng thng tin cn c nhp t bn phm.

    13. Vit chng trnh tnh tin cc TAXI. Bit rng:- KM u tin l 5000.

    - 200m tip theo l 1000.

    - Nu ln hn 30km th mi km thm s l 3000.

    Hy nhp s km sau in ra s tin phi tr.

    14. Nhp vo 3 s nguyn dng a, b, c. Kim tra xem 3 s c lp thnh tam

    gic khng? Nu c hy cho bit tam gic thuc loi no? (Cn, vung,

    u, ).

    15. Vit chng trnh nhp vo s nguyn dng n. Kim tra xem n c phi ls chnh phng hay khng? (s chnh phng l s khi ly cn bc 2 c kt

    qu l nguyn).

    b. Cu trc lp16. Cho bit kt qu ca an chng trnh sau:

    int a=18;

    for(int i=1; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    26/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang26

    }

    18. Cho bit kt qu ca an chng trnh sau:

    int i=10, s=0;

    while(i>0)

    {

    if(i%2= =0)

    s+=i;

    else

    if(i>5)

    s+=2*i;

    i--;

    }

    printf(s = %d,s);

    19. Cho bit kt qu ca an chng trnh sau:

    int a=18, i=1;

    do{

    if(a%i==0)

    printf("\t %d",i);

    i++;

    } while(i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    27/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang27

    while( i20)

    break;

    }

    printf("%d",s);

    23. Vit chng trnh in ra mn hnh hnh ch nht c kch thc nm (m, n

    nhp t bn phm).

    V d:Nhp m=5, n=4

    * * * * *

    * * * * ** * * * ** * * * *

    24. Vit chng trnh in ra mn hnh hnh ch nht rng kch thc nm (m, n

    nhp t bn phm).

    V d:Nhp m=5, n=4

    * * * * ** *

    * ** * * * *25. Vit chng trnh in ra mn hnh tam gic vung cn c c cao h (h

    nhp t bn phm).

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    28/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang28

    V d:Nhp h=4

    ** ** * ** * * *

    26. Vit chng trnh in ra mn hnh tam gic cn rng c cao h (h nhp tbn phm).

    V d:Nhp h=4

    ** ** ** * * *

    27. Vit chng trnh in ra mn hnh tam gic cn c c cao h (h nhp t

    bn phm).V d:Nhp h=4

    ** * *

    * * * * ** * * * * * *

    28. Vit chng trnh in ra mn hnh tam gic cn rng c cao h (h nhp t

    bn phm).

    V d:Nhp h=4*

    * ** *

    * * * * * * *29. Vit chng trnh nhp s nguyn dng n. Lit k n s nguyn tu tin.

    30. Vit chng trnh nhp vo hai s nguyn dng a v b. Tm c s chung

    ln nht v bi s chung nh nht ca a v b.

    31. Vit chng trnh nhp vo mt s nguyn n gm ti a 10 ch s (4 bytes).In ra mn hnh gi tr nh phn ca s trn. (Hng dn: chia ly d cho 2 v

    xut theo th t ngc li dng hm gotoxy, wherex, wherey).

    32. Vit chng trnh m sc s ca s nguyn dng N.

    V d: N=12

    sc sca 12 l 6

    33. Mt s hon thin l mt s c tng cc c s ca n (khng k n) bng

    chnh n. Hy lit k cc s hon thin nh hn 5000.

    V d:s6 l shan thin v tng cc c sl 1+2+3=6.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    29/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang29

    34. Nhp vo ngy, thng, nm. Cho bit l ngy th my trong nm.

    35. In ra dy s Fibonaci

    f1 = f0 =1 ;

    fn = fn-1 + fn-2 ; (n>1)

    II.3. Bi tp luyn tp v nng cao

    36. Ci t tt c cc lu vchng 1.

    37. Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp l

    hay khng, nu hp l cho bit ngy sau l bao nhiu.

    V d:Nhp 31/12/2003

    Ngy sau 01/01/2004

    38. Nhp vo ngy, thng, nm. Kim tra xem ngy, thng, nm c hp l

    hay khng, nu hp l cho bit ngy trc l bao nhiu.

    V d:Nhp 01/01/2003

    Ngy trc 31/12/2002

    39. (*)Nhp vo ngy, thng, nm ca nm 2003. Hy kim tra xem d liu c

    hp l hay khng? Nu hp l hy cho bit l ngy th my trong tun.

    (hai, ba, t, , CN).(Hng dn: ly ngy 01 thng 01 nm 2003 l ngy

    th t lm mc).

    40. Nh p vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay

    khng, nu hp l cho bit gisau 1 giy l bao nhiu.

    V d:Nhp 01:59:59

    Gisau 1 giy 02:00:00

    41. Nh p vo gi, pht, giy. Kim tra xem gi, pht, giy c hp l hay

    khng, nu hp l cho bit gitrc 1 giy l bao nhiu.V d:Nhp 02:00:00

    Gitrc 1 giy 01:59:59

    42. Vit chng trnh in ra bng cu chng t 2 n 9.

    43. (*) V hnh cnh qut sau:

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    30/152

    Cu trc iu khin

    Gio trnh Bi Tp K Thut Lp Trnh Trang30

    S dng cc hm cprintf(), textcolor(), delay(), kbhit(), thay i mu

    to cm gic cho cnh qut xoay cho n khi nhn mt phm bt k.

    III. KT LUN

    Cu trc lp v r nhnh (la chn) l hai cu trc chnh hnh thnh nn

    chng trnh. Da vo nhng cu trc iu khin ny ta c th xy dng

    thnh nhng chng trnh phc tp hn. V vy phi nm r cch hot ng

    ca nhng cu trc iu khin ny ci t ng yu cu bi ton.

    Khi s dng phi lu iu kin thc hin hay kt thc ca mt thao tc

    no .

    Bn trong mt pht biu iu khin phi l mt lnh hay mt khi lnh

    (khi lnh c t bn trong cp du ngoc {}).

    Nhng bin khng ph thuc vo vng lp nn t bn ngoi vng lp.

    Khi s dng cu trc iu khin lng nhau phi lu v tr mngoc hay

    ng ngoc cho hp l.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    31/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang31

    CHNG 3 HM CON

    Trnh by cu trc ca mt chng trnh, cc bc xy dng ci t chng trnh theo

    phng php th tc hm v mt skthut lin quan.

    I. TM TT L THUYT

    I.1. Khi nim

    Hm l mt on chng trnh c lp thc hin trn vn mt cng vic nht

    nh sau tr v gi tr cho chng trnh gi n, hay ni cch khc hm l s

    chia nh ca chng trnh.

    I.2. V d

    //Khai bo thvin hm#include

    #include

    #include

    #include

    #include

    //Khai bo bin ton cc v nguyn mu hmvoid ThayThe(char * S, char *St );

    void Doc1Sector(int vt);

    void Ghi1Sector(int vt);

    //Hm chnh

    void main()

    {

    unsigned char buf[512];

    char S[20], St[20];printf("Nhap chuoi can tim: ");

    gets(S);

    printf("Nhap chuoi thay the:");

    gets(St) ;

    printf("\nXin cho");

    TimVaThayThe(S,St,buf);

    printf("\n Thanh cong.");

    getch();

    }

    //Cit cc hm convoid ThayThe(char * S, char *St )

    {

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    32/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang32

    int l=strlen(St);

    for(int i=0;i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    33/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang33

    I.3. Cu trc mt chng trnh C

    a. Khi khai bo

    Bao gm cc khai bo v s dng th vin, khai bo hng s, khai bo hm

    con (cc nguyn mu hm), khai bo cc bin ton cc v khai bo cc kiu

    d liu tnh ngha.

    b. Hm chnh (main())

    Cha cc bin, cc lnh v cc li gi hm cn thit trong chng trnh.

    c. Cc hm con

    c s dng nhm mc ch:

    Khi c mt cng vic ging nhau cn thc hin nhiu v tr.

    Khi cn chia mt chng trnh ln phc tp thnh cc n th nh (hm

    con) chng trnh c trong sng, d hiu trong vic x l, qun l

    vic tnh ton v gii quyt vn .

    d. Nguyn mu hm

    Tn hm ([ danh sch cc tham s]);

    Nguyn mu hm thc cht l dng u ca hm thm du chm phy (;) vo

    cui, tuy nhin tham s trong nguyn mu hm c th b phn tn.

    Khi khaibo

    Hmmain()

    Cc hm con(nu c)

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    34/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang34

    I.4. Cch xy dng mt hm con

    a. Kiu dliu ca hm

    Xc nh da vo kt qu ca bi ton (Output). Gm 2 loi :

    void: Hm khng tr v gi tr. Nhng hm loi ny thng ri vo nhngnhm chc nng: Nhp / xut dliu , thng k, sp xp, lit k.

    void Tn_hm (danh sch cc tham s){

    Khai bo cc bin cc bCc cu lnh / khi lnh hay li gi n hm khc.

    } Kiu d liu cbn (ri rc/ lin tc) hay kiu d liu c cu trc:

    Kiu d liu ty theo mc ch ca hm cn tr v gi tr g thng qua vicphn tch bi ton. Nhng hm loi ny thng c s dng trong cc

    trng hp: m, kim tra, tm kim, tnh trung bnh, tng, tch,

    Tn_hm ([danh sch cc tham s]){

    kq;Khai bo cc bin cc bCc cu lnh / khi lnh hay li gi n hm khc.

    return kq;}

    i vi nhng hm tr vnhiu loi gi tr cho tng trng hp c th(chng hn nhkim tra: ng hay sai, so snh: bng , ln hn hay nh

    hn, ) th cn ghi ch r gi tr tr vl g cho tng trng hp .

    b. Tham s

    Xc nh da vo dliu u vo ca bi ton (Input). Gm 2 loi :

    Tham s khng l con tr (tham tr): Khng thay i hoc khng cn

    ly gi tr mi ca tham s sau li gi hm. Tham s dng ny ch mang

    ngha l dliu u vo.

    Tham s con tr (tham bin): C s thay i gi tr ca tham s trong

    qu trnh thc hin v cn ly li gi tr sau khi ra khi hm. ng dng

    ca tham s loi ny c th l d liu u ra (kt qu) hoc cng c th

    va l dliu u vo va l dliu u ra.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    35/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang35

    c. Tn hm

    t tn theo quy c t tn trong C sao cho tn gi ng vi chc nng

    hay mc ch thc hin ca hm v gi nh.

    d. V d

    V d 1: Vit chng trnh nhp s nguyn dng n v in ra mn hnh cc c

    s ca n

    Phn tch bi ton:

    Input: n ( xc nh tham s)

    - Kiu d liu: s nguyn dng (unsigned int).

    - Gi tr n khng b thay i trong qu trnh tm c s Tham s ca

    hm khng l con tr.

    Output: In ra cc c s ca n ( xc nh kiu d liu hm)

    - Khng tr v gi tr.

    - Kiu d liu ca hm l void.

    Xc nh tn hm: Hm ny dng in ra cc c s ca n nn c tht l

    LietKeUocSo

    Ta c nguyn mu hm:void LietKeUocSo ( unsigned int n );

    #include

    #include

    //Khai bao nguyen mau ham

    void LietKeUocSo ( unsigned int n );

    void main()

    {

    unsigned int n;

    printf(Nhap n = );

    scanf(%u,&n);

    printf("Cac uoc so cua n : " );

    LietKeUocSo(n);

    getch( );

    }

    void LietKeUocSo (unsigned int n)

    {

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    36/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang36

    for(int i=1; i0

    Phn tch bi ton:

    Input: n ( xc nh tham s)

    - Kiu d liu: s nguyn dng (unsigned int).

    - Gi tr n khng b thay i trong qu trnh tnh tng Tham s ca

    hm khng l con tr.

    Output: Tng S ( xc nh kiu d liu hm)

    - Tr v gi tr ca S.- S l tng cc s nguyn dng nn S cng l s nguyn dng Kiu

    tr v ca hm l unsigned int(hoc unsigned longcho trng hp gi

    tr ca tng ln hn 2 bytes).

    Xc nh tn hm: Hm ny dng tnh tng S nn c tht l TongS.

    Ta c nguyn mu hm:

    unsigned long TongS ( unsigned int n );

    #include

    #include

    //Khai bao nguyen mau ham

    unsigned long TongS ( unsigned int n );

    void main()

    {

    unsigned int n;unsigned long kq;

    printf(Nhap n = );

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    37/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang37

    scanf(%u,&n);

    kq = TongS ( n );

    printf(Tong can tinh la: %lu , kq);

    getch( );

    }

    unsigned long TongS (unsigned int n)

    {

    unsigned long S=0;

    int i=1;

    while(i0). Lit k tt c cc s nguyn t nh hn n.

    5. Nhp s nguyn dng n (n>0). Lit k n s chnh phng u tin.

    6. Nhp s nguyn dng n (n>0). m xem c bao nhiu s hon thin nh

    hn n.

    7. Nhp s nguyn dng n (0

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    38/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang38

    Gi srng:

    - Tin tr cho mi gitrc 12 gil 6000 v sau 12 gil 7500.

    - Givo ca sm nht l 6 gisng v gira ca tr nht l 18 gi(Gi s

    ginhp vo nguyn).

    10. Nhp vo 2 s nguyn p, q v tnh biu thc sau:

    (-q/2+(p3/27+q2/4)1/2)1/3 + (-q/2 (p3/27+q2/4)1/2)1/3

    11. Nhp vo 3 s thc a, b, c v kim tra xem chng c thnh lp thnh 3 cnh

    ca mt tam gic hay khng? Nu c hy tnh din tch, chiu di mi ng

    cao ca tam gic v in kt qu ra mn hnh.

    - Cng thc tnh din tch s = sqrt(p*(p-a)*(p-b)*(p-c) )

    - Cng thc tnh cc ng cao: ha = 2s/a, hb=2s/b, hc=2s/c.

    (Vi p l na chu vi ca tam gic).

    12. Nhp vo 6 s thc a, b, c, d, e, f . Gii h phng trnh sau :

    =+

    =+cbyaxfeydx

    13. Vit chng trnh nhp 2 s nguyn dng a, b. Tm USCLN v BSCNN ca

    hai s nguyn .

    14. Vit chng trnh tnh tng nghch o ca n giai tha.15. Cho 2 s nguyn a, b. Vit hm hon v gi tr 2 s trn.

    16. (*) Vit chng trnh nhp s nguyn dng n gm 5 ch s, kim tra xem

    cc ch s n c phi l si xng hay khng.

    V d:i xng: 13531

    Khngi xng: 13921

    17. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , m xem

    n c bao nhiu ch s chn v bao nhiu ch s l.

    18. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , m xem

    n c bao nhiu ch s l s nguyn t.

    19. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , tnh tng

    cc c s dng ca n.

    V d:Nhp n=6

    Tng cc c st1 n n: 1+2+3+6=12.20. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , tm c

    s l ln nht ca n.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    39/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang39

    V d: c sl ln nht ca 27 l 9.

    21. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , kim tra

    xem cc ch s ca n c ton l hay ton chn khng.

    22. (*) Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , sp

    xp cc ch s ca n theo th t tng dn.

    V d:Nhp n=1536

    Kt qu sau khi sp xp: 1356.

    II.2. Bi tp luyn tp v nng cao

    23. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , sau

    nhp mt s nguyn x, tm v tr xut hin ca ch s c gi tr x trong n.

    V d:Nh p n=1526, x=2

    Kt qu: Chu so 2 o vi tri thu 3.

    24. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , kim tra

    xem cc ch s ca n c c sp th t khng.

    V d:Nhp n=1569 hoc n=8521

    Kt qu: C tht.

    25. Vit chng trnh nhp 2 s a, b sao cho: s ln nht trong 2 s phi l mt sdng v chia ht cho 7. Nu nh p sai phi yu cu nhp li cho n khi

    ng.

    26. Vit chng trnh nhp s nguyn dng n gm k ch s )50( < k , tnh gi

    tr trung bnh cc ch s chn trong n.

    27. (*) Vit chng trnh in ra mn hnh ngy/thng/nm ca ngy hin ti, cho

    php s dng cc phm mi tn ln, xung tng hoc gim mt ngy.

    28. (*) Vit chng trnh in ra mn hnh gi:pht:giy hin ti, cho php s dng

    cc phm mi tn ln, xung tng hoc gim mt giy.

    III. KT LUN

    Trc khi xy dng mt hm ta phi xc nh mc ch ca hm l dng

    lm g, trn cs, ta mi xc nh c cc thnh phn ca hm v xy dng

    nguyn mu hm. Mi hm phi thc hin mt chc nng c lp v tch bit vi cc hm khc

    (khngc lng nhau).

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    40/152

    Hm con

    Gio trnh Bi Tp K Thut Lp Trnh Trang40

    i vi hm c gi tr tr v phi lu kiu d liu phi tng ng kiu d liu

    c gi tr tr v v kiu d liu ca bin c gn khi gi hm. Trng hp hm

    tr v thai loi gi tr tr ln th phi c dng ch thch cho trng hp

    tng ng khi gi hm bit c kt qu(chng hn nhtm kim, kim tra,

    so snh, gi tr tr vc 2 trng hp: C hoc khng c phn tcn tm,

    tha iu kin kim tra hay khng? Do v y ta phi quy c gi tr cho tng

    trng hp).

    Nn t tn hm sao cho gi nhc chc nng, t tn theo quy tc nht

    nhtrnh vic gi sai tn hm do ln ln gia k t hoa v thng, c du

    gch ni gia cc t trong hm hay khng?

    Khi gi hm phi truyn tham s, ng kiu d liu v ng th t ca

    tham s.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    41/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang41

    CHNG 4 MNG MT CHIU

    Cch khai bo d liu kiu mng, cc thao tc nhp xut, cc k thut thao tc trn

    mng. ng dng cc k thut ny trong vic ci t cc hm tm kim, kim tra, xy

    dng mng, tch v ghp mng.

    I. TM TT L THUYT

    I.1. Khi nim

    Mng thc cht l mt bin c cp pht b nhlin tc v bao gm nhiu bin

    thnh phn.

    Cc thnh phn ca mng l tp hp cc bin c cng kiu d liu v cng tn.

    Do truy xut cc bin thnh phn, ta dng cch ch mc.

    I.2. Khai bo mng

    khai bo mt mng, ta c 2 cch khai bo sau :

    Cch 1: Con tr hng

    < Kiu d

    liu > < Tn m

    ng > [ < S

    ph

    n t

    ti

    a c

    a m

    ng> ] ;

    V d:

    int a[100]; // Khai bao mang so nguyen a gom 100 phan tu

    float b[50]; // Khai bao mang so thuc b gom 50 phan tu

    Cch 2: Con tr

    ngha: Khi ta khai bo mt mng vi kiu d liu bt k (int, float, char,)

    th tn ca mng thc cht l mt hng a ch ca phn tu tin.

    < Kiu dliu > *< Tn mng >;

    V d :

    int *p; // khai bao con tro p

    int b[100];

    p = b; // p tro vao phan tu 0 cua mang b

    Vi cch vit nh trn th ta c th hiu cc cch vit sau l tng ng

    p[i] *(p + i) b[i] *(b+i)

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    42/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang42

    Lu : Khi sdng bin con tr truy xut mng, theo cch nh trn th

    thc cht con tr p ch chim 2 byte b nh cha a chm thi. to

    mng cha dliu thnh phn th ta phi cp pht vng nhcho con tr p.

    Dng hm : malloc, calloc trong thvin cp pht vng nh.

    V d:

    + Cch 1: dng malloc

    int *px; //Khai bo con tr px

    px = (int *) malloc (100); //Cp pht 100 nhkiu int cho con tr px

    + Cch 2: dng calloc

    int *p; //khai bo con tr p

    p=(int *) calloc (100,sizeof (int)); //cp pht 10 nhmi chim 2bytesSau khi s dng xong th nn gii phng vng nhbng hm free

    V d : free (p) ; // gii phng vng nhcho con tr p.

    I.3. Truy xut phn tca mng

    Vi khi nim v cch khai bo nh trn ta c hnh dng ca mng mt chiu

    nh sau:

    V d : int A[5] // Khai bo mng A gm ti a 5 phn t nguyn.Ch s 0 1 2 3 4

    A[0] A[1] A[2] A[3] A[4]

    V d minh ho:

    Khai bo v gn gi tr cho mng

    #include

    #include

    void main ( )

    {

    clrscr ( );

    int a[4] = {5,9,3,8};

    for (int i = 0; i < 4 ; i++)

    printf ( a [ %d ] = %d \t, i , a[i] );

    getch ( );

    }

    i vi con tr: Ly a ch ca phn t trong mng ta dng du &

    V d:

    int a[7];

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    43/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang43

    int *p = a[3]; //Ly a chphn tth3

    V d :

    int a[7];

    int *px;

    px = a; //px tr ti phn tth0

    px = px + 4; //px tr ti phn tth4

    T v d trn ta c th m hnh ho mng nh sau:

    px a[0] a[1] a[2] a[3] a[4] a[5] a[6]

    V d minh ho: Vit chng trnh nhp vo mng mt chiu 10 phn t kiu s

    nguyn

    #include

    #include

    void main ( )

    {

    int a[10], i;

    int *p;

    for (i = 0 ; i < 10 ; i ++)

    {printf ( a [ %d ] = , i );

    scanf ( %d, &a[i] );

    }

    p = a;

    printf ( \n Noi dung mang vua nhap: );

    for (i = 0; i < 10 ; i ++)

    printf ( %d \t , *(p + i));

    getch ( );

    }

    II. BI TP

    II.1. Mt s kthut cbn

    a. Kthutt chiu

    K thut ny thngc p dng cho nhng bi ton kim trahay nh

    du.

    Vit hm kim tra xem mng cc snguyn c thttng dn khng?

    (Tr v1: Nu mng tng dn, ngc li tr v0).

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    44/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang44

    int KiemTraTang (int a[ ], int n)

    {

    int flag = 1;

    for (int i = 0; i < n-1; i ++ )

    if ( a[i] > a[i+1] ) // Vi phm iu kin tng dn{

    flag = 0;

    break;

    }

    return flag;

    }

    Vit hm kim tra xem trong mng cc snguyn c tn ti snguyn

    lln hn 100 hay khng?

    (Tr v1: Nu c tn ti slv ln hn 100, ngc li tr v0).

    int KiemTraLe (int a[ ], int n)

    {

    int flag = 0;

    for (int i = 0; i < n; i ++ )

    if ( a[i] % 2 != 0 && a[i][j] > 100 ) //Gp phn ttho{

    flag = 1;

    break;

    }

    return flag;}

    b. Kthutt lnh canh

    K thut ny thngc p dng cho nhng bi tp vtm kim, lit k

    theo mtiu kin nhtnh no .

    Vit hm tm v tr v gi tr ln nht trong mng mt chiu cc s

    nguyn.

    int TimMax (int a[], int n)

    {

    int max, i = 1;

    max = a[0];

    while ( i < n )

    {

    if ( a[i] > max )

    max = a[i] ;

    i++;}

    return max;

    }

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    45/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang45

    II.2. Bi tp cbn

    a. Nhp xut mng mt chiuPhng php cbn

    Vit chng trnh nhp xut mng mt chiu cc snguyn.#include

    #include

    #define MAX 100

    void NhapMang (int a[], int &n)

    {

    printf (Nhap so phan tu: );

    scanf ( %d , &n);

    for (int i = 0; i < n; i ++){

    printf ( a [%d] = , i);

    scanf ( %d , &a[i]);

    }

    }

    void XuatMang (int a[], int n)

    {

    printf (\nNoi dung mang: );

    for (int i = 0; i < n; i ++)printf ( %d \t , a[i]);

    }

    void main ( )

    {

    clrscr ( );

    int a[MAX] , n;

    NhapMang (a,n);

    XuatMang (a,n);

    getch ( );}

    Bi tp

    1. Vit chng trnh nhp xut mng mt chiu cc s thc.

    2. Vit chng trnh khi to gi tr cc phn t l 0 cho mng mt chiu cc

    s nguyn gm n phn t.

    3. Vit chng trnh pht sinh ngu nhin mng mt chiu cc s nguyn

    m.4. Vit chng trnh pht sinh ngu nhin mng mt chiu cc s nguyn sao

    cho mng c th t tng dn (Khng sp xp).

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    46/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang46

    5. Vit chng trnh nhp mng cc s thc v xut cc phn t m trong

    mng.

    6. Vit chng trnh nhp mng cc s nguyn v xut cc phn t l c

    trong mng.

    7. Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra cc

    phn t chn nh hn 20.

    8. Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra mn

    hnh cc phn t l s nguyn t.

    9. Vit chng trnh nhp vo s nguyn n v lit k cc s nguyn t nh

    hn n, nu mng khng tn ti s nguyn t no nh hn n th phi xut ra

    mt cu thng bo.

    10. Vit chng trnh nhp vo mng mt chiu cc s nguyn v xut ra mn

    hnh cc phn t l s chnh phng nm ti nhng v tr l trong mng.

    b. Tm kim trn mng mt chiuPhng php cbn

    Vit hm tm phn t c gi tr x xut hin u tin trong mng mt

    chiu.

    (Nu tm thy tr vvtr xut hin x, ngc li tr v-1)

    int TimX (int a[], int n, int x)

    {

    for (int i = 0; i < n ; i ++)

    if ( x==a[i] )

    return i;

    return -1;

    }

    Bi tp

    11. Vit hm tm v tr phn t c gi tr x xut hin cui cng trong mng.

    12. Vit hm tm v tr ca phn t nh nht trong mng cc s nguyn.

    13. Vit hm tm v tr ca phn t ln nht trong mng cc s nguyn.

    14. Vit hm in v tr cc phn t nguyn t trong mng cc s nguyn.

    15. Vit hm in v tr cc phn t nguyn t ln hn 23.

    16. Vit hm tm v tr phn t m u tin trong mng. Nu khng c phn t

    m tr v 1.

    17. Vit hm tm v tr phn t m ln nht trong mng.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    47/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang47

    18. Vit hm tm v tr phn t dng u tin trong mng. Nu khng c

    phn t m tr v 1.

    19. Vit hm tm v tr phn t dng b nht trong mng.

    20. Vit hm in cc phn t l bi ca 3 v 5.

    21. Vit hm tm s chn cui cng c trong mng, nu khng tn ti s chn

    hm tr v -1 .

    22. Vit hm tm s l ln nht c trong mng, nu khng tn ti s l hm tr

    v -1.

    23. Vit hm tm v i ch phn t ln nht vi phn t nh nht trong

    mng.

    24.Nhp vo X. Vit hm in ra mn hnh nhng phn t c gi tr t 1 n X

    c trong mng.

    25. Vit chng trnh nhp vo mt dy s a gm n s thc ( 100n ), nhp

    vo dy s b gm m s thc ( 100m ).

    In ra nhng phn t ch xut hin trong dy a m khng xut hin trong

    dy b.

    In ra nhng phn t xut hin c hai dy.

    c. m Tn sutPhng php cbn

    Vit hm m cc phn tchia ht cho 5 trong mng cc snguyn.

    int Dem (int a[], int n )

    {

    int dem = 0;

    for (int i = 0; i < n ; i++ )

    if ( a[i] % 5 == 0 )dem++;

    return dem;

    }

    Bi tp

    26. Vit hm m cc phn t m, dng trong mng.

    27. Vit hm m cc phn t chn, l trong mng.

    28. Vit hm m s ln xut hin ca phn t x trong mng.

    29. Vit hm m cc phn t nh hn x trong mng.

    30. Vit hm m cc phn t l s nguyn t trong mng.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    48/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang48

    31. Vit hm m cc phn t l s hon thin trong mng.

    32. Vit hm m cc phn t l bi ca 3 v 5 trong mng cc s nguyn.

    d. Tnh tng Trung bnh c iu kinPhng php cbn

    Vit hm tnh tng cc phn ttrong mng.

    long TinhTong (int a[], int n )

    {

    long tong = 0;

    for (int i = 0; i < n; i++ )

    tong = tong + a[i] ;

    return tong;

    }

    Vit hm tnh gi tr trung bnh cc phn t c gi tr m trong mng.i vi hm tnh trung bnh c iu kin phi lu khi chia gi tr (C th

    mng khng c phn tno thoiu kin, nu ta chia tc l chia cho 0).

    float TrungBinhAm (int a[], int n )

    {

    long tong = 0;

    int spt=0;

    for (int i = 0; i < n; i++ )

    if( a[i]

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    49/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang49

    V d : 1 5 2 63 5 1 8 640. Vit hm tnh tng cc phn t cc tiu trong mng cc s nguyn ( phn

    tcc tiu l phn tnh hn cc phn txung quanh n ).

    V d : 6 4 2 9 5 3 7 1 5 841. Vit hm tnh tng cc phn t l bi ca 3 v 5 trong mng cc s

    nguyn.

    42. Vit hm tnh tng cc phn t l s hon thin trong mng cc s nguyn.

    43. Vit hm tnh gi tr trung bnh ca cc s hon thin trong mng cc s

    nguyn.

    e. Sp xpKthut cbn

    Vit hm sp xp mng theo thttng dn.

    void HoanVi (int &a, int &b)

    {

    int tam = a;

    a = b;

    b = tam;

    }

    void SapTang (int a[], int n){

    for (int i = 0; i < n-1 ; i++)

    for (int j = i+1; j < n; j++)

    if (a[i] > a [j])

    HoanVi (a[i], a[j]);

    }

    Bi tp

    44. Vit hm sp xp mng theo th t gim dn.

    45. Vit hm sp xp mng theo th t tng dn ca cc phn t l s nguynt.

    46. Vit hm sp xp cc phn t l tng dn.

    47. Vit hm sp xp cc phn t chn gim dn.

    48. Vit hm sp xp cc phn t chn nm bn tri theo th t tng dn cn

    cc phn t l bn phi theo th t gim dn.

    49. Vit hm sp x p cc phn t m gim dn t tri sang phi, phn t

    dng tng dn t phi sang tri.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    50/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang50

    f. XoKthut cbn

    Duyt mng ttri sang phi . Xut pht tv tr cn xo tin hnh di ln lt

    cc phn tvpha trc cho n khi kt thc mng, sau gim kch thc

    mng.

    Vn t ra l tm v tr cn xa theo iu kin bi ton ri thc hin xa.

    Vit hm xo phn tu tin ca mng.

    void XoaDau (int a[], int &n)

    {

    for (int i = 0; i < n-1 ; i++)

    a[i] = a[i+1];

    n--;

    }

    Vit hm xo phn tti vtr (vitri) cho trc trong mng.

    void XoaTaiViTri (int a[], int &n, int vitri)

    {

    for (int i = vitri; i < n-1 ; i++)

    a[i] = a[i+1];

    n--;

    }

    Bi tp

    50. Vit hm xo phn t ti v tr l trong mng.

    51. Vit hm xo phn t c gi tr ln nht trong mng.

    52.Nhp vo gi tr X. Vit hm xo tt c cc phn t c gi tr nh hn X.

    53.Nhp vo gi tr X. Vit hm xo phn t c gi tr gn X nht.

    g. ChnKthut cbn

    Duyt mng tphi sang tri. Xut pht tcui mng tin hnh y ln lt

    cc phn tvpha sau cho n v tr cn chn, chn phn tcn chn vo v

    tr chn v tng kch thc mng.

    Trc khi chn ta phi xc nh v tr cn chn theo iu kin bi ton.

    Thm phn tc gi trX vo cui mng.

    void ThemCuoi (int a[], int &n, int X){

    a[n]=X;

    n++;

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    51/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang51

    }

    Chn phn tc gi trX vo mng ti vtr cho trc

    void ChenX (int a[], int &n, int X, int vitri)

    {

    for (int i = n; i >vitri ; i--)a[i] = a[i-1] ;

    a[vitri] = X;

    n++;

    }

    Bi tp

    54. Vit hm chn phn t c gi tr X vo v tr u tin ca mng.

    55. Vit hm chn phn t c gi tr X vo pha sau phn t c gi tr ln nht

    trong mng.56. Vit hm chn phn t c gi tr X vo trc phn t c gi tr l s

    nguyn tu tin trong mng.

    57. Vit hm chn phn t c gi tr X vo pha sau tt c cc phn t c gi

    tr chn trong mng.

    h. Tch / ghp mngKthut tch cbn

    Cho mng a kch thc n (n chn). Tch mng a thnh 2 mng b v c sao

    cho: b c phn tu ca mng a, phn t cn li a vo mng c.

    void TachMang(int a[], int n, int b[], int &m, int c[], int &l)

    {

    int k=n/2;

    m=l=0;

    for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    52/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang52

    Kthut ghp cbn

    Cho 2 mng s nguyn a v b kch thc ln lt l n v m. Vit chng

    trnh ni mng b vo cui mng a.

    void NoiMang(int a[], int &n, int b[], int m)

    {for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    53/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang53

    Mng b: 1 8 10 4 12 6

    Mng c: 6 12 4 10 2 8 3 1 7 5 9

    II.3. Bi tp luyn tp v nng cao

    60. Vit chng trnh nhp vo mng A gm n phn t, trong qu trnh nhpkim tra cc phn t nhp vo khng c trng, nu trng thng bo v

    yu cu nhp li.

    61. Vit hm tnh tng ca tng dy con gim c trong mng.

    62. (*) Cho mng cc s nguyn a gm n phn t ( 30000n ) v s dng k

    ( nk ). Hy ch ra s hng ln th k ca mng.

    V d: Mng a: 6 3 1 10 11 18

    k = 2

    Kt qu: 10

    63. (*) Cho 2 dy A, B cc s nguyn (kch thc dy A nh hn dy B). Hy

    kim tra xem A c phi l con ca B hay khng?

    64. Vit hm lit k cc b 4 s a, b, c, d trong mng cc s nguyn (c t nht

    4 phn tv i mt khc nhau) sao cho a + b = c + d.

    65. (*) Vit chng trnh tnh trung bnh cng ca cc tng cc dy tng dn

    c trong mng cc s nguyn.

    V d: 1 2 3 4 2 3 4 5 6 4 5 6 => TB = 15.

    66. Vit chng trnh tnh tng tt c cc phn t xung quanh trn mng cc

    s nguyn. (Phn t xung quanh l hai phn t bn cnh cng lai bng

    chnh n (V d: 1 3 2 1,2 l hai phn t xung quanh ca 3).

    V d : 1 3 2 5 3 9 6 tng 17

    67. (**) Vit chng trnh nhp vo hai s ln a, b nguyn ( a, b c t 20 chs trln). Tnh tng, hiu, tch, thng ca hai s trn.

    68. Vit hm tnh tng cc phn t l s Amstrong (s Amstrong l s c c

    im nh sau: s c k k s, tng ca cc lu tha bc k ca cc k s

    bng chnh s.

    V d: 153 l sc cc k s13+53+33= 153 l mt sAmstrong).

    69. Vit hm tm v xa tt c cc phn t trng vi x trong mng mt chiu

    cc s nguyn, nu khng tn ti phn t x trong mng th tr v -1.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    54/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang54

    70. Vit hm xo tt c nhng phn t trng nhau trong dy ch gi li mt

    phn t trong .

    V d: 1 62 3 2 4 2 6 5 1 6 2 3 4 5

    71. (**) Vit hm xo nhng phn t sao cho mng kt qu c th t tng dn

    v s ln xo l t nht.

    72. Cho dy a gm n s nguyn c th t tng dn. Nh p vo mt phn t

    nguyn X, vit hm chn X vo dy sao cho dy vn c th t tng dn

    (khng sp xp).

    73. Vit chng trnh tm s l nh nht ln hn mi s chn c trong mng.

    74. Vit hm tm gi tr chn nh nht nh hn mi gi tr l trong mng cc

    s nguyn.

    75. Vit hm tm phn t xut hin nhiu nht trong mng cc s nguyn.

    76. Vit chng trnh m v lit k cc mng con tng dn trong mng mt

    chiu cc s nguyn.

    V d: 6 5 3 2 3 42 7 cc dy con tng dn l 2 3 4 v 2 7

    77. Vit chng trnh tm mng con tng dn c tng ln nht trong mng mt

    chiu.

    78. (*) Vit chng trnh nhp vo mt dy s a gm n s nguyn (n

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    55/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang55

    (*) Trn 2 dy trn thnh dy c sao cho dy c vn c th t tng.

    Xut dy a, b, c ra mn hnh.

    82. (*) Cho mng C c n phn t ( n < 200 ), cc phn t l cc ch s trong

    hm cs 16 (Hexa) (iu kin mi phn t C = 54625682384, D = 45256236884.

    84. Vit chng trnh nhp vo dy s a gm n s nguyn ( n

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    56/152

    Mng mt chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang56

    III. KT LUN

    D liu kiu mng dng cho vic biu din nhng thng tin c cng kiu d

    liu lin tip nhau.

    Khi ci t bi tp mng mt chiu nn xy dng thnh nhng hm chun

    dng li cho cc bi tp khc.

    Cc thao tc trn mng u theo quy tc nht nh, chng ta c thng dng

    mng trong vic biu din s ln, dng bng tra, kh qui,

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    57/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang57

    CHNG 5 CHUI K T

    Chui k tl trng hp c bit ca mng mt chiu. Chng ny m t mt shmthvin thao tc trn chui v cc kthut ci t xl trn chui.

    I. TM TT L THUYT

    I.1. Khi nim

    Chui k t l mt dy cc phn t, mi phn t c kiu k t.

    Lu : Chui k tc kt thc bng k t\0. Do khi khai bo di ca

    chui lun lun khai bo d1 phn tcha k t\0.

    V d:char S[5]=CNTT //khai bo chui c 5 phn tkiu char v gn dyk tCNTT v chui.

    C N T T \0

    Phn t S[0] Phn t S[1] Phn t S[2] Phn t S[3] Phn t S[4]

    Chui rng l chui cha c k t no trong mng k hiu

    I.2. Khai bo chui

    khai bo mt chui, ta c 2 cch khai bo sau : Cch 1: Con tr hng

    char < Tn chui > [ < S k tti a ca chui > ] ;

    V d: char chuoi[25];

    ngha khai bo 1 mng kiu k ttn l chuoi c 25 phn t (nh vy ti a

    ta c th nhp 24 k t v phn tth25 cha k tkt thc chui \0 )

    Cch 2: Con tr

    char *< Tn chui >;

    V d : char *chuoi;

    I.3. Cc thao tc trn chui

    a. Nhp chuiC php : char *gets(char *s);

    Nhn cc k t nhp t phm cho n khi nhn phm Enter v a vo s.

    V d:

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    58/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang58

    void main()

    {

    char chuoi[80];

    printf("Nhap vao chuoi:");

    gets(chuoi);

    printf("Chuoi vua nhap la: %s\n", chuoi);

    }

    b. Xut chuiC php : int puts(const char *s);

    Xut chui s ra mn hnh.

    V d:

    void main()

    {

    char chuoi[] = "Vi du xuat chuoi\n";

    puts(string);

    }

    c. Cc hm thvin (string.h)STT TN HM CHC NNG V D

    1 int strlen(char s[]); Tr v di ca chui s.

    char *s = "BorlandInternational";printf("Do dai s: %d\n",strlen(s));Kt qu:Do dai s: 21

    2strcpy(char dest[],char src[]);

    Sao chp ni dung chui srcvo chui dest.

    char dest[10];char *src = "abcdefghi";

    strcpy(dest, src);printf("%s\n", dest);Kt qu: abcdefghi

    3strncpy(char dest[],char src[], int n);

    Chp n k t t chui src sangchui dest. Nu chiu di src 0: nu s1 ln hn s2.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    60/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang60

    Nu s2 khng xut hintrong s1 th kt qu chuitch vn l s1.

    Lu : Cch truy xut cc k t tng t nh mng mt chiu.

    d. V dNhp vo mt chui k t, xut ra mn hnh chui bo ngc th t

    cc kt.

    V d: Nhp vo: Tran minh thai. Xut ra mn hnh: iaht hnim narT

    #include

    #include

    #include

    void DaoChuoi(char *s1, char *s2)

    {

    int l=strlen(s1);

    for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    61/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang61

    p = strtok(NULL, "");

    strcpy(temp, p);

    }while(p!=NULL);

    printf(Chuoi temp: %s \n Chuoi input: %s, temp, input);

    2. Cho bit kt qu ca an chng trnh sau:

    char s1[20]=Truong cao dang CNTT, s1[10]=Tp. HCM, *input, *s3;

    strcpy(input, s1); strcpy(s3,aeiou); strcat(input, s2);

    int n=strlen(input), k=0;

    printf(Chuoi: %s,input);

    for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    62/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang62

    14. Vit chng trnh tm kim tn trong chui h tn. Nu c th xut ra l tn

    ny nhp ng, ngc li thng bo l nhp sai.

    15. Vit chng o v tr ca tu v t cui.

    V d: nhp bo an co xuat ra co an bo

    16. Vit hm ct chui h tn thnh chui h lt v chui tn.

    V d: chui h tn l:Nguyn Vn A ct ra 2 chui l chui h

    lt:Nguyn Vn,chui tn l:A

    17. Nhp mt chui bt k, sau hi ngi dng cn tch bt u tu trong

    chui trv sau.

    V d: Nh p chui S1:trng Cao ng Cng Ngh Thng tin. Ngi

    nhp mun tch btu tchCng th sxut ra chui Cng Ngh

    Thng Tin ra mn hnh.

    18. Vit hm kim tra xem chui c i xng hay khng?.

    19. Vit hm tra xem trong chui c k t s hay khng nu c tch ra thnh

    mt mng s ring.

    20. Nhp mt chui bt k, yu cu nhp 1 k t mun xa. Thc hin xa tt c

    nhng k t trong chui.

    21. Vit chng trnh tm kim xem k t no xut nhin nhiu nht trongchui.

    22. Vit 1 chng trnh xo mt t no trong chui.

    V d: Chui ban u: CAO DANG CNTT

    Nhp: CNTT, v kt qu xut ra:CAO DANG

    II.2. Bi tp luyn tp v nng cao

    23. i cc tu cu sang ch hoa v nhng t khng phi u cu sangch thng.

    V d: nGuYen vAN a i thnh: Nguyn Vn A

    24. (*) Vit chng trnh o ngc th t cc t c trong chui

    V d: Nhp Truong CD CNTT TpHCM

    Xut ra mn hnh l: TpHCM CNTT CD Truong

    25. Nhp 1 chui bt k, lit k xem mi k t xut hin my ln.

    26. Vit hm kim tra xem trong 2 chui c bao nhiu k t ging nhau.

    27. Vit chng trn mnh chy t tri qua phi mn hnh.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    63/152

    Chui k t

    Gio trnh Bi Tp K Thut Lp Trnh Trang63

    28. Vit 1 chng trnh chn 1 t bt c v tr no m ngi dng yu cu.

    29. (*) Vit chng trnh nhp vo mt chui m xem chui c bao nhiu t.

    Cc t cch nhau bng khong trng, du chm cu: du chm (.), du phy

    (,), du chm phy (;), du hi (?) v du chm than (!).

    30. (**) Vit chng trnh hin th mt chui k t. Chng trnh cho php di

    chuyn du nhy sang tri, sang phi, ln dng hay xung dng bng phm

    mi tn, chn hay xo k t ti v tr du nhy.

    III. KT LUN

    Cng ging nh kiu mng mt chiu, thao tc truy xut cc phn t trn

    chui hon ton tng t. Bn cnh , kiu d liu ny cn c ci t sn

    mt s hm th vin rt hu ch nn trong qu trnh thao tc trn chui nn

    khi ci t ta c gng tn dng ti a nhng hm lin quan.

    Khng nn sdng hm scanf() nhp chui trong trng hp chui d

    liu nhp vo c cha khong trng.

    Nu nhp chui pha sau hm scanf() nn chn hm fflush(stdin) hoc hm

    flushall() gia scanfv gets() xa vng m, trnh trng h p chng

    trnh b qua hm gets() do trong vng m cn lu k t xung dng caphm ENTER.

    Khi thao tc trn chui lu phi m bo chui c kt thc bng k t

    kt thc \0.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    64/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang64

    CHNG 6 MNG HAI CHIU

    y l kiu dliu dngbiu din dliu kiu bng, kiu dliu ny rt thch hpcho cc bi ton lin quan n th, biu din nh,

    I. TM TT L THUYT

    I.1. Khi nim

    Mng hai chiu thc cht l mng mt chiu trong mi phn t ca mng l

    mt mng mt chiu, v c truy xut bi hai ch s dng v ct.

    T khi nim trn ta c tha ra mt khi nim v mng nhiu chiu nh sau:

    mng c thai chiu trln gi l mng nhiu chiu.

    I.2. Khai bo mng

    T khi nim trn ta c c php khai bo mng hai chiu nh sau:

    Cch 1: Con tr hng

    < Kiu dliu > < Tn mng > [ < S dng ti a > ][ < S ct ti a> ];

    V d:

    int A[10][10]; // Khai bo mng 2 chiu kiu int gm 10 dng, 10 ctfloat b[10][10]; // Khai bo mng 2 chiu kiu float gm 10 dng, 10 ct

    Cch 2 : Con tr

    < Kiu dliu > **;

    V d :

    int **A ; // Khai bo mngng 2 chiu kiu int

    float **B ; // Khai bo mngng 2 chiu kiu float

    Tng t nh mng mt chiu, s dng ta phi c p pht vng nh cho n

    bng malloc hoc calloc v hu sau khi dng bng free

    V d : Khai bo mng cc s nguyn A c kch thc 5x6

    int **A;

    A = ( int **) malloc (5) ;

    for ( int i = 0 ; i < 5 ; i ++ )

    A[i]=(int *) malloc (6) ;

    I.3. Truy xut phn tca mng

    truy xut cc thnh phn ca mng hai chiu ta phi da vo ch s dng v

    ch s ct.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    65/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang65

    V d:

    int A[3][4] = { {2,3,9,4} , {5,6,7,6} , {2,9,4,7} };

    Vi cc khai bo nh trn ta c :

    A[0][0] = 2; A[0][1] = 3;

    A[1][1] = 6; A[1][3] = 6;

    Vi v d trn ta c hnh dng ca mt ma trn nh sau

    0 1 2 3

    0 2 3 9 4

    1 5 6 7 6

    2 2 9 4 7

    Lu : Khi nhp liu cho mng hai chiu, nu l mng cc snguyn th ta

    nhp liu theo cch thng thng. Nhng nu l mng cc s thc th ta phi

    thng qua bin trung gian.

    V d :

    float a[10][10]; // Mang so thuc a

    float tmp; // Bien trung gian tmp

    scanf (%f, &tmp); // Nhap lieu cho bien trung gian

    a[2][2] = tmp; // Gan du lieu vao phan tu a[2][2]

    I.4. Ma trn vung v cc khi nim lin quan

    a. Khi nim

    L ma trn c s dng v s ct bng nhau.

    b. Tnh cht ca ma trn vung

    ng cho loi 1

    o ng cho loi 1 bao gm ng cho chnh v nhng ng

    cho song song vi ng cho chnh. Trong ng cho chnh

    l ng cho c :

    chsdng = chsct

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    66/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang66

    o Truy xut cc phn t trn ng cho loi 1 : truy xut cc

    phn t trn cc ng cho loi 1 ta c th da vo ch s dng v

    ch s ct nh sau :

    ct dng = hng s

    V d : Cho ma trn vung A(n x n). Gi (io, jo) l toim xutpht, ta c thduytng cho xut pht t(io, jo ) nhsau :

    for ( i = io, j = jo ; i < n ; i ++, j ++ )

    printf (%4d,A[i][j]);

    ng cho loi 2:

    o ng cho loi 2 bao gm ng cho ph v nhng ng song

    song vi n. Trong ng cho ph l ng cho c:

    chsct + chsdng = sdng ( hoc sct )

    o Truy xut cc phn t trn ng cho loi 2 : truy xut cc

    phn t trn cc ng cho loi 1 ta c th da vo ch s dng v

    ch s ct nh sau :

    ct + dng = hng s

    V d: Cho ma trn vung A(n x n). Gi (io, jo) l toim xutpht, ta c thduytng cho xut pht t (io, jo) nhsau :

    for ( i = io , j = jo ; i < n && j > = 0 ; i ++ , j --)

    printf (%4d,A[i]][j]);

    II. BI TP

    n gin trong vic khai bo ma trn, ta nh ngha kiu ma trn cc phn t

    vi kiu dliu bt knh sau:

    #define MAX 100

    typedef MATRAN[MAX][MAX];

    V d: Khai bo ma trn cc s nguyn a.

    #define MAX 100

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    67/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang67

    typedef int MATRAN[MAX][MAX];

    MATRAN a;

    II.1. Mt s kthut cbn

    Phng php nhp xut ma trn

    void Nhap (MATRAN a, int &d, int &c )

    {

    printf (\nNhap so dong: );

    scanf ( %d, &d );

    printf (\nNhap so cot: );

    scanf (%d, &c );

    for ( int i = 0; i < d; i ++ )

    for (int j = 0; j < c; j ++)

    {

    printf ( a[%d][%d] = , i, j );scanf (%d, &a[i][j]);

    }

    }

    void Xuat (MATRAN a, int d, int c)

    {

    printf (\nNoi dung ma tran:\n);

    for (int i = 0; i < d; i++)

    {

    for (int j = 0; j < c; j++)printf ( \t %d , a[i][j] );

    printf (\n);

    }

    }

    Kthutt chiu

    Vit hm kim tra xem trong ma trn cc s nguyn c tn ti cc s

    nguyn lln hn 100 khng?

    int KiemTraLe (MATRAN a, int d, int c){

    int flag = 0; //tra ve 1 neu co nguoc lai tra ve 0

    for (int i = 0; i < d; i ++ )

    for (int j = 0; j < c; j++)

    if ( a[i][j] % 2 != 0 && a[i][j] > 100 )

    {

    flag = 1;

    break;

    }return flag;

    }

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    68/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang68

    Kthutt lnh canh

    Vit hm tm phn tnh nht trong ma trn.

    int Min (MATRAN a, int d, int c )

    {

    int min = a[0][0];for ( int i = 0 ; i < d ; i ++ )

    for (int j = 0 ; j < c ; j ++)

    if ( a[i][j] < min )

    min = a[i][j];

    return min;

    }

    Phng php tnh tng

    Vit hm tnh tng cc phn ttrong ma trn.

    long Tong (MATRAN a, int d, int c)

    {

    long tong = 0;

    for ( int i = 0; i < d; i ++ )

    for ( int j = 0; j < c; j ++)

    tong + = a[i][j];

    return tong;

    }

    Phng php sp xp

    Vit hm sp xp ma trn tng dn ttrn xung di v ttri sang phi

    khng dng mng ph.

    void SapTang(MATRAN a, int d, int c)

    {

    for (int i = 0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    69/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang69

    for ( int i = 0 ; i < d ; i ++)

    for ( int j = 0 ; j < c ; j ++)

    if ( a[i][j] % 2 = = 0 )

    dem ++;

    return dem;

    }

    II.2. Bi tp cbn

    a. Bi tp nhp xut1. Vit hm nhp ma trn cc s nguyn dng (nhp sai bo li v khng cho

    nhp).

    2. Vit hm nhp/ xut ma trn cc s thc.

    3. Vit hm in ra nhng phn t c k s tn cng l 5.

    4. Vit chng trnh in ra cc phn t nm trn 2 ng cho.

    5. Vit hm in ra cc phn t nm pha trn ng cho ph ca ma trn

    vung cc s nguyn.

    6. Vit hm in ra cc phn t nm pha di ng cho ph ca ma trn

    vung cc s nguyn.

    7. Vit hm in ra cc phn t nm pha trn ng cho chnh ca ma trn

    vung cc s nguyn.

    8. Vit hm in ra cc phn t nm pha di ng cho chnh ca ma trn

    vung cc s nguyn.

    9. Vit chng trnh khi to gi tr cc phn t l ngu nhin cho ma trn cc

    s nguyn kch thc nm .

    10. Vit hm to ma trn a cc s nguyn gm 9 dng 14 ct. Trong phn t

    a[i][j] = i * j11. Vit hm in tam gic Pascal vi chiu cao h.

    V d : h = 5

    11 11 2 11 3 3 11 4 6 4 1

    b. Bi tp tnh tng12. Vit hm tnh tng cc phn t trn cng mt dng.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    70/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang70

    13. Vit hm tnh tng cc phn t trn cng mt ct.

    14. Vit hm tnh tng cc phn t chn c trong ma trn.

    15. Vit hm tnh tng cc phn t nm trn ng cho chnh ca ma trn

    vung.

    16. Vit hm tnh tng cc phn t l s nguyn t c trong ma trn.

    17. Vit hm tnh tng cc s hon thin trong ma trn cc s nguyn.

    18. Vit hm tnh tng cc gi tr ln nht trn mi dng.

    19. Vit hm tnh gi tr trung bnh ca cc phn t nh nht trn mi ct.

    20. Vit hm tnh tng cc gi tr nh nht nm trn tng ng cho loi 2.

    21. Vit hm tm ng cho c tng ln nht trong cc ng cho loi 1.

    c. Bi tp tm kim22. Vit hm tm v tr phn t ln nht trong ma trn cc s nguyn.

    23. Vit hm tm v tr phn t nh nht trong ma trn cc s nguyn.

    24. Vit hm tm v tr phn t chn cui cng trong ma trn cc s nguyn.

    25. Vit hm tm phn t m l ln nht trong ma trn.

    26. Vit hm tm phn t chn dng v nh nht trong ma trn.

    27. Vit hm tm s hon thin u tin trong ma trn cc s nguyn.

    28. Vit hm tm s hon thin ln nht trong ma trn cc s nguyn.

    29. Vit hm tm v tr phn t nguyn t cui cng trong ma trn cc s

    nguyn.

    30. Vit hm tm phn t ln nht nm trn ng cho chnh ca ma trn

    vung.

    31. Vit hm in cc s nguyn t nm trn ng cho ph ca ma trn vung.

    32. Vit hm tm trong 2 ma trn cc s nguyn, nhng phn t ging nhau.33. Vit hm tm phn t nh nht trn mi ng cho loi 2 ca ma trn.

    34. Vit hm tm v lit k nhng phn t cc i trong ma trn (mt phn t

    c coi l cc i khi n ln hn cc phn t xung quanh n).

    35. Vit hm tm dng c tng ln nht trong ma trn cc s thc.

    36. Vit hm tm ct c tng nh nht trong ma trn cc s nguyn.

    d. Bi tp m37. Vit hm m cc gi tr m, dng trong ma trn cc s thc.

    38. Vit hm m cc gi tr chn, l trong ma trn cc s nguyn.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    71/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang71

    39. Vit hm m s ln xut hin ca phn t x trong ma trn cc s thc.

    40. Vit hm m cc gi tr nh hn x trong ma trn cc s thc.

    41. Vit hm m cc phn t nguyn t trong ma trn cc s nguyn.

    42. Vit hm n cc phn t nguyn t trn ng cho chnh ca ma trn

    vung cc s nguyn.

    43. Vit hm m cc gi tr chn trn ng cho chnh ca ma trn vung cc

    s nguyn.

    44. Vit hm m cc gi tr l bi ca 3 v 5 trn ng cho chnh ca ma

    trn cc s nguyn.

    45. Vit hm m cc gi tr nguyn t trn 2 ng cho (chnh, ph) ca ma

    trn vung cc s nguyn.

    46. Vit hm m cc gi tr cc i trong ma trn cc s nguyn.

    47. Vit hm m cc gi tr cc tiu trong ma trn cc s nguyn.

    48. Vit hm m cc cc tr trong ma trn cc s nguyn (mt phn tc

    coi l cc tr khi n l gi tr cc i hay cc tiu).

    49. Vit hm m cc gi tr l s hon thin trong ma trn cc s nguyn.

    e. Bi tp sp xp50. Vit hm sp xp ma trn theo th t tng dn t trn xung di v t tri

    qua phi theo phng php dng mng ph.

    Hng dn:ma trn sang mng mt chiu, sp xp trn mng mt chiu

    theo th t tng dn, sau chuyn ngc mng mt chiu thnh ma trn

    kt qu.

    51. Vit hm sp xp ma trn theo th t gim dn t trn xung di v t tri

    sang phi.52. Vit hm sp xp cc dng trn ma trn theo th t tng dn.

    53. Vit hm sp xp cc ct trn ma trn theo th t gim dn.

    54. Vit hm sp xp ma trn theo ng ziczc ngang.

    V d :

    55. Vit hm sp xp ma trn theo ng ziczc cho

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    72/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang72

    V du :

    56. Vit hm sp xp ma trn theo ng xon c t ngoi vo trong theo chiu

    kim ng h.

    V d :

    57. Cho ma trn vung, vit hm sp xp tng dn cc phn t nm trn cc

    ng cho song song vi ng cho chnh.

    58. Vit chng trnh nhp mt ma trn vung cc s nguyn, v thc hinnhng cng vic sau :

    Sp xp cc phn t nm trn cc ng cho loi 1 tng dn Sp xp cc phn t nm trn cc ng cho loi 2 gim dn. Sp xp vi iu kin: cc phn t trn ng cho chnh tng, cc phn

    t trn cc ng cho song song vi ng cho chnh gim.

    f. Bi tp Thm Xo Thay th59. Vit hm xo mt dng i trn ma trn.

    60. Vit hm xo mt ct j trn ma trn.

    61. Vit hm xo dng c tng ln nht trn ma trn.

    62. Vit hm hon v dng c tng ln nht vi dng c tng nh nht.

    63. Vit hm tm v thay th cc phn t chn trong ma trn bng c s nh

    nht ca n.

    64. Vit hm thay th nhng phn t c gi tr x thnh phn t c gi tr y trong

    ma trn (x , y nhp t bn phm).

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    73/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang73

    II.3. Bi tp luyn tp v nng cao

    65. Vit chng trnh tnh tng, tch ca hai ma trn cc s nguyn.

    66. Vit hm kim tra xem ma trn vung cc s nguyn c i xng qua ng

    cho chnh hay khng.

    67. Vit hm kim tra xem trong ma trn vung cp n c hng no trng nhau

    hay khng, nu c th ch r nhng hng no. (Trng gi tr v v tr).

    68. Vit chng trnh nhp vo ma trn vung kch thc n x n ( 1002 n ).

    Hy vit hm thc hin nhng cng vic sau :

    In ra cc phn t trn 4 ng bin ca ma trn.

    Tnh tng cc phn t trn bin.

    69. (*) Vit chng trnh xoay ma trn cc s thc 900

    ngc chiu kim ngh.

    V d:

    70. Vit chng trnh dch phi xoay vng mt ct trong ma trn cc s thc.

    71. Vit chng trnh dch xung xoay vng mt dng trong ma trn cc s

    thc.

    72. (*) Cho ma trn A ( nm ) cc s nguyn hy pht sinh ma trn B sao cho B

    l ma trn lt ngc ca ma trn A.

    V d :

    73. (**) Cho ma trn A ( nm ) hy pht sinh ma trn B ( nm ) sao cho phn

    t B (i, j) l trung bnh cng ca cc phn t trong hnh vung 3x3 tm ti

    (i,j) ca A.

    V d :

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    74/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang74

    74. (**) Cho ma trn cc s nguyn dng A ( nm ) . Hy xy dng ma trn B

    ( nm ). Sao cho phn t B ( i, j ) l s ln nht trong vung 3 x 3 tm ti

    (i, j) ca A.

    V d :

    75. (**) Cho ma trn A ( nm ). Hy xy dng ma trn B ( nm ) vi phn t

    B(i,j) c xc nh theo qui tc sau: ti v tr (i, j) trn mng A k hai tia

    vung gc vi nhau, to thnh vi trc honh mt gc 450 t trn xung

    di; B(i, j) l tng ca tt c cc s ca vng mt phng to bi hai tia nyv cc cnh ca bng.

    V d :

    76. (**) Cho ma trn vung A ( nn ). Hy xy dng mng B ( nn ) bng cch:

    phn t B (i, j) l s ln nht trong tam gic vung v t A (i, j) ti ngcho chnh.

    V d :

    77. (*) Vit chng trnh hin thng hin t (gm gipht), vi gily t

    h thng v ng hc cp nht theo pht.Hng dn: To 1 ma trn gi tr gm 0 hoc 1, v tr no cn hin th th

    gn gi tr l 1, ngc li c gi tr l 0. Sau mi pht cp nht li ma trn

    v hin th ln mn hnh.

    V d: 01 gi25 pht

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    75/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang75

    78. Nh p vo mng hai chiu gm n dng v m ct cc s nguyn. Hy tm

    phn t ln nht trn mi dng v ng thi nh nht trn mi ct, hoc ln

    nht trn mi ct v ng thi nh nht trn mi dng. C bao nhiu phn

    t nh th?

    V d:

    79. Vit chng trnh to ngu nhin mt ma trn cc s nguyn (0 -> 50), tm

    nhng phn t cc i (l phn t ln hn cc phn t xung quanh).

    V d :

    80. (**) Cho ma trn cc s nguyn A nm )3,3( mn . Hy tm ma trn con

    (3x3) c tng ln nht.

    V d :

    81. Nhp ma trn vung cp nn (n < 10). In ra cc phn t ca ma trn ny

    theo hng ca ng cho chnh.

    V d : n = 4

    82. (**) Hy in cc s t 1 n n2 vo ma trn cp n (n > 2), ch xt trng

    hp n l s l vi tnh cht P l tng cc s bng nhau.

    Hng dn : Ma phng ca mt bng vung cp n, trong mi nhn mt

    gi tr sao cho, mi hng, mi ct v mi ng cho u tho mn mt tnh

    cht P no cho trc.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    76/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang76

    V d : Vi n = 5

    83. (*) Vit hm in ma trn cc s nguyn dng theo qui lut c m t nh

    sau : cc phn t pha trn ng cho ph l gi tr bnh phng ca cc

    gi tr 21 n , cc gi tr tng cho ph trxung l cc s nguyn

    t. Ma trn c sp xp nh v d bn di.

    V d : n = 5

    84. Cho ma trn vung a c p n ( n l, 153 n ), mi phn tu c gi tr

    nguyn dng. Hy xy dng hm kim tra xem ma trn a c phi l ma

    phng hay khng?

    85. (**) Vit chng trnh gii bi ton 8 hu. Hy t 8 con hu trn bn c

    8x8 sao cho chng khng n nhau (2 hu n nhau khi cng hng, cng ct

    v cng nm trn ng cho).

    Hng dn:

    Dng ma trn 8x8 lu bn c. Mi c 3 trng thi :

    C hu 1

    trng 0

    khng dc i -1

    86. (**) Vit chng trnh gii bi ton m i tun. Hy i con m 64 lt i

    trn bn c8x8 sao cho mi chi qua mt ln (xut pht t mt bt k)

    Hng dn :

    ng ti mt trn bn ccon m c thi c 1 trong 8 hng sau .

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    77/152

    Mng hai chiu

    Gio trnh Bi Tp K Thut Lp Trnh Trang77

    Khai bo 8 hngi ca m nhsau:

    typedef struct DIEM

    {int x, y;

    };

    DIEM huongdi[8]={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};

    Trong mi thnh phn ca huongdi l lch ca dng v ct so vi v

    tr ca con m.

    V d: huongdi[0] (tc i n v trnhhnh v) c lch 2 dng v 1

    ct. (Gi tr m biu th lch vbn tri ct hay hng ln ca dng).Chn v tri ktip sao cho v tr phi gn vi bin hay gc nht (tc s

    ngi c thi l t nht).

    87. Vit chng trnh gii bi ton Taci. Cho ma trn vung 3x3 gm cc s

    nguyn t 0 -> 8 trong 0 l trng. Bi ton t ra l hy a ma trn

    mt trng thi u v trng thi ch, mi ln ch dch chuyn c 1 .

    V d : Trng thi u Trng thi ch

    1 3 0 1 2 38 2 5 => 8 0 47 4 6 7 6 5

    III. KT LUN

    Kiu d liu mng hai chiu c ng dng rng ri trong cc bi ton v tm

    ng i trong th, x l nh, x l nhng d liu dng bng,

    Lu khi nhp mng hai chiu cc s thc phi thng qua 1 bin trung gian.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    78/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang78

    CHNG 7 KIU DLIU C CU TRC

    Cung cp cchcho php khai bo cc kiu dliu mi gii quyt theo yu cu cabi ton da vo nhng kiu dliu cbn c ci t sn trong ngn nglp trnh.

    I. TM TT L THUYT

    I.1. Khi nim

    Cu trc (struct) thc cht l mt kiu d liu do ngi dng nh ngha bng

    cch gom nhm cc kiu d liu cbn c sn trong C thnh mt kiu d liu

    phc hp nhiu thnh phn.

    I .2. nh ngha kiu dliu

    C php

    struct < tn cu trc >{

    Cc kiu d liu thnh phn ;};

    Ngoi ra ta c th dng t kho typedefnh ngha mt tn mi cho kiu d

    liu c.C php

    typedef struct < tn cu trc > < tn mi >;

    V d1: Kiu dliu DATE gm cc thnh phn:

    Th(thu): chui c ti a 4 k t.

    Ngy (ngay): snguyn 1 byte.

    Thng (thang): snguyn 1 byte. Nm (nam): snguyn 2 bytes.

    Ta nh ngha DATE nhsau:

    struct DATE

    {

    char thu[5];

    unsigned char ngay;

    unsigned char thang;

    int nam;};

    typedef struct DATE d;

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    79/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang79

    Kiu dliu c cu trc c th lng vo nhau.

    V d 2:nh ngha kiu dliu ca hc sinh HOCSINH gm:

    M shc sinh (MSHS): chui c ti a 5 k t.

    H tn (hoten): chui c ti a 30 k t.

    Ngy thng nm sinh (ngaysinh): kiu DATE.

    a ch(diachi): chui c ti a 50 k t.

    Gii tnh (phai): chui c ti a 3 k t.

    im trung bnh (diemtb): sthc.

    Ta nh ngha kiu HOCSINH nhsau:

    struct DATE

    {

    char thu[5];

    unsigned char ngay;

    unsigned char thang;

    int nam;

    };

    typedef struct HOCSINH

    {

    char MSHS[6];

    char hoten[31];

    struct DATE ngaysinh;

    char diachi[51];

    unsigned char phai[4];

    float diemtb;

    };

    Khi nh ngha kiu dliu struct lng nhau, ta cn lu : Kiu dliu c

    sdng phi khai bo pha trn.

    I.3. Khai bo

    Khi ta nh ngha kiu d liu tc l ta c mt kiu d liu mi, mun s dng ta

    phi khai bo bin. C php khai bo kiu d liu cng ging nh cch khai bo

    ca cc kiu d liu chun.

    struct < tn cu trc > < tn bin > ;

    V d :struct DATE x ; // Khai bao bien x co kieu du lieu DATE

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    80/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang80

    Tuy nhin nu ta nh ngha struct c dng t kho typedefth ta c th khai bo

    trc tip m khng cn t kho struct.

    V d :DATE x ; // Khai bao bien x co kieu DATE

    *Bin con tr kiu cu trc: Ngoi cch khai bo nh trn ta c th khai bo

    theo kiu con tr nh sau

    struct < tn cu trc > *< tn bin > ;

    s dng ta cng phi cp pht vng nhging nh kiu d liu chun.

    V d : DATE *y; // Khai bao con tro y kieu cau truc DATE

    y = ( DATE * ) malloc ( sizeof ( DATE )) ;

    I.4. Truy xut

    truy xut mt thnh phn d liu no bn trong cu trc ta c 2 trng hp

    truy xut nh sau :

    Bin x l mt bin cu trc thng thng, ta dng ton t du chm .

    C php :

    < Tn cu trc >.< Bin thnh phn >;

    V d :

    DATE x ; // khai bao bien x kieu DATE

    x.ngay = 5 ; // gan ngay bang 5

    Bin x l mt bin con tr, ta dng ton t mi tn -> (Gm du tr v

    du ln hn >).

    C php :

    < Tn cu trc > -> < Bin thnh phn >;

    V d :

    DATE *x ; // khai bao bien x kieu con tro DATE

    x -> ngay = 5 ; // gan ngay bang 5

    i vi kiu d liu c struct lng nhau phi truy cp n thnh phn cui

    cng c kiu dliu cbn.

    V d: Gi s, c kiu HOCSINH nhtrn HOCSINH hs; // khai bao bien hs kieu HOCSINH

    Mun in hc sinh A sinh vo thng my ta phi truy cp nhsau:

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    81/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang81

    printf(Thang sinh cua hoc sinh A la: %d,(hs.ngaysinh).thang);

    I.5. V d minh ho

    Vit chng trnh nhp vo to hai im trong mt phng v tnh tng hai to

    ny.#include

    #include

    typedef struct DIEM //khai bao mot kieu du lieu DIEM gom toa do x va y

    {

    int x;

    int y;

    };

    void Nhap (DIEM &d)

    {

    printf (\nNhap vao tao do diem\n);

    printf (Tung do : );

    scanf (%d, & d. x);

    printf (Hoanh do : );

    scanf (%d, & d.y);

    }

    void Xuat (DIEM d){

    printf (\nToa do diem : (%d , %d),d.x,d.y);

    }

    DIEM Tong (DIEM d1,DIEM d2)

    {

    DIEM temp;

    temp.x = d1.x + d2.x ;

    temp.y = d1.y + d2.y ;

    return Temp;}

    void main ()

    {

    DIEM A , B, AB; //khai bao 3 diem A, B, AB;

    clrscr ();

    Nhap ( A );

    Xuat ( A );

    Nhap ( B );

    Xuat ( B );printf (\n Tong cua hai diem vua nhap la : );

    AB = Tong ( A, B);

    Xuat ( AB );

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    82/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang82

    getch ();

    }

    I.6. Mng cu trc

    Cch khai bo tng t nh mng mt chiu hay ma trn (Kiu d liu by

    gil kiu d liu c cu trc).

    Cch truy cp phn t trong mng cng nh truy cp trn mng mt chiu

    hay ma trn. Nhng do tng phn t c kiu cu trc nn phi chnh r

    cn ly thnh phn no, tc l phi truy cp n thnh phn cui cng c

    kiu l d liu cbn (xem li bng cc kiu d liu cbn) .

    I.7. Nguyn tc vit chng trnh c mng cu trc

    Do kiu d liu c cu trc thng cha rt nhiu thnh phn nn khi vit

    chng trnh loi ny ta cn lu :

    Xy dng hm x l cho mt kiu cu trc.

    Mun x l cho mng cu trc, ta gi li hm x l cho mt kiu cu trc

    c xy dng bng cch dng vng lp.

    V d 1: Cho mt lp hc gm n hc sinh (n50). Thng tin ca mt hc sinh

    c m tv d 2, mc I.2. Hy vit chng trnh nhp v xut danh sch hcsinh sau m xem c bao nhiu hc sinh c ln lp (iu kin c ln lp

    l im trung bnh 5.0).

    Cch lm:

    - Trc ht ta phi xy dng hm nhp v xut cho 1 hc sinh.

    - Xy dng hm nhp v xut ngy thng nm (Kiu dliu DATE).

    - Sau mi xy dng hm nhp v xut cho danh sch hc sinh.

    #define MAX 50

    struct DATE

    {

    char thu[5];

    unsigned char ngay;

    unsigned char thang;

    int nam;

    };

    typedef struct HOCSINH

    {char MSHS[6];

    char hoten[31];

    struct DATE ngaysinh;

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    83/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang83

    char diachi[51];

    unsigned char phai[4];

    float diemtb;

    };

    void NhapNamSinh(DATE &d);

    void XuatNamSinh(DATE d);

    void Nhap1HS (HOCSINH &hs);

    void Xuat1HS (HOCSINH hs);

    void NhapDSHS(HOCSINH lh[], int &n);

    void XuatDSHS(HOCSINH lh[], int n);

    int DemHSLenLop(HOCSINH lh[], int n);

    void main()

    {

    HOCSINH lh[MAX]; //Khai bo mng lh g

    m c t

    i

    a 50 h

    c sinhint n, sohsdau;

    NhapDSHS(lh, n);

    XuatDSHS(lh, n);

    sohsdau = DemHSLenLop(lh, n);

    printf(\nSo luong hoc sinh duoc len lop la: %d, sohsdau);

    getch();

    }

    void NhapNamSinh(DATE &d)

    { printf(\nNhap vao ngay: );

    scanf(%u, &d.ngay);

    printf(\nNhap vao thang: );

    scanf(%u, &d.thang);

    printf(\nNhap vao nam: );

    scanf(%d, &d.nam);

    }

    void XuatNamSinh(DATE d)

    { printf(%02u / %02u / %4d, d.ngay, d.thang, d.nam);

    }

    void Nhap1HS(HOCSINH &hs)

    {

    float d;

    lushall(); //Xoa vung dem

    printf(\nNhap ma so hoc sinh: );

    gets(hs.MSHS);printf(\nNhap ho ten hoc sinh: );

    gets(hs.hoten);

    printf(\nNhap ngay thang nam sinh: );

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    84/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang84

    flushall(); //Xoa vung dem

    NhapNamSinh(hs.ngaysinh);

    printf(\nNhap vao dia chi: );

    flushall(); //Xoa vung dem

    gets(hs.diachi);

    printf(\nPhai: );

    gets(hs.phai);

    printf(\nNhap vao diem trung binh: );

    flushall(); //Xo vngmscanf(%f, &d);//Nhp vo bin tm d sau gn vo hs.diemtbhs.diemtb=d;

    }

    void NhapDSHS(HOCSINH lh[], int &n)

    {

    printf(\nNhap vao so luong hoc sinh: );scanf(%d, &n);

    for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    85/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang85

    d++;

    return d;

    }

    Kt qu v d khi chy chng trnh:

    Nhap vao thong tin cua hoc sinh thu 1:Nhap ma so hoc sinh: 02313Nhap ho ten hoc sinh: Nguyen Van ANhap ngay thang nam sinh:Nhap vao ngay: 12Nhap vao thang: 03Nhap vao nam: 1980Nhap vao dia chi: 60 Phan Dang Luu Q.Phu NhuanPhai: NamNhap vao diem trung binh: 6.5

    Nhap vao thong tin cua hoc sinh thu 2:Nhap ma so hoc sinh: 03852Nhap ho ten hoc sinh: Ly Thi BNhap ngay thang nam sinh:Nhap vao ngay: 05Nhap vao thang: 12Nhap vao nam: 1981Nhap vao dia chi: 24 Ly Tu Trong Q.1Phai: NuNhap vao diem trung binh: 3.5

    Thong tin hoc sinh thu 1:Ma so hoc sinh: 02313

    Ho ten hoc sinh: Nguyen Van ANgay thang nam sinh: 12 / 03 / 1980Dia chi: 60 Phan Dang Luu Q.Phu NhuanPhai: NamDiem trung binh: 6.50

    Thong tin hoc sinh thu 2:Ma so hoc sinh: 03852

    Ho ten hoc sinh: Ly Thi BNgay thang nam sinh: 05 / 12 / 1981Dia chi: 24 Ly Tu Trong Q.1Phai: NuDiem trung binh: 3.50So luong hoc sinh duoc len lop la: 1

    V d 2: Cho mt mng cc phn s(PHANSO) gm n phn t(n

    50). Hy vitchng trnh nhp v xut danh sch cc phn ssau tm phn sc gi tr

    ln nht, tng v tch cc phn sv nghch o gi tr cc phn strong mng.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    86/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang86

    Cch lm:

    - Trc ht ta phi xy dng hm nhp v xut cho 1 phn s.

    - Xy dng hm tnh tng, hiu, tch, thng, rt gn, so snh v nghch o

    cho 2 phn s.

    - Sau mi xy dng hm nhp, xut, tnh tng, tch cho mng cc phn s.

    #define MAX 100

    typedef struct PHANSO

    {

    int tu, mau;

    };

    void NhapPS(PHANSO &ps);

    void XuatPS(PHANSO ps);

    void NhapMangPS(PHANSO dsps[], int &n);void XuatMangPS(PHANSO dsps[], int n);

    PHANSO TimMax(PHANSO dsps[], int n);

    int KiemTra(PHANSO ps);

    //Tra ve 1: Neu hop le

    int USCLN(int a, int b);

    PHANSO RutGon(PHANSO ps);

    PHANSO NghichDao(PHANSO ps);

    PHANSO Nhan(PHANSO ps1, PHANSO ps2);

    PHANSO Chia(PHANSO ps1, PHANSO ps2);

    PHANSO Tru(PHANSO ps1, PHANSO ps2);PHANSO Cong(PHANSO ps1, PHANSO ps2);

    int SoSanh(PHANSO ps1, PHANSO ps2);

    //Tra ve 0: ps1=ps2

    //Tra ve 1: ps1>ps2

    //Tra ve -1: ps1

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    87/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang87

    printf("\nTong gia tri cac phan so co trong mang: ");

    XuatPS(s);

    p=TichCacPS(a, n);

    printf("\nTich gia tri cac phan so co trong mang: ");

    XuatPS(p);

    NghichDaoCacPS(a, n);

    printf("\nMang phan so sau khi nghich dao cac phan tu: ");

    XuatMangPS(a, n);

    getch();

    }

    void NhapPS(PHANSO &ps)

    {do{

    printf("\nNhap tu so: ");

    scanf("%d", &ps.tu);

    printf("\nNhap mau so: ");

    scanf("%d", &ps.mau);

    if(!KiemTra(ps))

    printf("\nMau so khong duoc bang 0, nhap lai phan so\n");

    else

    break;

    } while(1);ps=RutGon(ps);

    }

    void XuatPS(PHANSO ps)

    {

    printf("%d", ps.tu);

    if(ps.tu&&ps.mau!=1)

    printf("/%d", ps.mau);

    }

    void NhapMangPS(PHANSO dsps[], int &n)

    {

    printf("\nNhap so luong phan so: ");

    scanf("%d", &n);

    for(int i=0; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    88/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang88

    for(int i=0; ib)

    a=a-b;

    else

    b=b-a;

    }

    return a;}

    PHANSO RutGon(PHANSO ps)

    {

    int us;

    if(ps.tu==0)

    return ps;

    us=USCLN(ps.tu, ps.mau);

    ps.tu=ps.tu/us;ps.mau=ps.mau/us;

    return ps;

    }

    PHANSO NghichDao(PHANSO ps)

    {

    PHANSO kq;

    kq.tu=ps.mau;

    kq.mau=ps.tu;

    return kq;}

    PHANSO Nhan(PHANSO ps1, PHANSO ps2)

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    89/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang89

    {

    PHANSO kq;

    kq.tu=ps1.tu*ps2.tu;

    kq.mau=ps1.mau*ps2.mau;

    kq=RutGon(kq);

    return kq;

    }

    PHANSO Chia(PHANSO ps1, PHANSO ps2)

    {

    PHANSO kq;

    kq=Nhan(ps1, NghichDao(ps2));

    return kq;

    }

    PHANSO Tru(PHANSO ps1, PHANSO ps2){

    PHANSO kq;

    kq.tu=ps1.tu*ps2.mau-ps1.mau*ps2.tu;

    kq.mau=ps1.mau*ps2.mau;

    kq=RutGon(kq);

    return kq;

    }

    PHANSO Cong(PHANSO ps1, PHANSO ps2)

    { PHANSO kq;

    kq.tu=ps1.tu*ps2.mau+ps1.mau*ps2.tu;

    kq.mau=ps1.mau*ps2.mau;

    kq=RutGon(kq);

    return kq;

    }

    int SoSanh(PHANSO ps1, PHANSO ps2)

    {

    ps1=RutGon(ps1);ps2=RutGon(ps2);

    if(ps1.tu==ps2.tu&&ps1.mau==ps2.mau)

    return 0;

    if(ps1.tu*ps2.mau>ps2.tu*ps1.mau)

    return 1;

    return -1;

    }

    PHANSO TimMax(PHANSO dsps[], int n)

    {PHANSO max;

    max=dsps[0];

    for(int i=1; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    90/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang90

    if(SoSanh(dsps[i], max)==1)

    max=dsps[i];

    return max;

    }

    PHANSO TongCacPS(PHANSO dsps[], int n)

    {

    PHANSO s=dsps[0];

    for(int i=1; i

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    91/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang91

    Nhap tu so: 5Nhap mau so: 6

    Nhap vao phan so thu 5:Nhap tu so: 4Nhap mau so: 7

    Mang cac phan so vua nhap: 1/3 7/4 9/7 5/6 4/7Phan so co gia tri lon nhat: 7/4Tong gia tri cac phan so co trong mang: 401/84Tich gia tri cac phan so co trong mang: 5/14Mang phan so sau khi nghich dao cac phan tu: 3 4/7 7/9 6/5 7/4

    II. BI TP

    II.1. Bi tp cbn1. Vit chng trnh s dng con tr cu trc hin th gi, pht, giy ra mn

    hnh, v tnh khong cch gia 2 mc thi gian.

    2. Vit chng trnh s dng con tr cu trc th hin ngy, thng, nm ra mn

    hnh, v tnh khong cch gia 2 ngy.

    3. Vit chng trnh khai bo kiu d liu th hin mt s phc. S dng kiu

    ny vit hm tnh tng, hiu, tch ca hai s phc.

    4. Vit chng trnh khai bo kiu d liu biu din mt phn s. Hy vit

    hm thc hin nhng cng vic sau:

    Tnh tng, hiu, tch, thng hai phn s.

    Rt gn phn s.

    Qui ng hai phn s.

    So snh hai phn s.

    5. Vit chng trnh khai bo kiu d liu biu din mt hn s. Hy vithm thc hin nhng cng vic sau :

    i hn s sang phn s

    Tnh tng, tch hai hn s

    6. Vit chng trnh khai bo kiu d liu biu din mt im trong h ta

    0xy . Hy vit hm thc hin cc cng vic sau:

    Tm nhng im i xng ca n qua tung , honh , to tm.

    Hy tnh tng, hiu, tch ca hai im trong mt phng to 0xy.

    Tnh khong cch gia hai im.

  • 8/14/2019 Giao Trinh Bai Tap Ky Thuat Lap Trinh C

    92/152

    Kiu d liu c cu trc

    Gio trnh Bi Tp K Thut Lp Trnh Trang92

    7. Cho mt hnh tr c cc thng tin sau: BanKinh (bn knh hnh tr kiu s

    thc), ChieuCao (chiu cao hnh tr kiu s thc). Hy thc hin cc cng

    vic sau.

    Nhp d liu cho hnh tr trn.

    Tnh din tch xung quanh, din tch ton phn, th tch hnh tr.

    II.2. Bi Tp Luyn Tp

    8. Vit chng trnh to mt mng cc s phc. Hy vit hm tnh tng, tch

    cc s phc c trong mng.

    9. Vit chng trnh to mt mng cc phn s. Hy vit hm thc hin cc

    cng vic sau :

    Tnh tng tt c cc phn s (kt qu di dng phn s ti gin)

    Tm phn s ln nht, phn s nh nht.

    Sp xp mng tng dn.

    10. Vit chng trnh khai bo kiu d liu STACK (cch LIFO). Vit hm

    lm nhng cng