bg lap trinh c

Upload: po-kim

Post on 05-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 bg lap trinh c

    1/98

    1

    NGN NGLP TRNH

    C/C++Nguyn nh Thun

    Khoa Cng Ngh Thng Tini hc Nha Trang

    Nha Trang, 7-2007

  • 8/2/2019 bg lap trinh c

    2/98

    2

    Ni dung mn hc

    Chng 1: Tng quan

    Chng 2: Cc ton t

    Chng 3: Cc cu trc iu khin

    Chng 4: D liu c cu trc

    Chng 5: Cc hm trong C

    Chng 6: Cc cu trc d liu khcChng 7: ha trong C

  • 8/2/2019 bg lap trinh c

    3/98

    3

    Chng 1: Tng quan

    1.1 Gii thiu

    c nhiu sch trn th gii vit v C/C++ v huht l ca ngi, nht l cc lp trnh vin lun xemC/C++ l cng c mnh v uyn chuyn.

    C l kt qu ca qu trnh pht trin khi u t ngnng BCPL (do Martin Richards a ra vo nm 1967)l sn phm ca d n Combine Programming

    Language gia 2 trng i hc London vCambridge. Ngn ng B (do Ken Thompson pht trint ngn ng BCPL vo nm 1970 khi vit h iuhnh UNIX u tin trn my PDP-7) v ngn ng B

    l tin thn ca ngn ng C.

  • 8/2/2019 bg lap trinh c

    4/98

    4

    1.1 Gii thiu (tip) Nm 1978, hai tc gi Brian Kernighan v Dennish

    Ritchie v cho xut bn quyn The C ProgrammingLanguage (Prentice-Hall) v c ph bin rng rin nay. V vy ngn ng C thng c gn cho

    Tiu chun K&R. Hin nay c gn 30 trnh bin dch C ang ph bin

    trn th trng v chng khng nht qun nhau. ci thin tnh trng ny, chun ANSI C cng c rai vo nm 1978, nhm chm lo vic pht trin ccmi trng v cc hm th vin ca C.

  • 8/2/2019 bg lap trinh c

    5/98

    5

    Cc c im ca ngn ng C:o Tnh c ng (compact): C ch c 32 t kha chun v 40 ton t chun,

    nhng hu ht u c biu din bng nhng chui k t ngn gn.o Tnh cu trc (structured): C c mt tp hp nhng ch th ca lp trnhnh cu trc la chn, lp T cc chng trnh vit bng C ct chc r rng, d hiu.

    o Tnh tng thch (compatible): C c b tin x l v mt th vin chun vcng phong ph nn khi chuyn t my tnh ny sang my tnh khc ccchng trnh vit bng C vn hon ton tng thch.

    o Tnh linh ng (flexible): C l mt ngn ng rt uyn chuyn v c php,chp nhn nhiu cch th hin, c th thu gn kch thc ca cc m

    lnh lm chng trnh chy nhanh hn.o Bin dch (compile): C cho php bin dch nhiu tp tin chng trnh ring

    r thnh cc tp tin i tng (object) v lin kt (link) cc i tng li vi nhau thnh mt chng trnh c th thc thi c (executable)

    thng nht.

  • 8/2/2019 bg lap trinh c

    6/98

    6

    1.2 Mi trng lm vic Turbo C

    1. Gi Turbo C

    2. Son tho chng trnh mi

    3. Ghi chng trnh ang son tho vo a

    4. Thc hin chng trnh5. M mt chng trnh c trn a

    6. Thot khi Turbo C v tr v DOS (hay Windows)

    7. S dng mt s lnh trn thanh menu

  • 8/2/2019 bg lap trinh c

    7/98

    7

    1.3 Cc thnh phn trong chng trnh C

    - B k t

    - Cc t kho trong C

    - Li ch thch t trong cp du /* v */

    hoc sau //

  • 8/2/2019 bg lap trinh c

    8/98

    8

    V d 1:

    /*VIDU.CPP*/

    #include

    int main()

    {

    printf(Day la vi du \n");

    printf(don gian Lap trinh C\n");

    return 0;

    }

    /*VIDU.CPP*/

    #include

    int main()

    {printf(Day la vi du \n");

    printf(don gian Lap trinh C\n");

    return 0;

    }

    ThThvin nhp xut chunvin nhp xut chunGhi chGhi ch

    Hm mainHm main

    Bo CT kt thc cho HHBo CT kt thc cho HH

  • 8/2/2019 bg lap trinh c

    9/98

    9

    V d 2

    #include

    #include

    int main(void)

    {

    int a, b;

    printf(Nhap 2 so ngguyen: ");

    scanf("%d %d", &a, &b);

    printf("%d - %d = %d\n", a, b, a - b);

    getch();

    return 0;

    }

    #include

    #include

    int main(void)

    {

    int a, b;

    printf(Nhap 2 so ngguyen: ");scanf("%d %d", &a, &b);

    printf("%d - %d = %d\n", a, b, a - b);

    getch();

    return 0;

    }

    Khai bo 2 bin snguyn, a v b

    Nhp 2 s nguynvo a v b

    Vit cc biu thc a,b v a-b theo nh

    dng %dNhap 2 so nguyen: 21 17

    21 - 17 = 4

    Nhap 2 so nguyen: 21 17

    21 - 17 = 4

  • 8/2/2019 bg lap trinh c

    10/98

    10

    Ghi ch:

    Phn ch thch c trnh bin dch b qua

    Cc t c phn bit ch hoa v ch thng

    Cu lnh lun c kt thc bng du ;

    Chui k t phi ghi gia cp nhy kp

    In xung dng dng k t \n

    Chng trnh C gm 1 hoc nhiu hm, hmc gi thc hin u tin l hm main.

  • 8/2/2019 bg lap trinh c

    11/98

    11

    1.4 Cc bc c bn khi vit

    chng trnh

    1. Phn tch, c t bi ton

    2. Tm li gii (thut ton) v kiu d liu.

    3. Vit chng trnh bng ngn ng lp trnh

    4. Chy th sa li.5. Tng kt chng trnh

  • 8/2/2019 bg lap trinh c

    12/98

    12

    1.5 Cc kiu d liu c bn

    trong C

    voidKhng gi tr

    8 bytesdoubleS thc chnhxc kp

    4 bytesfloatS thc

    2 bytesintS nguyn

    1 bytecharK t

    Kch thcT khaKiu

  • 8/2/2019 bg lap trinh c

    13/98

    13

    Kiu logic trong C

    Trong C khng c kiu d liu logic(nhn cc gi trNG SAI), thay vo cc biu thc so snh s cho kt qu

    l S Biuthc c gi tr0 (0.0) ng vi kt

    qu SAI (FALSE)

    Biu thc c gi tr khc khng nh : 1,3.5, -7, 10.4, u c xem l NG

    (TRUE)

  • 8/2/2019 bg lap trinh c

    14/98

    14

    1.5 Cc kiu d liu c bn (tip)

    B chuyn kiu (modifiers)signed (c du)

    unsigned (khng du)

    short (s nguyn ngn)long (s nguyn di gp i)

  • 8/2/2019 bg lap trinh c

    15/98

    15

    DataType

    3.4 * (10**-4932) to 1.1 * (10**+4932)80 bitslong double

    1.7 * (10**-308) to 1.7 * (10**+308)64 bitsdouble

    3.4 * (10**-38) to 3.4 * (10**+38)32 bitsfloat-2,147,483,648 to 2,147,483,64732 bitslong

    0 to 4,294,967,29532 bitsunsigned long

    -32,768 to 32,76716 bitsint

    -32,768 to 32,76716 bitsshort int

    0 to 65,53516 bitsunsigned int

    -32,768 to 32,76716 bitsenum

    -128 to 1278 bitschar0 to 2558 bitsunsigned char

    RangeLengthType

  • 8/2/2019 bg lap trinh c

    16/98

    16

    1.6 Khai bo trong C

    - Tt c cc yu t trong chng trnh do ngi lp trnh

    t ra phi c khai bo trc khi s dng, khai botrc ht phi t tn cho yu t.

    - Tn hay cn gi l danh hiu(identifier) dng t cho

    bin, hng, kiu, hm, ... Tn c t theo qui nh: Gm ch ci, ch s, du gch chn. Khng bt u bng ch s Khng trng vi t kha.

    Tn chun l mt s tn do C t sn nh: sin, cos... di ti a ca tn l khng gii hn, tuy nhin ch

    c 31 k tu tin l c ngha.

  • 8/2/2019 bg lap trinh c

    17/98

    17

    1. Khai bo bin

    Khai bo:

    Bin l i lng c ngi lp trnh nhngha v c t tn thng qua vic khai bobin. Bin dng cha d liu trong qutrnh thc hin chng trnh v gi tr ca binc th thay i trong qu trnh ny.

    Mi bin thuc v mt kiu d liu xc nh vc gi tr thuc kiu .

    ;

  • 8/2/2019 bg lap trinh c

    18/98

    18

    1. Khai bo bin (tip)

    V d:

    int a, b, c; /*Ba bin a, b,c c kiu int*/long int chu_vi; /*Bin chu_vi c kiu long*/float nua_chu_vi; /*Bin nua_chu_vi c kiu float*/double dien_tich; /*Bin dien_tich c kiu double*/

    a) Khai bo bin ngoi (bin ton cc): Cc bin c tbn ngoi tt c cc hm(k c hm main) v phm vis dng trong ton b chng trnh.

    b) Khai bo bin trong(bin cc b): Cc bin c t bn trong hm hay khi lnh. Cc bin ny ch c tcdng trong hm hoc khi lnh tng ng

  • 8/2/2019 bg lap trinh c

    19/98

    19

    1. Khai bo bin (tip)

    V d 1:#include

    #includeint a; //khai bao bien ngoaiint main ()

    {int I,j; //khai bao bien ben trong hm main

    clrscr();i=1; j=2;a=3;printf("\n Gia tri cua i la %d",i);printf("\n Gia tri cua j la %d",j);

    printf("\n Gia tri cua bienngoai a la %d",a);getch();return 0;

    }

  • 8/2/2019 bg lap trinh c

    20/98

    20

    2. Khai bo hng

    Khai bo

    Hoc c khai bo thng qua gn gi tru Hng (Constant) l i lng khng i trong qu trnh thc thi

    ca chng trnh. Hng bao gm hng s nguyn, hng s thc, hng k t, hng

    chui k t.a) Hng s:

    Hng s nguyn: 10, -167Hng s thc: 1.234, -0.34E3

    - Ngm nh, trnh bin dch ghp hng vo kiu d liu tng ng

    nh nhtV d: hng s 10 c kiu inthng s 60000 c kiu unsignedhng s 100000 c kiu long

    - C qui c cc hng s thc c kiu double

    const [kiu] = ;

  • 8/2/2019 bg lap trinh c

    21/98

    21

    2. Khai bo hng (tip)

    - Trng hp mun ch r kiu ca hng, dng tip v

    ng(suffix): U(unsigned), L (long), F(float)- V d:

    - 1,123,31000,-234 c kiu int- -34L, 20000L c kiu long- 34U, 40000 c kiu unsigned- 23.45F, 34,4-3F c kiu float- 12.23, 4522,78 c kiu double

    - Hng bt u 0X l hng thuc h c s 16- Hng bt u 0 l hng thuc h c s 8- V d:

    -

    int i=0x20, j=20, k=020; // i=32 v k=16 trong h c s 10-

  • 8/2/2019 bg lap trinh c

    22/98

    22

    V d v hngCc hng pi, t, heso c to vi t kha const

    #include

    int main(void)

    {

    const long double pi = 3.141592653590L;const t = 7;

    const heso = 9.123;

    days_in_week = 5;

    return 0;

    }

    #include

    int main(void)

    {

    const long double pi = 3.141592653590L;

    const t = 7;

    const heso = 9.123;

    days_in_week = 5;

    return 0;

    }

    LiLi

  • 8/2/2019 bg lap trinh c

    23/98

    23

    b) Hng k t- Hng k t l mt k t ring bit c vit trong

    cp du nhy n ( ). Mi mt k t tng ngvi mt gi tr trong bng m ASCII. Hng k tcng c xem nh tr s nguyn.

    V d: a, A, 0, 9- C th thc hin cc php ton s hc trn 2 k

    t (thc cht l thc hin php ton trn gi tr

    ASCII c

    a chng)

  • 8/2/2019 bg lap trinh c

    24/98

    24

    b) Hng k t(tip)Mt s k t khng tin c (c tr ASCII t 0 n 31) trnh

    bin dch C nhn bit iu ny bng cp k t bt ubng \:\n newline\t tab

    \b backspace\r carriage return\f form feed\a alert\ \ \\ \

  • 8/2/2019 bg lap trinh c

    25/98

    25

    Hng chui k tHng chui k t l mt chui hay mt xu k t

    c t trong cp du nhy kp ( ).- Cc chui c lu tr trong b nh nh l mt

    dy cc k t lin tip v kt thc bng k t

    rng (NULL) c m ASCII l 0.V d: Ngon ngu lap trinh C

    Khoa CNTT-DHNT

    - Phn bit: A v A

  • 8/2/2019 bg lap trinh c

    26/98

    26

    Hng x l trc bin dch Cc hng c thc xc lp trc khi bin

    dch Bn cht l tm kim v thay th

    Thng c t tn vi cc ch ci in hoa

    #include

    #define PI 3.141592653590L#define DAYS_IN_WEEK 7

    #define SUNDAY 0

    int day = SUNDAY;

    #include

    #define PI 3.141592653590L#define DAYS_IN_WEEK 7

    #define SUNDAY 0

    int day = SUNDAY;

    Tm t PI, thay bng 3.1415....

    Lu : khngc = v ;

  • 8/2/2019 bg lap trinh c

    27/98

    27

    3. Biu thc Biu thc l s kt hp gia cc ton t (operator) v

    cc ton hng (operand) theo ng mt trt t nht nh. Mi ton hng c th l mt hng, mt bin hoc mt

    biu thc khc. Trong trng hp, biu thc c nhiu ton t, ta dng

    cp du ngoc n () chnh ton t no c thchin trc.

    V d: Biu thc nghim ca phng trnh bc hai:

    (-b + sqrt(Delta))/(2*a)Trong 2 l hng; a, b, Delta l bin.

  • 8/2/2019 bg lap trinh c

    28/98

    28

    Chng 2: Cc ton t

    1. Ton t gn

    2. Ton t s hc

    3.Ton t quan h

    4. Ton t logic

    5. Ton t thao tc bit

    6. Ton tsizeof

    7. Ton t chn theo iu kin

    8, Ton t con tr

    9. Ton t du phy

    10.Th tu tin ca cc php ton

    11. Hm xut d liu

    12. Hm nhp d liu

  • 8/2/2019 bg lap trinh c

    29/98

    29

    1. Ton t gn:

    C php

    C th s dng lin tip nhiu php gn

    Gi trc gn s sn sng cho lnh k tip

    int i, j, k, l, m, n;

    i = j = k = l = m = n = 22;

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

    int i, j, k, l, m, n;

    i = j = k = l = m = n = 22;

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

    n = 22 gn trc, lign n cho m, m

    cho l,

    i, j, k, l, m,n u nhn gi tr 22.

    j c gn 93, gi tr 93 sc in ra mn hnh

    =

  • 8/2/2019 bg lap trinh c

    30/98

    30

    Ton t gn (tip)

    C th s dng lin tip nhiu php gn

    int i, j, k, l, m, n;

    i = j = k = l = m = n = 11;

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

    int i, j, k, l, m, n;

    i = j = k = l = m = n = 11;

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

    n = 11 gn trc, li

    gn n cho m, mcho l, i, j, k, l, m,n u nhn gi tr 11.

    j c gn 91, gi tr 91 sc in ra mn hnh

  • 8/2/2019 bg lap trinh c

    31/98

    31

    Mt s php gn c bit Cc php gn kt hp ton t khc:

    += -= *= /= %=

    &= |= ^=

    =

    Tng qut:

    =

    tng ng:

    =

    a += 27;a += 27;

    a = a + 27;a = a + 27;

    f /= 9.2;f /= 9.2;

    f = f / 9.2;f = f / 9.2;

    i *= j + 2;i *= j + 2;

    i = i * (j + 2);i = i * (j + 2);

  • 8/2/2019 bg lap trinh c

    32/98

    32

    2. Cc cc php ton s hc

    + cng

    - tr* nhn

    / chia

    % chia ly dLu :

    / cho kt qu ph thuc vo kiu ca cc ton hng

    % khng thc hinc vi cc s thc

  • 8/2/2019 bg lap trinh c

    33/98

    33

    V d v ton t chia /

    Trnh bin dch da vo kiu ca cc ton

    hng quyt nh php chia tng ngint main(void)

    {

    int i = 5, j = 4, k;

    double f = 5.0, g = 4.0, h;

    k = i / j;

    h = f / g;

    h = i / j;

    return 0;

    }

    int main(void)

    {

    int i = 5, j = 4, k;

    double f = 5.0, g = 4.0, h;

    k = i / j;

    h = f / g;

    h = i / j;

    return 0;

    }

    i, j kiu int, / lphp chia ly nguyn k nhn gi tr 1

    f, g kiu double, /l php chia s thc h nhn gi tr 1.25

    Php chia nguyn, btk h c kiu double.

    Kt qu l 1.00000

  • 8/2/2019 bg lap trinh c

    34/98

    34

    Php tng (gim) 1 NNLT C c 2 ton tc bit h tr vic tng (gim)

    gi tr ca mt bin thay i 1 n v++ tng 1

    -- gim 1

    Cc ton t ny c tht trc hoc sau bin.

    int i = 5, j = 4;

    i ++;

    -- j;

    ++ i;

    int i = 5, j = 4;

    i ++;

    -- j;

    ++ i;

    i 6

    j 3

    i 7

  • 8/2/2019 bg lap trinh c

    35/98

    35

    Tr

    c hay sau ?Th t thc hin cc ton t ++ v -- ph thuc

    vo v tr ca chng (trc hay sau) so vi bin:#include

    intmain(void)

    {int i, j = 5;

    i = ++j;

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

    j = 5;

    i = j++;

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

    return 0;

    }

    #include

    int main(void)

    {int i, j = 5;

    i = ++j;

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

    j = 5;

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

    return 0;

    }

    i=6, j=6

    i=5, j=6

    i=6, j=6

    i=5, j=6

    Tng ng:1. j++;2. i = j;

    Tng ng:1. i = j;2. j++;

  • 8/2/2019 bg lap trinh c

    36/98

    36

    Chuyn kiu/p kiu (Type Casting) Chuynkiu lm thay i tm thikiu ca mt

    bin trong mt biu thc.int main(void)

    {

    int i = 5, j = 4;

    double f;

    f = (double)i / j;

    f = i / (double)j;

    f = (double)i / (double)j;

    f = (double)(i / j);

    return 0;

    }

    int main(void)

    {

    int i = 5, j = 4;

    double f;

    f = (double)i / j;

    f = i / (double)j;

    f = (double)i / (double)j;f = (double)(i / j);

    return 0;

    }

    Php chia s nguync thc hin, kt

    qu, 1, c i sang

    kiu double, 1.00000

  • 8/2/2019 bg lap trinh c

    37/98

    37

    3. Cc ton t quan h (Relational Operators)

    NNLT C h tr cc ton t quan h:

    < b hn ln hn>= ln hn hay bng

    == bng

    != khc

    Tt cu cho kt qu1 khi so snh ng

    v 0 trong trng hp ngc li.

  • 8/2/2019 bg lap trinh c

    38/98

    38

    4. Ton t logic

    NNLT C h tr cc ton t logic:

    && v (and)

    || hoc (or)

    ! phnh (not)

    Tt cu cho kt qu 1 hoc 0 tng ng

    cc trng hp NG hoc SAIint i, j = 10, k = 28;

    i = ((j > 5) && (k < 100)) || (k > 24);

    int i, j = 10, k = 28;

    i = ((j > 5) && (k < 100)) || (k > 24);

  • 8/2/2019 bg lap trinh c

    39/98

    39

    5. Ton t thao tc bit (Bitwise Operators)

    Cc ton t trn bit ch c tc dng trn cc kiu s

    nguyn:& And

    | Or

    ^ Xor

    ~ Not

    > Shift Right

  • 8/2/2019 bg lap trinh c

    40/98

    40

    6. Ton tsizeof

    sizeof(Obj)

    Cho bit kch thc ca i tng theo s byte#include

    int main(void){

    long big;

    printf("\"big\" is %u bytes\n", sizeof(big));

    printf("a short is %u bytes\n", sizeof(short));

    printf("a double is %u bytes\n", sizeof (double));

    return 0;

    }

    #include

    int main(void){

    long big;

    printf("\"big\" is %u bytes\n", sizeof(big));

    printf("a short is %u bytes\n", sizeof(short));

    printf("a double is %u bytes\n", sizeof (double));

    return 0;

    }

    "big" is 4 bytes

    a short is 2 bytes

    a double is 8 bytes

    "big" is 4 bytes

    a short is 2 bytes

    a double is 8 bytes

  • 8/2/2019 bg lap trinh c

    41/98

    41

    7. Ton t chn theo iu kin(iu kin) ? BT1 : BT2

    Biu thc nhn gi trBT1 nu iu kin khc 0(NG), cc trng hp khc nhn gi trBT2

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

    i = (j > k) ? j : k;

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

    i = (j > k) ? j : k;

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

    i = (j < k) ? j : k;

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

    i = (j < k) ? j : k;

    Nu (j > k)i = j;Ngc li

    i = k;

    Nu (j > k)i = j;

    Ngc li

    i = k;

    Nu (j < k)i = j;

    Ngc li

    i = k;

    Nu (j < k)i = j;Ngc li

    i = k;

  • 8/2/2019 bg lap trinh c

    42/98

    42

    8. Ton t con tr

    + Mt con tr l a ch trong b nh ca mt bin. Mt bincon tr l mt bin c khai bo ring cha mt con

    trn mt i tng ca kiu ch ra n.+ C hai ton tc s dng thao tc vi cc con tr.- Ton t th nht l &, l mt ton t quy c tr vach b nh ca h s ca n.V d: p = &n

    t vo bin m a ch b nh ca bin count.Chng hn, bin n v tr b nh 2000, gi s n c gi trl 100. Sau cu lnh trn p s nhn gi tr 2000.- Ton t th hai l *, l mt b sung cho & y l mtton t quy c tr v gi tr ca bin c cp pht ti

    a ch theo sau .V d: m = *pSt gi tr ca n vo m. By gi m s c gi tr l 100 v100 c lu tr ti a ch 2000.

  • 8/2/2019 bg lap trinh c

    43/98

    43

    9. Ton t du phy ,

    Ton t du , c s dng kt hp cc

    biu thc li vi nhau. Bn tri ca ton tdu , lun c xem l kiu void. iu c ngha l biu thc bn phi tr thnh gi

    tr ca tng cc biu thc c phn cchbi du phy. V d: x = (y=3,y+1);

    Trc ht gn 3 cho y ri gn 4 cho x. Cpdu ngoc n l cn thit v ton t du ,c u tin thp hn ton t gn.

  • 8/2/2019 bg lap trinh c

    44/98

    44

    10. u tin ca ton t

    Th t thc hin cc ton t trong mt biu thc phthuc vo u tinca chng.

    C 15 mc u tin.

    Thng thng, ton t mt ngi c u tin cao hnton t hai ngi.

    Cc cp du ngoc n () thng c dng ch rth t cc ton t.

    #include

    int main(void){

    int j = 3 * 4 + 48 / 7;

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

    return 0;

    }

    #include

    int main(void)

    {

    int j = 3 * 4 + 48 / 7;

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

    return 0;

    } j = 18j = 18

  • 8/2/2019 bg lap trinh c

    45/98

    45

    Bng th t thc hin cc ton t

    Ton t Th t (nu cng T)() [] -> .

    ! ++ -- - + (cast) * & sizeof * / %

    + -

    >

    < = > == !=

    &

    |

    ^

    &&

    ||

    ?:

    = += -= *= /= %=

  • 8/2/2019 bg lap trinh c

    46/98

    46

    V d

    #include

    int main(void)

    {

    int i = 0, j, k = 7, m = 5, n;

    j = m += 2;

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

    j = k++ > 7;

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

    j = i == 0 & k;

    printf("j = %d\n", j);n = !i > k >> 2;

    printf("n = %d\n", n);

    return 0;

    }

    #include

    int main(void)

    {

    int i = 0, j, k = 7, m = 5, n;

    j = m += 2;

    printf("j = %d\n", j);j = k++ > 7;

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

    j = i == 0 & k;

    printf("j = %d\n", j);n = !i > k >> 2;

    printf("n = %d\n", n);

    return 0;

    }

  • 8/2/2019 bg lap trinh c

    47/98

    47

    11. Hm xut - printf

    Xut d liu ra mn hnh:

    printf("%d- %d=%d\n",a,b, a- b);

    Cc k t hng c in nguyn vn

    Cc k tnh dng c thay bng gi tr ca biu thc tngng:

    %d: k tnh dng s nguyn kiu int

    Cc k tiu khin: \n xung dng; \t du tab;\\ du \; \ du

    Th vin: stdio.h

    printf(Chui nh dng , Cc biu thc);

  • 8/2/2019 bg lap trinh c

    48/98

    48

    11. Hm xut printf (tip)

    In s thc c 3 s l, nu s cn in c nhiu hn 3 s l th lm trn.%.3f

    In s thc ti a 6 k s (tnh lun du chm), nu s cn in nhiu hn 6k s th in ht

    %6f

    In s thc%f

    In s nguyn ti a 4 k s, nu s cn in nhiu hn 4 k s th in ht%4d

    In ra s nguyn%d

    V d

    Xut s nguyn dng khoa hc (nhn 10 m x)%e hoc %E hoc %g hoc%G

    Xut chui k t%s

    Xut mt k t%c

    Xut s nguyn h thp lc phn%x

    Xut s nguyn h bt phn%o

    Xut s thc c theo quy tc lm trn s.%[.s ch s thp phn] f

    Xut s nguyn%d

  • 8/2/2019 bg lap trinh c

    49/98

    49

    12. Hm nhp - scanf

    Nhp d liu t bn phm

    scanf("%d %d", &a, &b);

    Trong chui nh dng ch c k tnh dng v khong

    trng. D liu phi c nhp vo cc bin.

    Trc tn bin phi ghi du & - ton ta ch. Nu

    khng c ton ta ch, gi tr ca bin s khng ccp nht

    Th vin: stdio.h

    scanf(Chui nh dng, a ch ca cc bin);

  • 8/2/2019 bg lap trinh c

    50/98

    50

    12. Hm nhp scanf(tip)

    Nhp s thc ti a 6 k s (tnh lun du chm), nu nhp nhiu hn 6 k s th chnhn c 6 k s u tin (hoc 5 k s vi du chm)

    %6f

    Nhp s thc%f

    Nhp s nguyn ti a 4 k s, nu nhp nhiu hn 4 k s th ch nhn c 4 k su tin

    %4d

    Nhp s nguyn%d

    V d:

    Nhp mt k t%c

    Nhp s thc c ti a tnh c du chm%[s k s] f

    Nhp s nguyn c ti a %[s k s]d

    nghanh dng

  • 8/2/2019 bg lap trinh c

    51/98

    51

    Chng 3: Cc cu trc iu khin

    1. Lnh if

    2. Lnh switch3. Lnh for

    4. Lnh while

    5. Lnh do .. While

  • 8/2/2019 bg lap trinh c

    52/98

    52

    1. Lnh if Dng thc hin hay khng mt

    pht biu theo mt iu kin. Dng 1:if () ;

    V dif (delta > 0){

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

    Bthc K

    Lnh S

    T

    Ch c 1pht biutrong thnca if

    F

  • 8/2/2019 bg lap trinh c

    53/98

    53

    Dng 2 ca lnh if Dng chn la pht biu no sc thc hin

    gia 2 pht biu. C php:if (< Bthc K >) ; else ;

    #include #include int main ()

    {float a;printf("Nhap a = "); scanf("%f",&a);if (a !=0 )

    printf("Nghich dao cua %f la %f",a,1/a);

    elseprintf(Khong the tim nghich dao cua a);

    getch();return 0;

    }

    Bthc K

    Lnh S1

    T

    F

    Lnh S2

  • 8/2/2019 bg lap trinh c

    54/98

    54

    Trng hp c bit Xt pht biu sau: if () if () ; else ;

    else s thuc v if no gn 1 cha c else

    else else?

    K2

    S1

    Yes

    No

    S2

    K2

    Yes

    No

  • 8/2/2019 bg lap trinh c

    55/98

    55

    2. Lnh switch Dng chn mt

    trong s nhng

    pht biu thchin ty theo gi trca biu thc chn.

    Cc gi tr case: ch

    ra cc trng hpphn nhnh. Cc gi tr case l

    mt hay nhiu gi

    tr ri rc theo saul du : v mt phtbiu tng ng, ktthc l break.

    C php:switch ()

    {case : ; break;case : ; break;

    [default : ;]}

    BiuThc

    S1 S2 Sn+1Sn

    Gtr1 Gtr2 GtrN default

    V d 1

  • 8/2/2019 bg lap trinh c

    56/98

    56

    V d 1

    Nhp vo mt s nguyn, chia s nguyn ny cho 2 ly phn d. Kim tranu phn d bng 0 th in ra thng bo s chn, nu s d bng 1 thin thng bo s l.

    #include #includeint main (){ int songuyen, phandu;

    clrscr();printf("\n Nhap vao so nguyen ");scanf("%d",&songuyen); phandu=(songuyen % 2);switch(phandu)

    {

    case 0: printf("%d la so chan ",songuyen); break;case 1: printf("%d la so le ",songuyen); break;}

    getch();return 0;

    }

    V d 2

  • 8/2/2019 bg lap trinh c

    57/98

    57

    V d 2

    V d 2: Nhp vo 2 s nguyn v 1 php ton.- Nu php ton l +, -, * th in ra kt qua l tng, hiu, tch ca 2 s.- Nu php ton l / th kim tra xem s th 2 c khc khng hay khng? Nu khc khng th in ra

    thng ca chng, ngc li th in ra thng bo khong chia cho 0.#include #includeint main (){ int so1, so2; float thuong; char pheptoan;

    printf("\n Nhap vao 2 so nguyen "); scanf("%d%d",&so1,&so2);fflush(stdin); /*Xa k t enter trong vng m trc khi nhp php ton */

    printf("\n Nhap vao phep toan "); scanf("%c",&pheptoan);switch(pheptoan){ case '+': printf("\n %d + %d =%d",so1, so2, so1+so2); break;

    case '-': printf("\n %d - %d =%d",so1, so2, so1-so2); break;case '*': printf("\n %d * %d =%d",so1, so2, so1*so2); break;case '/': if (so2!=0)

    { thuong=float(so1)/float(so2);printf("\n %d / %d =%f", so1, so2, thuong); }else printf("Khong chia duoc cho 0"); break;

    default : printf("\n Chua ho tro phep toan %c", pheptoan); break;}getch();return 0;

    }

    3 Lnh for

  • 8/2/2019 bg lap trinh c

    58/98

    58

    3. Lnh for

    Lnh for cho php lp li cc lnh cho n khi Biu thciu kin 2 l sai

    C php: for (;;)

    Bthc 2

    Lnh S

    T

    F

    BThc 3

    Bthc 1V d: Vit chng trnh nhp vo mt s nguynn. Tnh tng ca cc s nguyn t 1 n n.

    #include #includeint main (){ unsigned int n,i,tong;

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

    tong=0;for (i=1; i

  • 8/2/2019 bg lap trinh c

    59/98

    59

    4. Lnh whileDng lp li mt cng vic no

    cho n khi iu kin sai.

    C phpwhile()

    while kim tra iu kin trc ri mithc hin lnh S.

    S lp lp l khng bit trc.S ln lp ti thiu l 0 v ti a l

    khng xc nh.Ch : Trong thn ca while phi c

    t nht mt pht biu c kh nngthayi gi trcaiu kin. Nukhng s lp v tn (infinite loop)

    V d:gt=1; i=1;

    while (i

  • 8/2/2019 bg lap trinh c

    60/98

    60

    V d v lnh whileV d 2: Vit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc

    s nguyn t 1 n n.#include #includeint main (){ unsigned int n,i,tong;

    printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n);tong=0;i=1;while (i

  • 8/2/2019 bg lap trinh c

    61/98

    61

    5. Lnh do .. while

    Vng lp do while dng lp li mt cng vic

    no khi iu kin cn ng.C php:

    do while ()

    Thc hin xong lnh S mi kim tra iu kin. S lp lp l khng bit trc. S ln lp ti thiu l 1 v ti a l khng xc

    nh. Ch : Trong thn ca do .. While phi c t

    nht mt pht biu c kh nng thayi gi trcaiu kin. Nu khng s lp v tn (infiniteloop)

    BTK

    S

    F

    T

  • 8/2/2019 bg lap trinh c

    62/98

    62

    V d v lnh do .. whileVit chng trnh nhp vo mt s nguyn n. Tnh tng ca cc s nguyn

    t 1 n n.#include

    #includeint main (){ unsigned int n,i,tong;

    printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n);tong=0;i=1;do{

    tong+=i;

    i++;} while (i

  • 8/2/2019 bg lap trinh c

    63/98

    63

    6. CC CU LNH C BIT1. Lnh break C php: breakDng thot khi vng lp. Khi gp cu lnh ny trong vng lp, chng trnh s

    thot ra khi vng lp v chn cu lnh lin sau n. Nu nhiu vng lp th

    break s thot ra khi vng lp gn nht. Ngoi ra, break cn c dng trongcu trc la chn switch.

    2. Lnh continue C php: continue- Khi gp lnh ny trong cc vng lp, chng trnh s b qua phn cn li trongvng lp v tip tc thc hin ln lp tip theo.

    - i vi lnh for, biu thc 3 sc tnh tr v quay li bc 2.- i vi lnh while, do while; biu thc iu kin sc tnh v xt xem c thtip tc thc hin na hay khng? (da vo kt qu ca biu thc iukin).

    V d: while (x != y){

    if (x==a) continue;b+=6;if (y==b) break;

    }

    Chng 4: Cc hm trong C

  • 8/2/2019 bg lap trinh c

    64/98

    64

    Chng 4: Cc hm trong C

    1. Khi nim hm trong C Ti sao phi dng chng trnh con:

    C cng vic cn phi c thc hin ti nhiu ni trong chngtrnh => tch cng vic thnh chng trnh con

    Phn on, module chng trnh thun tin trong qun l,trnh by v pht trin.

    Trong C, chng trnh con c gi l hm. Hm trong C cth tr v kt qu thng qua tn hm hay c th khng tr vkt qu.

    Hm c hai loi: hm chun (hm c trnh bin dch C vitsn) v hm tnh ngha.

    Mt hm khi c nh ngha th c thc gi trongchng trnh. Trong C, hm main() c gi thc hin u tin

    V d

  • 8/2/2019 bg lap trinh c

    65/98

    65

    V d

    Vit hm main dng nhp vo 2 s nguyn a,b v in ra mn hnh s ln trong 2s nhp

    #include

    #include int max(int a, int b);

    int main(){

    int a, b, c;printf("\n Nhap vao 3 so a, b,c ");scanf("%d%d%d",&a,&b,&c);printf("\n So lon la %d",max(a, max(b,c)));getch();return 0;

    }

    int max(int a, int b){

    return (a>b) ? a:b;}

    Ghi ch

  • 8/2/2019 bg lap trinh c

    66/98

    66

    Ghi ch

    - Dng int max(int a, int b); gi l Prototype ca hm, qui nhkiu tr v ca hm, s lng tham s v kiu ca chng.

    - Cc Prototype ca cc hm sn c cha trong cc tp tin *.h- Hm c thc gi bi hm main(), hoc t mt hm khchoc chnh n( qui).

    - Hm c th c tham s hoc khng.- Hm ch c 1 im vo (lnh u tin ca hm) nhng c th

    c nhiu im ra (lnh return).- Mt hm c thc vit ngay trong vn bn chng trnh(nh trn), hoc c vit trong tp tin khc v a vochng trnh bng ch th #include, hoc c bin dch ringr v kt ni li.

    - Khc vi ngn ng lp trnh Pascal:- Ngn ng C khng c khi nim th tc (tht ra th tc khngkhc hm, th tc khng quan tm n gi tr tr v)

    - Khng cho php cc hm lng vo nhau

    2. Hm th vin/hm chun

  • 8/2/2019 bg lap trinh c

    67/98

    67

    2. Hm th vin/hm chun

    Hm th vin l nhng hm c nh ngha sn trong mt th vinno , mun s dng cc hm th vin th phi khai bo th vin trckhi s dng bng lnh #include

    ngha ca mt s thvin thng dng:1. stdio.h : Th vin cha cc hm vo/ ra chun (standard input/output). Gm cc

    hm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(),fread(), fwrite(), getchar(), putchar(), getw(), putw()

    2. conio.h : Th vin cha cc hm vo ra trong ch DOS (DOS console). Gmcc hm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(),

    clreol(),3. math.h: Th vin cha cc hm tnh ton gm cc hm abs(), sqrt(), log().log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),

    4. alloc.h: Th vin cha cc hm lin quan n vic qun l b nh. Gm cchm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),

    5. io.h: Th vin cha cc hm vo ra cp thp. Gm cc hm open(), _open(),

    read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(),filelength(), lock(),6. graphics.h: Th vin cha cc hm lin quan n ha. Gm initgraph(),

    line(), circle(), putpixel(), getpixel(), setcolor(), ...Mun s dng cc hm th vin th ta phi xem c php ca cc hm v s dng

    theo ng c php (xem trong phn tr gip ca Turbo C).

    3. Hm ca ngi s dng

  • 8/2/2019 bg lap trinh c

    68/98

    68

    g g

    Hm ngi dng l nhng hm do ngi lptrnh t to ra nhm p ng nhu cu x l ca

    mnh.Cu trc ca hm:

    ([ ][,][])

    { [Khai bo][return ;]

    }

  • 8/2/2019 bg lap trinh c

    69/98

    69

    Truyn Bng Tr - Tham bin - Tham ChiuV d: Vit chng trnh hon v 2 phn t

    #include// Truyn bng tham trvoid Swap1 (int x, int y)

    {

    int temp = x;

    x = y;

    y = temp;

    }// Truyn bng tham bin (con tr)void Swap2 (int *x, int *y)

    {

    int temp = *x;

    *x = *y;

    *y = temp;

    }

    // Truyn bng tham chiuvoid Swap3 (int &x, int &y)

    {

    int temp = x;

    x = y;

    y = temp;

    }

    12345

    6789

    1011

    12131415161718

    int main(){ int m=12; n=28;

    Swap1(m,n);printf(m=%d n=%d\n,m,n);Swap2(&m,&n);printf(m=%d n=%d\n,m,n);Swap3(m,n);

    printf(m=%d n=%d\n,m,n);return 0;

    }

    ??

    4. Tham tr v tham bin

  • 8/2/2019 bg lap trinh c

    70/98

    70

    Mc nhin, vic truyn tham s cho hm trong C l truyn theo gi tr; ngha lcc gi tr thc (tham s thc) khng b thay i gi tr khi truyn cho cctham s hnh thc

    V d 1: Gi s mun in ra cc, mi dng gm 50 k t no . n gin tavit hm, hm ny s in ra trn mt dng 50 k t cho trc.

    #include #include void InKT(char ch)

    { int i;for(i=1;i

  • 8/2/2019 bg lap trinh c

    71/98

    71

    nh ngha: Mt hm c gi l quy nu bn trong thn hm c lnh gi n chnh n.V d: nh ngha giai tha ca mt s nguyn dng n nh sau:

    n!=1* 2 * 3 ** (n-1) *n = (n-1)! *n (vi 0!=1)

    Nh vy, tnh n! ta thy nu n=0 th n!=1 ngc li th n!=n * (n-1)!Vi nh ngha trn th hm quy tnh n! c vit:#include #include

    /*Hm tnh n! bng quy*/unsigned int giaithua_dequy(int n){

    if (n==0) return 1;else return n*giaithua_dequy(n-1);

    }

    /*Hm tnh n! khng quy*/unsigned int giaithua_khongdequy(int n)

    { unsigned int kq,i;kq=1;for (i=2;i

  • 8/2/2019 bg lap trinh c

    72/98

    72

    c im cn lu khi vit hm quy

    - Hm quy phi c 2 phn:+ Phn dng hay phi c trng hp nguyn t. Trong v d

    trn th trng hp n=0 l trng hp nguyn t.+ Phn quy: l phn c gi li hm ang c nh ngha.Trong v d trn th phn quy l n>0 th n! = n * (n-1)!

    - S dng hm quy trong chng trnh s lm chng trnh dc, d hiu v vn c nu bt r rng hn. Tuy nhintrong a s trng hp th hm quy tn b nh nhiu hnv tc thc hin chng trnh chm hn khng quy.

    - Ty tng bi c c th m ngi lp trnh quyt nh c nn dng quy hay khng (c nhng trng hp khng dng quy

    th khng gii quyt c bi ton).

    6. Tham s ca hm main()

  • 8/2/2019 bg lap trinh c

    73/98

    73

    - L 2 tham s : argc v argv

    - Tham s argc l s nguyn ch tham s trn dng lnh, c gi tr nh nht =1,

    v bn thn tn chng trnh l tham s th nht- Tham s argv l mng cc con tr, trn cc tham s trn dng lnh: char

    *argv[ ];

    argv[0]: cha a ch ca tn chng trnh

    argv[1]: cha a ch ca tham s th nht

    argv[2]: cha a ch ca tham s th hai

    V d: Chng trnh sau c bin dch thnh MYPRO.EXE, nu nhp trn dng lnhMYPRO th c dng nhc nh, nu nhp MYPRO LAN th Chao ban LAN

    #include

    main(int argc, char *argv[])

    {

    if (argc !=2) printf(Phai nhap Ten);

    else printf(Chao ban %s\n,argv[1]);

    }

    Chng 5: D liu c cu trc

  • 8/2/2019 bg lap trinh c

    74/98

    74

    1. Kiu mng:- Mng l mt tp hp cc phn t cnh c cng mt kiu, gi l

    kiu phn t. Kiu phn t c th l c cc kiu bt k: k t, s,chui k t; cng c khi ta s dng kiu mng lm kiuphn t cho mt mng (trong trng hp ny ta gi l mng camng hay mng nhiu chiu).

    - C th chia mng lm 2 loi: mng 1 chiu v mng nhiu chiu.- Khai bo mng vi s phn t xc nh

    C php: ngha:- Tn mng: y l mt ci tn t ng theo quy tc t tn ca

    danh biu. Tn ny cng mang ngha l tn bin mng.- S phn t: l mt hng s nguyn, cho bit s lng phn t ti

    a trong mng l bao nhiu (ni khc l kch thc ca mng).- Kiu: mi phn t ca mng c d liu thuc kiu g.- Khi khai bo mt bin mng gm c s phn tphn t, phn t

    th nht l tn mng[0], phn t cui cng l tn mng[sphn t-1]

  • 8/2/2019 bg lap trinh c

    75/98

    75

    1. Kiu mng(tip)V d: int a[10]; /* Khai bo bin mng a gm 10 phn t , phn t thnht l a[0], phn t cui cng l a[9].*/

    C th coi mng a l mt dy lin tip cc phn t trong b nh nh sau:

    2. Khai bo mng vi s phn t khng xc nhC php:

    Khi khai bo, khng cho bit r s phn t ca mng, kiu khai bony thng c p dng trong cc trng hp: va khai bo vagn gi tr, khai bo mng l tham s hnh thc ca hm.

    a. Va khai bo va gn gi trC php: []= {Cc gi tr phn cch bi du ,}Nu va khai bo va gn gi tr th mc nhin C s hiu s phn tca mng l s gi tr m chng ta gn cho mng trong cp du {}.

    b. Khai bo mng l tham s hnh thc ca hm, trong trng hp ny takhng cn chnh s phn t ca mng l bao nhiu.

    V tr 0 1 2 3 4 5 6 7 8 9Tn phn t a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

  • 8/2/2019 bg lap trinh c

    76/98

    76

    1. Kiu mng(tip)- Truy xut tng phn t ca mng+ Mi phn t ca mng c truy xut thng qua Tn bin mngtheo sau l ch s nm trong cp du ngoc vung [ ]. Chng hna[0] l phn tu tin ca mng a c khai bo trn. Ch sca phn t mng l mt biu thc m gi tr l kiu s nguyn.+ Vi cch truy xut theo kiu ny, Tn bin mng[Ch s] c th coinh l mt bin c kiu d liu l kiu c ch ra trong khai bobin mng.

    V d 2: Va khai bo va gn tr cho 1 mng 1 chiu cc s nguyn. In

    mng s nguyn ny ln mn hnh.#include #include int main(){

    int n,i,j,tam;

    int dayso[]={66,65,69,68,67,70};n=sizeof(dayso)/sizeof(int); /*Ly s phn t*/printf("\n Noi dung cua mang ");for (i=0;i

  • 8/2/2019 bg lap trinh c

    77/98

    77

    1. Kiu mng(tip)V d 4: Nhp vo mt dy n s v sp xp cc s theo th t tng.#include#includevoid Nhap(int a[],int N)

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

    printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);

    }}

    void InMang(int a[], int N){ int i;

    for (i=0; i

  • 8/2/2019 bg lap trinh c

    78/98

    78

    1. Kiu mng(tip)V d: Vit chng trnh cho php nhp 2 ma trn a, b c m dng n ct, thc hin php toncng hai ma trn a,b v in ma trn kt qu ln mn hnh.

    #include#include

    void Nhap(int a[][10],int M,int N){ int i,j;for(i=0;i

  • 8/2/2019 bg lap trinh c

    79/98

    79

    Mng nhiu chiu

    20253828Brisbane

    13193224Melbourne

    17223426Sydney

    Ma ngMa thuMa hMa xun

    int Mua[3][4];

    ... 32 19 13 28 38 25 ...26 34 22 17 24 20

    First row Second row Third rowhng u hng hai hng ba

    Cch t chc trong b nh

    2. Kiu chui k t

  • 8/2/2019 bg lap trinh c

    80/98

    80

    - Kiu chui k t l mt trnghp c bit ca mng cc k

    t. Chui k t kt thc bngk t c m ASCII l 0 (\0)

    - Do , char[10]; //lu tr tia 9 k t

    Ghi ch:+ Khi p dng cc php tontrn chui, ta phi s dngcc hm (string.h)

    V d:-Hm strcpy(chui1,chui 2):chp chui 2 vo chui 1

    -Hm strcmp(chui1,chui2):so snh 2 chui tr v 0 nu 2

    chui bng nhau .

    V d: Nhp vo mt chui v hin thtrn mn hnh chui va nhp.#include

    #include#includeint main(){ char Ten[12];

    printf("Nhap chuoi: ");gets(Ten);printf("Chuoi vua nhap: ");puts(Ten);getch();

    return 0;}

    3. Kiu con tr

  • 8/2/2019 bg lap trinh c

    81/98

    81

    - Cc bin trc y u l bin c kch thc v kiu d liu xc nh. Gi cc binkiu ny l bin tnh. Khi khai bo bin tnh, cc nh sc cp pht m khng bittrong qu trnh chy chng trnh c s dng ht chng hay khng.

    - Cc bin tnh dng ny s tn ti trong sut thi gian thc thi chng trnh d cnhng bin m chng trnh ch s dng 1 ln ri b. Cc hn ch v bin tnh:

    - Cp pht nh d, gy ra lng ph nh.

    - Cp pht nh thiu, chng trnh thc thi b li.

    - gii quyt nhng hn ch trn, ngn ng C cung cp cho ta mt loi bin c bitgi l bin ng vi cc c im sau:- Ch pht sinh trong qu trnh chy chng trnh ch khng pht sinh lc bt u chng trnh.

    - Khi chy chng trnh, kch thc ca bin, vng nh v a ch vng nhc cp pht chobin c th thay i.

    - Sau khi s dng xong c th gii phng tit kim ch trong b nh.

    - V th, ngn ng C li cung cp cho ta mt loi bin c bit na khc phc tnhtrng ny, l bin con tr (pointer) vi cc c im:

    - Bin con tr khng cha d liu m ch cha a ch ca d liu hay cha a ch ca nh

    - Kch thc ca bin con tr khng ph thuc vo kiu d liu, lun c kch thc cnh l 2

    bytes nu trong cng 1 on v 4 bytes nu khc on.

    3. Kiu con tr(tip)

  • 8/2/2019 bg lap trinh c

    82/98

    82

    a. Khai bo bin con trC php: *

    V d 1: Khai bo 2 bin a,b c kiu int v 2 bin pa, pb l 2 bin con tr kiu int.int a, b, *pa, *pb;V d 2: Khai bo bin f kiu float v bin pf l con tr floatfloat f, *pf;

    b. Cc php ton trn con tr

    +. Php gn con tr: Hai con tr cng kiu c th gn cho nhau.V d: int a, *p, *a ; float *f;a = 5 ;p = &a ;q = p ;/* ng */f = p ; /* sai do khc kiu */

    + Cng, tr con tr vi mt s nguyn: C th cng (+), tr (-) 1 con tr vi 1 snguyn N no ; kt qu tr v l 1 con tr. Con tr ny chn vng nh cchvng nh ca con tr hin ti N phn t.

    - n v tng hay gim ca con tr c kch thcca bin c trn

    4. Con trc dng nh mng.

  • 8/2/2019 bg lap trinh c

    83/98

    83

    V d: Cho 1 mng 1 chiu cc s nguyn a c 5 phn t, truy cp cc phn t theokiu mng v theo kiu con tr.

    #include

    #include /* Nhp mng bnh thng*/void NhapMang(int a[], int N){ int i;

    for(i=0;i

  • 8/2/2019 bg lap trinh c

    84/98

    84

    a. Hm cp pht:void *malloc(size_t size): Cp pht vng nh c kch thc l size.

    void *calloc(size_t nitems, size_t size): Cp pht vng nh c kch thc l

    nitems*size.V d: Gi s ta c khai bo:int a, *pa, *pb; pa = (int*)malloc(sizeof(int)); /* Cp pht vng nh c kchthc bng vi kch thcca mt s nguyn */pb= (int*)calloc(10, sizeof(int)); /* Cp pht vng nh c th cha c 10 s

    nguyn*/Lu : Khi s dng hm malloc() hay calloc(), ta phi p kiu v nguyn mu cchm ny tr v con tr kiu void.

    b. Thu hi vng nh: Mt vng nh cp pht cho bin ng do bin con tr gia ch, khi khng cn s dng na, ta s thu hi li vng nh ny nh hmfree().C php: void free(void *block)

    ngha: Gii phng vng nhc qun l bi con tr block.V d: v d trn, sau khi thc hin xong, thu hi vng nh cho 2 bin con tr pa

    v pb nh sau:free(pa); free(pb);

    Chng 6: Cc cu trc dliu khc

  • 8/2/2019 bg lap trinh c

    85/98

    85

    1. Kiu cu trc(Structure): l kiu d liu bao gmnhiu thnh phn c kiu khc nhau, mi thnh

    phn c gi l mt trng (field)a. Khai bo:

    Cch 1:struct {

    ; ;..

    ;};

    Cch 2: S dng t khatypedef nh ngha kiu:typedef struct{

    ; ;..

    ;} ;

    1. Kiu cu trc(tip)

  • 8/2/2019 bg lap trinh c

    86/98

    86

    struct svien{

    char hoten[30];char diachi[40];float dtb;

    };

    typedef struct{

    char hoten[30];char diachi[40];float dtb;

    } sinhvien;

    Khai bo bin:struct svien sv1,sv2;

    sinhvien sv3, sv4;

    b. Truy xut n mt trng ca bin cu trcCch 1: .Cch 2: ->

    V d v kiu cu trc

  • 8/2/2019 bg lap trinh c

    87/98

    87

    #include#include#includetypedef struct

    { unsigned char Ngay,Thang,Nam;} NgayThang;

    typedef struct{ char MSSV[10];

    char HoTen[40];NgayThang NgaySinh;int Phai;char DiaChi[40];

    } SinhVien;

    /* Hm in ln mn hnh 1 mu tin SinhVien*/void InSV(SinhVien s){

    printf("%7s %20s %2d-%2d-%4d %s\n",s.MSSV,s.HoTen,s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi);

    }

    V d v kiu cu trc(tip)

  • 8/2/2019 bg lap trinh c

    88/98

    88

    int main(){

    SinhVien SV, s;

    printf("Nhap MSSV: ");gets(SV.MSSV);printf("Nhap Ho va ten: ");gets(SV.HoTen);printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay);printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang);printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam);

    printf("Gioi tinh (0: Nu), (1: Nam): ");scanf("%d",&SV.Phai);flushall();printf("Dia chi: ");gets(SV.DiaChi);InSV(SV);s=SV; /* Gn tr cho mu tin s*/InSV(s);

    getch();return 0;}

    V d v con trn kiu cu trc

  • 8/2/2019 bg lap trinh c

    89/98

    89

    #include#includetypedef struct

    { unsigned char Ngay,Thang,Nam;} NgayThang;int main(){

    NgayThang Ng={25,2,2007};

    NgayThang *p;p=&Ng;printf("Truy cap cau truc thong thuong %d-%d-%d\n",

    Ng.Ngay,Ng.Thang,Ng.Nam);printf("Truy cap qua con tro %d-%d-%d\n",

    p->Ngay,p->Thang,p->Nam);printf("Truy cap qua vung nho con tro %d-%d-%d\n",(*p).Ngay,(*p).Thang,(*p).Nam);

    getch();return 0;

    }

    2. Kiu tp tin

  • 8/2/2019 bg lap trinh c

    90/98

    90

    a. Khi nim:

    - L kiu d liu cho php lu tr d liu b nh ngoi (a). Khi kt thc

    chng trnh th d liu vn cn do chng ta c th s dng nhiu ln.- Ngoi ra, kiu tp tin c th c kch thc ln vi s lng cc phn t

    khng hn ch (ch b hn ch bi dung lng ca b nh ngoi). Bin tp tin: l mt bin thuc kiu d liu tp tin dng i din cho

    mt tp tin. D liu cha trong mt tp tin c truy xut qua cc thaotc vi thng s l bin tp tin i din cho tp tin .

    Con tr tp tin: Khi mt tp tin c m ra lm vic, ti mi thiim, s c mt v tr ca tp tin m ti vic c/ghi thng tin s xy ra.Ngi ta hnh dung c mt con trang chn v tr v t tn n lcon tr tp tin.

    b. Khai bo:FILE ;

    V d: FILE *f1,*f2;

    c. Cc thao tc trn tp tin

  • 8/2/2019 bg lap trinh c

    91/98

    91

    +M tp tinC php: FILE *fopen(char *Path, const char *Mode)

    Trong :

    - Path: chui chng dn n tp tin trn a.- Type: chui xc nh cch thc m tp tin s m.

    V d: M mt tp tin tn C:\BAITAP\VIDU.TXT ghi.FILE *f;f = fopen(C:\\BAITAP\\VIDU.TX, w);if (f!=NULL){

    /* Cc cu lnh thao tc vi tp tin*/

    /* ng tp tin*/}

    Bng cc gi tr ca ModeCh h

  • 8/2/2019 bg lap trinh c

    92/98

    92

    Ch nghar Mtp tin vn bn c

    w To ra tp tin vn bn mi ghi

    a Ni vo tp tin vn bnrb Mtp tin nh phn c

    wb To ra tp tin nh phn ghi

    ab Ni vo tp tin nh phnr+ Mmt tp tin vn bn c/ghi

    w+ To ra tp tin vn bn c ghi

    a+ Ni vo hay to mi tp tin vn bn c/ghir+b Mra tp tin nh phn c/ghi

    w+b To ra tp tin nh phn c/ghi

    a+b Ni vo hay to mi tp tin nh phn

    c. Cc thao tc trn tp tin

  • 8/2/2019 bg lap trinh c

    93/98

    93

    + Hm ng tp tin: Hm fclose() c dng ng tp tinc m bi hm fopen(). Hm ny s ghi d liu cn litrong vng m vo tp tin v ng li tp tin.

    C php: int fclose(FILE *f)+ Hm kim tra n cui tp tin hay cha?

    C php: int feof(FILE *f)

    Kim tra xem chm ti cui tp tin hay cha v tr vEOF nu cui tp tin c chm ti, ngc li tr v 0.+ Hm di chuyn con tr tp tin vu tp tin - Hm rewind()

    Khi ta ang thao tc mt tp tin ang m, con tr tp tin lun

    di chuyn v pha cui tp tin. Mun cho con tr quay vutp tin nh khi m n, ta s dng hm rewind().C php: void rewind(FILE *f)

    d. Truy cp vo tp tin vn bn

  • 8/2/2019 bg lap trinh c

    94/98

    94

    + Hm ghi d liu ln tp tin vn bn: Hm putc()Hm ny c dng ghi mt k t ln mt tp tin vn bn ang c m lm vic.

    C php: int putc(int c, FILE *f)Trong , tham s c cha m Ascii ca mt k t no . M ny c ghi ln tp tin lin ktvi con tr f. Hm ny tr v EOF nu gp li.

    + Hm ny dng ghi mt chui k t cha trong vng m ln tp tin vn bn.C php: int puts(const char *buffer, FILE *f)

    Trong , buffer l con tr c kiu char chn v tr u tin ca chui k tc ghi vo. Hmny tr v gi tr 0 nu buffer cha chui rng v tr v EOF nu gp li.

    V d: Vit chng trnh ghi chui k t ln tp tin vn bn C:\BAITHO.TXT#include#includeint main(){ FILE *f;

    f=fopen(C:\\BAITHO","r+");if (f!=NULL) {

    fputs(Chi co thuyen moi hieu.\n",f);fputs( Bien menh mong duong nao.",f);fclose(f);

    }getch();return 0;

    }

    d. Truy cp vo tp tin vn bn(tip)

  • 8/2/2019 bg lap trinh c

    95/98

    95

    + Hm dng ghi d liu c nh dng ln tp tin vn bn.C php: fprintf(FILE *f, const char *format, varexpr)

    Trong : format: chui nh dng (ging vi cc nh dngca hm printf()), varexpr: danh sch cc biu thc, mi biuthc cch nhau du phy (,).

    + Hm dng c d liu t tp tin vn bn ang c mlm vic.

    C php: int getc(FILE *f)Hm ny tr v m Ascii ca mt k t no (k c EOF)trong tp tin lin kt vi con tr f.

    + Hm c d liu t tp tin vn bn vo danh sch cc bin theonh dng.

    C php: fscanf(FILE *f, const char *format, varlist)Trong : format: chui nh dng (ging hm scanf());varlist: danh sch cc bin mi bin cch nhau du phy (,).

    V d

  • 8/2/2019 bg lap trinh c

    96/98

    96

    Vit chng trnh chp tp tin C:\BAITHO.TXT trn sang tp tin D:\BAIHAT.TXT.#include#include

    int main(){ FILE *f1,*f2;f1=fopen(C:\\BAITHO.TXT","rt");f2=fopen("D:\\BAIHAT.TXT","wt");if (f1!=NULL && f2!=NULL){

    int ch=fgetc(f1);while (! feof(f1)){

    fputc(ch,f2);ch=fgetc(f1);

    }fcloseall();

    }getch();return 0;

    }

    e. Truy cp vo tp tin nh phn

  • 8/2/2019 bg lap trinh c

    97/98

    97

    + Hm ghi d liu ln tp tin nh phn - Hm fwrite()C php: size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f)Trong :

    - ptr: con tr chn vng nh cha thng tin cn ghi ln tp tin.- n: s phn t s ghi ln tp tin.- size: kch thc ca mi phn t.- f: con tr tp tin c m.- Gi tr tr v ca hm ny l s phn tc ghi ln tp tin. Gi tr ny bng n tr

    khi xut hin li.

    +c d liu t tp tin nh phn - Hm fread()C php: size_t fread(const void *ptr, size_t size, size_t n, FILE *f)Trong :- ptr: con tr chn vng nh s nhn d liu t tp tin.

    - n: s phn tc c t tp tin.- size: kch thc ca mi phn t.- f: con tr tp tin c m.- Gi tr tr v ca hm ny l s phn t c c t tp tin. Gi tr ny bng n

    hay nh hn n nu chm n cui tp tin hoc c li xut hin..

    e. Truy cp vo tp tin nh phn(tip)

  • 8/2/2019 bg lap trinh c

    98/98

    98

    + Hm di chuyn con tr tp tin - Hm fseek()- Vic ghi hay c d liu t tp tin s lm cho con tr tp tin dch chuynmt s byte, y chnh l kch thc ca kiu d liu ca mi phn t ca

    tp tin.- Khi ng tp tin ri m li n, con tr lun v tr ngay u tp tin.Nhng nu ta s dng kiu m tp tin l a ghi ni d liu, con tr tptin s di chuyn n v tr cui cng ca tp tin ny.- Ta cng c thiu khin vic di chuyn con tr tp tin n v tr chnhbng hm fseek().

    C php: int fseek(FILE *f, long offset, int whence)Trong :

    - f: con tr tp tin ang thao tc.- offset: s byte cn dch chuyn con tr tp tin k t v tr trc . Phn tu tin

    l v tr 0.

    - whence: v tr bt u tnh offset, ta c th chn im xut pht l:0 SEEK_SET V tr u tp tin1 SEEK_CUR V tr hin ti ca con tr tp tin2 SEEK_END V tr cui tp tin

    - Kt qu tr v ca hm l 0 nu vic di chuyn thnh cng. Nu khng thnh cng,1 gi tr khc 0 ( l 1 m li) c tr v.