Chỉång I : Täøng quan Ch−¬ng I TÄØNG QUAN 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ãú tải phng thê nghiãûm Bell nàm 1972 våïi mủc âêch viãút hãû âiãưu hnh UNIX Tuy nhiãn nhåì ỉu viãût v linh âäüng ca C nãn C â âỉåüc giåïi tin hc sỉí dủng khàõp nåi mäüt ngän ngỉỵ chênh thäúng Do cọ nhiãưu phiãn bn C ca nhiãưu nh sn xú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 cng xáy dỉûng chøn cho C Hai chøn ny giäúng v âỉåüc biãút âãún våïi tãn chung laỡ ANSI C I.2 ặu õióứm cuớa ngổợ C: Hióỷn coù rỏỳt nhióửu ngổợ lỏỷp trỗnh khạc PASCAL, JAVA, DELPHI, BASIC, Mäùi ngän ngỉỵ cọ mäüt säú âiãøm mảnh riãng nhiãn ngän ngỉỵ C âỉåüc sỉí dủng räüng ri nhåì nhỉỵng ỉu õióứm sau: ã C laỡ ngổợ maỷnh vaỡ móửm (linh âäüng) C cọ thãø âỉåüc sỉí dủng âãø vióỳt hóỷ õióửu haỡnh, trỗnh bión dởch cuớa ngổợ khaùc, trỗnh õióửu khióứn, soaỷn thaớo 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åì cọ chøn ANSI C nãn cọ kh chuøn cao : chổồng trỗnh vióỳt cho maùy tờnh IBM-PC coù thãø âỉåüc biãn dëch v chảy trãn hãû thäúng mạy tờnh khaùc nhổ VAX ã Chổồng trỗnh dởch coù hióỷu quaớ cao : õóỳn 80% tờnh nng cuớa chổồng trỗnh âọ viãút trãn m mạy Ngän ngỉỵ C cọ thãø sổớ duỷng khaù nhióửu chổồng trỗnh dởch vaỡ caùc thổ viãûn tiãûn êch • C cọ êt tỉì khoạ nãn suùc tờch vaỡ cọ õoỹng ã C laỡ ngổợ cọ cáúu trục modul thäng qua viãûc sỉí dủng cạc hm I.3 Nhỉåüc âiãøm ca ngän ngỉỵ C: Tuy nhiãn C cuợng coù mọỹt sọỳ nhổồỹc õióứm sau : ã Ngän ngỉỵ C cọ cụ phạp lả v khọ hc Nhỉỵng ngỉåìi â tỉìng viãút ngän ngỉỵ khạc cọ thãø vỉåüt qua âỉåüc khọ khàn ny • Mäüt säú kê hiãûu cọ nghéa khạc tu thüc vo ngỉỵ cnh sỉí dủng • C quạ mãưm cọ thãø laỡm cho chổồng trỗnh coù veớ bỏỳt ọứn I.4 Thuỏỷt toạn (Algorithm): Thût toạn l mäüt chùi cạc chè dáùn chênh xạc âem âãún mäüt låìi gii cho mäüt bi toạn Khi xáy dỉûng thût toạn ta chụ phi tho mn cạc âiãưu kiãûn sau : + Tênh kh thi: thût toạn phi thỉûc hiãûn âỉåüc xáy dổỷng chổồng trỗnh õóứ chaỷy õổồỹc trón maùy tờnh Trang Chỉång I : Täøng quan + Säú bỉåïc cáưn thỉûc hiãûn thût toạn l hỉỵu hản âãø sau mäüt säú láưn làûp nháút âënh ta phi âỉåüc nghiãûm ca bi toạn + Tênh täúi ỉu: thäng thỉåìng âäúi våïi mäüt bi toạn cọ nhiãưu phỉång phạp gii khạc ta phi chn säú âọ phỉång phạp gii täúi ỉu nháút vãư thåìi gian thỉûc hiãûn, cho kãút qu chênh xạc nháút, khäúi lỉåüng toạn êt nhỏỳt vaỡ õồn giaớn vióỳt chổồng trỗnh Vờ duỷ : + Phạt biãøu bi toạn : Trong låïp cọ bao nhiãu ngỉåìi tãn Xn ? + Âáưu vo : • Danh låïp • Tãn cáưn kiãøm tra : Xn + Âáưu : • Säú ngỉåìi cọ tãn Xn + Thût toạn : • Láúy danh låïp • Láúy tãn cáưn kiãøm tra : Xn • Xọa bäü âãúm vãư • Láưn lỉåüt âäúi våïi tỉìng tãn danh : So sạnh våïi tãn cáưn kióứm tra, nóỳu õuùng thỗ cọỹng vaỡo bọỹ õóỳm • Thäng baïo giaï trë bäü âãúm ( säú sinh viãn cọ tãn Xn ) I.5 Lỉu âäư : A A A Thổỷc hióỷn cọng vióỷc A Goỹi chổồng trỗnh A Nháûp xút dỉỵ liãûu Begin Sai B Âụng Ty thüc vo trảng thại âụng sai ca biãøu thỉïc B m r nhạnh thêch håüp End Bàõt âáưu v kãút thục mäüt thût toạn Trang Chỉång I : Täøng quan I.6 • • • • Cạc bỉåïc cå baớn vióỳt chổồng trỗnh C: Thióỳt kóỳ chổồng trỗnh : Xạc âënh âáưu vo, âáưu ca bi toạn Xáy dỉûng thût toạn âãø gii quút bi toạn Soản thaớo : Sổớ duỷng chổồng trỗnh soaỷn thaớo TURBO C hồûc BORLAND C hồûc C++, sau âọ lỉu lải file âọ våïi tãn l *.c ( âäúi våïi C++ l *.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 gian âoản: dëch táûp tin *.obj v liãn kãút cạc file *.obj laỷi vồùi 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 phi kiãøm tra lải thût toạn, läùi logic, âãún cho kãút qu âụng II Cạc pháưn tỉí cå bn ca ngän ngỉỵ C: II.1 Bäü kê tỉû ca 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ọỳ • Dáúu cháúm cáu : , ; ? • Cạc kê tỉû âàûc biãût []{}!@#$%^&*()-=\+| ã Caùc kờ tổỷ khọng nhỗn thỏỳy nhổ khoaớng trừng, dáúu tab, k tỉû xúng dng • Kê tỉû gảch dỉåïi _ Âáy chè l táûp ca Bng m ASCII Ta khäng âỉåüc phẹp sỉí dủng cạc kê tỉû ngoi bäü kê tỉû trãn II.2 Cạc tỉì khoạ (keyword): Tỉì khoạ l tỉì dng riãng, khäng thãø âënh nghéa lải, mäùi tỉì khoạ cọ mäüt nghéa riãng Ta khäng âỉåüc sỉí dủng tỉì khoạ vo mủc âêch khạc âàût tãn cho biãún, hàịng, mng; cáưn phi viãút chênh xạc tỉì khoạ auto asm break case cdecl char const continue default 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 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 hm, Cạc tãn phi âỉåüc khai bạo trỉåïc sỉí dủng Cạch õỷt tón : ã Tón laỡ daợy kờ tổỷ lióửn gäưm cạc chỉỵ cại thỉåìng v hoa, cạc chỉỵ säú v dáúu gảch dỉåïi • Tãn khäng âỉåüc chỉïa cạc kê tỉû âàûc biãût 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 v BIEN l cạc tãn khạc • Khäng âỉåüc sỉí dủng tỉì khọa âãø âàût tãn • Tãn cọ thãø di tåïi 31 kê tỉû, nhiãn khäng nãn âàût tãn quạ di • Tãn biãún, tãn hũng nón phaớn aùnh caùi maỡ noù lổu trổợ ã Tãn hm nãn phn ạnh cäng viãûc m lm Vê dủ : bien_dem, nghiem1, hoan_vi, : âụng 1st, bien dem, registry l cạc vê dủ sai Chụ : + C cọ phán biãût chỉỵ hoa v chỉỵ thỉåìng + Táút c cạc tỉì khoạ v hm chøn âãưu l chỉỵ thỉåìng, cạc macro chøn âãưu l chỉỵ hoa II.4 Låìi chụ gii: Låìi chụ gii 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 vióỷc tỗm kiãúm, sỉỵa chỉỵa, gåỵ räúi, nháút l âäúi våïi chổồng trỗnh lồùn, phổùc taỷp Ta cỏửn coù thoùi quen sỉí dủng cạc cáu chụ thêch Khäng sỉí dủng chụ thêch våïi nhỉỵng lãûnh â quạ r rng Låìi chụ giaới khọng coù taùc duỷng taỷo maợ chổồng trỗnh Trỗnh bión dởch seợ boớ qua tỏỳt caớ caùc cỏu ghi chụ Ta khäng sỉí dủng cạc cáu chụ thêch läưng vo Låìi chụ gii åí báút k âáu chổồng trỗnh, õổồỹc õỷt giổợa cỷp kờ hióỷu /* v */ , chụ gii cọ thãø nàịm trãn nhiãưu dng Vê dủ : /* âáy l hm hoạn vë hm ny sỉí dủng tr */ Trong C++, sau mäùi dng, låìi chụ gii cọ thãø nàịm sau kê hiãûu // Mäùi kê hiãûu // chè cọ tạc dủng trãn dng âọ Vê dủ : 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 thụ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 thục khäng cọ dáúu cháúm cáu Cạc cáu lãûnh cng nhọm nãn âàût thàóng cäüt Mäùi cáu lãûnh nãn viãút trãn mäüt dng (nãúu cọ thãø ) Trang Chỉång I : Täøng quan Vê duû : #include main() { int i,j; i=0; return 0; } // khäng phaíi laì lãûnh // ba doìng trãn laì 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 âọ phi cọ hm chênh gi l main() Hm l âoản m lãûnh âäüc láûp âỉåüc âàût tãn v thỉûc hiãûn mäüt cäng viãûc xạc âënh âỉåüc gi âãún Mäüt hm cọ thãø gi âãún nhiãưu hm khạc Hm main() l hm âỉåüc mạy thỉûc hiãûn trổồùc tión mọỹt chổồng trỗnh void ham1(void) { } void ham2(void) { } main() { ham1(); ham2(); } Trang Chæång I : Täøng quan Mọỹt chổồng trỗnh C thổồỡng coù cỏỳu truùc nhổ sau : /* Cạc chè thë tiãưn xỉí lê */ #include #define typedef /* âënh nghéa cạc kiãøu dỉỵ liãûu */ /* khai bạo ngun máùu cạc hm*/ 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 bạo cạc hm*/ kiãøu_dỉỵ_liãûu tãn_hm(tham_säú) { /* cạc cáu lãûnh */ return (giạ_trë_tr_vãư); } Vê dủ : #include // chè thë tiãưn xỉí lê void main() // haìm main() { printf(“\nChao cac ban !”); // cáu lãûnh } Vê duû : diãûn têch hỗnh chổợ nhỏỷt bióỳt chióửu daỡi vaỡ chióửu rọỹng coù sỉí dủng hm #include #include int tich(int x,int y); // khai bạo ngun máùu hm main() { int x,y; // khai bạo biãún printf(“\nNhap chieu dai:”);scanf(“%d”,&x); // hm âc tỉì bn phêm printf(“\nNhap chieu rong:”);scanf(“%d”,&y); printf(“\nDien tich hinh chu nhat: %d,tich(x,y)); // haỡm in maỡn hỗnh getch(); // âc mäüt kê tỉû âãø chåì return 0; } int tich(int x,int y) // âënh nghéa haìm { return (x*y); } Trang Chæång I : Täøng quan Vê duỷ : tờnh dióỷn tờch hỗnh chổợ nhỏỷt bióỳt chióửu di v chiãưu räüng khäng dng hm #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 Bi táûp: Xáy dỉûng thût toạn v v så âäư khäúi ca cạc bi toạn sau: a Tênh n! b Tênh n ∑ i i =1 c Giaới phổồng trỗnh ax + b = d Giaới phổồng trỗnh ax2 + bx + c = e Giaới phổồng trỗnh ax3 + bx2 + cx + d = f Giaới phổồng trỗnh ax4 + bx3 + cx2 + dx + e = Tênh chu vi, dióỷn tờch cuớa hỗnh troỡn bióỳt baùn kờnh r = cm ổa maỡn hỗnh doỡng chổợ : Mọn hoỹc ngổợ lỏỷp trỗnh C Trang Chỉång II : Kiãøu dỉỵ liãûu, biãún vaỡ hũng Chơng II KIỉU Dặẻ LIU, BIN VAè HềNG I Kiãøu dỉỵ liãûu: Kiãøu dỉỵ liãûu l táûp håüp cạc giạ trë m cạc biãún thüc kiãøu âọ cọ thãø nháûn âỉåüc Mäùi kiãøu dỉỵ liãûu cọ mäüt säú phẹp toạn tỉång ỉïng Cạc kiãøu dỉỵ liãûu âỉåüc phán loải sau : kiãøu cå såí kiãøu vä hỉåïng âån gin Kiãøu dỉỵ liãûu kiãøu vä hỉåïng tỉû âënh nghéa kiãøu dỉỵ liãûu cọ cáúu trục kiãøu säú ngun kiãøu säú thæûc kiãøu kê tæû kiãøu logic kiãøu liãût kã kiãøu array kiãøu struct kiãøu file kiãøu troí II Biãún v hàịng, cạc phẹp gạn cå bn: Biãún dng âãø lỉu dỉỵ liãûu cọ thãø thay âäøi giạ trë âỉåüc Hàịng dng âãø lỉu dỉỵ liãûu khäng thãø thay âäøi Biãún v hàịng l vng nhåï lỉu trỉỵ dỉỵ liãûu âỉåüc âàût tãn cho dãù truy cáûp (khäng phi dng âëa chè) Trỉåïc sỉí dủng biãún v hàịng ta cáưn khai bạo trỉåïc II.1 Khai bạo v khåíi tảo biãún: Khai bạo biãún : kiãøu_dỉỵ_liãûu danh_sạch_cạc_tãn_biãún Ta cọ thãø khai bạo nhiãưu biãún cng kiãøu cng mäüt lục, cạc biãún cạch dáúu pháøy Vê dủ : int dem, tam, x, y; float tr_binh; Khåíi tảo biãún : biãún = biãøu thỉïc Vê dủ : int x ; x = 10; hoàûc : int x =10 ; Ta cáưn chụ x = y khäng phi l x bàịng y m l gạn giạ trë ca y vo x Vê dủ : int x,y; y=x; Trang Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàịng Ta nãn nhåï ràịng bäü nhåï mạy khäng räùng mạy lm viãûc Cạc khäúi nhåï cáúp phạt cho biãún cọ thãø â cọ giạ trë trỉåïc âọ Ta chỉa khåíi tảo x nãn ta khäng biãút âỉåüc giạ trë x II.2 Khai bạo v khåíi tảo hàịng: Khai bạo hàịng : const kiãøu_dỉỵ_liãûu tãn_hàịng = giạ trë hàịng Vê dủ : const int so_luong = 50 ; const float sai_so = 0.5 ; II.3 Phẹp gạn: Biãún nháûn giạ trë qua phẹp gạn våïi dáúu bàịng : tãn_biãún = biãøu thỉïc Vê dủ : a = 5; // gạn cho a giạ trë l b = a - 4; // giaï trë a - räưi gạn giạ trë âọ cho b Phẹp gạn kẹp : Vê duû : a = b = c = ; a = (b = ) + ( c = ) ; Khi ta sỉí dủng phẹp gạn kẹp, cáu lãûnh s ngàõn hån nhiãn khäng nãn lảm dủng III Kiãøu säú ngun: Cạc kiãøu säú ngun l nhỉỵng táûp håüp ca táûp Z, khäng phi l ton bäü táûp Z • Cạc kiãøu säú ngun ca C våïi cạc di giạ trë khạc : Di giạ trë Kiãøu biãún Tỉì khoạ Säú byte Character char -128 ÷ 127 -32768 ÷ 32767 Integer int Short integer short -32768 ÷ 32767 -2147483648 ÷ 2147483647 Long integer long Unsigned character unsigned char ÷ 255 ÷ 65535 Unsigned integer unsigned int ÷ 65535 Unsigned short integer unsigned short ÷ 4294967295 Unsigned long integer unsigned long Våïi táút c cạc kiãøu, ta chè nãn gạn cho biãún cạc giạ trë nàịm di giạ trë ca kiãøu âọ, nãúu khäng ta s nháûn âỉåüc kãút qu khäng mong mún màûc d C khäng thäng bạo läùi Kiãøu int l kiãøu thäng dủng nháút Kiãøu char thỉûc l kiãøu kê tỉû nhỉng C cho phẹp sỉí dủng kiãøu char l kiãøu ngun: biãøu thổùc sọỳ hoỹc thỗ char õổồỹc hióứu laỡ kióứu nguyón • Cạc phẹp säú hc âäúi våïi säú ngun : Phẹp toạn Kê hiãûu Vê dủ Cäüng + x+y Trỉì x-y Nhán * x*y Chia láúy pháưn ngun / x/y Chia láúy pháưn dỉ % x%y Tàng ++ x++ hồûc ++x Gim -x hồûc x Trang Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàịng Vê dủ : 10 % =1 ; / = ; • Biãøu diãùn säú ngun dỉåïi dảng Hexa ( hãû tháûp lủc phán) : Hãû tháûp phán sỉí duûng : Hãû nhë phán sỉí dủng : Hãû tháûp lủc phán sỉí dủng : A B C D E F Vê dủ : säú 53 åí dảng nhë phán l 110101, åí dảng Hexa l 35 Säú ngun âỉåüc biãøu diãùn dỉåïi dảng Hexa : 0xgiạ_trë_Hexa hồûc 0Xgiạ_trë_Hexa Vê dủ : 0x12 (=18) ; 0X12 (=18) Âäúi våïi säú hãû ta viãút thãm säú vaìo trỉåïc : 0giạ_trë_Oct Vê dủ : 0123 (=83) • Biãøu diãùn säú ám maïy tênh: Säú ám : Vê duû : int x= - 21 ; 21 : 0000 0000 0001 0101 Säú buì : 1111 1111 1110 1010 Säú b : 1111 1111 1110 1011 • Hiãûn tỉåüng trn säú : Hiãûn tỉåüng ny xy kãút qu dỉû kiãún ca phẹp säú hc vỉåüt di giạ trë cọ thãø biãùu diãùn âỉåüc ca kiãøu dỉỵ liãûu âọ Lục âọ kãút qu thỉûc tãú s l kãút qu sai Vê dủ : 32767 + s cọ kãút qu -32768 Âãø khàõc phủc ta chuøn sang sỉí dủng cạc kiãøu dỉỵ liãûu cọ di giạ trë cho phẹp räüng hån Chụng ta nãn khai bạo våïi kiãøu dỉỵ liãûu täúi ỉu âãø vỉìa cọ kãút qu mong mún vỉìa tiãút kiãûm bäü nhåï Nãúu chụng ta âàût mäüt säú ám vo biãún khäng dáúu hồûc âàût mäüt säú vo kiãøu dỉỵ liãûu coù daới giaù trở nhoớ hồn sọỳ õoù thỗ trỗnh biãn dëch s khäng bạo läùi nhỉng ta s cọ kãút qu khäng mong mún • Hàịng säú ngun cọ kiãøu âënh trỉåïc : Âäi chụng ta mún ghi cạc hàịng säú våïi kiãøu âënh trỉåïc mäüt cạch tỉåìng minh âãø âm bo âäü chênh xạc : ghi thãm kê tỉû vo cúi säú âọ Vê dủ : U : unsigned int UL : unsigned long int 0x123L: hàịng säú ngun dỉåïi dảng Hexa kiãøu long Vê dủ : signed char ch= 0xFF; int x= 0xFFFF; unsigned int y= 0xFFFFu; printf("\n The decimal of signed 0xFF is %d", ch); printf("\n The decimal of signed 0xFFFF is %d", x); printf("\n The decimal of unsigned 0xFFFFu is %u", y); printf("\n The hex of decimal 12 is %#X ", 12); printf("\n The hex of decimal -12 is %#X ", -12); -1 -1 65535 0XC 0XFFF4 Trang 10 ... thỉïc cọ kãút qu l TRUE hồûc FALSE ( thäng qua v 1) • Biãøu thỉïc quan hãû l cạc biãøu thỉïc logic âån gin, chỉïa cạc toạn tỉí quan hãû >,=,