Lập trình C

102 446 2
Lập trình C

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu cung cấp các nội dung liên quan đến lập trình C

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 Chỉång VII : Dỉỵ liãûu kiãøu cáúu trục I.4 Con tr tr âãún kiãøu cáúu truïc : typedef struct { int x; int y; }diem; diem diem1,diem2; diem *pointer=&diem1; Ta dng tr âãø truy cáûp âãún cạc pháưn tỉí ca cáúu trục : tãn_con_tr->tãn_thnh_pháưn hồûc (*tãn_con_tr).tãn_thnh_pháưn toạn tỉí -> gi l toạn tỉí tr tåïi Vê dủ : pointer->x=5; tỉång âỉång våïi diem1.x (*pointer).y=6; tỉång âỉång våïi diem1.y Tỉång tỉû tr biãún thỉåìng, phẹp toạn säú hc âäúi våïi tr cáúu trục cng hoảt âäüng tỉång tỉû I.5 Mng cáúu trục : Ta khai bạo ta âäü bàịng cáúu trục : typedef struct { int x; int y; }diem; diem diem1,diem2; Âãø lỉu trỉỵ ta âäü ca 20 âiãøm ta dng mng : diem taphop[20]= { {2,3}, {3,4} }; Cng mng khạc, mng cáúu trục cng âỉåüc âạnh säú thỉï tỉû tỉì Âãø truy cáûp vo cạc pháưn tỉí ca mng : taphop[3].x=4; taphop[3].y=6; Cng cạc biãún cáúu trục, ta cọ thãø gạn cạc pháưn tỉí ca mng cho v cho cạc biãún cáúu trục âån Chụ : thỉåìng khäng âỉåüc sỉí dủng phẹp toạn láúy âëa chè âäúi våïi cạc thnh pháưn ca mng cáúu trục Âãø cáúp phạt bäü nhåï hiãûu qu, ta duìng haìm malloc: diem *d; int sodiem; d=(diem *)malloc(sodiem*sizeof(diem)); I.6 Cáúu trục v hm : Chuøn tỉìng pháưn tỉí ca biãún cáúu trục hồûc c biãún cáúu trục cho hm : Trang 88 Chỉång VII : Dỉỵ liãûu kiãøu cáúu trục ham1(diem1.x); ham2(diem1.y); Ta cọ thãø chuøn âëa chè ca tỉìng pháưn tỉí cho hm ham1(&diem1.x); ham2(&diem1.y); Vê dủ : struct diem { int x; int y; }; void ham(struct diem d) { printf("\nd.x=%4d\nd.y=%4d",d.x,d.y); } void main() { struct diem diem1; diem1.x=2;diem1.y=4; ham(diem1); } Âãø thay âäøi giạ trë ca cáúu trục ta truưn tr cáúu trục Giạ trë tr vãư ca hm cọ thãø l cáúu trục hồûc tr cáúu trục Vê dủ: #include #include #include typedef struct { char ten[30] ; int diem ; char kq[5] ; } kieuHV; kieuHV *lop , *p , tam ; /* Ham nhap danh sach */ void nhapds ( int n , kieuHV lop[ ]) { int i , diem ; p = lop ; for ( i = ; i < n ; i++) { printf("\nNhap Ho ten nguoi thu %d : " , i + ) ; gets ( p->ten); printf ( " diem = " ) ; scanf ( "%d" , &diem ) ; p->diem = diem ; Trang 89 Chæång VII : Dỉỵ liãûu kiãøu cáúu trục printf ("%c", getchar()); /* khu stdin */ p++ ; } } /* Ham sap xep*/ void sapxep ( int n, kieuHV lop[ ]) { int i , j ; kieuHV tam ; for ( i = ; i < n-1 ; i++) for ( j=i + ; j< n ; j++) if ( lop[i].diem < lop[j].diem ) { tam = lop[i] ; lop[i] = lop [j] ; lop [j] = tam ; } } /* ham in danh sach */ void inds( int n, kieuHV lop[] ) { int i ; for ( i = ; i < n ; i++ ) { printf ("%20s%5d ", lop[i].ten,lop[i].diem ); printf ("\n") ; /* xuong hang */ } } /* chuong trinh chinh */ void main ( ) { int i , j, n , t, diem ; printf ("\n Nhap si so : ") ; scanf ( "%d", &n); lop = (kieuHV*)malloc ( n * sizeof ( kieuHV) ) ; printf ("%c", getchar ()); nhapds(n, lop ) ; sapxep ( n, lop ) ; inds ( n, lop ); getch ( ); } II Kiãøu Union: Cng cáúu trục, union gäưm nhiãưu thnh pháưn khạc nhau, nhỉng chụng khạc åí chäù : cạc thnh pháưn ca cáúu trục chiãúm cạc vng nhåï khạc cạc thnh pháưn ca union âỉåüc cáúp phạt chung mäüt vng nhåï Âäü di ca union bàịng âäü di ca thnh pháưn låïn nháút Viãûc khai bạo v truy xút cạc thnh pháưn ca union cng tỉång tỉû struct S l vä nghéa nãúu chụng ta khåíi tảo cho táút c cạc thnh pháưn ca biãún union Ta cọ thãø khåíi tảo : union u { char ch; int x; } a_union = {`H'}; Trang 90 Chỉång VII : Dỉỵ liãûu kiãøu cáúu trục Vê dủ : #include #include typedef union { int ax; int ay; } test; void main() { test r; r.ax=4660; printf("\n r.ax=%d",r.ax); printf("\n r.ay=%d",r.ay); getch(); } Kãút qu l : ax=4660 ay=4660 Vê dủ: #include #include union u { char ch[2]; int num; }; void main(void) { union u val; val.ch[0] = 'A'; val.ch[1] = 'b'; printf("The two character constants held by the union:\n"); printf("%c\n", val.num & 0x00FF); printf("%c\n", val.num >> 8); } Vê duû : #include #include typedef union { unsigned int ax; struct { unsigned char al; unsigned char ah; } byte; } thanh_ghi; void main() A b Trang 91 Chæång VII : Dỉỵ liãûu kiãøu cáúu trục { thanh_ghi r; r.ax=0x1234; printf("\n r.ax=%x",r.ax); printf("\n r.ah=%x",r.byte.ah); printf("\n r.al=%x",r.byte.al); getch(); } Kãút qu : r.ax=1234 r.ah=12 r.al=34 Thỉûc dos.h ngỉåìi ta â âënh nghéa kiãøu dỉỵ liãûu union cọ tãn REGS âãø phủc vủ cho viãûc truy cáûp cạc ghi cuía CPU viãûc goüi ngàõt C struct BYTEREGS { unsigned char al, ah, bl, bh; unsigned char cl, ch, dl, dh; }; struct WORDREGS { unsigned int ax, bx, cx, dx; unsigned int si, di, cflag, flags; }; union REGS { struct WORDREGS x; struct BYTEREGS h; }; Vê duû: typedef struct { char type; union { char ch; int i; float f; }v; } solieu; Dæûa vo thnh pháưn type m ta biãút âỉåüc cáưn xỉí l säú liãûu theo kiãøu säú no Cạch lm ny êt täún bäü nhåï Ngỉåìi ta cn dng union âãø trêch xút cạc bit byte,word Trang 92 Chỉång VII : Dỉỵ liãûu kiãøu cáúu trục III Bi táûp : Xáy dỉûng mng cáúu trục m mäùi cáúu trục (ỉïng våïi mäùi sinh viãn) gäưm cạc trỉåìng sau : - Hoü vaì tãn - Tuäøi - Låïp - Âiãøm thi âọ âiãøm thi l mäüt cáúu trục gäưm ba trỉåìng : toạn, l, họa Nháûp säú liãûu ca 10 thê sinh, hiãøn thë cạc thê sinh cọ âiãøm trung bỗnh lồùn hồn theo thổù tổỷ tng dỏửn cuớa tọứng sọỳ õióứm Nhỏỷp vaỡo tón cỏửn tỗm, nóỳu coù nhióửu hoỹc vión coù cuỡng tón cỏửn tỗm thỗ in ngỉåìi âáưu tiãn v ngỉåìi cúi cng Vióỳt chổồng trỗnh cọỹng, trổỡ, nhỏn, chia caùc sọỳ phổùc Nháûp vo toả âäü âiãøm A,B,C,D Kiãøm tra xem âiãøm D cọ nàịm tam giạc ABC khäng, âoản thàóng AC v BD cọ càõt khäng Trang 93 Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Chơng VIII Dặẻ LIU KIỉU TP TIN (FILE) I Khại niãûm: Âãø lỉu trỉỵ vénh viãùn dỉỵ liãûu ta phi lỉu trỉỵ lãn thiãút bë nhåï ngoi ca mạy âéa, bàng tỉì, Khi lỉu váûy thỗ nhoùm dổợ lióỷu õoù goỹi laỡ tỏỷp tin (file) File l mäüt kiãøu dỉỵ liãûu cọ cáúu trục, bao gäưm táûp håüp cạc pháưn tỉí dỉỵ liãûu cọ cng kiãøu âỉåüc nhọm lải våïi tảo thnh mäüt dy Mäüt file gäưm cạc byte âỉåüc ghi cạc bäü nhåï ngoi (âéa tỉì, bàng tỉì ) File cọ tãn v âäü di ca chênh bàịng säú byte ca dy Mäüt táûp tin báút k cọ thãø âỉåüc áún âënh l táûp tin vàn bn, cng cọ thãø l táûp tin nhë phán Viãûc áún âënh váûy phủ thüc vo mủc âêch sỉí dủng táûp tin v phủ thüc vo cạch khai bạo kiãøu truy cáûp måí táûp tin - Táûp tin dỉỵ liãûu nhë phán : Dỉỵ liãûu trãn file nhë phán giäúng åí bäü nhåï Táûp tin dỉỵ liãûu vàn bn : Khạc våïi file nhë phán xỉí lê m chuøn dng : + Khi ghi giaù trở LF thỗ chuyóứn thaỡnh giạ trë l CR v LF + Khi âc giaù trở CR vaỡ LF thỗ chuyóứn thaỡnh LF Trong âọ CR (m 13) : vãư âáưu dng; LF (m 10) : xúng dng Cạc bỉåïc xỉí lê file : - Khai bạo biãún file FILE *con_tr_file; - Måí âãø ghi hồûc âc con_tr_file=fopen(tãn_file, kiãøu_xỉí_lê ); - Ghi hồûc âc file - Âọng file fclose(con_tr_file); Cọ tãûp chøn : stdin, stdout, stdprn, stderr, stdlog II Cạc hm xỉí lê táûp tin C : II.1 Cạc hm dng chung cho c kiãøu nhë phán v vàn bn • Haìm fopen: Máùu : FILE *fopen(const char *tãn_file,const char *kiãøu_xỉí_lê); Trong âọ : tãn_file: l âỉåìng dáùn tåïi file trãn âéa kiãøu_xỉí_lê : l xáu våïi cạc nghéa sau : Kiãøu Âäúi våïi táûp Âäúi våïi táûp YÏ nghéa tin vàn baín tin nhë phán “r” “rt” “rb” Måí file â täưn tải âãø âc, nãúu khäng tr vãư läùi “w” “wt” “wb” Måí file måïi âãø ghi, nãúu file â täưn tải s bë xọa “a” “at” “ab” Måí file âãø ghi bäø sung, nãúu chỉa tọửn taỷi thỗ taỷo file mồùi r+ r+t r+b Mồớ file âãø âc/ghi, nãúu file khäng täưn tải s bạo läùi “w+” “w+t” “w+b” Måí file måïi âãø âoüc/ghi, nãúu â täưn tải s bë xọa “a+” “a+t” “a+b” Måí file âãø âc/ghi bäø sung, nãúu chỉa täưn tải thỗ taỷo file mồùi Trang 94 Chổồng VIII : Dổợ liãûu kiãøu táûp tin (File) Cäng dủng: dng âãø måí táûp tin, nãúu thnh cäng s tr vãư tr kiãøu FILE ỉïng våïi táûp tin vỉìa måí, nãúu cọ läùi tr vãư NULL Chụ : Trong cạc kiãøu âc ghi, cáưn lm sảch vng âãûm trỉåïc chuøn tỉì âc sang ghi hồûc ghi sang âc nhåì hm fflush hồûc hm dëch chuøn vë trê tr • Hm fclose: Máùu : int fclose(FILE *tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin cáưn âọng Cäng dủng : dng âãø âọng táûp tin, bao gäưm cạc cäng viãûc : - Âáøy dỉỵ liãûu cn vng âãûm lãn âéa (khi ghi) - Xọa vng âãûm (khi âc) - Gii phọng biãún tãn_tr_file, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng : EOF • Hm fcloseall: Máùu : int fcloseall(void); Cäng dủng : âọng táút c cạc táûp tin âang måí, nãúu thnh cäng tr vãư giạ trë bàịng säú táûp tin âọng âỉåüc, nãúu khäng tr vãư giạ trë EOF • Hm fflush: Máùu : int fflush(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin âang xỉí lê Cäng dủng : lm sảch vng âãûm ca táûp tin, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng tr vãư EOF • Hm fflushall: Máùu : int fflushall(void); Cäng dủng : lm sảch táút c vng âãûm ca cạc táûp tin âang måí, nãúu thnh cäng tr vãư giạ trë bàịng säú táûp tin âỉåüc lm sảch, nãúu khäng tr vãư giạ trë EOF • Hm ferror Máùu : int ferror(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin âang xỉí lê Cäng dủng : kiãøm tra läùi thao tạc trãn táûp tin, nãúu khäng cọ läùi tr vãư giạ trë 0, nãúu cọ läùi tr vãư giạ trë khạc • Hm perror: Máùu : void perror(const char *s); Trong âọ s l tr tr tåïi chùi kê tỉû Cäng dủng : in chùi s v thäng bạo läùi • Hm feof: Máùu : int feof(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin âang xỉí lê Cäng dủng : kiãøm tra kãút thục táûp tin, tr vãư giạ trë khạc nãúu gàûp cuäúi táûp tin âoüc, nãúu khäng traí vãư giạ trë • Hm unlink: Máùu : int unlink(FILE * tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin cáưn xọa Cäng dủng : xọa táûp tin trãn âéa, nãúu thnh cäng tr vãư giạ trë 0, nãúu khäng : EOF Trang 95 Chỉång VIII : Dổợ lióỷu kióứu tỏỷp tin (File) ã Haỡm remove: Máùu : remove(const char * tãn_tr_file); Trong âọ : tãn_tr_file l tr tỉång ỉïng våïi táûp tin cáưn xọa Cäng dủng : xọa táûp tin trãn âéa, hm ny l mäüt macro gi tåïi hm unlink Cạc hm ny dng cho c kiãøu nhë phán v vàn bn nhỉng cọ vi âiãøm khạc • Hm rename: Máùu : rename(const char *f1,const char *f2); Cäng duûng : Âäøi tãn tãûp f1 thnh tãûp f2 • Hm putc v fputc: Máùu : int putc(int ch, FILE *con_tr_file); int fputc(int ch, FILE *con_tr_file); âọ ch l mäüt säú ngun, con_tr_file l tr tỉång ỉïng våïi táûp tin âang xỉí lê Cäng dủng : ghi lãn táûp tin kê tỉû cọ m bàịng m=ch%256 (ch âỉåüc xem khäng dáúu) Nãúu thnh cäng tr vãư giạ trë m kê tỉû âỉåüc ghi, nãúu khäng tr vãư giạ trë EOF • Hm getc v fgetc: Máùu : int getc(FILE *con_tr_file); int fgetc(FILE *con_tr_file); âọ con_tr_táûp tin l tr tỉång ỉïng våïi táûp tin âang xỉí lê Cäng dủng : âc kê tỉû tỉì táûp tin, nãúu hãút tỏỷp tin thỗ traớ vóử EOF II.2 Caùc haỡm di chuøn tr chè vë trê: Cạc file âang måí cọ tr chè vë trê (File Position Locator) dng âãø xạc âënh vë trê âc ghi trãn file • Hm rewind: Máùu : rewind(FILE f); Cäng dủng : Tråí vãư âáưu tãûp âang måí • Hm ftell: Máùu : long ftell(FILE f); Cäng duûng : Cho biãút vë trê hiãûn tải ca tr tãûp (vë trê theo byte, bàõt âáưu tỉì 0, cho -1L nãúu cọ läùi) • Hm fseek: Máùu : int fseek(f, long n, int xuatphat); Cäng duûng : Dëch chuyãøn n byte kãø tỉì vë trê xút phạt (cho khạc nãúu cọ läùi) + fseek(f,0,SEEK_SET); tråí vãư âáưu tãûp + fseek(f,0,SEEK_END); tråí vãö cuäúi tãûp + fseek(f,k,SEEK_CUR); dëch chuyãøn k byte kãø tỉì vë trê tr hiãûn thåìi II.3 Cạc hm nháûp xút kiãøu vàn bn: Hm fprintf: int frintf(FILE *f, const char *âk,dsâs); Cäng dủng : Ghi giạ trë danh saïch caïc âäúi säú (dsâs) lãn tãûp f theo khuän dảng âỉåüc chè âënh chùi âiãưu khiãøn (âk) • Trang 96 Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Haìm fscanf: int fscanf(FILE *f, const char *âk, dsâs); Cäng dủng : Âc dỉỵ liãûu tỉì tãûp f theo khn dảng âỉåüc xạc âënh chùi âiãưu khiãøn âk v kãút qu âỉåüc lỉu vo danh cạc âäúi säú (dsâs) • Hm fputs: int fputs(const char *s, FILE *f); Trong âọ : s l tr tr âãún âëa chè âáưu ca mäüt chùi k tỉû f l tr tãûp Cäng dủng : Ghi chùi s lãn tãûp f (dáúu ‘\0’ khäng ghi lãn tãûp) Khi thnh cäng hm tr vãư k tỉû cúi cng âỉåüc ghi lãn tãûp Khi cọ läùi hm cho EOF • Haìm fgets: char *fgets(char *s, int n, FILE *f); Trong âọ : s l tr tr âãún vng nhåï â låïn âãø chỉïa chùi k tỉû âc tỉì tãûp n l âäü di cỉûc âải ca dy cáưn âc f l tr tãûp Cäng dủng : Âc dy k tỉû tỉì tãûp f v chỉïa vo vng nhåï s Khi thnh cäng, hm tr lải âëa chè vng nháûn kãút qu Khi cọ läùi hồûc gàûp cúi tãûp, hm cho giạ trë NULL Vê dủ : #include #include void main() { FILE *f; char ch; f=fopen("a.txt","w"); putc(toupper(ch=getchar()),f); while(ch!='\n'); fclose(f); } • Vê dủ: #include #include void main() { FILE *f; char ch; if((f=fopen("a.txt","r"))==NULL) printf("\nKhong mo duoc file"); else putchar(ch=getc(f)); while(ch!='\n'); fclose(f); } Trang 97 Chỉång VIII : Dỉỵ liãûu kiãøu táûp tin (File) Vờ duỷ : Vióỳt chổồng trỗnh nhỏỷp theo kióứu vàn baín #include #include void main() { FILE *f; int i,n; float a; f=fopen("a.txt","w"); printf("Nhap n :");scanf("%d",&n); fprintf(f,"%d\n",n); for(i=0;i

Ngày đăng: 16/08/2012, 15:29

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan