Xem mẫu

  1. Bài giảng: ngôn ngữ lập trình C
  2. Chæång I : Täøng quan TÄØNG QUAN Ch−¬ng I. I. Giåïi thiãûu vãö ngän ngæî C: I.1. Lëch sæí ngän ngæî C: Ngän ngæî C âæåüc Dennis Ritchie thiãút kãú taûi phoìng thê nghiãûm Bell nàm 1972 våïi muûc âêch viãút hãû âiãöu haình UNIX. Tuy nhiãn nhåì tênh æu viãût vaì linh âäüng cuía C nãn C âaî âæåüc giåïi tin hoüc sæí duûng khàõp nåi nhæ mäüt ngän ngæî chênh thäúng. Do coï nhiãöu phiãn baín C cuía nhiãöu nhaì saín xuáút pháön mãöm nãn nàm 1983 ANSI (American National Standard Institute) xáy dæûng tiãu chuáøn ANSI C. Täø chæïc ISO cuîng xáy dæûng chuáøn cho C. Hai chuáøn naìy giäúng nhau vaì âæåüc biãút âãún våïi tãn chung laì ANSI C. I.2. Æu âiãøm cuía ngän ngæî C: Hiãûn nay coï ráút nhiãöu ngän ngæî láûp trçnh khaïc nhau nhæ PASCAL, JAVA, DELPHI, BASIC, ... Mäùi ngän ngæî coï mäüt säú âiãøm maûnh riãng tuy nhiãn ngän ngæî C âæåüc sæí duûng räüng raîi nhåì nhæîng æu âiãøm sau: • C laì ngän ngæî maûnh vaì mãöm deío (linh âäüng). C coï thãø âæåüc sæí duûng âãø viãút hãû âiãöu haình, trçnh biãn dëch cuía ngän ngæî khaïc, trçnh âiãöu khiãøn, soaûn thaío vàn baín, âäö hoaû, baíng tênh, ... • Ngän ngæî C âæåüc sæí duûng räüng raîi båíi caïc nhaì láûp trçnh chuyãn nghiãûp vaì nhåì coï chuáøn ANSI C nãn coï tênh khaí chuyãøn cao : chæång trçnh viãút cho maïy tênh IBM-PC coï thãø âæåüc biãn dëch vaì chaûy trãn hãû thäúng maïy tênh khaïc nhæ VAX. • Chæång trçnh dëch coï hiãûu quaí cao : âãún 80% tênh nàng cuía chæång trçnh âoï viãút trãn maî maïy. Ngän ngæî C coï thãø sæí duûng khaï nhiãöu chæång trçnh dëch vaì caïc thæ viãûn tiãûn êch • C coï êt tæì khoaï nãn suïc têch vaì cä âoüng. • C laì ngän ngæî coï cáúu truïc modul thäng qua viãûc sæí duûng caïc haìm. I.3. Nhæåüc âiãøm cuía ngän ngæî C: Tuy nhiãn C cuîng coï mäüt säú nhæåüc âiãøm sau : • Ngän ngæî C coï cuï phaïp laû vaì khoï hoüc. Nhæîng ngæåìi âaî tæìng viãút ngän ngæî khaïc coï thãø væåüt qua âæåüc khoï khàn naìy. • Mäüt säú kê hiãûu coï yï nghéa khaïc nhau tuyì thuäüc vaìo ngæî caính sæí duûng. • C quaï mãöm deío coï thãø laìm cho chæång trçnh coï veí báút äøn. I.4. Thuáût toaïn (Algorithm): Thuáût toaïn laì mäüt chuäùi caïc chè dáùn chênh xaïc âem âãún mäüt låìi giaíi cho mäüt baìi toaïn. Khi xáy dæûng thuáût toaïn ta chuï yï noï phaíi thoaí maîn caïc âiãöu kiãûn sau : + Tênh khaí thi: thuáût toaïn phaíi thæûc hiãûn âæåüc khi xáy dæûng chæång trçnh âãø chaûy âæåüc trãn maïy tênh. Trang 1
  3. Chæång I : Täøng quan + Säú bæåïc cáön thæûc hiãûn trong thuáût toaïn laì hæîu haûn âãø sau mäüt säú láön làûp nháút âënh ta phaíi âæåüc nghiãûm cuía baìi toaïn + Tênh täúi æu: thäng thæåìng âäúi våïi mäüt baìi toaïn coï nhiãöu phæång phaïp giaíi khaïc nhau ta phaíi choün ra trong säú âoï phæång phaïp giaíi täúi æu nháút vãö thåìi gian thæûc hiãûn, cho kãút quaí chênh xaïc nháút, khäúi læåüng tênh toaïn êt nháút vaì âån giaín khi viãút chæång trçnh. Vê duû : + Phaït biãøu baìi toaïn : Trong låïp coï bao nhiãu ngæåìi tãn Xuán ? + Âáöu vaìo : • Danh saïch låïp • Tãn cáön kiãøm tra : Xuán + Âáöu ra : • Säú ngæåìi coï tãn Xuán + Thuáût toaïn : • Láúy danh saïch låïp • Láúy tãn cáön kiãøm tra : Xuán • Xoïa bäü âãúm vãö 0 • Láön læåüt âäúi våïi tæìng tãn trong danh saïch : So saïnh våïi tãn cáön kiãøm tra, nãúu âuïng thç cäüng 1 vaìo bäü âãúm • Thäng baïo giaï trë bäü âãúm ( säú sinh viãn coï tãn Xuán ) I.5. Læu âäö : A A A Thæûc hiãûn cäng viãûc A Goüi chæång trçnh con A Nháûp xuáút dæî liãûu Begin Sai B End Âuïng Tuìy thuäüc vaìo traûng thaïi âuïng Bàõt âáöu vaì kãút thuïc mäüt thuáût toaïn sai cuía biãøu thæïc B maì reî nhaïnh thêch håüp Trang 2
  4. Chæång I : Täøng quan I.6. Caïc bæåïc cå baín khi viãút chæång trçnh C: Thiãút kãú chæång trçnh : • Xaïc âënh âáöu vaìo, âáöu ra cuía baìi toaïn Xáy dæûng thuáût toaïn âãø giaíi quyãút baìi toaïn. Soaûn thaío : • Sæí duûng chæång trçnh soaûn thaío TURBO C hoàûc BORLAND C hoàûc C++, sau âoï læu laûi file âoï våïi tãn laì *.c ( âäúi våïi C++ laì *.cpp ) Dëch : • Chæång trçnh soaûn thaío cuîng laì trçnh biãn dëch. Trçnh biãn dëch seî coï nhiãûm vuû dëch chæång trçnh nguäön sang maî maïy qua 2 gian âoaûn: dëch ra táûp tin *.obj vaì liãn kãút caïc file *.obj laûi våïi nhau qua trçnh liãn kãút. Nãúu coï läùi thç ta quay tråí laûi bæåïc soaûn thaío âãø sæîa chæîa. Chaûy chæång trçnh • Nãúu coï läùi thç ta phaíi kiãøm tra laûi thuáût toaïn, läùi logic, .... âãún khi cho kãút quaí âuïng. II. Caïc pháön tæí cå baín cuía ngän ngæî C: II.1. Bäü kê tæû cuía C: Ngän ngæî C âæåüc xáy dæûng trãn bäü kê tæû sau : • Caïc chæî caïi hoa A .. Z, caïc chæî caïi thæåìng a .. z • Caïc chæî säú 0 .. 9 • Dáúu cháúm cáu : , ; . ? • Caïc kê tæû âàûc biãût nhæ []{}!@#$%^&*()-=\+|... • Caïc kê tæû khäng nhçn tháúy nhæ khoaíng tràõng, dáúu tab, kyï tæû xuäúng doìng. • Kê tæû gaûch dæåïi _ Âáy chè laì táûp con cuía Baíng maî ASCII Ta khäng âæåüc pheïp sæí duûng caïc kê tæû ngoaìi bäü kê tæû trãn. II.2. Caïc tæì khoaï (keyword): Tæì khoaï laì tæì duìng riãng, khäng thãø âënh nghéa laûi, mäùi tæì khoaï coï mäüt yï nghéa riãng. Ta khäng âæåüc sæí duûng tæì khoaï vaìo muûc âêch khaïc nhæ âàût tãn cho biãún, hàòng, maíng; cáön phaíi viãút chênh xaïc tæì khoaï. auto asm break case cdecl char const continue default do double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch typedef Union unsigned void volatile while _cs _ds _es _ss _AH _AL _AX _BH _BL _BX _CH _CL _CX _DH _DL _DX _BP _DI _SI _SP Trang 3
  5. Chæång I : Täøng quan II.3. Tãn vaì caïch âàût tãn: Chæång trçnh sæí duûng ráút nhiãöu tãn: tãn biãún, tãn hàòng, tãn haìm,.... Caïc tãn phaíi âæåüc khai baïo træåïc khi sæí duûng Caïch âàût tãn : • Tãn laì daîy kê tæû liãön nhau gäöm caïc chæî caïi thæåìng vaì hoa, caïc chæî säú vaì dáúu gaûch dæåïi. • Tãn khäng âæåüc chæïa caïc kê tæû âàûc biãût nhæ dáúu cháúm cáu, dáúu caïch ... • Tãn khäng âæåüc bàõt âáöu bàòng chæî säú • C phán biãût chæî hoa vaì chæî thæåìng : bien,Bien vaì BIEN laì caïc tãn khaïc nhau. • Khäng âæåüc sæí duûng tæì khoïa âãø âàût tãn. • Tãn coï thãø daìi tåïi 31 kê tæû, tuy nhiãn khäng nãn âàût tãn quaï daìi. • Tãn biãún, tãn hàòng nãn phaín aïnh caïi maì noï læu træî • Tãn haìm nãn phaín aïnh cäng viãûc maì noï laìm. Vê duû : bien_dem, nghiem1, hoan_vi,... : âuïng. 1st, bien dem, registry laì caïc vê duû sai . Chuï yï : + C coï phán biãût chæî hoa vaì chæî thæåìng + Táút caí caïc tæì khoaï vaì haìm chuáøn âãöu laì chæî thæåìng, caïc macro chuáøn âãöu laì chæî hoa II.4. Låìi chuï giaíi: Låìi chuï giaíi trong chæång trçnh coï muûc âêch laìm cho ngæåìi âoüc dãù hiãøu, chæång trçnh saïng suía, thuáûn låüi trong viãûc tçm kiãúm, sæîa chæîa, gåî räúi, ... nháút laì âäúi våïi chæång trçnh låïn, phæïc taûp. Ta cáön coï thoïi quen sæí duûng caïc cáu chuï thêch. Khäng sæí duûng chuï thêch våïi nhæîng lãûnh âaî quaï roî raìng. Låìi chuï giaíi khäng coï taïc duûng taûo ra maî chæång trçnh. Trçnh biãn dëch seî boí qua táút caí caïc cáu ghi chuï. Ta khäng sæí duûng caïc cáu chuï thêch läöng vaìo nhau Låìi chuï giaíi åí báút kyì âáu trong chæång trçnh, âæåüc âàût giæîa càûp kê hiãûu /* vaì */ , chuï giaíi coï thãø nàòm trãn nhiãöu doìng. Vê duû : /* âáy laì haìm hoaïn vë haìm naìy sæí duûng con troí */ Trong C++, sau mäùi doìng, låìi chuï giaíi coï thãø nàòm sau kê hiãûu //. Mäùi kê hiãûu // chè coï taïc duûng trãn doìng âoï. Vê duû : int dem=0; // dem laì biãún âãúm. II.5. Cáu lãûnh vaì dáúu cháúm cáu: Mäùi cáu lãûnh âæåüc kãút thuïc bàòng dáúu cháúm pháøy ; Nhæîng doìng khäng phaíi laì cáu lãûnh thç kãút thuïc khäng coï dáúu cháúm cáu. Caïc cáu lãûnh cuìng nhoïm nãn âàût thàóng cäüt. Mäùi cáu lãûnh nãn viãút trãn mäüt doìng (nãúu coï thãø ) Trang 4
  6. Chæång I : Täøng quan Vê duû : #include // khäng phaíi laì lãûnh main() { int i,j; i=0; return 0; // ba doìng trãn laì 3 lãûnh nãn coï dáúu ; } III. Cáúu truïc chung cuía chæång trçnh : Chæång trçnh C laì mäüt táûp håüp nhiãöu haìm trong âoï phaíi coï 1 haìm chênh goüi laì main(). Haìm laì âoaûn maî lãûnh âäüc láûp âæåüc âàût tãn vaì thæûc hiãûn mäüt cäng viãûc xaïc âënh khi âæåüc goüi âãún. Mäüt haìm coï thãø goüi âãún nhiãöu haìm khaïc. Haìm main() laì haìm âæåüc maïy tênh thæûc hiãûn træåïc tiãn trong mäüt chæång trçnh. void ham1(void) { ...... } void ham2(void) { ...... } main() { ...... ham1(); ...... ham2(); ...... } Trang 5
  7. Chæång I : Täøng quan Mäüt chæång trçnh C thæåìng coï cáúu truïc nhæ sau : /* Caïc chè thë tiãön xæí lê */ #include .... #define ... typedef .... /* âënh nghéa caïc kiãøu dæî liãûu */ /* khai baïo nguyãn máùu caïc haìm*/ kiãøu_dæî_liãûu tãn_haìm(tham_säú); khai baïo caïc biãún toaìn cuûc; /* chæång trçnh chênh */ main() { ........ /* caïc cáu lãûnh*/ return 0; } /* khai baïo caïc haìm*/ kiãøu_dæî_liãûu tãn_haìm(tham_säú) { ........ /* caïc cáu lãûnh */ return (giaï_trë_traí_vãö); } Vê duû : #include // chè thë tiãön xæí lê void main() // haìm main() { printf(“\nChao cac ban !”); // cáu lãûnh } Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng coï sæí duûng haìm #include #include int tich(int x,int y); // khai baïo nguyãn máùu haìm main() { int x,y; // khai baïo biãún printf(“\nNhap chieu dai:”);scanf(“%d”,&x); // haìm âoüc tæì baìn phêm printf(“\nNhap chieu rong:”);scanf(“%d”,&y); printf(“\nDien tich hinh chu nhat: %d”,tich(x,y)); // haìm in ra maìn hçnh getch(); // âoüc mäüt kê tæû âãø chåì return 0; } int tich(int x,int y) // âënh nghéa haìm { return (x*y); } Trang 6
  8. Chæång I : Täøng quan Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng khäng duìng haìm #include #include main() { int x,y; printf(“\nNhap chieu dai:”);scanf(“%d”,&x); printf(“\nNhap chieu rong:”);scanf(“%d”,&y); printf(“\nDien tich hinh chu nhat: %d”,x*y); getch(); return 0; } IV. Baìi táûp: 1. Xáy dæûng thuáût toaïn vaì veî så âäö khäúi cuía caïc baìi toaïn sau: a. Tênh n! n ∑ b. Tênh i i =1 c. Giaíi phæång trçnh ax + b = 0 d. Giaíi phæång trçnh ax2 + bx + c = 0 e. Giaíi phæång trçnh ax3 + bx2 + cx + d = 0 f. Giaíi phæång trçnh ax4 + bx3 + cx2 + dx + e = 0 2. Tênh chu vi, diãûn têch cuía hçnh troìn biãút baïn kênh r = 3 cm. 3. Âæa ra maìn hçnh doìng chæî : “ Män hoüc ngän ngæî láûp trçnh C “ . Trang 7
  9. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng KIÃØU DÆÎ LIÃÛU, BIÃÚN VAÌ HÀÒNG Ch−¬ng II. I. Kiãøu dæî liãûu: Kiãøu dæî liãûu laì táûp håüp caïc giaï trë maì caïc biãún thuäüc kiãøu âoï coï thãø nháûn âæåüc. Mäùi kiãøu dæî liãûu coï mäüt säú pheïp toaïn tæång æïng. Caïc kiãøu dæî liãûu âæåüc phán loaûi nhæ sau : kiãøu säú nguyãn kiãøu säú thæûc kiãøu cå såí kiãøu kê tæû kiãøu vä hæåïng kiãøu logic âån giaín Kiãøu kiãøu vä hæåïng kiãøu liãût kã dæî tæû âënh nghéa liãûu kiãøu array kiãøu dæî liãûu coï kiãøu struct cáúu truïc kiãøu file kiãøu con troí II. Biãún vaì hàòng, caïc pheïp gaïn cå baín: Biãún duìng âãø læu dæî liãûu coï thãø thay âäøi giaï trë âæåüc. Hàòng duìng âãø læu dæî liãûu khäng thãø thay âäøi. Biãún vaì hàòng laì vuìng nhåï læu træî dæî liãûu âæåüc âàût tãn cho dãù truy cáûp (khäng phaíi duìng âëa chè) . Træåïc khi sæí duûng biãún vaì hàòng ta cáön khai baïo træåïc. II.1. Khai baïo vaì khåíi taûo biãún: Khai baïo biãún : kiãøu_dæî_liãûu danh_saïch_caïc_tãn_biãún Ta coï thãø khai baïo nhiãöu biãún cuìng kiãøu cuìng mäüt luïc, caïc biãún caïch nhau dáúu pháøy. Vê duû : int dem, tam, x, y; float tr_binh; Khåíi taûo biãún : biãún = biãøu thæïc Vê duû : int x ; x = 10; hoàûc : int x =10 ; Ta cáön chuï yï x = y khäng phaíi laì x bàòng y maì laì gaïn giaï trë cuía y vaìo x. Vê duû : int x,y; y=x; Trang 8
  10. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng Ta nãn nhåï ràòng bäü nhåï maïy tênh khäng räùng khi maïy tênh laìm viãûc. Caïc khäúi nhåï cáúp phaït cho biãún coï thãø âaî coï giaï trë træåïc âoï. Ta chæa khåíi taûo x nãn ta khäng biãút âæåüc giaï trë x. II.2. Khai baïo vaì khåíi taûo hàòng: Khai baïo hàòng : const kiãøu_dæî_liãûu tãn_hàòng = giaï trë hàòng Vê duû : const int so_luong = 50 ; const float sai_so = 0.5 ; II.3. Pheïp gaïn: Biãún nháûn giaï trë qua pheïp gaïn våïi dáúu bàòng : tãn_biãún = biãøu thæïc Vê duû : a = 5; // gaïn cho a giaï trë laì 5 b = a - 4; // tênh giaï trë a - 4 räöi gaïn giaï trë âoï cho b Pheïp gaïn keïp : Vê duû : a = b = c = 7 ; a = (b = 4 ) + ( c = 5 ) ; Khi ta sæí duûng pheïp gaïn keïp, cáu lãûnh seî ngàõn hån tuy nhiãn khäng nãn laûm duûng. III. Kiãøu säú nguyãn: Caïc kiãøu säú nguyãn laì nhæîng táûp håüp con cuía táûp Z, khäng phaíi laì toaìn bäü táûp Z . • Caïc kiãøu säú nguyãn cuía C våïi caïc daíi giaï trë khaïc nhau : Kiãøu biãún Tæì khoaï Säú byte Daíi giaï trë Character char 1 -128 ÷ 127 -32768 ÷ 32767 Integer int 2 Short integer short 2 -32768 ÷ 32767 -2147483648 ÷ 2147483647 Long integer long 4 Unsigned character unsigned char 1 0 ÷ 255 0 ÷ 65535 Unsigned integer unsigned int 2 0 ÷ 65535 Unsigned short integer unsigned short 2 0 ÷ 4294967295 Unsigned long integer unsigned long 4 Våïi táút caí caïc kiãøu, ta chè nãn gaïn cho biãún caïc giaï trë nàòm trong daíi giaï trë cuía kiãøu âoï, nãúu khäng ta seî nháûn âæåüc kãút quaí khäng mong muäún màûc duì C khäng thäng baïo läùi. Kiãøu int laì kiãøu thäng duûng nháút. Kiãøu char thæûc ra laì kiãøu kê tæû nhæng C cho pheïp sæí duûng kiãøu char nhæ laì kiãøu nguyãn: trong biãøu thæïc säú hoüc thç char âæåüc hiãøu laì kiãøu nguyãn. • Caïc pheïp tênh säú hoüc âäúi våïi säú nguyãn : Pheïp toaïn Kê hiãûu Vê duû Cäüng + x+y Træì - x-y Nhán * x*y Chia láúy pháön nguyãn / x/y Chia láúy pháön dæ % x%y Tàng ++ x++ hoàûc ++x Giaím -- x--hoàûc --x Trang 9
  11. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng Vê duû : 10 % 3 =1 ; 5 / 3 = 1 ; • Biãøu diãùn säú nguyãn dæåïi daûng Hexa ( hãû tháûp luûc phán) : Hãû tháûp phán sæí duûng : 0 1 2 3 4 5 6 7 8 9 Hãû nhë phán sæí duûng : 0 1 Hãû tháûp luûc phán sæí duûng : 0 1 2 3 4 5 6 7 8 9 A B C D E F Vê duû : säú 53 åí daûng nhë phán laì 110101, åí daûng Hexa laì 35. Säú nguyãn âæåüc biãøu diãùn dæåïi daûng Hexa : 0xgiaï_trë_Hexa hoàûc 0Xgiaï_trë_Hexa Vê duû : 0x12 (=18) ; 0X12 (=18) Âäúi våïi säú hãû 8 ta viãút thãm säú 0 vaìo træåïc : 0giaï_trë_Oct Vê duû : 0123 (=83) • Biãøu diãùn säú ám trong maïy tênh: Säú ám : Vê duû : int x= - 21 ; 21 : 0000 0000 0001 0101 Säú buì 1 : 1111 1111 1110 1010 Säú buì 2 : 1111 1111 1110 1011 • Hiãûn tæåüng traìn säú : Hiãûn tæåüng naìy xaíy ra khi kãút quaí dæû kiãún cuía pheïp tênh säú hoüc væåüt ra khoíi daíi giaï trë coï thãø biãùu diãùn âæåüc cuía kiãøu dæî liãûu âoï. Luïc âoï kãút quaí thæûc tãú seî laì kãút quaí sai. Vê duû : 32767 + 1 seî coï kãút quaí -32768 Âãø khàõc phuûc ta chuyãøn sang sæí duûng caïc kiãøu dæî liãûu coï daíi giaï trë cho pheïp räüng hån Chuïng ta nãn khai baïo våïi kiãøu dæî liãûu täúi æu âãø væìa coï kãút quaí mong muäún væìa tiãút kiãûm bäü nhåï. Nãúu chuïng ta âàût mäüt säú ám vaìo biãún khäng dáúu hoàûc âàût mäüt säú vaìo kiãøu dæî liãûu coï daíi giaï trë nhoí hån säú âoï thç trçnh biãn dëch seî khäng baïo läùi nhæng ta seî coï kãút quaí khäng mong muäún. • Hàòng säú nguyãn coï kiãøu âënh træåïc : Âäi khi chuïng ta muäún ghi caïc hàòng säú våïi kiãøu âënh træåïc mäüt caïch tæåìng minh âãø âaím baío âäü chênh xaïc : ghi thãm 1 kê tæû vaìo cuäúi säú âoï Vê duû : U : unsigned int UL : unsigned long int 0x123L: hàòng säú nguyãn dæåïi daûng Hexa kiãøu long. Vê duû : signed char ch= 0xFF; int x= 0xFFFF; unsigned int y= 0xFFFFu; printf("\n The decimal of signed 0xFF is %d", ch); -1 printf("\n The decimal of signed 0xFFFF is %d", x); -1 printf("\n The decimal of unsigned 0xFFFFu is %u", y); 65535 printf("\n The hex of decimal 12 is %#X ", 12); 0XC printf("\n The hex of decimal -12 is %#X ", -12); 0XFFF4 Trang 10
  12. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng IV. Kiãøu säú thæûc: Caïc kiãøu säú thæûc cuía C : • Kiãøu biãún Tæì khoaï Säú byte Daíi giaï trë 1.2E-38 ÷ 3.4E38 Säú thæûc coï âäü chênh xaïc âån float 4 Säú thæûc coï âäü chênh xaïc keïp double 8 2.2E-308 ÷ 1.8E308 Säú thæûc coï âäü chênh xaïc keïp âäü daìi låïn long double 10 3.4E-4932 ÷ 3.4E4932 Biãøu diãùn säú thæûc åí daûng tháûp phán : Vê duû : 3.14 ; 2.718281828 Biãøu diãùn säú thæûc åí daûng khoa hoüc : Vê duû : 6.023e23=6.023E23 (= 6.023 * 1023) Trong vê duû trãn, pháön âënh trë laì 6.023, pháön muî laì 23 Pháön âënh trë vaì pháön muî coï thãø coï dáúu âi keìm, chuïng âæåüc viãút liãön nhau khäng coï dáúu ngàn caïch. Vê duû : -12.23e-23 Pháön nguyãn hay pháön tháûp phán coï thãø khäng coï nhæng dáúu cháúm khäng thãø thiãúu. Vê duû : 3. .14 Ta âãø yï : 3 laì säú nguyãn nhæng 3. laì säú thæûc. • Biãøu diãùn säú tháûp phán trong maïy tênh: Säú tháûp phán : Vê duû : 12.5 : 1100.1 0.25 : 0.01 Quy trçnh chuyãøn âäøi . • Hàòng säú thæûc coï kiãøu âënh træåïc : Tæång tæû nhæ säú nguyãn : F : kiãøu float L : kiãøu long • Caïc pheïp toaïn våïi kiãøu säú thæûc : Pheïp cäüng ( + ) , træì ( - ) , nhán ( * ) , chia ( / ) , pheïp tàng giaím. Pheïp chia (/) âäúi våïi säú thæûc seî cho kãút quaí laì säú thæûc. Säú thæûc khäng coï pheïp %. Khai baïo vaì khåíi taûo säú thæûc : tæång tæû nhæ säú nguyãn : float x; x=0.3333; Hoàûc float x=0.3333; Do caïch læu træî säú thæûc trong maïy tênh, ta khäng nãn kiãøm tra sæû bàòng nhau giæîa 2 säú thæûc maì ta kiãøm tra fabs( a - b ) < esp hay khäng. V. Kiãøu Boolean: Thæûc ra ngän ngæî C khäng âënh nghéa roî raìng kiãøu Boolean. Kiãøu naìy täön taûi dæåïi daûng säú nguyãn. Säú nguyãn coï giaï trë 0 âæåüc hiãøu laì FALSE, coìn laûi âæåüc hiãøu laì TRUE. Nãúu kãút quaí laì FALSE thç coï giaï trë laì 0, nãúu kãút quaí laì TRUE thç coï giaï trë laì 1. Caïc pheïp toaïn logic vaì caïc pheïp toaïn quan hãû cho kãút quaí kiãøu Boolean Trang 11
  13. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng Caïc toaïn tæí våïi kiãøu Boolean : Toaïn tæí Pheïp toaïn logic YÏ nghéa && AND Pheïp vaì || OR Pheïp hoàûc ! NOT Pheïp phuí âënh Caïc pheïp toaïn quan hãû : Kê hiãûu YÏ nghéa != so saïnh khaïc nhau == so saïnh bàòng nhau >= so saïnh låïn hån hoàûc bàòng so saïnh låïn hån < so saïnh nhoí hån VI. Kiãøu kê tæû (character): Mäùi giaï trë kiãøu char chiãúm 1 byte vaì âæåüc biãøu diãùn thäng qua baíng maî ASCII. Caïc kiãøu kê tæû trong C : Kiãøu biãún Tæì khoaï Säú byte Daíi giaï trë -128 ÷ 127 Kiãøu coï dáúu char ( signed char) 1 Kiãøu khäng dáúu unsigned char 1 0 ÷ 255 Phán loaûi : • Caïc kê tæû vàn baín coï maî tæì 32 âãún 126, coï thãø âæa ra maìn hçnh vaì maïy in. Caïc kê tæû naìy gäöm caïc kê tæû ! ” # $ % & , caïc con säú, caïc chæî caïi thæåìng vaì hoa, ... • Caïc kê tæû âiãöu khiãøn coï maî tæì 0 âãún 31, noïi chung caïc kê tæû naìy khäng thãø âæa ra maìn hçnh. Mäüt säú kê tæû âiãöu khiãøn : Kê tæû Daîy maî Giaï trë hexa Giaï trë tháûp phán âäø chuäng BEL \a x07 7 xoaï traïi BS \b x08 8 nhaíy caïch ngang \t x09 9 nhaíy caïch âæïng \v x0B 11 xuäúng doìng måïi \n x0A 10 sang trang \f x0C 12 vãö âáöu doìng \r x0D 13 dáúu “ \” x22 34 dáúu ‘ \’ x27 39 dáúu ? \? x3F 63 dáúu \ \\ x5C 92 dáúu NULL \0 x00 0 Ta cáön phán biãût hai kê tæû ‘0’ vaì ‘\0’ : Kê tæû ‘0’ laì säú 0 coï maî 48, coìn kê tæû ‘\0’ laì kê tæû NULL coï maî 0. Trang 12
  14. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng Vê duû : Âãø in ra mäüt doìng våïi tiãúng chuäng træåïc vaì sau doìng chæî : printf(“\aHello%c”,7); • Caïc kê tæû âäö hoüa coï maî säú tæì 127 âãún 255. Caïc kê tæû naìy coï thãø âæa ra maìn hçnh nhæng khäng thãø âæa ra maïy in nhåì caïc lãûnh DOS. Hàòng kê tæû âæåüc biãøu diãùn nàòm giæîa 2 dáúu nhaïy âån : ‘a’,’7’,.... Kê tæû âæåüc biãøu diãùn dæåïi daûng Hexa : \xHHH Kê tæû âæåüc biãøu diãùn dæåïi daûng Octal : \DDD Vê duû : ‘A’ coï thãø viãút nhæ sau : \x41 hoàûc \101 Mäüt säú haìm xæí lê kê tæû : (âæåüc cung cáúp trong thæ viãûn ctype.h) Haìm Taïc duûng int toascii(int c) chuyãøn c thaình maî ASCII int tolower(int c) chuyãøn c thaình chæî thæåìng int toupper(int c) chuyãøn c thaình chæî hoa Vê duû : Nháûp chæî thæåìng tæì baìn phêm vaì chuyãøn thaình chæî hoa: #include #include #include main() { int chu_thuong,chu_hoa; chu_thuong=getchar(); chu_hoa=toupper(chu_thuong); putchar(chu_hoa); getch(); return 0; } Vê duû : Chuyãøn mäüt säú thaình maî ASCII #include #include #include main() { int number,result; number=511; result=toascii(number); printf(“\n%d %d %c\n”, number, result, result); getch(); return 0; } Trang 13
  15. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng Haìm toascii xoïa táút caí caïc bit ngoaûi træì 7 bit cuäúi -> kãút quaí thuäüc [0,127] Kãút quaí : 511 127 ∆ Hàòng xáu kê tæû : laì daîy kê tæû nàòm giæîa 2 dáúu ngoàûc keïp Vê duû : “Ngän ngæî” Xáu kê tæû âæåüc læu trong 1 maíng ä nhåï liãön nhau coï caïc pháön tæí laì caïc kê tæû riãng biãût, pháön tæí cuäúi cuìng laì kê tæû NULL ( \0 laì kê hiãûu kãút thuïc cuía xáu kê tæû ) . Vê duû : T O I \0 Sæû khaïc nhau giæîa ‘Z’ vaì “Z” : - ‘Z’ gäöm 1 byte, “Z” gäöm 2 byte læu trong bäü nhåï - ‘Z’ coï thãø âæåüc sæí duûng trong biãøu thæïc toaïn hoüc, coìn “Z” thç khäng. VII. Khai baïo bàòng caïc hàòng tæåüng træng: Máùu khai baïo : #define tãnbanâáöu daîy_ thay_thãú trong âoï daîy_ thay_thãú coï thãø laì hàòng säú, hàòng xáu kê tæû, hàòng logic .... Trçnh biãn dëch seî thay thãú táút caí tãnbanâáöu trong chæång trçnh bàòng daîy_thay_thãú Vê duû : #define PI 3.141592653589793 #define TRUE 1 #define FALSE 0 #define begin { #define end } Chuï yï: Khäng coï dáúu = vaì dáúu ; åí cuäúi cáu vç âáy khäng phaíi laì lãûnh VIII. Caïc kiãøu dæî liãûu tæû âënh nghéa: VIII.1. Kiãøu liãût kã : Khi muäún âënh nghéa 1 kiãøu dæî liãûu bàòng caïch liãût kã táút caí caïc tãn, caïc giaï trë maì ta muäún coï, ta sæí duûng tæì khoïa enum nhæ sau : enum tãn_kiãøu {pt1,pt2,.... } biãún_1,biãún_2; enum tãn_kiãøu {pt1,pt2,.... }; enum {pt1,pt2,.... } biãún_1,biãún_2; enum {pt1,pt2,.... }; Vê duû : enum colors {BLUE,GREEN,RED}; enum colors color ; color = RED ; Daîy caïc pháön tæí âæåüc liãût kã tæång æïng våïi daîy säú tæû nhiãn bàõt âáöu tæì 0. Vê duû : theo vê duû trãn : printf(“%d%d”,BLUE,RED); seî coï kãút quaí laì 02. Âãø pháön tæí bàõt âáöu coï giaï trë khaïc 0, ta âënh nghéa nhæ sau : Trang 14
  16. Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng enum thu {hai=2,ba,tu,nam,sau,bay,cn}; VIII.2. Kiãøu typedef: Tæì khoïa typedef khäng taûo ra kiãøu dæî liãûu måïi maì noï âàût tãn måïi cho kiãøu dæî liãûu âaî täön taûi. Máùu : typedef tãn_kiãøu_cuî tãn_kiãøu_måïi Vê duû : typedef int nguyen; typedef float thuc; sau âoï ta khai baïo biãún : nguyen a,b; typedef coìn coï taïc duûng maûnh hån: char line1[81], line2[81], line3[81]; Ta coï thãø âënh nghéa laûi : typedef char line[81]; line line1,line2,line3; IX. Baìi táûp : 1. Tênh 30/4; 30%4; 2. int x,y; x=0xAB; y=0x23; printf(“\n x+y = %#x\n x-y = %#x”, x+y, x-y ); 3. Biãøu diãùn caïc säú sau dæåïi daûng nhë phán : 127, -129, 12.12 4. Chuyãøn âäøi giæîa caïc cå säú 2, 8, 10, 16 : 1234.1234(10), 11001011.10110011(2), 1234.5671(8), ABC.1234(16). 5. Biãøu diãùn caïc säú sau dæåïi daûng khoa hoüc : 1234567890; -123.456; -0.00123 ( 1.23456789E9 ; -1.23456E2 ; -1.23E-3 ) 6. Âäúi våïi caïc dæî liãûu sau, ta duìng kiãøu dæî liãûu naìo cho håüp lyï : Ngaìy, thaïng, nàm sinh ; âiãøm trung bçnh män hoüc 7. Viãút chæång trçnh nháûp säú giáy, xuáút ra dæåïi daûng giåì : phuït : giáy 8. Viãút chæång trçnh nháûp giåì : phuït : giáy, xuáút ra säú giáy. 9. Viãút chæång trçnh nháûp giåì1 : phuït1 : giáy1 vaì giåì2 : phuït2 : giáy2, xuáút ra täøng. 10. Tênh : (4
  17. Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí Ch−¬ng III. CÁU LÃÛNH, BIÃØU THÆÏC, VAÌ TOAÏN TÆÍ I. Cáu lãûnh: Cáu lãûnh laì 1 chè thë hoaìn chènh, ra lãûnh cho maïy tênh thæûc hiãûn cäng viãûc naìo âoï. Caïc cáu lãûnh kãút thuïc båíi dáúu cháúm pháøy, thæåìng âæåüc viãút trãn 1 doìng âãø chæång trçnh roî raìng. Trçnh biãn dëch seî boí qua caïc kê tæû khäng nhçn tháúy nhæ tab, enter, spacebar, vç váûy 2 cáu lãûnh sau âáy laì tæång âæång våïi nhau : x=y+z; vaì x = y+z; Khoaíng tràõng chè coï yï nghéa trong xáu kê tæû nhæ “Dai hoc Da Nang” Våïi xáu kê tæû âãø coï thãø viãút trãn caïc doìng khaïc nhau thç ta phaíi duìng kê tæû \ . Vê duû : int x, y,z; printf(“\nDai hoc Da Nang”); Cáu lãûnh âån giaín laì nhæîng lãûnh khäng chæïa lãûnh khaïc nhæ pheïp gaïn, låìi goüi haìm kiãøu void (haìm khäng coï giaï trë traí vãö), lãûnh nhaíy khäng âiãöu kiãûn. Cáu lãûnh cáúu truïc laì khäúi lãûnh, lãûnh thæí vaì lãûnh reî nhaïnh, lãûnh làûp. II. Khäúi lãûnh: Khäúi lãûnh laì mäüt nhoïm cáu lãûnh âæåüc bao båíi càûp dáúu ngoàûc {}. Vê duû : { cáu lãûnh 1; cáu lãûnh 2; ........ cáu lãûnh n; } Nhæîng nåi coï thãø âàût mäüt lãûnh âån thç coï thãø âàût 1 khäúi lãûnh. Bãn trong khäúi lãûnh coï thãø coï khäúi lãûnh khaïc. III. Biãøu thæïc: Biãøu thæïc bao gäöm caïc toaïn haûng vaì toaïn tæí. Toaïn haûng coï thãø laì biãún, hàòng, haìm. Toaïn tæí laì + - * / % & | ...... Vê duû : biãøu thæïc tan(x)*y - 2 gäöm caïc toaïn haûng laì haìm tan cuía x, biãún y vaì hàòng 2; caïc toaïn haûng laì *, - . • Biãøu thæïc säú hoüc laì biãøu thæïc coï kãút quaí laì giaï trë säú hoüc. • Biãøu thæïc logic laì biãøu thæïc coï kãút quaí laì TRUE hoàûc FALSE ( thäng qua 0 vaì 1). • Biãøu thæïc quan hãû laì caïc biãøu thæïc logic âån giaín, chæïa caïc toaïn tæí quan hãû nhæ >,=,
  18. Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí IV. Toaïn tæí: Toaïn tæí laì mäüt kê hiãûu nhàòm thæûc hiãûn caïc tênh toaïn trãn 1 hay nhiãöu säú haûng. IV.1. Pheïp tênh theo bit: Khäng aïp duûng cho kiãøu float vaì double Toaïn tæí YÏ nghéa & pheïp AND theo tæìng bit | pheïp OR theo tæìng bit ^ pheïp XOR theo tæìng bit ~ pheïp âaío tæìng bit Vê duû : 3 = 0000 0000 0000 0011 ~3 = 1111 1111 1111 1100 Ta cáön phaíi phán biãût giæîa caïc toaïn tæí & vaì && : 3 & 4 = 0, 3 && 4 = 1. Tæång tæû nhæ váûy våïi caïc toaïn tæí | vaì || : 3 | 4 = 7, 3 || 4 = 1. Ta duìng caïc pheïp tênh theo bit âãø xoaï hoàûc láûp caïc bit trong caïc säú nhë phán. Vê duû : âãø láûp bit thæï 0 vaì bit thæï 3 cuía säú nguyãn x, ta duìng lãûnh x = x | 0x9; âãø xoaï bit thæï 1 vaì bit thæï 2 cuía säú nguyãn x, ta duìng lãûnh x = x & 0xF9; • Pheïp dëch säú hoüc >> vaì
  19. Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí IV.2. Pheïp gaïn måí räüng : x+=y x=x+y x-=y x=x-y x*=y x=x*y x/=y x=x/y x%=y x=x%y x>>=y x=x>>y x
  20. Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí IV.6. Toaïn tæí âiãöu kiãûn : biãøu_thæïc1 ? biãøu_thæïc2 : biãøu_thæïc3; Nãúu biãøu_thæïc1 laì âuïng (khaïc 0) thç giaï trë cuía biãøu thæïc trãn laì biãøu_thæïc2, nãúu biãøu_thæïc1 laì sai (bàòng 0) thç giaï trë cuía biãøu thæïc trãn laì biãøu_thæïc3. Vê duû : Giaí sæí ta muäún tçm giaï trë låïn nháút max cuía 2 säú a vaì b. Ta coï thãø viãút nhæ sau : max = a > b ? a : b Nãúu a > b laì TRUE thç max âæåüc gaïn bàòng a, nãúu khäng thç âæåüc gaïn bàòng b. Vê duû: printf(“There %s %d fish”, (n>1) ? ”are”:”is”, n); printf("There %s %d dog%s", (n>1)?"are":"is", n, (n>1)?"s":""); V. Thæï tæû æu tiãn giæîa caïc pheïp toaïn: Toaïn tæí Chiãöu tênh toaïn L→R () [] -> R→L - ++ -- ! ~ sizeof() &(âëa chè) *(con troí) toaïn tæí eïp kiãøu : toaïn tæí 1 ngäi L→R */% L→R +- L→R > L→R < = > L→R == != L→R & L→R ^ L→R | L→R && L→R || R→L ?: R→L += -= *= /= %= &= ^= |= = Nãúu khäng nhåï thæï tæû thç ta coï thãø duìng caïc dáúu ngoàûc âån (). Nãúu caïc toaïn tæí cuìng cáúp thç laìm theo chiãöu tênh toaïn. Ta khäng nãn viãút : x = f (...) + g (...); nãúu 1 trong 2 haìm f vaì/hoàûc g coï thãø laìm thay âäøi giaï trë cuía caïc biãún truyãön cho haìm coìn laûi. C khäng chè roî haìm naìo seî âæåüc thæûc hiãûn træåïc. Tæång tæû : * printf("%d %d\n", ++n, power(2, n)); /* sai */ * a[i] = i++; VI. Sæû hiãûu chènh khi tênh toaïn : Ngän ngæî C cho pheïp sæû träün láùn caïc toaïn haûng thuäüc caïc kiãøu khaïc nhau. VI.1. Sæû chuyãøn âäøi säú hoüc : Trang 19
nguon tai.lieu . vn