giáo trình lập trình c

169
Mục lục 1 Dương Hoàng Huyên MỤC LỤC CHƯƠNG 1. GIỚI THIỆU ............................................................... 7 1.1. Nguồn gốc của ngôn ngữ C ..................................................................... 7 1.2. C là ngôn ngữ bậc trung........................................................................... 7 1.3. C là ngôn ngữ có cấu trúc ........................................................................ 8 1.4. Cấu trúc của một chương trình C ............................................................. 9 1.5. Chương trình đầu tiên ............................................................................ 10 1.6. Bài tập ................................................................................................... 13 CHƯƠNG 2. BIỂU THỨC (EXPRESSION) ................................. 15 2.1. Kiểu dữ liệu cơ sở (Basic Data Type) .................................................... 15 2.2. Bổ ngữ kiểu dữ liệu cơ sở (Modifying the Basic Type) ......................... 15 2.3. Định danh (Identifier) ............................................................................ 16 2.4. Biến (Variable) ...................................................................................... 16 2.5. Hằng (Constant) .................................................................................... 17 2.6. Toán tử (Operator)................................................................................. 18 2.6.1. Toán tử gán ............................................................................................. 18 2.6.2. Toán tử số học ......................................................................................... 19 2.6.3. Toán tử quan hệ và logic ......................................................................... 20 2.6.4. Toán tử ? ................................................................................................. 20 2.6.5. Toán tử bit ............................................................................................... 20 2.6.6. Toán tử sizeof .......................................................................................... 21 2.6.7. Toán tử () và [] ........................................................................................ 22 2.6.8. Ép kiểu .................................................................................................... 22 2.6.9. Độ ưu tiên của tất cả các phép toán ......................................................... 22 2.7. Biểu thức (Expression) .......................................................................... 23 2.7.1. Chuyển đổi kiểu trong biểu thức .............................................................. 23 2.7.2. Khoảng trống và dấu ngoặc đơn .............................................................. 23 2.7.3. Viết nhanh của phép toán gán.................................................................. 23 2.7.4. Các hàm toán học cơ bản ........................................................................ 24 2.8. Vào ra dữ liệu cơ bản............................................................................. 24 2.8.1. In giá trị ra màn hình (hàm printf()) ........................................................ 24 2.8.2. Nhập dữ liệu từ bàn phím (hàm scanf()) .................................................. 27 2.9. Một số ví dụ cơ bản ............................................................................... 30 2.9.1. Ví dụ 1 ..................................................................................................... 30

Upload: rptdnmqs12

Post on 09-Nov-2015

90 views

Category:

Documents


16 download

DESCRIPTION

lập trình cơ bản ngôn ngữ lập trình c

TRANSCRIPT

  • Mc lc 1

    Dng Hong Huyn

    MC LC CHNG 1. GII THIU ............................................................... 7

    1.1. Ngun gc ca ngn ng C ..................................................................... 7 1.2. C l ngn ng bc trung........................................................................... 7 1.3. C l ngn ng c cu trc ........................................................................ 8 1.4. Cu trc ca mt chng trnh C ............................................................. 9 1.5. Chng trnh u tin ............................................................................ 10 1.6. Bi tp ................................................................................................... 13

    CHNG 2. BIU THC (EXPRESSION) ................................. 15 2.1. Kiu d liu c s (Basic Data Type) .................................................... 15 2.2. B ng kiu d liu c s (Modifying the Basic Type) ......................... 15 2.3. nh danh (Identifier) ............................................................................ 16 2.4. Bin (Variable) ...................................................................................... 16 2.5. Hng (Constant) .................................................................................... 17 2.6. Ton t (Operator) ................................................................................. 18

    2.6.1. Ton t gn ............................................................................................. 18 2.6.2. Ton t s hc ......................................................................................... 19 2.6.3. Ton t quan h v logic ......................................................................... 20 2.6.4. Ton t ? ................................................................................................. 20 2.6.5. Ton t bit ............................................................................................... 20 2.6.6. Ton t sizeof .......................................................................................... 21 2.6.7. Ton t () v [] ........................................................................................ 22 2.6.8. p kiu .................................................................................................... 22 2.6.9. u tin ca tt c cc php ton ......................................................... 22

    2.7. Biu thc (Expression) .......................................................................... 23 2.7.1. Chuyn i kiu trong biu thc .............................................................. 23 2.7.2. Khong trng v du ngoc n .............................................................. 23 2.7.3. Vit nhanh ca php ton gn .................................................................. 23 2.7.4. Cc hm ton hc c bn ........................................................................ 24

    2.8. Vo ra d liu c bn............................................................................. 24 2.8.1. In gi tr ra mn hnh (hm printf()) ........................................................ 24 2.8.2. Nhp d liu t bn phm (hm scanf()) .................................................. 27

    2.9. Mt s v d c bn ............................................................................... 30 2.9.1. V d 1 ..................................................................................................... 30

  • 2 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    2.9.2. V d 2 .................................................................................................... 30 2.9.3. V d 3 .................................................................................................... 31

    2.10. Cu hi trc nghim v bi tp ............................................................ 31 2.10.1. Cu hi trc nghim .............................................................................. 31 2.10.2. Bi tp .................................................................................................. 32

    CHNG 3. CU LNH (STATEMENT) ................................... 35 3.1. True v False trong C ............................................................................ 35 3.2. Lnh la chn (Selection)...................................................................... 35

    3.2.1. Lnh if ..................................................................................................... 35 3.2.2. Cc lnh if lng nhau .............................................................................. 37 3.2.3. Cc lnh if-else-if lin tc ....................................................................... 37 3.2.4. Lnh switch ............................................................................................. 38

    3.3. Lnh lp (Repetitive) ............................................................................. 42 3.3.1. Lnh lp for ............................................................................................ 42 3.3.2. Lnh lp while......................................................................................... 44 3.3.3. Lnh lp do-wihle ................................................................................... 44

    3.4. Lnh nhy (Jump) ................................................................................. 46 3.4.1. Lnh return ............................................................................................. 46 3.4.2. Lnh goto ................................................................................................ 46 3.4.4. Lnh continue ......................................................................................... 48

    3.5. Cu hi trc nghim v bi tp .............................................................. 48 3.5.1. Cu hi trc nghim ................................................................................ 48 3.5.2. Bi tp .................................................................................................... 50

    CHNG 4. MNG V CHUI (ARRAY & STRING) ............ 57 4.1. Khi nim .............................................................................................. 57 4.2. Mng mt chiu..................................................................................... 57 4.3. Chui kt thc rng (null-terminated string) .......................................... 58 4.4. Mng hai chiu ...................................................................................... 60 4.5. Khi gn mt mng ............................................................................... 62

    4.5.1. Khi gn mng mt chiu ....................................................................... 62 4.5.2. Khi gn mng hai chiu ........................................................................ 63 4.5.3. Khi gn mng khng kch thc ............................................................ 64

    4.6. Cu hi trc nghim v bi tp .............................................................. 64 4.6.1. Cu hi trc nghim ................................................................................ 64 4.6.2. Bi tp .................................................................................................... 65

  • Mc lc 3

    Dng Hong Huyn

    CHNG 5. CON TR (POINTER) ............................................ 69 5.1. Khi nim con tr .................................................................................. 69 5.2. Bin con tr ........................................................................................... 69 5.3. Ton t trn con tr ............................................................................... 70 5.4. Biu thc con tr ................................................................................... 70

    5.4.1. Php ton gn .......................................................................................... 71 5.4.2. Ton t s hc trn con tr ...................................................................... 71 5.4.3. So snh con tr ........................................................................................ 72

    5.5. Con tr v mng .................................................................................... 72 5.6. Mng cc con tr ................................................................................... 73 5.7. Tr gin tip .......................................................................................... 74 5.8. Cp pht b nh ng ............................................................................ 75

    5.8.1. Cc hm lin quan ................................................................................... 75 5.8.2. Cp pht b nh ng cho mng mt chiu ............................................. 76 5.8.3. Cp pht b nh ng cho mng hai chiu .............................................. 77

    5.9. Mt s vn vi con tr ...................................................................... 80 5.9.1. Xc nh con tr trc khi s dng .......................................................... 80 5.9.2. Khng nn gn gi tr c th cho con tr ................................................. 80 5.9.3. Gi tr con tr thay i ............................................................................ 81

    5.10. Cu hi trc nghim v bi tp............................................................. 81 5.10.1. Cu hi trc nghim .............................................................................. 81 5.10.2. Bi tp ................................................................................................... 83

    CHNG 6. HM (FUNCTION) .................................................. 85 6.1. Dng tng qut ca mt hm ................................................................. 85 6.2. Cc lut phm vi ca hm ...................................................................... 87 6.3. Lnh return ............................................................................................ 87 6.4. Tham s ca hm ................................................................................... 88

    6.4.1. Gi hm theo tham tr v theo tham chiu............................................... 88 6.4.2. Gi mng n hm .................................................................................. 89

    6.5. Con tr hm ........................................................................................... 92 6.6. Tham s trong hm main ....................................................................... 95 6.7. quy (Recursion)................................................................................ 95 6.8. Cu hi trc nghim v bi tp .............................................................. 96

  • 4 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    6.8.1. Cu hi trc nghim ................................................................................ 96 6.8.2. Bi tp .................................................................................................... 98

    CHNG 7. KIU CU TRC, HP, LIT K V KIU NGI DNG NH NGHA ..................................................... 101

    7.1. Cu trc (Structure) ............................................................................. 101 7.1.1. Khi nim ..............................................................................................101 7.1.2. Mng cu trc ........................................................................................103 7.1.3. Con tr cu trc .....................................................................................105 7.1.4. Mng bn trong cu trc ........................................................................106 7.1.5. Cu trc bn trong cu trc ...................................................................109 7.1.6. Trng bit ..............................................................................................113

    7.2. Kiu hp (unions) ................................................................................ 113 7.3. Kiu lit k (Enumeration) .................................................................. 115 7.4. Dng ton t sizeof m bo tnh kh chuyn ................................. 117 7.5. Kiu ngi dng nh ngha (User-Defined) ....................................... 118 7.6. Cu hi trc nghim v bi tp ............................................................ 118

    7.6.1. Cu hi trc nghim ...............................................................................118 7.6.2. Bi tp ...................................................................................................119

    CHNG 8. VO/RA D LIU TRN CONSOLE ................. 123 8.1. c v vit mt k t ........................................................................... 123

    8.1.1. Mt vn vi hm getchar ...................................................................124 8.1.2. Bin th ca hm getchar() ....................................................................124

    8.2. c v vit chui ................................................................................ 125 8.3. Hm printf ........................................................................................... 127 8.4. Hm scanf ........................................................................................... 127 8.5. Cu hi trc nghim v bi tp ............................................................ 127

    8.5.1. Cu hi trc nghim ...............................................................................127 8.5.2. Bi tp ...................................................................................................127

    CHNG 9. C/GHI D LIU TRN FILE ......................... 129 9.1. Lung v file ....................................................................................... 129

    9.1.1. Lung (stream).......................................................................................129 9.1.2. File ........................................................................................................129

    9.2. Cc hm c s trn file ........................................................................ 130 9.2.2. Con tr file .............................................................................................130

  • Mc lc 5

    Dng Hong Huyn

    9.2.3. M mt file (hm fopen()) ...................................................................... 130 9.2.4. ng mt file (hm fclose()) .................................................................. 132 9.2.5. c/ghi mt k t trn file (hm getc()/putc()) ...................................... 132 9.2.6. Kim tra cui file (hm feof()) ............................................................... 135 9.2.7. c/ghi chui k t trn file (hm fgets()/fputs()) ................................... 136 9.2.8. Hm rewind() ........................................................................................ 138 9.2.9. Hm ferror() .......................................................................................... 139 9.2.10. Xa mt file (hm remove()) ................................................................ 141 9.2.11. Lm sch mt lung (hm fflush()) ...................................................... 141

    9.3. Hm fread() v fwrite() ........................................................................ 142 9.4. Hm fseek() v truy cp ngu nhin .................................................... 145 9.5. Hm fprintf() v fscanf() ..................................................................... 146 9.6. Lung chun ........................................................................................ 148 9.7. Cu hi trc nghim v bi tp ............................................................ 148

    9.7.1. Cu hi trc nghim .............................................................................. 148 9.7.2. Bi tp ................................................................................................... 151

    CHNG 10. TIN X L V CH THCH ........................... 153 10.1. #define ............................................................................................... 153

    10.1.1. nh ngha Macro ging hm .............................................................. 155

    10.2. #error ................................................................................................. 155 10.3. #include ............................................................................................. 156 10.4. Ch th bin dch c iu kin ............................................................ 161

    10.4.1. #if, #else, #elif, #endif .......................................................................... 161 10.4.2. #ifdef v #ifndef ................................................................................... 163

    10.5. #undef ............................................................................................... 164 10.6. defined ............................................................................................... 164 10.7. #line .................................................................................................. 164 10.8. Ton t tin x l # v ## .................................................................. 165 10.9. Cc macro nh ngha trc ............................................................... 166 10.10. Ch thch trong C chun .................................................................. 166 10.11. Cu hi trc nghim v bi tp ......................................................... 167

    10.11.1. Cu hi trc nghim .......................................................................... 167 10.11.2. Bi tp ............................................................................................... 168

    TI LIU THAM KHO ............................................................. 169

  • Chng 1. Gii thiu 7

    Dng Hong Huyn

    CHNG 1. GII THIU

    1.1. Ngun gc ca ngn ng C Ngn ng lp trnh C c pht minh v ci t ln u tin bi Dennis Ritchie

    v c s dng trong h iu hnh Linux. C l kt qu ca mt qu trnh pht trin

    bt u bng ngn ng B (c pht minh bi Ken Thompson). T ngn ng B pht

    trin ngn ng C vo nm 1970.

    H nm 1983, thnh lp mt y ban to ra chun ANSI (American National

    Standards Intitute) nh ngha ngn ng C. Qu trnh tiu chun ha mt 6 nm.

    Chun ANSI C c chp nhn vo thng 12 nm 1989. Tiu chun ny cng c

    t chc tiu chun quc t (ISO) chp nhn v c gi l C chun. Ngy nay, tt c

    cc trnh bin dch ngn ng C/C++ u tun theo C chun.

    1.2. C l ngn ng bc trung C thng c gi l ngn ng my bc trung. iu ny khng c ngha l C t

    mnh v kh s dng hoc t pht trin hn cc ngn ng bc cao nh l Basic hoc Pascal. C c tng nh l mt ngn ng bc trung bi v n tch hp tt nht cc thnh phn ca ngn ng bc cao kt hp vi tnh mm do ca ngn ng cp thp.

    C cho php lp trnh vi bit, byte v a ch. M ngun ca ngn ng C cng

    tng thch vi nhiu chng trnh dch, nhiu h iu hnh khc nhau. V d ta c th

    d dng chuyn i mt chng trnh C vit trn h iu hnh DOS sang mt chng

    trnh C thc thi trn Windows.

    Bc cao Ada Modula-2

    Pascal COBOL FORTRAN BASIC

    Bc trung Java

  • 8 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    C++ C FORTH

    Bc thp Macro-assembler Assembler

    Hnh 1-1. Ngn ng C so vi cc ngn ng lp trnh khc.

    Tt c cc ngn ng lp trnh bc cao u h tr khi nim kiu d liu. Kiu

    d liu nh ngha cc tp gi tr m mt bin c th lu tr v tp cc php ton c

    th thao tc trn gi tr . Kiu d liu c bn nht l s nguyn, k t v s thc.

    Mc d C c nm kiu d liu c bn, nhng n khng phi l mt ngn ng nh kiu

    mnh nh l Pascal. C cho php chuyn i qua li gia cc kiu d liu vi nhau. V d ta c th trn ln kiu k t v kiu s trong mt biu thc.

    Khng ging nh ngn ng bc cao, C khng kim tra cc li thi gian thc thi.

    V d C khng kim tra xem cc bin ca mng c trn hay khng. Cc kiu kim tra

    ny l trch nhim ca ngi lp trnh.

    C khng yu cu tng thch d liu cht ch gia i s v tham s. i vi

    ngn ng bc cao yu cu kiu d liu ca tham s phi cng kiu d liu vi i s.

    C cho php mt tham s c th c kiu d liu bt k, n c th chuyn i mt cch

    hp l sang kiu ca i s.

    C cho php thao tc trc tip trn bit, byte, word v con tr, iu ny lm cho C

    tng ng tt vi lp trnh h thng.

    C c 32 t kha (27 t chun ca Ritchie v 5 c b sung t chun ANSI)

    trong khi cc ngn ng lp trnh bc cao c nhiu t kha hn v d vi ngn ng

    BASIC c khong 100 t kha.

    1.3. C l ngn ng c cu trc c trng chnh phn bit ngn ng c cu trc l m ngun v d liu chia

    thnh ngn. l kh nng chia, n du thng tin v cu lnh ca chng trnh

    thc thi mt tc v c bit no . Mt cch thc hin chia ngn l dng

    chng trnh con c s dng bin cc b. Bng cch s dng bin cc b, ta c th

  • Chng 1. Gii thiu 9

    Dng Hong Huyn

    vit chng trnh con v vy nhng s kin pht sinh bn trong chng trnh con ny

    khng c tc ng n cc phn khc ca chng trnh. Kh nng ny cho php

    chng trnh d dng chia s cc on m trong chng trnh. Nu pht trin mt hm

    c chia ngn, ta ch cn bit hm lm g, khng cn bit hm lm nh th no.

    Nh rng, nu lm dng qu nhiu bin ton cc s pht sinh nhng li khng mong

    mun.

    Ngn ng lp trnh c cu trc cung cp kh nng lp trnh a dng. N h tr

    trc tip trong mt vi cu trc lp: do-while, while, for. Trong ngn ng cu trc, cm hoc hn ch s dng ton t goto.

    Thnh phn c cu trc chnh ca C l hm, l chng trnh con c lp ca

    C. Trong C, hm c xy dng thnh mt khi. Hm c nh ngha v vit m

    ring phc v mt nhim v ring, v vy chng trnh c chia nh thnh cc

    chng trnh khc c lp. Sau khi to mt hm ta c th da vo lm vic vi

    nhiu tnh hung m khng tc ng n nhng phn khc ca chng trnh.

    Mt cch khc cu trc v chia ngn m trong C l dng khi lnh. Khi

    lnh trong C c t gia cp du ngoc nhn {}.

    1.4. Cu trc ca mt chng trnh C Ngn ng C c tt c 32 t kha. 27 t kha c nh ngha bi phin bn

    gc, 5 t kha c nh ngha bi chun ANSI: enum, const, signed, void v volatile.

    auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while

    Hnh 1-2. Cc t kha trong ngn ng C.

  • 10 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Tt c cc t kha ca C u l ch thng, khng nn s dng t kha cho

    mc ch khc trong chng trnh.

    Mt chng trnh C bao gm mt hoc nhiu hm. Hm main() lun c khai bo trong tt c cc chng trnh, l hm u tin c gi khi chng trnh

    bt u thc thi. Dng tng qut ca mt chng trnh C nh hnh 1-3 sau:

    Khai bo ton cc (th vin, tn hm, bin, ) main(danh sch tham s) { Cc cu lnh } nh ngha cc hm (nu c)

    Hnh 1-3. Cu trc chung ca chng trnh C.

    1.5. Chng trnh u tin thc hin mt chng trnh c vit bng ngn ng C, ta phi thc hin

    cc bc sau y:

    1. Son tho m ngun.

    2. Bin dch chng trnh (to file OBJ).

    3. Lin kt file OBJ vi cc th vin v to ra mt file thc thi (EXE).

    Cc bc ny c th thc hin c lp bng cc chng trnh ring, tuy nhin

    vic ny gy kh khn cho ngi vit chng trnh. Do vy cc hng phn mm

    thng cung cp mt sn phm tch hp cc chc nng ny v ta gi l mi trng

    pht trin tch hp (Integrated Development Environment-IDE). Trong ti liu ny

    chng ti s dng sn phm Visual C++ 6.0 ca hng phn mm Microsoft.

    Chng trnh u tin yu cu in dng ch Hello World ra mn hnh. Cc bc thc hin nh sau:

    Khi ng chng trnh Visual C++ 6.0: Start\All program\Visual

    Studio\Visual C++. (Hoc nhp p chut vo biu tng ca chng trnh trn mn

    hnh nn). Mn hnh lm vic xut hin nh hnh 1-4 sau:

  • Chng 1. Gii thiu 11

    Dng Hong Huyn

    Hnh 1-4. Mn hnh lm vic ca Visual C++ 6.0.

    vit mt chng trnh mi: bm vo biu tng New Text File trn thanh

    cng c. Sau son ni dung chng trnh vo ca s son tho vn bn. V d

    chng trnh hin mt dng ch ln mn hnh nh hnh 1-5.

    Trc khi thc thi chng trnh, ta phi lu chng trnh bng thao tc sau y:

    File\Save xut hin ca s nh hnh 1-6.

    Trong mc Save in chn v tr lu chng trnh. Trong mc File name:

    nhp vo tn chng trnh, trong v d ny ta s lu trn a Z: v t tn chng

    trnh l bt1c1.c. (Lu : phi lu tn chng trnh vi phn m rng l .C).

    Thanh menu

    Thanh cng c

  • 12 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Hnh 1-5. Ni dung chng trnh u tin.

    Hnh 1-6. Ca s lu chng trnh.

    bin dch chng trnh chn: Build\Compile. Nu trnh bin dch thng bo

    ht li c php th ta mi c th thc thi c chng trnh.

    thc thi chng trnh sau khi bin dch thnh cng chn: Build\Excute.

    C th trong chng trnh bt1c1.c, kt qu sau khi thc thi chng trnh s xut hin ca s nh hnh 1-7 sau:

    Vng son tho chng trnh

    V tr thng bo li

    V tr lu chng trnh

    V tr t tn file

  • Chng 1. Gii thiu 13

    Dng Hong Huyn

    Hnh 1-7. Ca s hin th kt qu thc thi chng trnh.

    Sau khi xem kt qu ca chng trnh xong, bm mt phm bt k quay v

    mn hnh son tho.

    Gii thch cc cu lnh ca chng trnh u tin nh sau:

    Dng u tin l dng ch thch ca chng trnh. Mc ch l cho chng

    trnh d c hn. Tt c cc ch thch t trong cp du /**/

    Dng #include l khai bo th vin chun ca C, mc ch hm main() s dng cc lnh printf.

    Dng void main(void) khai bo hm main(), y l im bt u ca chng trnh C. Tt c cc chng trnh trong C u bt u t im ny. Lnh

    printf() in chui vn bn ra mn hnh.

    1.6. Bi tp Bi 1. Vit chng trnh in ra mn hnh 2 dng:

    Day la ngon ngu lap trinh C Duoc viet bang phan mem Visual C++ 6.0 Cua hang phan mem Microsoft

  • Chng 2. Biu thc (Expression) 15

    Dng Hong Huyn

    CHNG 2. BIU THC (EXPRESSION)

    2.1. Kiu d liu c s (Basic Data Type) C 5 kiu d liu c s trong C, l k t (char), kiu s nguyn (int),

    kiu s thc du phy ng (float, double) v kiu d liu khng gi tr (void). Tt c cc kiu d liu khc trong C u da vo 5 kiu d liu ny. Kch thc v phm vi ca cc kiu ny ph thuc vo kiu vi x l v trnh bin dch. Tuy

    nhin trong tt c cc trng hp mt k t l 1 byte. Kch thc ca mt s nguyn

    ph thuc vo di t my. i vi mi trng 16 bit th s nguyn l 16 bit, i vi

    mi trng 32 bit th s nguyn l 32 bit. Dng chnh xc ca mt s thc du phy

    ng ph thuc vo s thit lp ca lp trnh vin.

    Kiu void hoc l khai bo r rng mt hm khng tr v gi tr hoc to mt con tr tng qut.

    2.2. B ng kiu d liu c s (Modifying the Basic Type) Ngoi tr kiu void, tt c cc kiu d liu cn li u c th c b ng. S

    dng b ng thay th ngha ca ca kiu d liu c s p ng cc tnh hung

    chnh xc hn. C 4 b ng sau: signed, unsigned, long, short.

    Bng sau lit k cc kiu d liu cng vi b ng

    Tn kiu s bit Phm vi biu din

    char 8 128 -> 127 unsigned char 8 0 -> 255 signed char 8 128 -> 127 int 32 2.147.483.648-> 2.147.483.647 unsigned int 32 0 -> 4.294.967.295 signed int 32 Ging kiu int short int 16 32.768 -> 32.767 unsigned short int 16 0 -> 65.535 signed short int 16 Ging kiu short int

  • 16 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    long int 32 2.147.483.648 ->2.147.483.647 signed long int 32 Ging kiu long int unsigned long int 32 0 -> 4.294.967.295 float 32 3,4x10

    -38 -> 3,4x1038 chnh xc 7 ch s

    double 64 1,7x10-308 -> 1,7x10308

    chnh xc 17 ch s long double 80 3,65x10

    -4951 -> 1,18x104932 chnh xc 18 ch s

    Hnh 2-1. Cc kiu d liu c s trong C chun.

    2.3. nh danh (Identifier) Trong C, tn ca bin, hm, nhn hoc i tng do ngi dng t gi l nh

    danh. nh danh bao gm nhiu k t ghp li, k t u tin phi l mt ch ci hoc

    l mt du gch ni, cc k t tip theo phi l mt k t s, ch ci hoc du gch ni.

    Mt s nh danh hp l v khng hp l.

    Hp l Khng hp l

    Count 1count Test23 hi!there Hight_balance hightbalance

    Trong C nh danh c th c di bt k, c phn bit ch hoa v ch thng.

    COUNT, Count v count l ba nh danh phn bit. nh danh khng c trng vi t kha v khng trng tn vi cc hm trong th vin chun.

    2.4. Bin (Variable) Bin l mt v tr c tn trong b nh c s dng lu gi mt gi tr v c

    th thay i bi chng trnh. Tt c cc bin phi c khai bo trc khi s dng.

    Dng tng qut ca mt khai bo bin nh sau:

    type variable_list; Khai bo trn type phi l mt kiu d liu hp l, variable_list bao

    gm mt hoc nhiu tn nh danh phn bit bi du phy. V d cch khai bo:

    int i,j,l;

  • Chng 2. Biu thc (Expression) 17

    Dng Hong Huyn

    short int si; unsigned int ui; double balance, profit, loss;

    Ta c th va khai bo v gn gi tr cho bin bng c php sau:

    type variable_name = value; V d:

    char ch = a; int x = 0; float f = 3.14;

    Bin c khai bo ti ba v tr: bn trong hm hoc u khi lnh (bin cc

    b), trong nh ngha tham s hm (tham s hnh thc) v bn ngoi ca tt c cc hm

    (bin ton cc).

    2.5. Hng (Constant) Hng l mt gi tr c nh m chng trnh khng th thay i c. Hng c

    th l kiu d liu c s bt k. Cch vit hng gi tr trong C nh sau:

    Hng k t c t gia cp du nhy n v d a.

    Hng s nguyn l cc s nguyn thng thng nh 100, -10, hng s nguyn c th vit di dng s h 16 hoc h 8. V d 0x10 l s 10 h 16 (16) , 010 l s 10 h s 8 (8).

    Khi vit gi tr ca mt hng, kiu d liu nh nht s cha gi tr . Tuy

    nhin i vi s thc th hng s thc bao gi cng c kiu double. ch nh kiu d liu cho hng ta thm sau gi tr mt k t m t kiu d liu. C th nh sau:

    Kiu d liu V d

    int 1 123 -234 long int 35000L -34L unsigned int 1000U 234U float 123.23f 1.0f double 123.23 long double 1.2L

  • 18 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Hng chui l tp cc k t t gia cp du nhy kp. V d: this is a text. Mt s hng k t dng iu khin m khng xut hin trn mn hnh.

    Cch vit ngha \b Khong trng (Backspace) \f xung dng (Form feed) \n Dng mi (New line) \r V u dng (Carriage return) \t t Tab theo chiu ngang (Horizontal tab) \" Du nhy kp (Double quote) \' Du nhy n (Single quote) \0 K t rng (Null) \\ Du gch cho (Backslash) \v t tab theo chiu dc (Vertical tab) \a Pht mt m thanh (Alert) \? Du chm hi (Question mark)

    Hnh 2-2. Cc hng k t c bit.

    2.6. Ton t (Operator) 2.6.1. Ton t gn

    C php: = ;

    Trong biu thc c th l mt hng, mt bin, mt hm hoc l s kt hp

    ca cc thnh phn trn. u tin, biu thc s c tnh ton, sau chuyn i kiu

    biu thc cho ph hp vi kiu ca bin. Gn gi tr ny cho bin.

    Khi cc kiu d liu ca bin v biu thc khc nhau, xut hin vn chuyn

    i kiu. Trong cu lnh gn, lut chuyn i thc hin nh sau: gi tr bn phi php

    gn s chuyn sang kiu d liu ca bin. Trong trng hp kiu ca biu thc ln

    hn kiu ca bin, s gy ra tnh hung b mt d liu.

    Bng lit k cch chuyn i kiu ca biu thc sang kiu ca bin.

    Kiu bin Kiu biu thc Thng tin c th mt

    signed char char gi tr > 127chuyn sang s m

  • Chng 2. Biu thc (Expression) 19

    Dng Hong Huyn

    char short int 8 bit cao b mt char int 24 bit b mt char long int 24 bit b mt short int int 16 bit b mt int long int Khng int float Phn thp phn v phn khc float double chnh xc, kt qu lm trn double long double chnh xc, kt qu lm trn

    Hnh 2-3. Chuyn i kiu d liu trong php gn.

    C cho php gn nhiu bin cng gi tr v d mun gn gi tr 0 cho bin x, y, z ta c th vit nh sau: x = y = z = 0.

    2.6.2. Ton t s hc

    Bng sau lit k cc php ton s hc:

    Ton t ngha Tr, tr mt ngi + Cng * Nhn / Chia % Chia ly d Gim 1 ++ Tng 1

    Hnh 2-4. Php ton s hc.

    i vi php chia, khi chia hai s nguyn th kt qu s l s nguyn. i vi

    s thc khng c php chia ly phn d.

    Ton t ++ s t ng tng gi tr ca bin ln mt ln, ngc li -- gim gi tr ca bin xung mt ln. Ta c th t ton t tng/gim vo trc hoc sau ca

    bin. Tuy nhin, trong mt biu thc s c s khc nhau gia hai dng ny. V d:

    x=10; y=++x s cho gi tr ca y l 11 v d trn tng x xong ri mi gn cho y. Khi ta vit x=10; y=x++; y s nhn gi tr 10 bi v x gn gi tr 10 cho y xong mi tng ln 1.

  • 20 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    2.6.3. Ton t quan h v logic

    Trong ngn ng C, gi tr true l gi tr khc 0 v false l gi tr bng 0. Cc php ton quan h v logic thng c s dng chung vi nhau. C php ton

    quan h v logic c th t u tin thp hn ton t s hc.

    Cc php ton quan h Ton t ngha > Ln hn >= Ln hn hoc bng < Nh hn b?:a:b, chng trnh s kim tra biu thc a>b nu ng tr v gi tr a, nu sai tr v gi tr b.

    2.6.5. Ton t bit

    Ton t bit thc hin vic kim tra, thit lp hoc y mt bit trong mt byte

    hoc mt t tng ng vi kiu d liu char hoc int. Khng th dng ton t bit cho kiu d liu thc (float, double, long double). Ton t ny p dng cho tng bit ca ton hng.

  • Chng 2. Biu thc (Expression) 21

    Dng Hong Huyn

    Ton t ngha & AND | OR ^ Exclusive OR(XOR) ~ Phn b ca 1(NOT) >> y phi

  • 22 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    2.6.7. Ton t () v []

    Ton t () dng tng th t u tin ca biu thc con trong mt biu thc khc. Ton t [] xc nh phn t ca mng. Khi a mt mng, biu thc bn trong du ngoc vung s cung cp ch s ca mng.

    2.6.8. p kiu

    Ta c th bt buc mt biu thc no sang mt kiu mong mun. Tnh

    hung ny gi l p kiu. Dng tng qut ca p kiu l: (type)E; trong type l kiu d liu cn chuyn sang, E l biu thc cn chuyn.

    V d: thng thng biu thc x/2 l kiu s nguyn nu x l s nguyn, nu mun x/2 l mt kiu s thc ta dng biu thc sau: (float) x/2;

    2.6.9. u tin ca tt c cc php ton

    Cao nht () [] > . ! ~ ++ (type) * & sizeof

    * / % + > < >= == != & ^ | && || ?: = += = *= /= etc.

    Thp nht , Hnh 2-8. Th t u tin ca cc php ton.

    Ch , trong bng trn, cn nhiu php ton cha c trnh by chi tit v d

    nh cc php ton * & . -> Nhng php ton ny s c trnh by cc mc sau khi cp nhng vn lin quan nh con tr, cu trc.

  • Chng 2. Biu thc (Expression) 23

    Dng Hong Huyn

    2.7. Biu thc (Expression) Ton t, hng, bin v hm l nhng thnh phn c bn to nn biu thc. Mt

    biu thc trong C l s kt hp hp l ca bn thnh phn trn.

    2.7.1. Chuyn i kiu trong biu thc

    Khi hng hoc bin c kiu khc nhau c trn ln trong mt biu thc, tt c

    s chuyn sang kiu d liu ph hp. Trnh bin dch s chuyn kiu d liu ca tt c

    cc ton hng sang kiu ln nht. u tin tt c cc gi tr kiu char v short int s t ng chuyn sang kiu int. Sau nu ton hng no c kiu ln hn th biu thc s ly kiu ca ton hng . V d:

    Hnh 2-9. Chuyn i kiu trong biu thc.

    2.7.2. Khong trng v du ngoc n

    Ta c th thm nhiu khong trng v du ngoc n biu thc d c v r

    rng hn. V d x=10/y-(127/x); khi ta c th vit x = 10 / y - (127 / x);

    Gim hoc tng du ngoc n khng pht sinh ra li v lm chm vic tnh

    ton. Do ta s dng du ngoc n lm r rng th t u tin ca cc php ton

    trong biu thc. V d: x=y/334*temp+127; ta c th vit x=(y/3) (34*temp)+127;

    2.7.3. Vit nhanh ca php ton gn

  • 24 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Khi vit x=x+10; ta c th vit x+=10; ton t += thng bo cho trnh bin dch bit gn x bng gi tr x cng 10. Php ton gn nhanh ny lm vic trn cc php ton hai ngi. Tng qut, biu thc dng v=vOe ta c th vit li vO=e.

    2.7.4. Cc hm ton hc c bn

    Tn hm ngha

    exp(x) ex log(x) logaric c s e ca x log10(x) logaric c s 10 ca x abs(x) tr tuyt i ca x (s nguyn) fabs(x) tr tuyt i ca x (s thc) pow(a,x) ax sqrt(x) cn bc 2 ca x sin(x) sin(x) cos(x) cos(x) acos(x) arccos(x) asin(x) arcsin(x) ceil(x) s nguyn nh nh nht x floor(x) tm s nguyn ln nht x modf(x, y) chia s thc x thnh 2 phn, phn nguyn t vo bin y, tr v phn thp phn.

    s dng c cc hm ny, phi khai bo th vin math.h u chng trnh. Cc hm lng gic nhn tham s o Radian, mun chuyn sang ta dng

    cng thc radian = ./180. V d mun tnh cos(600), ta s dng hm nh sau: cos(60* /180).

    2.8. Vo ra d liu c bn 2.8.1. In gi tr ra mn hnh (hm printf())

    C php:

    printf(Chui nh dng,danh sch cc biu thc); Hm in ra mn hnh danh sch cc biu thc cng vi khun dng d liu ra

    mn hnh. Chui nh dng c ba loi k t: 1. K t hin th ra mn hnh; 2. K t nh

  • Chng 2. Biu thc (Expression) 25

    Dng Hong Huyn

    dng in d liu ra mn hnh. 3. K t iu khin s xut hin. K t nh dng bt

    u bng du % theo sau l mt k t m t kiu d liu. V d in ra mn hnh gi tr ca bin nguyn x ta vit nh sau:

    printf(gia tri cua x la:%d\n, x); in ra mn hnh gi tr ca biu thc thc 3.5 * 9 + 2

    printf(gia tri bieu thuc:%f,3.5 * 9 + 2); a. Bng cc k t nh dng cho hm printf

    M Kiu d liu %c char %d int %E foat %f float %o unsigned int (s hin th h m c s 8) %s Chui k t %u unsigned int (s hin th h m c s 10) %X unsigned int (S hin th h m c s 16) %ld long int %lu unsigned long int %lf double %Lf long double

    Hnh 2-10. Cc k t m t kiu d liu trong hm printf().

    b. In mt gi tr vi rng cho trc

    in ra mn hnh mt gi tr vi rng cho trc ta thm gia k t % v k hiu nh dng mt s nguyn. S nguyn ny chnh s v tr ti thiu in gi tr ra

    mn hnh. Xt v d sau:

    #include void main(void){ double item; item = 10.12304; printf("%f\n", item); printf("%10f\n", item);

  • 26 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    printf("%012f\n", item); }

    Kt qu xut hin nh sau:

    10.123040 10.123040 00010.123040

    in mt gi tr vi chnh xc cho trc ta s dng nh dng x.y vi x, y l cc gi tr nguyn, ngha ca n dnh x v tr in mt s thc, trong y v tr

    hin th phn sau du thp phn.

    c. In mt gi tr vi chnh xc cho trc

    in mt gi tr vi chnh xc cho trc ta s dng nh dng x.y vi x, y l cc gi tr nguyn, ngha ca n ph thuc vo kiu d liu.

    i vi s thc, khi ta s dng nh dng %f, %E, %e, x s xc nh s v tr hin th s thc v y xc nh s ch s sau du thp phn. Nu khng c nh dng y, chng trnh s in 6 ch s sau du thp phn. V d %10.4f s in ra mn hnh mt s thc c rng bng 10, v s ch s sau du thp phn l 4.

    i vi kiu chui k t, y cho bit rng ln nht m chui c th hin th. V d %5.7s s in ra mn hnh mt chui k t c rng l 5 v khng c vc qu 7. Nu chui k t di hn rng cc i th cc k t cui cng s b ct bt.

    i vi s nguyn, chnh xc s ch ra s ch s ti thiu s c hin th.

    Nu s ch s nh hn y, chng trnh s thm vo trc cc s khng sao cho s ch s bng y. Xt v d sau:

    #include void main(void){ printf("%.4f\n", 123.1234567); printf("%.8d\n", 1000); printf("%10.15s\n", "This is a simple test."); }

    Kt qu nh sau:

  • Chng 2. Biu thc (Expression) 27

    Dng Hong Huyn

    123.1235 00001000 This is a simpl d. Canh l cho cc gi tr

    Ngm nh cc gi tr c vit t phi qua tri. Tc l nu rng ca nh

    dng ln hn rng ca d liu th d liu s c vit t phi qua. Trong trng

    hp ny, vit d liu t bn tri qua ta thm du tr sau du %. Xt v d sau:

    #include void main(void){ printf("canh le ben phai:%8d\n", 100); printf("canh le ben trai:%-8d\n", 100); }

    Kt qu hin th trn mn hnh nh sau:

    canh le ben phai: 100 canh le ben trai:100 2.8.2. Nhp d liu t bn phm (hm scanf())

    C php:

    scanf(chui nh dng, danh sch cc bin); Chui nh dng l cc k t m t kiu d liu, danh sch cc bin cch nhau

    du phy v phi c ton t & trc mi bin. V d nhp mt gi tr t bn phm v gn gi tr vo mt bin nguyn x:

    scanf(%d, &x); V d nhp 2 gi tr mt s nguyn v mt s thc vo 2 bin x v y nh sau:

    scanf(%d%f,&x,&y); Bng cc k t nh dng cho hm scanf():

    M Kiu d liu %c char %d int %i int %x unsigned int (h 16)

  • 28 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    %u unsigned int (h 10) %o unsigned int (h 8) %f,%e,%g float %ld long int %lu unsigned long int %lf double %Lf long double %% c du % %[] qut tp k t trong du [] %s Nhp chui k t

    Hnh 2-11. Cc k t m t kiu d liu cho hm scanf().

    a. c tng k t ring bit

    Ta c th dng t t %c c tng k t ring bit. Tuy nhin iu ny d gy ra nhng sai st. Thng thng, cc khong trng, k hiu xung dng dng phn

    bit cc trng khi c d liu. i vi kiu k t th khng. V d:

    scanf("%c%c%c", &a, &b, &c); Khi nhp x y lc a l x, b l khong trng v c l y.

    b. c mt chui k t

    Dng t t %s c mt chui. Hm scanf() c mt chui cho n khi gp mt khong trng u tin. Cc k t c s c gn cho mng cc k t c

    tr bi con tr trong tham s v chui nhn c s kt thc bng k t rng.

    #include #include void main(void){ char str[80]; printf("Nhap vao mot chuoi: "); scanf("%s", str); printf("Chuoi vua nhap: %s", str); getch(); }

    Gi s ta nhp hello world, chng trnh ch in ra dng hello

  • Chng 2. Biu thc (Expression) 29

    Dng Hong Huyn

    c. S dng tp scanset

    Scanset l tp cc k t c nh ngha trc. Khi hm scanf() x l tp scanset, n ch nhp nhng k t thuc tp ny. K t c c s c gn n mt mng cc k t c tr bi tham s ca tp scanset tng ng. nh ngha cc k t trong tp scanset vo cp du []. C th nh sau:

    %[XYZ] Trong XYZ l cc k t. Khi nhp d liu, hm scanf() bt u c cc k

    t cho n khi bt gp mt k t khng phi trong tp scanset. Mng ny cha chui c kt thc bng rng. Xt v d:

    #include #include void main(void){ int i; char str[80], str2[80]; scanf("%d%[abcdefg]%s", &i, str, str2); printf("%d %s %s", i, str, str2); getch(); }

    Khi nhp 123abcdtye, chng trnh s in ra 123 abcd tye. Bi v t khng thuc tp scanset, do hm scanf() s ngng c vo bin str khi gp ch t, cc k t cn li s c c vo str2.

    ch ra mt tp o ngc, ta dng k hiu ^. K hiu ny cho bit nhp nhng k t m khng thuc tp scanset. Ta c th to ra mt tp cc k t lin tc bng mt du ni v d nh %[a-z]. Tp scanset c phn bit ch hoa v ch thng.

    d. Loi b nhng khong trng khng cn thit

    Mt k t trng trong chui iu khin lm cho hm scanf() b qua nhng khong trng u input stream.

    e. Nhng k t khng phi l khong trng trong chui iu khin

  • 30 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Mt k t khng phi trng trong chui iu khin lm cho hm scanf() c v b qua nhng k t ny trong input stream. V d %d,%d hm c vo mt s nguyn, c v loi b mt du phy v c mt s nguyn khc.

    f. Ta phi gi n hm scanf() a ch

    Tt c cc bin trong hm scanf() c s dng nhn gi tr phi gi bng a ch. iu ny c ngha rng tt c cc tham s phi l nhng con tr.

    2.9. Mt s v d c bn 2.9.1. V d 1

    Vit chng trnh nhp vo mt s thc biu din nhit n v Fahrenheit

    (oF), sau chuyn sang n v Celsius (oC). Kt qu hin th c 1 ch s sau du thp

    phn.

    /* Chuong trinh chuyen doi don vi do nhiet do */ #include // khai bao thu vien chuan void main(void){ // khai bao ham main float t; // Khai bao bien t printf("Nhap vao nhiet do (Fahrenheit): "); scanf("%f",&t); // nhap gia tri tu ban phim printf("%0.1f do Fahrenheit = %0.1f do Celsius\n", t, 5.0/9*(t-32)); } 2.9.2. V d 2

    Vit chng trnh nhp vo hai s nguyn dng, in ra mn hnh tng bnh

    phng ca hai s .

    /* Chuong trinh tinh tong binh phuong cua hai so */ #include void main(void){ int x, y; printf("Nhap vao hai so nguyen x, y: "); scanf("%d%d",&x,&y); printf("%d^2 + %d^2=%d\n", x, y, x*x + y*y); }

  • Chng 2. Biu thc (Expression) 31

    Dng Hong Huyn

    2.9.3. V d 3

    Vit chng trnh nhp vo mt s nguyn dng c ba ch s, in ra mn hnh

    cc s thuc hng trm, hng chc, hng n v.

    /* hang tram, hang chuc, hang don vi */ #include void main(void){ unsigned int x; printf("Nhap vao so nguyen ba chu so (100-999): "); scanf("%u",&x); printf("chu so hang tram : %d\n", x / 100); printf("chu so hang chuc : %d\n", (x / 10) % 10); printf("chu so hang don vi: %d\n", x % 10); } 2.10. Cu hi trc nghim v bi tp 2.10.1. Cu hi trc nghim

    Cu 1. Tn no t Sai quy nh ca C:

    a) Giai_Ptrinh_Bac_2 b) Ngaysinh c) Noi sinh d) Sv2000 Cu 2. Mc no c cc Tn u t ng quy nh ca C:

    a) x1, X-2; b) Xx1, X2; c) CONST, X_234; d)X[1], x2; Cu 3. Trong C, nu mun dng lnh xa mn hnh clrscr() th phi khai bo th no ngay sau phn tiu chng trnh:

    a)#include b) #include c)#include ; d) khng khai bo g; Cu 4. Biu thc sau c kiu d liu l g? Gi tr l bao nhiu?

    int i=10; float f=3; char ch=A; f = f+i-ch; i = f*i+ch; ch = f*i+2*ch;

  • 32 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Cu 5. Cho bit cc biu thc sau: biu thc no sai? Biu thc ng c gi tr l bao nhiu?

    Gi s ta khai bo nh sau:

    int i=10; char ch=a;

    Khi cc biu thc sau: biu thc no sai, biu thc ng cho gi tr l bao

    nhiu?

    a. i = (i+ch)++; b. i = i++ + ch++ c. ch = ch++; d. ch = ++ch; e. ch = ch++ - i++ 2.10.2. Bi tp

    Bi 1. Vit chng trnh nhp vo mt s thc x, in ra mn hnh gi tr biu thc 1+9x-2sinx+x2-ex. nh dng biu thc sao cho ch c 2 gi tr sau du thp phn.

    Bi 2. Nhp vo di bn knh hnh trn, in ra mn hnh chu vi v din tch ca hnh

    trn tng ng. Yu cu cc gi tr hin th trn mn hnh c hai ch s sau du thp

    phn.

    Bi 3. Nhp vo di ba cnh a, b,c ca mt tam gic. Tnh din tch tam gic bng

    cng thc Heron nh sau: = ( )( )( ) vi p l na chu vi. Tnh cc gc ca tam gic hp bi ba cnh trn theo cng thc ca nh l cos nh sau:

    = arccos

    , da vo hnh di ta tnh tng t cho hai gc , cn

    li.

  • Chng 2. Biu thc (Expression) 33

    Dng Hong Huyn

    Bi 4. Vit chng trnh nhp vo mt tng s tin, bit rng c ba loi mnh gi tin l 500.000 VN, 200.000VN, 100.000VN, 50.000VN. Cho bit tng s tin trn

    c t nht l bao nhiu t t cc mnh gi bit. V d s tin l: 2.850.000 c 5 t

    500 ngn, 1 t 200.000, 1 t 100.000, 1 t 50.000. phng n trn c tng s t l 8 v

    y l phng n c s t tin t nht.

    Bi 5. Vit chng trnh nhp vo s giy, in ra mn hnh s gi, pht v giy theo

    nh dng hh:mm:ss. V d s giy l 3746 tng ng 01 gi, 2 pht, 26 giy.

    Bi 6. Nhp vo ba s thc, tm s ln nht ca ba s .

    Bi 7. Nhp vo:

    Lng ngy cng (LNC)

    S ngy cng quy nh (NCQD)

    S ngy lm (SNC)

    Vit chng trnh tnh s tin lng (TL) bit rng TL = SNCLNC. Nu SNC

    vt qu NCQD th s ngy vt nhn 2.

  • Chng 3. Cu lnh (Statement) 35

    Dng Hong Huyn

    CHNG 3. CU LNH (STATEMENT)

    Ni mt cch tng qut th cu lnh l mt phn ca chng trnh m n c th

    thc thi. Mt cu lnh ch cho my bit mt hnh ng. Ngn ng C phn cu lnh

    thnh cc nhm sau:

    Biu thc Khi lnh Lnh la chn Lnh lp Lnh nhy

    Cu lnh la chn l if, switch; cu lnh lp l while, for, do-while; cu lnh nhy l break, continue, goto, return. Biu thc bao gm cc biu thc hp l. Khi lnh l cc lnh t trong cp du mc {}.

    3.1. True v False trong C Mt biu thc iu kin ch cho hai gi tr hoc ng hoc sai. Trong C, gi tr

    ng l mt gi tr khc 0 bao gm c cc gi tr m v gi tr sai l mt gi tr bng 0.

    3.2. Lnh la chn (Selection) 3.2.1. Lnh if

    Dng tng qut ca mt biu thc iu kin nh sau:

    if(E) S1; [else S2;]

    Trong E l biu thc, S1 v S2 l cu lnh bt k c th l mt cu lnh n, mt khi lnh, lnh la chn, lnh lp hoc khng c g. Mnh else l ty chn, c th c hoc c th khng.

    Nu biu thc E cho gi tr ng, S1 s c thc hin, ngoi ra nu biu thc sai cu lnh S2 s c thc hin nu c mnh else. Trong C, biu thc iu kin phi c kiu nguyn, k t, con tr hoc kiu thc. Hai hnh sau m t lnh if c v khng c mnh else bng s khi:

  • 36 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Hnh 3-1. S khi m t lnh if c mnh else.

    Hnh 3-2. S khi m t lnh if khng c mnh else.

    V d sau, cho php nhp hai s t bn phm v in ra mn hnh s ln nht ca

    hai s .

    #include void main(void){ int x, y; printf(nhap x,y: ); scanf(%d%d,&x,&y); if(x>y) printf(So lon nhat %d\n,x); else printf(So lon nhat %d\n,y); }

    ng E Sai

    S2 S1

    ng E Sai

    S1

  • Chng 3. Cu lnh (Statement) 37

    Dng Hong Huyn

    3.2.2. Cc lnh if lng nhau

    Mt lnh if c th c lng vo lnh if khc ti mnh if hoc else. Trong cc lnh if lng nhau, mnh else lun i vi lnh if gn nht trong cng mt khi. V d:

    if(E1){ if(E2) S1; if(E3) S2; else S3; } else S4;

    Mnh else cui cng khng kt hp vi if(E2) m n kt hp vi if(E1). Mnh else bn trong khi lnh kt hp vi if(E3).

    Trong ngn ng C h tr 15 mc if lng nhau, thc t cc chng trnh dch h tr nhiu hn. Tuy nhin nu dng qu nhiu lnh if lng nhau s lm xo trn ngha ca thut ton. V d sau th hin cc lnh ifelse lng nhau:

    #include void main(void){ int a, b, c, max; printf("Nhap vao ba gia tri a, b, c: "); scanf("%d%d%d", &a, &b, &c); if(a>b) if(a>c) max = a; else max = c; else if(b>c) max = b; else max = c; printf("so lon nhat: %d\n",max); } 3.2.3. Cc lnh if-else-if lin tc

  • 38 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Dng tng qut nh sau:

    if(E1) S1; else if(E2) S2; else if(E3) S3; . . . else Sn;

    iu kin c kim tra t u n cui. Nu gp iu kin no ng trc tin

    th cu lnh kt hp vi n s c thc hin v b qua cc phn cn li. Nu khng

    c iu kin no ng cu lnh cui cng sau mnh else s thc hin. V d sau nhp vo mt k t, phn loi k t ny thuc nhm no?ch thng, ch hoa, ch s

    hay loi k t khc.

    #include void main(void){ char ch; printf(Nhap vao mot ki tu:); scanf(%c, &ch); if(ch>=a && ch=A && ch=0 && ch

  • Chng 3. Cu lnh (Statement) 39

    Dng Hong Huyn

    case v2: S2; . . . case vn: Sn; [default: Sn+1;] }

    Trong , E l biu thc s nguyn hoc k t; v1, v2, , vn l cc hng gi tr; S1, S2, , Sn, Sn+1 l cc cu lnh bt k.

    Lnh switch thc hin nh sau: so snh gi tr ca biu thc E ln lt vi cc gi tr vi. Khi tm thy mt gi tr vi no bng gi tr ca biu thc, cu lnh Si kt hp s c thc hin cho n khi gp lnh break hoc n cui cu lnh switch. Cu lnh sau default (nu c) s c thc hin nu biu thc E khng trng vi gi tr vi no. Hnh sau m t nguyn tc hot ng ca lnh switch:

    Hnh 3-3. S khi m t lnh switch.

    Sai

    Sai

    ng

    ng

    Sai

    E=v1 S1

    E=v2 ng

    S2

    E=vn Sn

    Sn+1

  • 40 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Ch : trong s hnh 3-3, nu khng c mnh default s khng c lnh Sn+1. V d sau cho nhp 2 s nguyn v mt k t thuc nhm {+, -, *, /}, sau thc hin php tnh tng ng.

    #include void main(void){ char pt; int a, b; printf(Nhap phep toan:); scanf(%c,&pt); printf(Nhap 2 so:); scanf(%d%d,&a,&b); switch(pt){ case '+': printf(%d+%d=%d,a,b,a+b); break; case '-': printf(%d-%d=%d,a,b,a-b); break; case '*': printf(%d*%d=%d,a,b,a*b); break; case /: if(b!=0) printf(%d/%d=%d,a,b,a/b); else printf(Khong chia duoc); break; default: printf("Phep toan khong hop le"); } }

    Trong C, lnh switch c nhiu nht 257 lnh case. C 5 cn quan tm khi s dng lnh switch:

    1. Lnh switch khc lnh if, switch ch kim tra tnh bng, trong khi lnh if c th tnh ton mi kiu biu thc quan h v logic.

    2. Khng c hai gi tr ging nhau nm trong lnh switch

  • Chng 3. Cu lnh (Statement) 41

    Dng Hong Huyn

    3. Nu hng k t c s dng trong switch, n s t ng chuyn sang s nguyn.

    4. Nu mun vit nhiu hng kt hp vi mt cu lnh, ta phi vit ring cc

    hng ny trong tng mnh case

    5. Cc cu lnh trong tng mnh case l cc cu lnh bt k, nu nhiu hn

    mt lnh ta khng cn phi thm du {}

    Lnh switch thng c s dng x l lnh t bn phm, chng hn nh l la chn mt menu.

    Cu lnh break trong switch l ty chn, n dng kt thc cu lnh trong mnh case. Nu b qua cu lnh break, chng trnh s thc thi nhng mnh case tip theo cho n khi gp lnh break khc hoc cho n ht cu lnh switch.

    V d tip theo nhp vo mt thng cho bit thng c bao nhiu ngy:

    #include void main(void){ int thang, nam; printf(Nhap thang:); scanf(%d,&thang); switch(thang){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf(Thang %d co 31 ngay, thang); break; case 4: case 6: case 9: case 11: printf(Thang %d co 30 ngay, thang); break;

  • 42 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    case 2: printf(Nhap nam:); scanf(%d, &nam); if ((nam%4==0 && nam%100!=0)||(nam%400==0)) printf(Thang 2 nam %d co 29 ngay, nam); else printf(Thang 2 nam %d co 28 ngay, nam); break; default: printf(Thang khong hop le); } }

    V d trn minh ha hai vn : Th nht, ta c th c cc mnh case m khng kt hp vi lnh no. Khi gp trng hp ny, chng trnh s chuyn xung

    mnh case tip theo. Th hai, nu khng c lnh break chng trnh s thc thi cc lnh tip theo.

    3.3. Lnh lp (Repetitive) 3.3.1. Lnh lp for

    Dng tng qut ca lnh lp for nh sau:

    for(E1; E2; E3) S; Trong , E1, E2, E3 l cc biu thc, S l cu lnh bt k. Lnh for c

    thc hin nh sau:

    Bc 1. Tnh gi tr E1

    Bc 2. Kim tra biu thc E2, nu E2 ng thc hin cu lnh S, sau thc hin E3 v quay li u bc 2. Nu biu thc E2 sai, thot khi vng lp. Hnh sau m t nguyn tc hot ng ca lnh for:

  • Chng 3. Cu lnh (Statement) 43

    Dng Hong Huyn

    Hnh 3-4. S khi m t lnh lp for.

    V d: vit chng trnh in cc gi tr t 1 n 100 ra mn hnh.

    #include void main(void){ int x; for(x=1; x

  • 44 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    printf("%d", y); V d trn ch in gi tr 10 ca bin y ra mn hnh. Cc lnh trong vng lp

    for trn khng bao gi thc hin bi v x v y bng nhau khi vo vng lp.

    3.3.2. Lnh lp while

    Dng tng qut nh sau:

    while(E) S; Trong S l cu lnh bt k, E l mt biu thc logic. ngha, Trong khi

    iu kin E cn ng th thc hin cc cu lnh. Nu iu kin sai, thot khi vng lp. Ging nh vng lp for, vng lp while cng kim tra iu kin u vng lp. iu ny c ngha l cc cu lnh trong vng lp s khng c thc hin nu

    iu kin sai. Hnh sau m t nguyn tc hot ng ca lnh while:

    Hnh 3-5. S khi m t lnh while.

    V d, tm c s khng tm thng ln nht ca mt s nguyn n.

    #include void main(void){ int i, n; printf(Nhap n:); scanf(%d,&n); i=n-1; while(n % i != 0) i--; printf(Uoc so lon nhat nho hon n la:%d,i); } 3.3.3. Lnh lp do-wihle

    Khng ging nh vng lp for, while, kim tra iu kin u vng lp.

    ng

    Sai E

    S

  • Chng 3. Cu lnh (Statement) 45

    Dng Hong Huyn

    Vng lp do-while kim tra iu kin cui vng lp. iu ny cho php vng lp do-while s thc hin t nht l mt ln. Dng tng qut ca vng lp do-while nh sau:

    do S; while (E); Trong , S l cu lnh bt k, E l biu thc logic. ngha: thc hin cu lnh

    S trong khi cn ng. Hnh sau m t nguyn tc hot ng ca lnh dowhile:

    Hnh 3-6. S khi m t lnh dowhile.

    V d: do scanf(%d,&n); while (n>100);

    on chng trnh trn cho php nhp vo mt s nguyn cho n khi nhn gi

    tr nh hn hoc bng 100.

    Thng thng, ta s dng vng lp do-while v kt hp vi cu lnh switch duy tr s hot ng ca menu. Xt v d sau:

    #include #include #include void main(void){ char ch; do{ system("cls"); /* Xoa man hinh. */ printf("\n1. Tinh dien tich hinh tron"); printf("\n2. Tinh dien tich tam giac"); printf("\n3. Tinh dien tich hinh chu nhat"); printf("\n4. Thoat khoi chuong trinh"); printf("\nBam tu 1->4 de chon: ");

    ng

    Sai

    E

    S

  • 46 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    ch = getche(); switch(ch){ case '1': /* cau lenh tinh dien tich hinh tron. */ break; case '2': /* cau lenh tich dien tich tam giac. */ break; case '3': /* cau lenh tich dien tich chu nhat. */ break; } if (ch=='4') break; }while(1); }

    Trong v d trn, s dng vng lp do-while l mt la chn tt nht bi v ta mong mun cc cu lnh trn c thc hin t nht l mt ln.

    3.4. Lnh nhy (Jump) 3.4.1. Lnh return

    Lnh return dng thot khi mt hm, n c phn loi lnh nhy bi v n s tr v ng v tr gi hm. Lnh return c th c tr v mt gi tr hoc khng, nu lnh return c mt gi tr, gi tr s l gi tr ca hm. Trong C, nhng hm c tr v gi tr, nu khng tr v gi tr no th chng trnh s t ng tr v mt gi

    tr v ngha. Dng tng qut ca lnh return.

    return expression; Biu thc ch xut hin nu hm khai bo c gi tr tr v, trong trng hp ny

    gi tr biu thc l gi tr tr v ca hm. Ta c th dng nhiu lnh return trong mt hm, tuy nhin hm s ngng khi gp mt lnh return sm nht. Du mc cui hm gn ging nh lnh return.

    3.4.2. Lnh goto

    Lnh nhy goto t khi s dng trong cc tnh hung lp trnh, bi v nu s

  • Chng 3. Cu lnh (Statement) 47

    Dng Hong Huyn

    dng nhiu lnh nhy s lm cho chng trnh tr nn phc tp kh g ri. Thng

    thng ta s dng lnh nhy trong trng hp thot khi nhiu vng lp lng nhau.

    Dng tng qut ca cu lnh nh sau:

    goto label; . . . label: statements;

    Trong , label l tn nhn. Tn nhn l mt nh danh trong C, n c th c nh ngha trc hoc sau lnh goto. V d sau c to ra mt vng lp in cc s t 1 n 10.

    x = 1; loop1: printf(%d ,x); x++; if (x

  • 48 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Lnh break dng kt thc cu lnh case trong switch v dng kt thc cc vng lp m khng cn phi kim tra iu kin. Khi gp lnh break trong vng lp, vng lp s kt thc ngay lp tc v chng trnh s nhy n cu lnh sau

    vng lp. V d: chng trnh sau s kt thc ti gi tr t=10.

    #include void main(void){ int t; for(t=0; t

  • Chng 3. Cu lnh (Statement) 49

    Dng Hong Huyn

    b. !(2 = 2 + x) x={0, 1, -1, 3}. d. 3 < 2 && 6 - 5 == 1; Cu 2. Lnh no sau y in ra mn hnh s ln nht gia hai s thc A v B:

    a. if (A > B) printf(%f,B); else printf(%f,A); b. if (A > B) printf(%f,A); else printf(%f,B); c. if (A > B) scanf(%f,&A); else scanf(%f,&B); d. if (A < B) printf(%f,B); else printf(%f,A); Cu 3. Kim tra nu ba s a, b, c u ln hn 1 th in s 1, chn lnh no:

    a. if ((a > 1) &&(b > 1) &&(c > 1)) printf(1); b. if ((a > 1) ||(b > 1) ||(c > 1)) printf(1); c. if (a > 1 && b > 1 && c > 1) printf(1); d. if a > 1 ||> 1 || c > 1 printf(1); Cu 4. Cho i l bin nguyn. Sau khi thc hin cc lnh:

    i = 2; switch (i){ case 1: i = i + 1; case 2: i = i + 2; case 3: i = i + 3; }

    Gi tr sau cng ca i l:

    a. 7 b. 9 c. 4 d. 5 Cu 5. Cho N l bin nguyn, sau khi thc hin cc lnh:

    N = 9; if (N < 0) printf(So am); else switch(N % 2){ case 0: printf(Chan); break; case 1: printf(Le); break; }

    Kt qu in ln mn hnh l:

    a. Chan b. Le c. So am d. khng c hin g

  • 50 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Cu 6. Cho S v i l bin nguyn. Khi chy on chng trnh:

    s = 0; for(i=1; i0 l cc bin nguyn. tnh S = N!, chn cu no:

    a. S = 1; for(i = 1; i

  • Chng 3. Cu lnh (Statement) 51

    Dng Hong Huyn

    Bi 2. Nhp mt ch ci, nu l ch thng th i thnh ch hoa, ngc li, nu l

    ch hoa th i thnh ch thng. V d: nhp A in ra a, nhp b th in ra B.

    Bi 3. Nhp cc h s, gii v bin lun cc h phng trnh sau theo quy tc Cramer:

    + = + =

    Bi 4. Nhp cc h s gii phng trnh ax2+bx+c=0

    Bi 5. Nhp s thc x v tnh: (Hng dn: dng hm exp(x) v log(x), xt ba trng hp x=0, x>0, x 1 + 2 1 1(|2|) < 1

    Bi 8. Nhp ch s in k thng trc v thng ny. Hy tnh tin in cho mi hng gi sau:

    Mc S kWh s dng n gi (VN)

    1 kWh t 0 100 1.418 2 kWh t 101 150 1.622 3 kWh t 151 200 2.044 4 kWh t 201 300 2.210 5 kWh t 301 400 2.361 6 kWh t 401 tr ln 2.420

    Bi 9. Nhp vo thng/nm cho bit thng c bao nhiu ngy. Nm nhun l nm chia ht cho 4 nhng khng chia ht cho 100 hoc chia ht cho 400.

    Bi 10. Nhp ngy/thng/nm, cho bit ngy l ngy th my trong tun. Thut ton Doomsday (ngy tn th) tnh ngy ca tun nh sau: (ly ngy 09/06/2013

  • 52 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    lm v d).

    Bc 1: Ly hai s u ca nm chia d cho 4:

    nu d 0: AD = 3

    nu d 1: AD = 0

    nu d 2: AD = 6

    nu d 3: AD = 4

    AD: l gi tr Doomsday ca nm. (20 % 4 = 0 -> AD = 3.)

    Bc 2: Ly hai s cui ca nm chia cho 12 ly phn nguyn cho gn a, phn

    d cho gn b. (a = 13 / 12 = 1, b = 13 % 12 = 1.)

    Bc 3: t c = b chia nguyn cho 4. (c = 1 / 4 = 0).

    Bc 4: t s = a + b + c. (s = 1 + 1 + 0 = 2)

    Bc 5: t t = s chia d cho 7. (t = 2 % 7 = 2)

    Bc 6: t thu = t + AD. (thu = 2 + 3 = 5)

    Bc 7: Tm gi tr Doomsday ca thng (MD) da vo bng sau:

    Thng 1 2 3 4 5 6 7 8 9 10 11 12 MD 3/4(Nhun) 28/29(Nhun) 0 4 9 6 11 8 5 10 7 12

    (MD = 6)

    Bc 8: t thu = thu + ngy MD. (thu = 5 +9 - 6 =8)

    Bc 9: Trong khi thu < 0 tip tc cng cho 7. (thu = 8).

    Bc 10: thu = thu chia ly phn d cho 7. (thu = 8 % 7 = 1).

    Bc 11: Ngy ca tun c xc nh nh sau: 0: th by; 1:ch nht; 2: th

    hai; 3: th ba; ; 6: th su. (Ngy 09/6/2013 l ch nht).

    Bi 11. Nhp ngy/thng/nm dng lch, i sang ngy thng nm m lch.

    Bi 12. Nhp mt k t bt k, cho bit k t thuc loi no: l ch hoa, l ch thng, l ch s hay cc k t khc.

  • Chng 3. Cu lnh (Statement) 53

    Dng Hong Huyn

    Bi 13. Nhp di ba cnh a, b, c. Cho bit a, b, c c phi l ba cnh ca mt tam gic khng; nu l ba cnh ca mt tam gic th cho bit lm tam gic g: u, cn

    hay tam gic thng?

    Bi 14. In bng m ASCII thnh hai ct: M K t, yu cu hin th tng trang mt,

    (mi trang 22 dng) ri dng li ch ta nhn Enter mi hin trang k tip, c th cho

    n ht.

    Bi 15. Nhp n nguyn m bo ln hn 1. Tnh tng cc s l n. V d: nu n=5 th tng S=1+3+5=9, nu n=8 th S=1+3+5+7=16.

    Bi 16. Nhp s n nguyn m bo sao cho n dng (nu nhp n 0 th chng trnh phi bt nhp li), sau tnh cc tng sau:

    = 1 + 2 + 3 + + = 1 + 2 + + = 1 + 3 + 5 + + (2 + 1) = 12 14 + 16 18 + (1)(2) = 12 34 56 78 2 12 = 1.2.3 2.3.4 + 3.4.5 + + (1). ( + 1). ( + 2) = 1.3.5.7n,khinl2.4.6.8n,khinchn

    Bi 17. Nhp n, k nguyn m bo phi dng v k n. Tnh t hp chp k ca n theo cng thc:

    = !

    ! ( )! Bi 18. Cho dy Fibonaci xc nh nh sau: F0=0, F1=1, Fn = Fn-1 + Fn-2, vi n 2. Hy nhp s nguyn n 0 v tnh S = F0 + F1 + F2 +...+ Fn.

  • 54 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Bi 19. Tm v in ln mn hnh tt c cc s nguyn trong phm vi t 10 n 99 sao cho tch ca hai ch s ca n th bng hai ln tng ca hai ch s ca n. V d: s

    N=36 c hai ch s l 3 v 6, v 3*6 = 2*(3+6). Tng t i vi s 44.

    Bi 20. S hon ho l mt s m tng cc c s ca n bng chnh n, v d 6=1+2+3. Vit chng trnh lit k cc s hon ho nh hn 1000.

    Bi 21. Nhp mt s nguyn n, cho bit l s nguyn t hay khng. Nu khng phi l s nguyn t th phn tch s thnh tch cc tha s nguyn t. V d nhp

    n=1470=2.3.5.7.7.

    Bi 22. Nhp mt s nguyn n, in ra mn hnh tt c cc s nguyn t nh hn hoc bng n.

    Bi 23. Nhp vo 1 s nguyn, in ra mn hnh s o ngc ca s . V d nhp s 34679, khi hin th ln mn hnh cc s: 97643.

    Bi 24. Vit mt chng trnh kim tra mt s c phi l s i xng hay khng? S i xng l s khi vit ngc cng bng chnh n. V d: 121, 2332,

    Bi 25. Nhp s tin gi, s thng. Tnh s tin nhn c da vo bng li sut nh nh sau:

    K hn (s thng)

    Li cui k (%/nm)

    6 6.0 12 6.6 15 7.5 18 7.6 24 7.7 36 8.0

    Bi 26. Nhp s tin gi, li sut (%/thng), s tin nhn c. Tnh s thng cn gi.

    Bi 27. Vit chng trnh tm c s chung ln nht v bi s chung nh nht ca hai s nguyn.

    Bi 28. Tnh gn ng hm s ex da vo khai trin Maclaurin vi chnh xc bng

  • Chng 3. Cu lnh (Statement) 55

    Dng Hong Huyn

    mt s >0 cho trc: 0,!

    ...!

    ...!3!21

    132

    nnx

    nxxxxe

    nnx

    Bi 29. Tnh gn ng hm s ln(1+x) (-10.

    Bi 31. Tnh gn ng hm s (1+x) (-10 cho trc.

    Bi 33. Tnh gn ng hm s sin(x) da vo khai trin Maclaurin vi chnh xc bng mt s >0 cho trc.

    0,!12

    ...!12

    1...!7!5!3

    )sin(1212753

    nnx

    nxxxxxx

    nnn

    Bi 34. Tnh gn ng hm s cos(x) da vo khai trin Maclaurin vi chnh xc bng mt s >0 cho trc.

    0,!2

    ...!2

    1...!6!4!2

    1)cos(22642

    nn

    xn

    xxxxxnn

    n

  • Chng 4. Mng v chui (Array & string) 57

    Dng Hong Huyn

    CHNG 4. MNG V CHUI (ARRAY & STRING)

    4.1. Khi nim Mng l tp hp cc bin c cng kiu d liu v c tham chiu thng qua

    tn chung. Mi phn t trong mng c truy xut thng qua ch s. Trong C, mng

    bao gm cc v tr lin tc trong b nh. a ch thp nht tng ng vi phn t u

    tin ca mng v a ch cao nht ng vi phn t cui cng. Mng c th c t mt

    n nhiu chiu. Mng thng dng nht l mng chui k t kt thc bng k t rng.

    Mng v con tr trong C c quan h chc ch vi nhau.

    4.2. Mng mt chiu C php khai bo mng mt chiu nh sau:

    type var_name[size];

    Trong , type l kiu d liu ca mng v chnh l kiu d liu ca mi phn t, size nh ngha kch thc ca mng. V d khai bo 100 phn t c tn l balance c kiu d liu l kiu double.

    double balance[100];

    truy xut n mt phn t ca mng ta dng c php sau:

    var_name[index];

    Khi s dng mt phn t ca mng, ta coi n nh l mt bin thng thng c

    cng kiu d liu. C ngha l ta c th nhp mt gi tr t bn phm vo phn t ca

    mng, c th in gi tr tng phn t ra mn hnh, cc phn t c th tham gia vo bn

    tri hoc bn phi php gn.

    V d gn s 12.34 vo phn t th 3 ca mng balance, ta vit:

    balance[2]=12.34;

    Trong C, mng c ch s bt u t 0, khi ta khai bo char p[10]; mng p

  • 58 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    c 10 phn t bt u t 0 cho n 9. V d sau to mt mng cc s nguyn, gn gi tr mi phn t bng chnh ch s ca n, sau in cc gi tr ny ra mn hnh.

    #include void main(void){ int i, x[20]; for(i=0; i

  • Chng 4. Mng v chui (Array & string) 59

    Dng Hong Huyn

    Trong C c h tr mt s hm thao tc vi chui.

    Tn hm Chc nng strcpy(s1, s2) Sao chp chui s2 vo s1. strcat(s1, s2) Ghp chui s2 vo cui chui s1. strlen(s1) Tr v di ca chui s1. strcmp(s1, s2) Tr v 0 nu s1 v s2 bng nhau; nh

    hn 0 nu s1s2. strchr(s1, ch) Tr v v tr xut hin u tin ca ch trong s1. strstr(s1, s2) Tr v mt con tr n v tr xut hin

    u tin ca s2 trong s1. gets(s) Nhp chui s t bn phm puts(s) In chui s ra mn hnh

    Hnh 4-2. Mt s hm thng dung trong chui.

    Tt c cc hm ny u c ci t trong th vin . Chng trnh sau s minh ha cc hm trn chui k t:

    #include #include #include void main(void){ char s1[20], s2[20]; printf(Nhap chuoi 1:); gets(s1); printf(Nhap chuoi 2); gets(s2); printf("do dai: %d %d\n", strlen(s1), strlen(s2)); if(!strcmp(s1, s2)) printf("Hai chuoi bang nhau\n"); strcat(s1, s2); printf("%s\n", s1); strcpy(s1, "Day la chuoi bo sung.\n"); printf(s1); if(strchr("hello", 'e')) printf("e nam trong hello\n"); if(strstr("hi there", "hi")) printf("tim thay hi");

  • 60 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    getch(); } 4.4. Mng hai chiu

    Ta c th coi mng hai chiu l mng ca mng mt chiu. Dng tng qut

    khai bo mng hai chiu l:

    type array_name[size1][size2]; truy cp n phn t ca mng hai chiu, ta vit nh sau:

    array_name[index1][index2]; V d:

    #include #include void main(void){ int t, i, num[3][4]; for(t=0; t

  • Chng 4. Mng v chui (Array & string) 61

    Dng Hong Huyn

    Mng hai chiu lu tr ch s theo th t dng-ct, ch s th nht l dng, ch

    s th hai l ct. iu ny c ngha l: ch s bn phi nht s tng nhanh nht. lu

    tr mng hai chiu ta cn s byte theo cng thc sau:

    byte = size of index1 size of index2 sizeof(type) Hnh sau th hin mng hai chiu trong b nh

    Hnh 4-3. Mng hai chiu trong b nh.

    s dng mng chui, ta s dng mng hai chiu kiu char. Kch thc bn tri xc nh s chui, kch thc bn phi xc nh di ti a ca mt chui. V d:

    char str[30][80]; Khi khai bo 30 chui k t, mi chui c di ti ta l 80. truy cp n

    tng chui trong mng ta dng c php name[index]. V d:

    gets(str[20]); Nhp gi tr vo chui ti a ch th 21. Cu lnh trn cng tng ng vi

  • 62 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    lnh sau:

    gets(&str[20][0]); V d:

    /* chuong trinh soan van ban don gian. */ #include #define MAX 100 #define LEN 80 char text[MAX][LEN]; void main(void){ int t, i, j; printf("Nhap chuoi rong de thoat.\n"); for(t=0; t

  • Chng 4. Mng v chui (Array & string) 63

    Dng Hong Huyn

    i vi mng cc k t (chui) ta c th khi gn bng cch sau:

    char str[9]=I like C; Cu lnh ny tng ng vi cu lnh sau:

    char str[11]={I, ,l,i,k,i, ,e, ,C,\0};

    Mc du chui ch c 8 k t nhng ta vn cn c 9 v tr lu tr chui ny

    bi v c mt k t rng cui cng thng bo cho trnh bin dch bit chui kt

    thc.

    4.5.2. Khi gn mng hai chiu

    Mng nhiu chiu cng c khi gn nh mng 1 chiu bng c php sau:

    type array_name[size1][size2] = {value_list}; V d:

    int sqrs[10][2] = { 1, 1, /*sqrs[0][0] and *sqrs[0][1]*/ 2, 4, /*sqrs[1][0] and *sqrs[1][1]*/ 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81, 10, 100/*sqrs[9][0] and *sqrs[9][1]*/ };

    Tuy nhin, ta c th gn theo mt cch khc r rng hn.

    int sqrs[10][2] = {{1, 1} /*sqrs[0][0] and sqrs[0][1]*/ {2, 4} /*sqrs[1][0] and sqrs[1][1]*/ {3, 9} {4, 16} {5, 25} {6, 36} {7, 49} {8, 64}

  • 64 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    {9, 81} {10, 100}/*sqrs[9][0] and sqrs[9][1]*/ }; 4.5.3. Khi gn mng khng kch thc

    Trong trng hp ta khng bit chnh xc thng tin cn gn cho mng, khi ta

    khng th khai bo mt mng c kch thc c nh. Trnh bin dch C cho php ta

    gn gi tr cho mng m khng cn xc nh kch thc. V d:

    char e1[] = "Read error\n"; char e2[] = "Write error\n"; char e3[] = "Cannot open file\n"; 4.6. Cu hi trc nghim v bi tp 4.6.1. Cu hi trc nghim

    Cu 1. Chn khai bo ng :

    a. int A[10]; b. int[10] A; c. int A[1..10]; d. int A[1,10]; Cu 2. Cho khai bo:

    int A[4]; int i;

    nhp d liu cho A, chn cu no :

    a. for (i=1; i

  • Chng 4. Mng v chui (Array & string) 65

    Dng Hong Huyn

    int A[5]; Chn lnh ng:

    a. A[1] = 4/2; b. A[2] = -6; c. A(3) = 6; d. A[5] = 10; Cu 4. Khai bo no ng:

    a. int A[n][m]; b. int A[2][3]; c. int A[1..2,1..3]; d. int A[3, 2]; Cu 5. Khi chy on chng trnh:

    int A[2][3], i, j, S; A[0][0] = 3; A[0][1] = -1; A[0][2]:= -4; A[1][0] = -9; A[1,1] = 0; A[1,2] = 5; S:=0; for(i = 0; i < 2; i++) for(j = 1; j < 3; j++) if (A[i,j] < 0) S = S + 1; printf(%d,S);

    Kt qu in ra gi tr ca S l:

    a.0 b. -9 c. 3 d. 5 4.6.2. Bi tp

    Bi 1. Nhp s t nhin n v mt dy s thc x1, x2, ..., xn. Tm s ln nht v s nh nht ca dy. m xem trong dy c bao nhiu s dng, bao nhiu s m,

    bao nhiu s 0 ? Loi no nhiu nht?

    Bi 2. Nhp mt dy s nguyn x1, x2, ..., xn. In ring cc s chn v cc s l, mi loi trn mt dng.

    Bi 3. Nhp dy s nguyn, in ra mn hnh nhng s nguyn t trong dy.

    Bi 4. Nhp dy s nguyn, in ra mn hnh nhng s chnh phng trong dy.

  • 66 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Bi 5. Nhp dy s nguyn, in ra mn hnh nhng s i xng trong dy.

    Bi 6. Nhp dy s nguyn, nhp mt s nguyn x. Kim tra xem x c xut hin trong dy hay khng.

    Bi 7. Nhp dy s nguyn, nhp s nguyn x. Xa s nguyn x trong dy nu nh x xut hin.

    Bi 8. Nhp dy s nguyn, nhp s nguyn x. Chn phn t x vo u, cui dy.

    Bi 9. Nhp mt s nguyn dng n, xy dng dy s nguyn x0, x1, ..., xn trong xi l s Fibonaci th i: x0=1, x1=1, xi=xi-1 + xi-2 vi mi i >= 2. In dy x ln mn hnh.

    Bi 10. Nhp mt dy s x1, x2,..., xn. Tnh:

    Bi 11. Nhp mt dy s bt k x1, x2,..., xn. In o ngc dy , v d cho dy 1 5 3 8, in ra: 8 3 5 1. Sp xp dy tng dn, in dy. Sp xp dy gim dn, in dy.

    Bi 12. Nhp hai dy s bt k x1, x2,..., xn v y1, y2,..., yn. Xy dng dy th ba z1, z2, .., zn l tng ca hai dy trn (zi= xi + yi), in ba dy ln mn hnh, mi dy trn mt dng.

    Bi 13. Cho hai a thc:

    Pn(x) = anxn + an-1xn-1 + ...+ a1x + a0 (an > 0) Qm(x) = bmxm + bm-1xm-1 + ...+ b1x + b0 (bm > 0)

    Gi R(x) = Pn(x) + Qm(x)

    Nhp cc s t nhin n v m, cc h s ai v bj ca hai a thc Pn(x) v Qm(x), in bc v cc h s ca a thc R(x).

    Bi 14. Nhp x thc, n nguyn dng v mt mng cc h s a0, a1, ..., an , ri tnh ga tr ca a thc:

  • Chng 4. Mng v chui (Array & string) 67

    Dng Hong Huyn

    P = anxn + an-1 xn-1 + ...+ a1 x + a0. Theo s Hoocner :

    P=(...( (anx + an-1) x+ an-2)x + ...+ a1 )x + a0 . V d :

    P = 2x4 + 3x3 - 4x2 +7x + 9 = (((2x + 3)x - 4 )x + 7)x + 9 . Bi 15. Nhp mt dy s bt k x1, x2,..., xn, cho bit dy c i xng khng? dy c lp thnh mt cp s cng khng? V d dy 1 3 5 4 5 3 1 l i xng, dy 1 3 5 7 l mt cp s cng.

    Bi 16. Nhp mt dy s bt k x1, x2,..., xn, cho bit dy thuc loi no: tng, gim hay khng tng, khng gim?

    Bi 17. Nhp mt dy s nguyn dng x1, x2,..., xn. Tch dy x thnh hai dy: dy A gm cc s chn, dy B gm cc s l, sp xp dy A tng dn, dy B gim dn, in hai dy A v B trn hai dng khc nhau. Ni hai dy A v B theo th t thnh mt dy duy nht v gn tr li vo dy x, in dy x.

    V d nhp dy x={5, 7, 0, 2, 1, 6, 4, 9} th dy A={0, 2, 4, 6}, dy B={9, 7, 5, 1}, v x={0, 2, 4, 6, 9, 7, 5, 1}.

    Bi 18. Nhp hai s m, n v hai ma trn Am,n v Bm,n. In cc ma trn A, B, C=A+2B v D=A-B ln mn hnh.

    Bi 19.

    Nhp v in ma trn Am,n.

    Tm s nh nht v s ln nht trong ma trn .

    Tnh tng ca tt c cc phn t trong ma trn.

    m trong ma trn c bao nhiu s dng, bao nhiu s 0, bao nhiu s m.

    Bi 20.

    Nhp v in ma trn Am,n

  • 68 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Tm v in s ln nht trong tng hng ca ma trn.

    Tm v in s ln nht trong tng ct ca ma trn.

    Tm v in s nh nht trn ng cho chnh, ph ca ma trn.

    Bi 21.

    Nhp v in ma trn vung An,n.

    A c phi l ma trn i xng khng

    A c phi l ma trn n v khng?

    (A l i xng nu aij=aji vi mi i,j =1,..., n. A l ma trn n v nu tt c cc phn t trn ng cho chnh u bng 1 v cc phn t cn li u bng 0).

  • Chng 5. Con tr (Pointer) 69

    Dng Hong Huyn

    CHNG 5. CON TR (POINTER)

    C ba l do s dng con tr: 1. S dng con tr truyn tham s cho hm

    lu tr kt qu ca bin sau khi thot khi hm; 2. Con tr cp pht b nh ng; 3.

    Con tr c th ci thin hiu qu ca chng trnh con.

    Con tr l c tnh mnh nht v cng nguy him nht trong ngn ng C.

    5.1. Khi nim con tr Con tr l mt bin lu tr a ch b nh. a ch ny l v tr ca i tng

    khc (chng hn bin) trong b nh. V d, mt bin cha a ch ca mt bin khc,

    bin u tin gi l con tr tr n bin th hai.

    Hnh 5-1. Bin con tr n v tr khc.

    5.2. Bin con tr Dng tng qut khai bo mt bin con tr:

    type *var_name; type l kiu d liu ca con tr, n c kiu d liu bt k. type nh ngha

    kiu d liu m n tr n, mi con tr u c th tr n v tr bt k trong b nh.

  • 70 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    5.3. Ton t trn con tr C hai php ton c bn l php ton ly a ch (&) ly gi tr (*), v d:

    m = &count; t vo trong bin m a ch ca bin count hay m nhn a ch ca bin

    count. hiu r hn ta ly v d c th nh sau: gi s bin count dng v tr trong b nh l 2000 lu tr gi tr, v gi s bin count c gi tr l 100, sau cu lnh gn trn, m s c gi tr l 2000. Ton t * dng ly gi tr ca bin c a ch lu ti con tr. V d:

    q = *m; Ly gi tr ca bin c a ch nm trong m. Trong trng hp ny m gi a ch

    ca bin count do cu lnh trn s cho gi tr ca bin count, v c gi tr l 100. C hai php ton ny c u tin cao hn cc php ton s hc (tr php ton tr mt ngi, i vi php ton ny c cng u tin).

    Ta lun chc chn rng, con tr phi tr n mt kiu d liu hp l. V d nu

    khai bo con tr kiu int, trnh bin dch s hiu hng mi a ch m n lu tr phi l a ch ca bin kiu int hoc n khng tr n u. Bi v C cho php ta gn mi a ch n bin con tr nhng n s khng cho kt qu mong mun. Xt v d:

    #include #include void main(void){ double x = 100.1, y; int *p; p = &x; y = *p; printf("%f", y); /* Se khong in ra 100.1 */ getch(); }

    Chng trnh trn khng gn gi tr ca bin x cho y. Bi v p l mt con tr nguyn, ch c khong hai hoc bn byte c chuyn sang y.

    5.4. Biu thc con tr

  • Chng 5. Con tr (Pointer) 71

    Dng Hong Huyn

    Tng qut, biu thc con tr ph hp vi quy lut biu thc khc. Tuy nhin c

    vi im cn quan tm.

    5.4.1. Php ton gn

    Nh nhng bin khc, ta c th dng con tr bn phi ca php ton gn. V

    d:

    #include #include void main(void){ int x; int *p1, *p2; p1 = &x; p2 = p1; /*in a ch ca x, khng phi gi tr */ printf("%p", p2); getch(); }

    C p1 v p2 u tr n bin x, a ch ca bin x c hin th ln mn hnh thng qua lnh printf(%p)

    5.4.2. Ton t s hc trn con tr

    C hai ton t s hc s dng cho con tr, l php cng v php ton tr.

    Gi s p1 l con tr int cha a ch (c gi tr) l 2000 v s nguyn c di hai byte. Biu thc p++ cho gi tr ca p l 2002, khng phi 2001, l do l mi ln p1 tng, n s tr n mt s nguyn k tip trong b nh, tng ng vi vic tng hai

    byte. iu ny cng tng t nh php ton tr. Ta cng c th cng hay tr con tr

    vi mt s nguyn.

  • 72 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    Hnh 5-2. Php ton s hc ca con tr.

    5.4.3. So snh con tr

    Ta c th so snh hai bin con tr vi nhau, v d sau kim tra con tr q c ln hn con tr p hay khng.

    if(p

  • Chng 5. Con tr (Pointer) 73

    Dng Hong Huyn

    char *s=abc; for(t=0; s[t]; ++t) putchar(s[t]); } /* Truy cp s nh l con tr. */ #include void main(void){ int t; char *s=abc; while(*s) putchar(*s++); }

    Tng t i vi mng hai chiu:

    int a[10][10]; //a = &a[0][0]; a[1][2] = 100; // *(a+1*10+2) = 100;

    Tng qut, truy cp n phn t j, k ca mng hai chiu ta dng cng thc sau:

    a[j][k] *(a + j*ct + k) Tuy mng v con tr ging nhau nhng cng c mt im khc bit c bn gia

    mng v con tr. l i vi mng ta khng th thay i a ch ca mng trong sut

    chng trnh. V d: int a[10], b[10]; cu lnh a=b; s khng thc hin c bi v ngha ca cu lnh trn l ly a ch phn t u tin ca mng b gn cho a, m a l a ch ca mng a[10] nn ta khng th thay i a c. Tuy nhin vi con tr ta c th thay i a ch ca n khi cn. Xt v d: int a[10], b[10], *p; ta c th thc hin p=a; v sau tip tc thc hin p=b; iu ny c ngha l p nhn a ch ca a sau nhn a ch ca b.

    5.6. Mng cc con tr Con tr c th c khai bo thnh mng ging nh nhng kiu d liu khc.

    V d sau khai bo mt mng con tr nguyn c kch thc 10.

    int *x[10]; gn a ch ca bin nguyn c tn l var n phn t th 3 ca mng x ta

    dng lnh sau:

  • 74 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    x[2] = &var; Khi ly gi tr ca bin var, ta dng lnh sau:

    v = *x[2]; gi mt mng con tr n hm, ta khai bo hm nh sau:

    void func1(int *p[]); Khi hm func1() nhn tham s l mt con tr, tr n mng cc con tr

    nguyn. Thng thng mng con tr thng dng lu tr cc con tr n chui. V

    d:

    char *p[10];/* Khai bao 10 con tro kieu char. */ p[0] = Chuoi thu nhat; . . . p[9] = Chuoi thu muoi;

    V d:

    To mt hm thng bo li vi mt m li cho trc

    void syntax_error(int num){ static char *err[] = { "Cannot Open File\n", "Read Error\n", "Write Error\n", "Media Failure\n" }; printf("%s", err[num]); } 5.7. Tr gin tip

    Ta c th dng con tr tr n mt con tr khc, tnh hung ny gi l tr gin

    tip. khai bo con tr ny ta dng c php nh sau:

    type **var_name; V d:

    int **x; Khi x l mt con tr n mt con tr s nguyn, truy cp n gi tr gin

  • Chng 5. Con tr (Pointer) 75

    Dng Hong Huyn

    tip ny ta dng: **var_name; xt v d sau:

    #include void main(void){ int x, *p, **q; x = 10; p = &x; q = &p; printf("%d", **q); /* in gia tri cua x */ }

    Trong v d trn, con tr q s cha a ch ca con tr p, con tr p cha a ch ca bin x, ta c th ni q tr gin tip n x thng qua con tr p. ly gi tr ca bin x (truy cp n b nh ca bin x) ta s dng hai du *. Ch , nu ta thay i gi tr ca *q, khi p khng cn gi a ch ca bin x na.

    Hnh 5-3. Con tr n mt con tr khc.

    5.8. Cp pht b nh ng 5.8.1. Cc hm lin quan

    Cp pht ng l chng trnh s nhn b nh khi thc thi, hm h tr cho cp

    pht ng trong C l malloc() (cp pht).

    C php: void *malloc(int size); Hm malloc() s tr v con tr kiu void iu ny c ngha l ta c th gn cho mi kiu con tr, v con tr ny tr

    Bin Con trCon tr

    Con tr n con tr

    Gi tr a ch a ch

    Bin Con tr

    Con tr n bin

    Gi tr a ch

  • 76 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    n byte u tin ca vng c cp pht, vng nh ny l mt dy cc byte lin tip

    nhau. Nu b nh khng cp pht, hm cho con tr gi tr NULL. v d:

    char *p; p = malloc(1000);

    Cp pht 1000 byte lin tc trong b nh, v p s tr n byte u tin trong 1000 byte va cp pht. Trong v d trn khng bt buc con tr c kiu g nhn gi

    tr tr v ca hm malloc(). Con tr void s t ng chuyn i kiu cho ph hp.

    Nu vng nh sau khi cp pht ng khng cn s dng na, ta nn gii phng

    vng nh tit kim khng gian b nh cho my tnh. Hm free(void *name) gii phng con tr mi c cp pht bi hm malloc(). Hai hm ny nm trong th vin stdlib.h.

    5.8.2. Cp pht b nh ng cho mng mt chiu

    cp pht b nh ng cho mng mt chiu, ta s dng hm malloc cp pht mt vng nh va lu s phn t ca mng. Sau dng mt con tr lu li

    a ch byte u tin trong vng nh ny v s dng con tr ny truy cp n cc

    phn t ca mng.

    V d nhp vo mt dy n s nguyn, tm s ln nht ca dy s (s dng cc lnh cp pht b nh ng).

    #include #include #include void main(void){ int *p, max, n, i; printf("n="); scanf("%d",&n); /* cap phat bo nho */ p=malloc(n * sizeof(int)); if(p==NULL){ printf("Khong cap phat duoc bo nho!\n"); getch();

  • Chng 5. Con tr (Pointer) 77

    Dng Hong Huyn

    return; } /* Nhap cac phan tu cua day */ for(i=0; i

  • 78 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    a+1 l a ch ca a[1], *(a+1) l gi tr ca a[1], m a[1] l a ch ca a[1][0] nn *(*(a+1)) l gi tr ca a[1][0].

    *(a+1)+2 l gi tr ca a[1]+2, m a[1]+2 l a ch ca a[1][2] nn *(*(a+1)+2) l gi tr ca a[1][2].

    Khi cp pht b nh ng cho mng hai chiu, u tin ta phi cp pht b nh

    cho mng mt chiu m mi phn t mng ny l mt con tr cha a ch ca phn t

    u tin ca dng tng ng, sau ta ln lt cp pht cho tng dng. Xt v d

    nhp vo 1 mng hai chiu, in mng ra mn hnh v tm gi tr ln nht ca mng .

    #include #include #include void main(void){ int **p, m, n, i, j, max; printf("Nhap so dong: "); scanf("%d", &m); printf("Nhap so cot : "); scanf("%d", &n); /* Cap phat bo nho m con tro kieu int. */ p = malloc(m*sizeof(int*)); if(p==NULL){ printf("Khong cap phat duoc bo nho.\n"); getch(); return; } /* Cap phat bo nho cho tung dong, moi dong n phan tu. */ for(i=0; i

  • Chng 5. Con tr (Pointer) 79

    Dng Hong Huyn

    } } /* Nhap cac phan tu ma tran. */ for(i=0; i

  • 80 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    hp mng mt chiu v truy cp cc phn t ca mng hai chiu ging nh mng mt

    chiu theo c php nh: p[i][j] p[i*ct + j]. Tuy nhin, trong trng hp mng hai chiu m s phn t ca mi dng khc nhau (chng hn nh dng 1 c 5

    phn t, dng 2 c 7 phn t, dng 3 c 10 phn t, ) cch ti u nht trong trng

    hp ny l s dng phng php ging nh v d trn.

    Ch , gii phng b nh cho mng hai chiu ta phi gii phng tng dng

    ca mng trc sau mi gii phng mng hai chiu.

    5.9. Mt s vn vi con tr 5.9.1. Xc nh con tr trc khi s dng

    Ch trong qu trnh c v ghi d liu vo con tr. Nu con tr cha xc nh

    th vic c s cho mt gi tr khng mong mun, nu ghi c th ta s ghi ln m

    hoc l d liu ca chng trnh. V d:

    /*Chuong trinh se bi loi. */ int main(void){ int x, *p; x = 10; *p = x; return 0; }

    Chng trnh trn s gn gi tr 10 vo mt v tr no trong b nh m ta

    cha xc nh bi v con tr p cha bao gi c gn mt gi tr c th. Trong trng hp chng trnh nh c th khng gy nh hng nhiu, nu chng trnh qu ln,

    gi tr ca p c th l mt v tr no ca d liu, h iu hnh, m chng trnh.

    5.9.2. Khng nn gn gi tr c th cho con tr

    /* Chuong trinh bi loi. */ #include #include void main(void){ int x, *p; x = 10;

  • Chng 5. Con tr (Pointer) 81

    Dng Hong Huyn

    p = x; printf("%d", *p); getch(); }

    Khi gi hm printf() khng in gi tr ca x n ch in mt gi tr khng xc nh bi v lnh gn p=x l sai. sa li chng trnh ny, ta dng lnh p=&x.

    5.9.3. Gi tr con tr thay i

    /* Chuong trinh nay bi loi. */ #include #include #include void main(void){ char *p1; char s[80]; p1 = s; do { gets(s); while(*p1) printf(" %d", *p1++); } while(strcmp(s, "done")); getch(); }

    Chng trnh trn dng con tr p1 in cc k t cha trong s ra mn hnh. y s ch gn cho p1 c mt ln. Vng lp u tin p1 tr n phn t u tin ca s. Tuy nhin vng lp th hai p1 tng ln 1, do n khng tr n phn t nm bn tri nht ca s v vy strcmp(s,done) khng cho kt qu chnh xc. khc phc li trn ta a lnh p1=s vo trong vng lp.

    5.10. Cu hi trc nghim v bi tp 5.10.1. Cu hi trc nghim

    Cu 1. Cho bit kt qu hin ra mn hnh

    int *p, *q, x=10; . .

  • 82 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    p = &x; printf(%d\n, *p); q = p; printf(%d\n, *q); *q = *q + 2; printf(%d\n, x); printf(%d\n, *q); printf(%d\n, *p); Cu 2. Cho bit kt qu hin ra mn hnh

    int *p, x = 10; y = 20; . . p = &x; printf(%d\n,x); *p = y; printf(%d\n,x); Cu 3. Cho bit kt qu hin ra mn hnh

    int *p, x = 10; . . p = malloc(sizeof(int)); *p = x; printf(%d\n,x); printf(%d\n,*p); x = x + 2; printf(%d\n,x); printf(%d\n,*p); Cu 4. Cho bit kt qu hin ra mn hnh

    int *p, a[10]; . . . for(i = 0; i < 10; i++) a[i] = i + 1; p = &a[3]; printf(%d\n,*p);

  • Chng 5. Con tr (Pointer) 83

    Dng Hong Huyn

    p = p 2; printf(%d\n,*p); p = p + 4; printf(%d\n,*p); 5.10.2. Bi tp

    Bi 1. Nhp s t nhin n, cp pht cho con tr p n s nguyn trong b nh. Nhp dy cc s nguyn vo p. Tm s ln nht v s nh nht ca dy. m trong dy c bao nhiu s dng, bao nhiu s m, bao nhiu s 0 ? Loi no nhiu nht ?

    Bi 2. Cp pht b nh v nhp mt dy s bt k x1, x2,..., xn. In o ngc dy , v

    d cho dy 1 5 3 8, in ra: 8 3 5 1. Sp xp dy tng dn, in dy. Sp xp dy gim dn, in dy.

    Bi 3. Nhp hai s nguyn m, n. Cp pht b nh ng cho ma trn cp mxn, tm s ln nht, nh nht trn tng dng, ct ca ma trn.

    Bi 4. Nhp s n, cp pht mt ma trn vung cp nxn, kim tra ma trn vung ny c phi l ma trn n v hay khng? ma trn vung ny c i xng vi nhau qua ng

    cho chnh hay khng?

    Bi 5. Cp pht b nh cho ba ma trn Amxp, Bpxn, Cmxn. Vit chng trnh tnh tch ca hai ma trn A.B kt qu lu vo ma trn C.

  • Chng 6. Hm (Function) 85

    Dng Hong Huyn

    CHNG 6. HM (FUNCTION)

    6.1. Dng tng qut ca mt hm Dng tng qut ca mt hm:

    return_type function_name(parameter list) { body of the function }

    Kiu tr v c kiu d liu bt k, ngoi tr kiu mng. Danh sch tham s cch

    nhau bi du phy. Hm c th c tham s hoc khng. Tt c cc tham s ca hm

    phi c khai bo mt cch ring bit.

    f(type var1, type var2, , type varN). vit mt chng trnh c s dng hm, ta phi khai bo hm trc hm

    main, v nh ngha hm sau hm main. Khun dng c th nh sau:

    /* Khai bao ham tai vi tri nay */ return_type function_name(parameter list); return type main(){ statements ; } /* Dinh nghia ham tai vi tri nay */ return_type function_name(parameter list){ body of the function }

    gi hm, ta dng c php:

    function_name(parameter1, parameter2, , parameterN);

    Nu hm khng c tham s hnh thc ta gi hm theo cch sau:

    function_name();

    Nu hm c tr v mt gi tr, hm c th xut hin bn phi php gn, xut

    hin trong cu lnh printf.

  • 86 Ngn ng lp trnh C

    Khoa Cng ngh thng tin Trng i hc Quy Nhn

    V d, vit hm tnh n!, s dng hm ny tnh gi tr t hp n chp k phn t theo cng thc: = !!()! #include /*Khai bao ham tinh giai thua */ unsigned long int giaithua(int n); /* Khai bao ham main */ void main(void){ int n, k, Cnk; printf("n,k="); scanf("%d%d",&n,&k); Cnk = giaithua(n)/giaithua(k)/giaithua(n-k); printf("So to hop %d phan tu cua tap hop %d phan tu la: %d\n",k,n,Cnk); } /* Dinh nghia ham tinh giai thua */ unsigned long int giaithua(int n){ unsigned long int tg=1; int i; for(i=2; i

  • Chng 6. Hm (Function) 87

    Dng Hong Huyn

    hm s c trnh by chi tit phn sau. Ch : ta phi phn bit bin n ca hm main v bin n ca hm giaithua l hai bin khc nhau (c a ch trong b nh khc nhau).

    6.2. Cc lut phm vi ca hm Mi hm l mt khi lnh ring bit, ta khng th truy cp bi mt cu lnh

    khi khc. V d nh nhy t hm ny n hm khc. M to nn thn hm c n

    du i vi nhng chng trnh khc ngoi tr bin cc b hoc nhng d liu khc.

    N c th tc ng hoc khng i vi phn khc ca chng trnh. Ni cch khc, m

    v d liu trong hm ny khng th tng tc vi bin v m trong hm khc.

    Bin nh ngha bn trong hm gi l bin cc b, n s khi to khi vo hm

    v hy b khi thot khi hm. Bin cc b khng gi gi tr khi thot khi hm. Trong

    C, khng cho php nh hm trong hm.

    6.3. Lnh return C hai cch thot khi hm, thc hin n cu lnh cui cng, hoc gp lnh

    return u tin. Mt hm c th cha nhiu lnh return.

    Tt c cc hm u tr v mt gi tr, ngoi tr hm c kiu void. Nu hm khng phi kiu void m ta khng tr v mt gi tr no, chng trnh s tr v mt gi tr bt k no . Nu hm c tr v mt gi tr no , n c th tham gia vo biu

    thc. Nu hm tr v mt s nguyn, ta c th b qua khai bo kiu d liu tr v ca

    hm. Hm c th tr v kiu con tr, khi khai bo kiu d liu tr v phi r rng,

    v d ta khng th tr v kiu con tr int tr v kiu con tr char.

    tr v gi tr cho hm ta dng cu lnh