Você está na página 1de 102

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ãú 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
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

Âuïng End

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
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
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
Chæång I : Täøng quan

Vê duû :
#include <stdio.h> // 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
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 <stdio.h> // 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 <stdio.h>
#include <conio.h>
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
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 <stdio.h>
#include <conio.h>
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 =1
i

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
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng

Ch−¬ng II. KIÃØU DÆÎ LIÃÛU, BIÃÚN VAÌ HÀÒNG


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
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
Integer int 2 -32768 ÷ 32767
Short integer short 2 -32768 ÷ 32767
Long integer long 4 -2147483648 ÷ 2147483647
Unsigned character unsigned char 1 0 ÷ 255
Unsigned integer unsigned int 2 0 ÷ 65535
Unsigned short integer unsigned short 2 0 ÷ 65535
Unsigned long integer unsigned long 4 0 ÷ 4294967295
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
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
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ë
Säú thæûc coï âäü chênh xaïc âån float 4 1.2E-38 ÷ 3.4E38
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
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 nhoí 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ë
Kiãøu coï dáúu char ( signed char) 1 -128 ÷ 127
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
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 <stdio.h>
#include <conio.h>
#include <ctype.h>
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 <stdio.h>
#include <conio.h>
#include <ctype.h>
main()
{
int number,result;
number=511;
result=toascii(number);
printf(“\n%d %d %c\n”, number, result, result);
getch();
return 0;
}

Trang 13
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
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<5) || (5<4)
!(4-4) && (2+3)
11. Nãúu ta gaïn mäüt säú coï dáúu cháúm tháûp phán vaìo säú nguyãn thç sao ?
TL: giaï trë âæåüc gaïn vaìo seî bë càõt máút pháön tháûp phán .vê duû : 3.14 thç chè coìn laûi 3.
12. Säú nguyãn ám laì TRUE hay FALSE ?

Trang 15
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æ
>,<,>=,<=,==,!=. Caïc toaïn haûng trong biãøu thæïc naìy khäng nháút thiãút phaíi tæång
thêch våïi nhau vãö kiãøu.

Trang 16
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ì << :
I<<M : dëch säú nguyãn I sang traïi âi M bit, tæång âæång våïi I*2M.
I>>M : dëch säú nguyãn I sang phaíi âi M bit, tæång âæång våïi I/2M.
Vê duû : âãø tênh I*20 ta viãút (I<<4) + (I<<2) vç 20 = 24 + 22.
Vê duû : int i=0x123;
i=i>>3;
printf(“\n i=%#x”,i); 0x24
printf(“\n i=%#o”,i); 044
Chuï yï :
1. int i=0xFFFF;
printf("\ni=%d",i) ; -1
i=i<<2;
printf("\ni=%d",i) ; -4
2. int x=0xFFFF;
x=x<<2;
printf(“\nx=%#x”,x);
Kãút quaí: 0xFFFC; /* khäng phaíi x*22 */
3. I>>M tæång âæång våïi I/2M khi I > 0.
Vê duû: int i=-15;
clrscr();
printf("\ni=%d",i) ; -15
i=i>>3;
printf("\ni=%d",i) ; -2

Trang 17
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<<=y <=> x=x<<y
x&=y <=> x=x&y
x|=y <=> x=x|y
x^=y <=> x=x^y
Chuï yï : a = a*b+c; khäng tæång âæång våïi a*=b+c;
Vç a*=b+c; tæång âæång våïi a=a*(b+c);
Viãûc duìng pheïp gaïn måí räüng coï thãø gáy khoï hiãøu nhæng nhiãöu bäü biãn dëch taûo ra maî
hiãûu quaí hån nãúu ta duìng noï.

IV.3. Pheïp tàng / giaím giaï trë 1 âån vë (duìng våïi caïc biãún):
i=i+1 <=> i++ hoàûc ++i
i=i-1 <=> i-- hoàûc --i
Sæû khaïc nhau giæîa 2 lãûnh gaïn a= ++i vaì a= i++ :
++i : tàng i lãn 1 âån vë, sau âoï måïi gaïn.
i++ : gaïn træåïc, sau âoï måïi tàng i lãn 1 âån vë.
Vê duû : x=0;a=x++; // a=x; x++; : a=0, x=1;
x=0;a=++x; // x++; a=x; : a=1,x=1;

IV.4. Toaïn tæí quan hãû :


Toaïn tæí YÏ nghéa
== toaïn haûng 1 coï bàòng toaïn haûng 2 khäng ?
> toaïn haûng 1 coï låïn hån toaïn haûng 2 khäng ?
< toaïn haûng 1 coï nhoí hån toaïn haûng 2 khäng ?
>= toaïn haûng 1 coï låïn hån hoàûc bàòng toaïn haûng 2 khäng ?
<= toaïn haûng 1 coï nhoí hån hoàûc bàòng toaïn haûng 2 khäng ?
!= toaïn haûng 1 coï khaïc toaïn haûng 2 khäng ?
Ta cáön phaíi phán biãût toaïn tæí quan hãû == vaì toaïn tæí gaïn =

IV.5. Toaïn tæí sizeof():


Toaïn tæí sizeof(x) traí laûi säú byte maì x chiãúm.
Ta coìn coï thãø viãút sizeof(kiãøu_dæî_liãûu)
Vê duû : float x;
printf(“\n Kêch thæåïc cuía kiãøu säú thæûc laì : %d”, sizeof(x));
printf(“\n Kêch thæåïc cuía kiãøu säú nguyãn laì : %d”, sizeof(int));

Trang 18
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
- ++ -- ! ~ sizeof() &(âëa chè) *(con troí) toaïn tæí eïp kiãøu : toaïn tæí 1 ngäi R→L
*/% 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
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí

Viãûc chuyãøn âäøi kiãøu giaï trë xaíy ra tæû âäüng khi trong biãøu thæïc coï caïc toaïn haûng khaïc
kiãøu. Viãûc chuyãøn âäøi kiãøu giaï trë cuîng xaíy ra khi gaïn giaï trë kiãøu naìy cho biãún (hoàûc pháön tæí
maíng) kiãøu kia, khi truyãön giaï trë caïc âäúi säú cho caïc tham säú, trong cáu lãûnh return.
int → long → float → double → long double.
Khi chuyãøn âäøi theo chiãöu ngæåüc laûi thç seî bë máút maït thäng tin, coï thãø coï caính baïo
nhæng khäng coï läùi.
Vê duû: int n;
long p;
float x,s;
s=n*p+x;
âáöu tiãn khi tênh n*p, n âæåüc âäøi thaình kiãøu long. Têch coï kiãøu long nãn khi tênh täøng,
têch âæåüc chuyãøn thaình kiãøu float. Täøng coï kiãøu float seî âæåüc gaïn cho s.

VI.2. Sæû æu tiãn cho kiãøu säú :


Caïc pheïp tênh säú hoüc khäng âënh nghéa cho kiãøu char vaì short. C tæû âäüng hiãûu chènh
kiãøu char vaì kiãøu short thaình kiãøu int.

VI.3. Chuyãøn âäøi âäúi våïi kiãøu kê tæû char:


Kiãøu kê tæû char khi åí trong biãøu thæïc säú hoüc seî âæåüc chuyãøn âäøi thaình kiãøu int dæûa vaìo
baíng maî ASCII.
Vê duû : char ch;
ch = ‘A’ + 1; // ‘A’=65 nãn ‘A’+1=66 tæì âoï ch=’B’

VII. Cäú yï chuyãøn âäøi kiãøu giaï trë:


Âãø nháûn âæåüc kãút quaí mong muäún âäi khi ta phaíi chuyãøn âäøi kiãøu cuía giaï trë.
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int m,n;
float x;
m=3;n=2;
x=m/n; // pheïp chia láúy pháön nguyãn, sau âoï chuyãøn sang kiãøu float âãø gaïn vaìo x
printf(“\n Khi chua chuyen doi : m/n = %f”,x);
printf(“\n Khi da chuyen doi : m/n = %f”,(float)m/n);
getch();
return 0;
}
ÅÍ âáy (float)m coï nghéa laì chuyãøn âäøi n sang kiãøu säú thæûc.
Khi âoï (float)m/n laì pheïp chia giæîa 2 säú thæûc.
Ta coï thãø viãút (float)(m) hoàûc (float)m.

Trang 20
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí

VIII. Caïc haìm säú hoüc chuáøn:


Caïc haìm säú hoüc chuáøn nháûn caïc âäúi säú laì caïc säú nguyãn hoàûc säú thæûc, caïc haìm naìy
nàòm trong file math.h. Vç váûy træåïc khi sæí duûng ta cáön khai baïo #include <math.h>

Haìm YÏ nghéa
int abs(int i) traí laûi giaï trë tuyãût âäúi cuía säú nguyãn i
double fabs(double d) traí laûi giaï trë tuyãût âäúi cuía säú thæûc d
double sin(double d) traí laûi haìm sin
double cos(double d) traí laûi haìm cos
double cosh(double d) traí laûi haìm ch (hyberbolic)
double tan(double d) traí laûi haìm tg
double exp(double d) traí laûi giaï trë e muî d
double log(double d) traí laûi haìm loga cå säú e
double log10(double d) traí laûi haìm loga cå säú 10
double pow(double d1, double d2) traí laûi giaï trë d1 muî d2
double floor(double d) traí laûi haìm càõt troìn säú
double ceil(double d) traí laûi haìm laìm troìn säú
double fmod(double d1, double d2) traí laûi haìm pháön dæ cuía pheïp chia d1/d2
double sqrt(double d) traí laûi haìm càn báûc hai
void srand(double d) khåíi taûo bäü säú ngáùu nhiãn
Vê duû :
floor(3.2) = 3. floor(3.7) = 3.
ceil(3.2) = 4. ceil(3.7) = 4.
Âãø laìm troìn caïc säú thæûc tæì 2.5 âãún cáûn 3.5 thaình 3 ta duìng floor(i+0.5)

IX. Baìi táûp :


1. Giaí sæí ta coï :
float x,y;
x=(int)3.4;
y=(int)3.8;
Tênh x,y. (3,3)
2. Giaí sæí ta coï :
int x=3,y=5;
x=y++;
y=++x;
Tênh x,y. ( 6,6)
3. float x,y;
x=14/5;
y=(float)14/5;
Tênh x,y. ( 2.000 , 2.8 )
4. Tênh 10101 | 11001, 10101 & 11001

Trang 21
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí

5. Ban âáöu 4 säú x,y,z,t âãöu bàòng 5. Thæûc hiãûn caïc lãûnh :
y=x++;
t=++z;
Hoíi kãút quaí cuäúi cuìng cuía 4 säú trãn.
6. Láûp lãûnh tênh biãøu thæïc :
2
z = e tan( x ) +3−cos ( x)

7. Viãút chæång trçnh nháûp 4 säú nguyãn, tênh täøng 2 säú nguyãn åí giæîa
Vê duû : nháûp 4 säú a <= b <= c <= d , xuáút ra b + c.
8. Viãút âoaûn lãûnh tênh haìm dáúu nhæ sau :
− 1 nãúu n < 0

sign(n) =  0 nãúu n = 0
1 nãúu n > 0

Låìi giaíi: Caïch 1: sign = n>0?1:0;


sign = n < 0 ? -1: sign ;
Caïch 2: sign = n > 0 ? 1 : ( n == 0 ? 0 : -1 ) ;
Hoàûc sign = n > 0 ? 1 : ( n < 0 ? -1 : 0 ) ;

Trang 22
Chæång IV : Nháûp xuáút dæî liãûu

Ch−¬ng IV. NHÁÛP XUÁÚT DÆÎ LIÃÛU


I. Haìm printf() :
Haìm printf() nàòm trong stdio.h. Haìm naìy coï khaí nàng chuyãøn daûng, taûo khuän vaì âæa
caïc kiãøu dæî liãûu ra maìn hçnh.

I.1. Daûng :
int printf(“xáu âënh daûng”, daîy caïc biãøu thæïc )
Vê duû :
printf(“%d %d %c”,1,2,’c’);
ÅÍ vê duû trãn ta tháúy coï sæû tæång æïng 1-1 vaì âuïng trçnh tæû giæîa caïc maî âënh daûng trong
xáu âënh daûng vaì daîy caïc biãøu thæïc.

I.2. Xáu âënh daûng : bao gäöm :


• Caïc kê tæû âiãöu khiãøn :
- \n : sang doìng.
- \f : sang trang.
- \b : xoïa luìi mäüt kê tæû
- \t : tab (tæång æïng våïi 8 khoaíng tràõng)
• Caïc maî âënh daûng (%) cho caïc biãøu thæïc tæång æïng
• Caïc kê tæû hiãøn thë: Ngoaìi nhæîng kê tæû bçnh thæåìng, âãø âæa ra nhæîng kê tæû âàûc biãût,
ta phaíi viãút nhæ sau :
- \’ : in ra dáúu ‘
- \* : in ra dáúu *
- \\ : in ra dáúu \
Khuän âënh daûng :
%[flag][fw][.pp]kêtæûâënhdaûng
trong âoï % vaì kêtæûâënhdaûng bàõt buäüc phaíi coï
• flag: coï bäún cåì:
- Canh traïi caïc giaï trë xuáút (màûc âënh laì canh phaíi)
+ Hiãøn thë dáúu cuía caïc säú ( + hoàûc - ).
‘ ‘ Caïc säú khäng dáúu âæåüc bàõt âáöu bàòng khoaíng tràõng, säú ám bàõt âáöu bàòng dáúu -
# In caïc säú coï kê hiãûu cuía hãû thäúng säú (chè duìng våïi caïc kê tæû chuyãøn daûng x, X hoàûc o) :
in 0x hoàûc 0X træåïc säú tháûp luûc phán, in 0 træåïc säú baït phán.

- Khi khäng coï dáúu træì thç kãút quaí âæåüc däön vãö phêa bãn phaíi nãúu âäü daìi thæûc tãú
cuía noï nhoí hån âäü daìi cuía khuän in daình cho noï. Caïc vë trê dæ thæìa seî âæåüc láúp bàòng caïc
khoaíng träúng. Nãúu daîy säú fw bàõt âáöu bàòng säú 0 thç caïc vë trê dæ thæìa seî âæåüc láúp âáöy bàòng säú 0
- Khi coï dáúu træì thç kãút quaí âæåüc däön vãö phêa bãn traïi vaì caïc vë trê dæ thæìa luän
âæåüc láúp bàòng caïc khoaíng träúng.

Trang 23
Chæång IV : Nháûp xuáút dæî liãûu

Træåìng ra fw Dáúu - Kãút quaí


-2035 8 coï -2035
-2035 08 coï -2035
-2035 8 khäng -2035
-2035 08 khäng -0002035
“abcdef” 08 coï abcdef
“abcdef” 08 khäng abcdef
“abcdef” 8 khäng abcdef
• fw : laì daîy säú nguyãn xaïc âënh âäü räüng täúi thiãøu daình cho træåìng ra :
- Khi fw låïn hån âäü daìi thæûc tãú cuía træåìng ra thç caïc vë trê dæ thæìa seî âæåüc láúp
âáöy båíi caïc khoaíng tràõng hoàûc caïc säú 0 tuìy thuäüc vaìo sæû coï màût cuía säú 0. Näüi dung træåìng ra
âæåüc âáøy sang bãn traïi hay phaíi tuìy thuäüc vaìo sæû coï màût cuía dáúu træì.
- Khi khäng coï fw hoàûc fw låïn hån âäü daìi thæûc tãú cuía træåìng ra thç âäü räüng daình
cho træåìng seî bàòng âäü daìi thæûc tãú cuía træåìng ra.
Vê duû : âãø âæa ra doìng 123^^^^^^000123123^^^ ta viãút nhæ sau :
printf(“%-9d%06d%-6d”,123,123,123);
• .pp : pp laì säú nguyãn coï chæïc nàng :
- Âäúi våïi säú nguyãn thç in ra êt nháút pp chæî säú (nãúu thiãúu thç cheìn caïc säú 0). Âäúi
våïi pháön tháûp phán, nãúu khäng coï pp thç âäü chênh xaïc màûc âënh laì 6. Nãúu pp låïn hån âäü daìi
thæûc cuía træåìng ra thç noï cheìn caïc säú 0 vaìo, nãúu nhoí hån thç noï seî càõt båït.
- Âäúi våïi xáu kê tæû : Nãúu pp nhoí hån âäü daìi xáu thç chè coï pp kê tæû âáöu tiãn cuía
xáu âæåüc âæa ra. Nãúu khäng coï pp hoàûc pp låïn hån âäü daìi xáu thç toaìn bäü xáu âæåüc âæa ra.
Vê duû : printf(“%-10.2f”,-123.456); seî cho kãút quaí -123.46^^^
Taûi vë trê fw vaì .pp ta coï thãø âàût dáúu *, khi âoï chuïng âæåüc xaïc âënh båíi biãøu thæïc tæång
æïng: Vê duû : int n=8;
float y=4.5;
printf(“\n%*.2f”,n,y);
seî cho kãút quaí ^^^^4.50
• Kê tæû âënh daûng : laì kê hiãûu xaïc âënh quy tàõc âënh daûng vaì daûng in ra cuía biãøu thæïc.
Kê tæû âënh daûng YÏ nghéa
%c In ra kê tæû kiãøu char, coï thãø duìng cho short hoàûc int
%d, %i In ra säú nguyãn int, coï thãø duìng cho char
%u In ra unsigned int, coï thãø duìng cho unsigned char, unsigned short
%ld In ra säú nguyãn kiãøu long int
%lu In ra säú nguyãn kiãøu unsigned long int
%x,%X In ra säú nguyãn daûng Hexa (%x: lower case, %X: upper case)
%o In ra säú nguyãn daûng Octal
%f In ra säú thæûc åí daûng thæåìng våïi 6 chæî säú tháûp phán, duìng cho float, double
%e,%E In ra säú thæûc åí daûng muî e hay E
%g,%G In ra säú thæûc kiãøu %f hay %e tuìy thuäüc vaìo caïi naìo ngàõn hån
%s In ra xáu kê tæû bàòng caïch cung cáúp âëa chè cuía xáu kê tæû

Trang 24
Chæång IV : Nháûp xuáút dæî liãûu

I.3. Daîy caïc biãøu thæïc :


Caïc biãøu thæïc caïch nhau dáúu pháøy, biãøu thæïc laì hàòng, biãún, haìm, pháön tæí cuía maíng
hoàûc biãøu thæïc cuû thãø.

I.4. Giaï trë cuía haìm printf():


Khi thæûc hiãûn thaình cäng, printf() cho ta säú kê tæû (kãø caí kê tæû âiãöu khiãøn) âæåüc âæa ra.
Khi coï läùi haìm traí vãö giaï trë -1.
Vê duû : m=printf(“\n 123456”); → m=8
Mäüt säú läùi hay màõc phaíi :
- Maî âënh daûng khäng phuì håüp våïi kiãøu cuía biãøu thæïc.
- Säú maî âënh daûng khäng tæång æïng våïi säú biãøu thæïc.

II. Haìm scanf() :


II.1. Máùu :
int scanf(“xáu âënh daûng”, daîy âëa chè caïc biãún)
Vê duû : int x,y;
scanf(“%d%d”,&x,&y);
Doìng vaìo : laì daîy kê tæû liãn tiãúp nháûp tæì thiãút bë vaìo, cuäúi doìng vaìo laì kê tæû \n.
Trong doìng vaìo coï caïc khoaíng tràõng, dáúu tab, ... caïc thaình pháön naìy laì dáúu phán caïch
giæîa caïc træåìng vaìo.
ÅÍ âáy coï sæû tæång æïng 1-1 vaì âuïng trçnh tæû giæîa caïc maî âënh daûng trong xáu âënh daûng
vaì daîy caïc âëa chè caïc biãún.
Xáu âënh daûng : %[*][dd]]kêtæûâënhdaûng
• Dáúu * : Træåìng vaìo váùn âoüc bçnh thæåìng nhæng khäng âæåüc læu vaìo bäü nhåï. Vç
váûy seî khäng coï âäúi tæång æïng.
• dd : daîy säú xaïc âënh âäü daìi træåìng vaìo.
- Nãúu dd vàõng màût hoàûc dd låïn hån âäü daìi cuía træåìng vaìo thç toaìn bäü træåìng
vaìo âæåüc âoüc vaì ghi vaìo vuìng nhåï tæång æïng.
- Nãúu dd nhoí hån âäü daìi cuía træåìng vaìo thç chè coï pháön âáöu cuía træåìng vaìo coï
kêch cåî dd âæåüc âoüc vaì ghi vaìo vuìng nhåï tæång æïng, pháön coìn laûi âæåüc xem xeït sau.
Vê duû :
int a;
float x,y;
char ch[10],ct[10];
scanf("%f%5f%3d%3s%s",&x,&y,&a,ch,ct);
Khi ta nháûp vaìo 12345 12 12345678abcd thç :
x=12345
y=12
a=123
ch=”456” (coï kê tæû NULL åí cuäúi)
ct=”78abcd” (coï kê tæû NULL åí cuäúi)

Trang 25
Chæång IV : Nháûp xuáút dæî liãûu

• Kê tæû âënh daûng : c,[daîy kê tæû],[^daîy kê tæû]


Kê tæû âënh daûng YÏ nghéa
%c Âoüc mäüt kê tæû kiãøu char
%d Âoüc säú nguyãn int
%u Âoüc unsigned int
%hd Âoüc säú nguyãn kiãøu short int
%ld Âoüc säú nguyãn kiãøu long int
%lu Âoüc säú nguyãn kiãøu unsigned long int
%x Âoüc säú nguyãn daûng Hexa
%o Âoüc säú nguyãn daûng Octal
%f Âoüc säú thæûc float theo kiãøu viãút thæåìng hay viãút theo säú muî
%e Âoüc säú thæûc float viãút theo säú muî
%lf hoàûc %lu Âoüc säú thæûc double
%s Âoüc xáu kê tæû khäng chæïa dáúu caïch, duìng âëa chè cuía xáu kê tæû
[daîy kê tæû]:
Caïc kê tæû trãn doìng vaìo seî âæåüc âoüc nãúu thuäüc daîy kê tæû trong 2 dáúu []. Âäúi tæång æïng
phaíi laì con troí kiãøu char troí tåïi vuìng nhåï âuí låïn.
[^daîy kê tæû]:
Caïc kê tæû trãn doìng vaìo seî âæåüc âoüc láön læåüt cho âãún khi gàûp 1 kê tæû thuäüc daîy kê tæû
trong 2 dáúu []. Âäúi tæång æïng phaíi laì con troí kiãøu char troí tåïi vuìng nhåï âuí låïn.
Mäüt säú läùi hay màõc phaíi :
- Maî âënh daûng khäng phuì håüp våïi kiãøu cuía biãøu thæïc.
- Säú maî âënh daûng khäng tæång æïng våïi säú biãøu thæïc.

Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char x[10],y[10];
printf("\nNhap vao day :");
scanf("%[1234567890]%[^0123456789]",x,y);
printf("\n%s",x);
printf("\n%s",y);
getch();
return 0;
}
Khi ta nháûp 12345abcdefg123 thç kãút quaí seî laì :
x=12345 vaì y=abcdefg.
• Giaï trë traí vãö cuía haìm :
Haìm traí vãö säú nguyãn bàòng säú caïc giaï trë nháûn âæåüc (læu vaìo bäü nhåï).
Trong vê duû trãn, giaï trë traí vãö cuía haìm laì 2.

Trang 26
Chæång IV : Nháûp xuáút dæî liãûu

• Daîy caïc âëa chè cuía caïc biãún :


Laì caïc con troí chæïa âëa chè cuía caïc biãún, caïc âëa chè naìy caïch nhau dáúu pháøy.

Vê duû : int a;
char b;
scanf(“%c%d”,&b,&a);
vaì ta nháûp c^3 thç b=’c’ vaì a=3.
Vê duû : int a;
char b;
scanf(“%d%c”,a,b);
vaì ta nháûp 3^c thç a=3 vaì b=’^‘.
Vê duû : int a;
char b;
scanf(“%d %c”,a,b);
vaì ta nháûp 3^c thç a=3 vaì b=’c‘.
Nhæ váûy nãúu giæîa 2 maî âënh daûng ta coï thãm vaìo caïc khoaíng tràõng thç khi nháûp dæî
liãûu, maïy seî nhaíy qua caïc khoaíng tràõng, dáúu xuäúng doìng, dáúu tab..... âãún khi gàûp kê tæû khaïc.
Vê duû : int a,b;
scanf(“%d%d”,&x,&y);
Nãúu ta goî vaìo 34^^45 thç x=34,y=45.
Nãúu ta goî ^^^34^^45^^^^ hoàûc nháûp hai säú âoï trãn nhiãöu doìng thç váùn coï kãút quaí trãn.
• Khuän âoüc : khuän âoüc cuîng nhæ khuän in.
Vê duû : scanf(“%3d %3d”,&a,&b);
Ta nháûp vaìo 12^^23 kãút quaí : a=12;b=23.
1234567 kãút quaí : a=123;b=456.
Chuïng ta nãn nháûp vaìo caïc säú trãn tæìng doìng âãø khäng bë láùn läün.
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int x,y;
printf(“\nNhap vao so x :”);
scanf(“%d”,&x);
printf(“\nNhap vao so y :”);
scanf(“%d”,&y);
printf(“\nx=%d”,x);
printf(“\ny=%d”,y);
getch();
return 0;
}
Khi ta nháûp 23^^^34^^^↵ thç kãút quaí laì Nhap vao so x : 23^^^34

Trang 27
Chæång IV : Nháûp xuáút dæî liãûu

Nhap vao so y :
x=23
y=34
Dæî liãûu nháûp vaìo tæì baìn phêm âæåüc læu vaìo stdin âãø chåì xæí lê chæï khäng âæåüc xæí lê
træûc tiãúp tæì baìn phêm. Do dæî liãûu âaî coï sàôn trong stdin nãn maïy tênh âoüc luän säú naìy vaì gaïn
cho biãún tæång æïng maì khäng chåì ta goî tiãúp vaìo tæì baìn phêm. Trong stdin seî coìn laûi caïc kê tæû
^^^ vaì kê tæû xuäúng doìng (\n).

III. Âæa ra maïy in :


Máùu : fprintf(stdprn,“xáu âënh daûng”, daîy caïc biãøu thæïc );
Âäúi säú stdprn xaïc âënh thiãút bë âæa ra laì maïy in.
Xáu âënh daûng vaì daîy caïc biãøu thæïc giäúng nhæ haìm printf().
Vê duû : fprintf(stdprn,”Xin chao cac ban \n”);

IV. Luäöng dæî liãûu :


Coï nhiãöu thiãút bë vaìo ra nhæ baìn phêm, maìn hçnh, maïy in, táûp tin dæî liãûu trãn âéa .....
Doìng dæî liãûu laì caïc byte dæî liãûu trao âäøi giæîa caïc thiãút bë.
Caïc doìng dæî liãûu liãn quan tåïi caïc thiãút bë vaìo ra thäng duûng :
Stdin baìn phêm
Stdout maìn hçnh
Stderr maìn hçnh
Stdprn maïy in
Stdaux cäøng näúi tiãúp
Lãûnh printf thæûc cháút laì lãûnh fprintf(stdout,...)

V. Doìng vaìo stdin :


Stdin laì doìng vaìo chuáøn (baìn phêm), caïc haìm scanf, gets, getchar nháûn dæî liãûu tæì âoï.
Nãúu stdin coï âuí dæî liãûu, caïc haìm trãn seî nháûn pháön dæî liãûu maì chuïng yãu cáöu, pháön dæî
liãûu coìn laûi váùn åí trãn stdin.
Nãúu stdin chæa coï âuí dæî liãûu, maïy seî taûm dæìng âãø ngæåìi sæí duûng nháûp thãm dæî liãûu tæì
baìn phêm vaìo stdin (cho âãún khi báúm phêm Enter ) .

V.1. Haìm gets:


Haìm naìy nháûp mäüt chuäùi dæî liãûu tæì stdin. Haìm naìy thuäüc táûp tin stdio.h
• Máùu : char *gets(char *s);
Trong âoï : s laì con troí kiãøu char tåïi vuìng chæïa daîy kê tæû nháûn âæåüc.
• Cäng duûng :
Nháûn daîy kê tæû tæì stdin cho âãún khi gàûp kê tæû \n (tæïc laì chuäùi coï thãø chæïa khoaíng
tràõng). Kê tæû \n âæåüc loaûi khoíi stdin vaì cuîng khäng täön taûi trong chuäùi nháûn âæåüc. Chuäùi âæåüc
bäø sung thãm kê tæû \0 vaì âàût vaìo vuìng nhåï maì con troí s troí tåïi. Haìm traí vãö âëa chè maì chuäùi
nháûn âæåüc.

Trang 28
Chæång IV : Nháûp xuáút dæî liãûu

Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char name[20];
printf(“Nhap vao ten cua ban :”);
gets(name);
printf(“\nTen cua ban la : %s“,name);
getch();
return 0;
}
Ta cuîng coï thãø duìng haìm naìy âãø âoüc mäüt säú nguyãn :
gets(str);
i=atoi(str);
hoàûc âoüc mäüt säú thæûc:
gets(str);
f=atof(str);

V.2. Haìm getchar():


Haìm naìy nháûn mäüt kê tæû tæì stdin. Haìm thuäüc táûp tin stdio.h
• Máùu : int getchar(void);
• Cäng duûng :
Nháûn mäüt kê tæû tæì stdin, traí vãö kê tæû nháûn âæåüc.
Chuï yï :
1. Xeït cáu lãûnh :
int ch;
ch=getchar();
Nãúu ta nháûp vaìo chæî ‘A’ vaì nháún Enter thç ch=’A’ vaì kê tæû \n váùn coï trong stdin vaì noï
seî laìm träi âi haìm getchar hoàûc gets sau âoï.
Nãúu ta nháún Enter thç ch=’\n’ vaì \n khäng coìn trong stdin.
2. Haìm scanf cuîng âãø laûi kê tæû \n . Kê tæû naìy seî laìm träi caïc haìm getchar vaì gets
sau âoï. Âãø haìm naìy hoaût âäüng âuïng, ta thãm vaìo %*c åí cuäúi xáu âënh daûng.
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int t;
char name[20];
printf("Nhap vao tuoi cua ban :");
scanf("%d%*c",&t);

Trang 29
Chæång IV : Nháûp xuáút dæî liãûu

printf("\nTen cua ban la : ");


gets(name);
return 0;
}

V.3. Laìm saûch stdin :


Ta sæí duûng haìm fflush. Nhàòm xoïa caïc kê tæû coìn laûi trong stdin.
Máùu : fflush(stdin);
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int x,y;
printf(“\nNhap vao so x :”);
scanf(“%d”,&x);
fflush(stdin);
printf(“\nNhap vao so y :”);
scanf(“%d”,&y);
printf(“\nx=%d”,x);
printf(“\ny=%d”,y);
getch();
return 0;
}
Kãút quaí : Nhap vao so x : 25^^^69
Nhap vao so y : 56
x=25
y=56

VI. Caïc haìm xuáút kê tæû puts vaì putchar:


VI.1. Haìm puts :
• Máùu : int puts(const char *s);
Trong âoï s laì con troí kiãøu char, troí tåïi vuìng nhåï chæïa chuäùi kê tæû cáön xuáút ra stdout.
• Cäng duûng : âæa chuäùi s vaì thãm kê tæû \n ra maìn hçnh
• Giaï trë traí vãö :
Khi thaình cäng traí vãö kê tæû cuäúi cuìng âæåüc xuáút (\n). Khi coï läùi traí vãö EOF.
Vê duû : puts(“Viet nam”);
Lãûnh naìy giäúng lãûnh writeln cuía PASCAL.

VI.2. Haìm putchar :


• Máùu : int putchar(int ch);
Trong âoï ch laì laì maî cuía kê tæû cáön xuáút ra stdout.

Trang 30
Chæång IV : Nháûp xuáút dæî liãûu

• Cäng duûng : âæa kê tæû coï maî laì ch ra maìn hçnh


• Giaï trë traí vãö :
Khi thaình cäng traí vãö kê tæû âæåüc xuáút . Khi coï läùi traí vãö EOF.
Vê duû : putchar(‘A’); putchar(65);

VII. Caïc haìm vaìo ra trãn maìn hçnh vaì baìn phêm :
Caïc haìm naìy thuäüc táûp tin conio.h

VII.1. Haìm getch :


• Máùu : int getch(void);
• Cäng duûng :
- Nãúu coï sàôn kê tæû trong bäü âãûm baìn phêm thç haìm nháûn luän kê tæû âoï.
- Nãúu bäü âãûm räùng thç chåì goî mäüt phêm maì khäng cáön báúm Enter. Kê tæû væìa
goî khäng xuáút hiãûn trãn maìn hçnh.
• Giaï trë traí vãö : Haìm traí vãö kê tæû nháûn âæåüc.
Ta nãn sæí duûng haìm getch() åí cuäúi haìm main() âãø xem âæåüc kãút quaí trãn maìn hçnh
trong khi chæång trçnh âang chåì ta goî vaìo 1 phêm.

VII.2. Haìm getche :


• Máùu : int getche(void);
• Cäng duûng : nhæ haìm getch nhæng hiãøn thë kê tæû âoï trãn maìn hçnh.

VII.3. Haìm putch :


• Máùu : int putch(int ch);
Trong âoï ch laì maî cuía kê tæû cáön xuáút.
• Cäng duûng : Xuáút kê tæû coï maî ch ra maìn hçnh, kê tæû âæåüc xuáút våïi maìu âæåüc xaïc
âënh trong haìm textcolor. Âáy laì sæû khaïc biãût giæîa haìm putch vaì putchar, haìm putchar luän
xuáút kê tæû ra maìn hçnh våïi maìu tràõng.
• Giaï trë traí vãö : Haìm traí vãö kê tæû âæåüc hiãøn thë

VII.4. Haìm khbit :


• Máùu : int khbit(void);
• Cäng duûng : Haìm coï giaï trë khaïc 0 nãúu bäü âãûm baìn phêm khäng räùng, coï giaï trë 0
nãúu bäü âãûm baìn phêm räùng.

VIII. Trçnh baìy maìn hçnh :


Caïc haìm trçnh baìy maìn hçnh nàòm trong táûp tin conio.h

VIII.1. Haìm di chuyãøn con troí :


• Máùu : gotoxy(int x, int y);
• Cäng duûng : âàût con troí maìn hçnh vaìo toüa âäü (x,y) cuía maìn hçnh. x laì toüa âäü cäüt coï
giaï trë tæì 1 âãún 80, y laì toüa âäü cäüt coï giaï trë tæì 1 âãún 25

Trang 31
Chæång IV : Nháûp xuáút dæî liãûu

VIII.2. Haìm xoïa maìn hçnh clrscr() : (Clear Screen)


• Máùu : clrscr();
• Cäng duûng : xoïa toaìn bäü maìn hçnh vaì âàût con troí åí vë trê goïc trãn bãn traïi.

VIII.3. Haìm clreol() : (Clear End of line)


• Máùu : clreol();
• Cäng duûng : xoïa caïc kê tæû nàòm bãn phaíi con troí.

VIII.4. Haìm delline():


• Máùu : void delline(void);
• Cäng duûng : xoïa doìng cuía cæía säø âang chæïa con troí.

 Caïc hàòng maìu : âæåüc sæí duûng våïi caïc haìm textcolor() vaì haìm textbackground()

Giaï trë Maìu


0 BLACK Âen
1 BLUE Xanh lå
2 GREEN Xanh laï cáy
3 CYAN Xanh cáøm thaûch
4 RED Âoí
5 MAGENTA Têa
6 BROWN Náu
7 LIGHTGRAY Xaïm nhaût
8 DARKGRAY Xanh âáûm
9 LIGHTBLUE Xanh nhaût
10 LIGHTGREEN Xanh laï cáy nhaût
11 LIGHTCYAN Xanh cáøm thaûch nhaût
12 LIGHTRED Âoí nhaût
13 LIGHTMAGENTA Têa nhaût
14 YELLOW Vaìng
15 WHITE Tràõng
128 BLINK Nháúp nhaïy

VIII.5. Haìm textcolor() :


• Máùu : void textcolor(int newcolor);
• Cäng duûng : choün maìu kê tæû måïi.

Newcolor coï giaï trë tæì 0 âãún 15 tæång æïng våïi caïc maìu åí baíng trãn
Âãø caïc kê tæû nháúp nhaïy ta cäüng thãm 128 vaìo giaï trë maìu.
Vê duû : textcolor(WHITE);
hoàûc textcolor(15);

Trang 32
Chæång IV : Nháûp xuáút dæî liãûu

VIII.6. Haìm textbackground() :


• Máùu : void textbackground(int color);
• Cäng duûng: choün maìu nãön måïi
Color coï giaï trë tæì 0 âãún 7 tæång æïng våïi 8 maìu åí baíng trãn.
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int x,y,i=0;
int attr;
char *s=”Da Nang”;
clrscr();
x=10;y=12;
while (s[i]!=’\0’)
{ gotoxy(x++,y++);
putch(s[i]);
i++; attr+=17;
textattr(attr);
}
getch();
return 0;
}

VIII.7. Haìm highvideo(), lowvideo() vaì normvideo() :


Caïc haìm naìy âiãöu khiãøn âäü saïng cuía kê tæû. highvideo() cho âäü saïng låïn, lowvideo()
cho âäü saïng yãúu, normvideo() cho âäü saïng bçnh thæåìng.
Vê duû : lowvideo(); printf(“ABC”);
normvideo(); printf(“ABC”);

VIII.8. Haìm textattr() :


• Máùu : textattr(int newattr);
Trong âoï newattr laì byte maî hoïa thuäüc tênh maìu.
B b b b f f f f
4 bit f laì maìu kê tæû (foreground), 3 bit b laì maìu nãön (background) vaì bit B xaïc láûp nháúp
nhaïy.
• Cäng duûng : xaïc láûp thuäüc tênh cuía kê tæû trãn maìn hçnh.

VIII.9. Haìm wherex, wherey :


• Máùu : int wherex();
int wherey();
• Giaï trë traí vãö : Traí vãö giaï trë laì toüa âäü hiãûn thåìi cuía con troí trãn maìn hçnh

Trang 33
Chæång IV : Nháûp xuáút dæî liãûu

VIII.10. Haìm printf, scanf, cprintf, cscanf :


Chæïc nàng cprintf, cscanf gáön giäúng nhæ printf, scanf nhæng våïi caïc haìm cprintf,
cscanf caïc kê tæû hiãûn trãn maìn hçnh seî aính hæåíng båíi cáu lãûnh textcolor, coìn printf, scanf thç
khäng.

VIII.11. Haìm window :


• Máùu : window(int x1, int y1, int x2, int y2);
• Cäng duûng : taûo ra cæía säø vàn baín våïi caïc toüa âäü nhæ trãn vaì âæa con troí vãö goïc
trãn bãn traïi cæía säø væìa taûo. Caïc lãûnh ghi ra vàn baín trãn maìn hçnh seî nàòm trong cæía säø naìy.

IX. Baìi táûp :


1. Viãút chæång trçnh nháûp baïn kênh R vaì xuáút ra maìn hçnh thãø têch, diãûn têch cuía hçnh cáöu
(V=4πR3/3, S=4πR2)
2. Viãút chæång trçnh nháûp theo thæï tæû caïc thäng tin cuía mäüt ngæåìi (hoü tãn, tuäøi, nghãö
nghiãûp, âëa chè,...) räöi xuáút ra maìn hçnh caïc thäng tin âoï.

Trang 34
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Ch−¬ng V. CAÏC CÁU LÃÛNH ÂIÃÖU KHIÃØN


Thäng thæåìng trong mäüt chæång trçnh, caïc cáu lãûnh âæåüc thæûc hiãûn tuáön tæû tæì trãn
xuäúng. Tuy nhiãn coï nhiãöu khi ta laûi muäún thay âäøi tráût tæû trãn nhåì sæí duûng caïc cáu lãûnh âiãöu
khiãøn chæång trçnh. Caïc cáu lãûnh âiãöu khiãøn coï thãø laìm cho caïc cáu lãûnh âæåüc thæûc hiãûn nhiãöu
láön hoàûc khäng láön naìo caí.
Caïc cáu lãûnh âiãöu khiãøn gäöm coï :
• cáu lãûnh reî nhaïnh : if...else ; switch
• cáu lãûnh nhaíy khäng âiãöu kiãûn
• cáu lãûnh voìng làûp
• cáu lãûnh häù tråü nhæ break, continue.

I. Cáu lãûnh if .. else....:


I.1. Caïc daûng cuía cáu lãûnh if :
Daûng 1 : if (biãøu thæïc) /* khäng coï dáúu cháúm pháøy åí âáy*/
lãûnh_1;

F
biãøu thæïc

khäúi lãûnh 1

Daûng 2 : if (biãøu thæïc)


lãûnh_1;
else
lãûnh_2;

Trang 35
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

F
biãøu thæïc Khäúi lãûnh 2

khäúi lãûnh 1

Daûng 1 : nãúu biãøu thæïc coï giaï trë khaïc 0 (TRUE) thç thæûc hiãûn khäúi lãûnh 1, nãúu bàòng 0
(FALSE) thç tiãúp tuûc thæûc hiãûn lãûnh tiãúp theo sau lãûnh if.
Daûng 2 : nãúu biãøu thæïc coï giaï trë khaïc 0 (TRUE) thç thæûc hiãûn khäúi lãûnh 1, nãúu bàòng 0
(FALSE) thç thæûc hiãûn khäúi lãûnh 2.
Biãøu thæïc khäng nháút thiãút phaíi laì biãøu thæïc so saïnh maì coï thãø laì biãøu thæïc säú hoüc.
Vê duû : tçm säú låïn nháút vaì nhoí nháút trong 2 säú nháûp tæì baìn phêm.
#include <stdio.h>
#include <conio.h>
main()
{
float x,y,min,max;
printf(“Nhap so thuc thu nhat:”);scanf(“%f”,&x);
printf(“Nhap so thuc thu hai :”);scanf(“%f”,&y);
if ( x<y )
{ min = x;
max = y;
}
else
{ min = y;
max = x;
}
printf(“\n Gia tri lon nhat = %f, Gia tri nho nhat = %f”,max, min);
getch();
return 0;
}
Ta coï thãø thay thãú lãûnh trãn bàòng lãûnh :
min=(x<y)? x:y;
max=(x>y)? x:y;

I.2. Sæû läöng nhau giæîa caïc cáu lãûnh if:


Caïc cáu lãûnh if coï thãø läöng nhau : trong khäúi lãûnh cuía cáu lãûnh if naìy coï thãø coï cáu
lãûnh if khaïc. Âãø traïnh nháöm láùn ta nãn sæí duûng dáúu âoïng måí khäúi lãûnh.

Trang 36
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Nãúu säú tæì khoïa if bàòng säú tæì khoïa else thç ta coï tæång æïng tæìng càûp if-else
Nãúu säú tæì khoïa if nhiãöu hån säú tæì khoïa else thç else âæåüc gàõn våïi if liãön træåïc noï.
Vê duû :
if (n>0)
if (a>b)
z=a;
else z=b;
Nhæ váûy else seî gàõn liãön våïi if thæï hai.

Âãø chæång trçnh trong saïng, ta cáön tuán thuí :


• Ta nãn sæí duûng càûp dáúu {} âãø chàõc chàõn khäng nháöm láùn.
• Caïc cáu lãûnh, khäúi lãûnh nàòm trong mäüt cáu lãûnh if nàòm dëch vãö bãn phaíi.
• Caïc cáu lãûnh, khäúi lãûnh cuìng cáúp thç viãút thàóng cäüt.
• Âiãøm âáöu vaì âiãøm cuäúi cuía khäúi lãûnh phaíi nàòm thàóng cäüt.
Vê duû :
if (n>0)
if(a>b)
z=a;
tæång âæång våïi :
if ((n>0)&&(a>b))
z=a;

I.3. else if:


if (biãøu thæïc 1)
khäúi lãûnh 1;
else if (biãøu thæïc 2)
khäúi lãûnh 2;
.......
else if ( biãøu thæïc n)
khäúi lãûnh n;
else khäúi lãûnh n+1;
Âäúi våïi cáu lãûnh naìy :
• Chè coï 1 trong n+1 khäúi lãûnh âæåüc thæûc hiãûn .
• Nãúu biãøu thæïc i laì biãøu thæïc âáöu tiãn khaïc 0 (TRUE) thç khäúi lãûnh i âæåüc thæûc hiãûn
• Nãúu caí n biãøu thæïc âãöu bàòng 0 (FALSE) thç khäúi lãûnh n+1 âæåüc thæûc hiãûn.
Vê duû : giaíi phæång trçnh báûc 2
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{

Trang 37
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

float a,b,c,delta;
printf(“\nNhap vao 3 he so:”);
scanf(“%f%f%f”,&a,&b,&c);
if (a==0)
if (b==0)
if (c==0)
printf(“\nPhuong trinh dung voi moi x”);
else printf(“\nPhuong trinh vo nghiem!”);
else printf(“\nPhuong trinh co 1 nghiem x: %f”,(-c) / b);
else
{
delta=b*b-4*a*c;
if (delta<0.0)
printf(“\nPhuong trinh vo nghiem”);
else if (delta==0.0)
printf(“\nPhuong trinh co mot nghiem kep : x = %f”,-b/(2*a));
else { printf(“\nPhuong trinh co hai nghiem phan biet :”);
printf(“\nx1 = %f”, (-b+sqrt(delta))/(2*a));
printf(“\nx2 = %f”, (-b-sqrt(delta))/(2*a));
}
}
getch();
return 0;
}

II. Cáu lãûnh switch:


Lãûnh if chè cho pheïp ta choün mäüt trong hai phæång aïn tuìy theo biãøu thæïc âiãöu kiãûn.
Tuy nhiãn âäi khi ta cáön phaíi læûa choün 1 trong nhiãöu phæång aïn khaïc nhau. Âãø thuáûn tiãûn ta seî
duìng cáu lãûnh switch:
switch (biãøu thæïc)
{
case hàòng1 : [ khäúi lãûnh 1 ; ]
case hàòng2 : [ khäúi lãûnh 2 ; ]
........
case hàòngn : [ khäúi lãûnh n ; ]
[default : khäúi lãûnh n+1 ; ]
}
Trong âoï :
biãøu thæïc: laì biãøu thæïc nguyãn báút kç
Caïc hàòng i phaíi coï giaï trë khaïc nhau
Caïc khäúi lãûnh i vaì thaình pháön default laì khäng bàõt buäüc.
• Sæû hoaût âäüng cuía cáu lãûnh switch :

Trang 38
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Maïy seî so saïnh biãøu thæïc våïi caïc hàòng i theo thæï tæû tæì trãn xuäúng. Khi biãøu thæïc coï giaï
trë bàòng hàòng i thç khäúi lãûnh i âæåüc thæûc hiãûn. Nãúu trong khäúi lãûnh âoï khäng coï lãûnh nhaíy thç
seî thæûc hiãûn tiãúp tuûc caïc khäúi lãûnh bãn dæåïi maì khäng cáön so saïnh tiãúp. Nãúu trong khäúi lãûnh
âoï coï lãûnh break thç seî thoaït ra khoíi cáu lãûnh switch. Khi biãøu thæïc coï giaï trë khaïc våïi táút caí
hàòng i thç seî thæûc hiãûn khäúi lãûnh n+1 (nãúu coï).
Khi biãøu thæïc bàòng våïi hàòng i, âãø sau khi thæûc hiãûn xong khäúi lãûnh i chæång trçnh seî
thoaït ra ngoaìi cáu lãûnh switch såïm hån ta coï thãø duìng lãûnh break. Ta cuîng coï thãø sæí duûng lãûnh
goto âãø nhaíy ra khoíi cáu lãûnh switch (ta khäng nãn duìng lãûnh goto).

Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char ch;
printf(“\n Nhap 1 ki tu:”);
scanf(“%c”,&ch);
switch (ch)
{
case ‘A’ : printf(“\nChu A”);
break;
case ‘B’ : printf(“\nChu B”);
break;
case ‘C’ : printf(“\nChu C”);
break;
default : printf(“\nKhong phai cac chu A,B,C”);
}
getch();
return 0;
}
• Nhiãöu giaï trë case trong mäüt træåìng håüp :
Maïy seî tiãúp tuûc laìm viãûc khi chæa gàûp lãûnh thoaït, vç váûy ta coï thãø sàõp xãúp âãø coï nhiãöu
giaï trë case trong mäüt træåìng håüp
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf(“Nhap diem:”);
scanf(“%d”,&n);

Trang 39
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

switch (n)
{
case 0:
case 1:
case 2:
case 3:
case 4: printf(“loaûi keïm”);break;
case 5:
case 6: printf(“loaûi trung bçnh”);break;
case 7:
case 8: printf(“loaûi gioíi”);break;
default: printf(“loaûi gioíi”);
}
getch();
return 0;
}
Trong C++ ta coï thãø viãút nhæ sau :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf(“Nhap diem:”);
scanf(“%d”,&n);
switch (n)
{
case 0,1,2,3,4: printf(“loaûi keïm”);break;
case 5,6: printf(“loaûi trung bçnh”);break;
case 7,8: printf(“loaûi gioíi”);break;
default: printf(“loaûi gioíi”);
}
getch();
return 0;
}
Ta nãn sæí duûng default cho duì khäng bao giåì xaíy ra træåìng håüp âoï: ta duìng default âãø
kiãøm tra xem coï thãø coï läùi hay khäng bàòng caïch âàût mäüt thäng baïo läùi åí âoï, tæì âoï ta dãù gåî räúi.

III. Cáu lãûnh for:


Âãø thæûc hiãûn caïc cäng viãûc làûp âi làûp laûi hay laìm viãûc våïi caïc pháön tæí maíng, nãúu ta
viãút tæìng lãûnh mäüt thç seî khäng hiãûu quaí.
• Daûng :
for([ caïc biãøu thæïc khåíi taûo ] ; [ biãøu thæïc âiãöu kiãûn ] ; [ biãøu thæïc thay âäøi âiãöu kiãûn ])

Trang 40
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

cäng viãûc ; /* âáy laì thán cuía chu trçnh */

Biãøu thæïc khåíi taûo

F
Biãøu thæïc
âiãöu kiãûn

Thæûc hiãûn cäng viãûc

Thay âäøi âiãöu kiãûn

• Sæû hoaût âäüng cuía cáu lãûnh for :


1. Thæûc hiãûn biãøu thæïc khåíi taûo.
2. Kiãøm tra biãøu thæïc âiãöu kiãûn
- nãúu biãøu thæïc âiãöu kiãûn âuïng thç thæûc hiãûn cäng viãûc bãn trong chu trçnh for.
- nãúu biãøu thæïc âiãöu kiãûn sai thç thoaït ra khoíi lãûnh for .
3. Tênh biãøu thæïc 3, quay tråí laûi bæåïc 2.
Vê duû : Âãø âæa ra maìn hçnh caïc säú tæì 1 âãún 10, mäùi säú trãn mäüt doìng :
#include <stdio.h>
#include <conio.h>
main()
{
int i;
for(i=1;i<=10;i++)
printf(“\n%d”,i);
getch();
return 0;
}
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{

Trang 41
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

int i,n,sohang,tong=0;
printf(“\nNhap n:”);
scanf(“%d”,&n);
printf(“\nNhap vao %d so nguyen :”,n);
for(i=1;i<=n;i++)
{
printf(“\nSo thu %d : ”,i);
scanf(“%d”,&sohang);
tong+=sohang;
}
printf(“\nTong = %d”,tong);
getch();
return 0;
}

Caïc biãøu thæïc trong ngoàûc vuäng coï thãø coï, coï thãø khäng nhæng caïc dáúu cháúm pháøy,
ngoàûc âån bàõt buäüc phaíi coï màût. Caïc biãøu thæïc cuìng loaûi âæåüc ngàn caïch nhau båíi dáúy pháøy.
Våïi C++ ta coï thãø khai baïo biãún taûm thåìi åí mäüt khäúi lãûnh {}. Trong voìng làûp for coï
thãø khai baïo biãún trong biãøu thæïc âáöu tiãn cuía biãøu thæïc khåíi taûo.
Khi biãøu thæïc 2 vàõng màût thç noï xem nhæ luän âuïng. Biãøu thæïc 2 coï thãø gäöm nhiãöu
biãøu thæïc nhæng tênh âuïng sai cuía noï laì tênh âuïng sai cuía biãøu thæïc cuäúi cuìng.
Âãø ra khoíi voìng làûp ta duìng caïc lãûnh break, goto hoàûc return trong thán chu trçnh.
Vê duû : voìng làûp for sau âáy khäng coï biãøu thæïc thay âäøi âiãöu kiãûn:
for(count=0;count<10;)
printf(“\n%d”,count++);
Tháûm chê ta coï thãø viãút voìng làûp for khäng coï caí ba biãøu thæïc trãn. Ta cuîng coï thãø taûo
voìng làûp for khäng coï cáu lãûnh naìo trong voìng làûp, moüi cäng viãûc âaî âæåüc thæûc hiãûn trong cáu
lãûnh for. Khi âoï cáu lãûnh räùng seî laì dáúu cháúm pháøy âæïng mäüt mçnh trãn mäüt doìng. Tuy nhiãn
ta khäng nãn laìm nhæ váûy.

• Caïc voìng for läöng nhau :


Phêa trong caïc thán cuía voìng for coï thãø coï nhæîng voìng for khaïc.
Vê duû :
for(i=1;i<10;i++)
{ for(j=1;j<10;j++)
printf(“%3d”,i+j);
printf(”\n”);
}
Khi gàûp lãûnh break trong voìng làûp for thç maïy seî ra khoíi voìng làûp for sáu nháút chæïa
lãûnh naìy.

Trang 42
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

IV. Cáu lãûnh while:


• Daûng :
while (biãøu thæïc)
cäng viãûc; /* thán chu trçnh*/

F
biãøu thæïc

cäng viãûc

Dáúu ngoàûc bao quanh biãøu thæïc laì bàõt buäüc.


• Sæû hoaût âäüng cuía cáu lãûnh while :
1. Kiãøm tra biãøu thæïc
- Nãúu biãøu thæïc âuïng thç chuyãøn sang bæåïc 2.
- Nãúu biãøu thæïc sai thç thoaït khoíi voìng làûp.
2. Thæûc hiãûn cäng viãûc.
3. Quay laûi bæåïc 1.

Vê duû : Âãø âæa ra maìn hçnh caïc säú tæì 1 âãún 10, mäùi säú trãn mäüt doìng :
#include <stdio.h>
#include <conio.h>
main()
{
int i=1;
while ( i<=10)
{ printf(“\n%d”,i);
i++;
}
getch();
return 0;
}
ÅÍ âáy ta nhåï phaíi tàng giaï trë cuía biãún i vç nãúu khäng thç voìng làûp seî âæåüc thæûc hiãûn
maîi maîi vç luïc naìo âiãöu kiãûn cuîng âæåüc thoía maîn.

Trang 43
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n,tong=0,i=1;
while ( i<=10)
{ printf(“\nNhap so thu %d : ”,i);
scanf(“%d”,&n);
tong+=n;
i++;
}
printf(“\nTong la : %d”,tong);
getch();
return 0;
}
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n,i=1;
long luythua=1;
printf(“\nNhap n:”);
scanf(“%d”,&n);
while ( i<=10)
{ luythua*=n;
i++;
}
printf(“\n%d luy thua 10 = : %ld”,n,luythua);
getch();
return 0;
}
Vê duû : kiãøm tra säú nguyãn n coï phaíi laì säú nguyãn täú khäng
int k=2;
while (n%k && k*k<=n) k++;
if(k*k>n) printf(“\nDay la so nguyen to”);

Vê duû : Tênh ex≈1+x/1!+x2/2!+...+xn/n!


#include <stdio.h>
#include <conio.h>
#include <math.h>

Trang 44
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

#define EPS 1e-9


void main()
{
float x, tong=0, sh=1, n=0;
printf(“Nhap gia tri x=”);
scanf(“%f”,&x);
while (sh>EPS)
{ tong+=sh;
n++;
sh*=x/n;
}
printf(“\ntong=%.10f”,tong);
printf(“\nepx(x)=%.10f”, exp(x));
getch();
return 0;
}
Cuîng tæång tæû nhæ for, voìng làûp while cuîng coï thãø läöng vaìo nhau.
Ta coï thãø viãút :
while(1)
cängviãûc;
Táút nhiãn, trong cängviãûc phaíi coï lãûnh âãø thoaït ra khoíi voìng làûp vä haûn naìy.
while(string[i]) /* trong khi string[i]!=0 : chæa tåïi cuäúi xáu */
{......
}

V. Cáu lãûnh do .. while:


• Daûng :
do
cäng viãûc ; /* thán chu trçnh */
while (biãøu thæïc);

cäng viãûc

biãøu thæïc
T

Trang 45
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

• Sæû hoaût âäüng cuía cáu lãûnh do ...while :


1. Thæûc hiãûn cäng viãûc.
2. Kiãøm tra biãøu thæïc :
- Nãúu âuïng thç quay tråí laûi bæåïc 1.
- Nãúu sai thç thoaït khoíi voìng làûp.
Âäúi våïi voìng làûp for vaì while, âáöu tiãn phaíi kiãøm tra biãøu thæïc âiãöu kiãûn vç váûy coï thãø
khäng thæûc hiãûn cäng viãûc trong chu trçnh láön naìo caí. Âäúi våïi voìng làûp do...while thç biãøu thæïc
âiãöu kiãûn âæåüc kiãøm tra sau nãn cäng viãûc trong chu trçnh âæåüc thæûc hiãûn êt nháút mäüt láön.

Vê duû : Âãø âæa ra maìn hçnh caïc säú tæì 1 âãún 10, mäùi säú trãn mäüt doìng :
#include <stdio.h>
#include <conio.h>
main()
{
int i=1;
do
{ printf(“\n%d”,i);
i++;
}
while ( i<=10);
getch();
return 0;
}
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
do
{ printf(“\nNhap mot so duong : ”);
scanf(“%d”,&n);
printf(“\nBan da nhap so : %d ”,n);
}
while ( n<=0) ;
printf(“\nDung so duong roi ! ”);
getch();
return 0;
}

Trang 46
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

VI. Caïc lãûnh reî nhaïnh khäng âiãöu kiãûn : break, continue, goto :
VI.1. Lãûnh break, continue:
Lãûnh break coï taïc duûng kãút thuïc toaïn tæí âiãöu khiãøn âang thæûc hiãûn. Lãûnh break âæåüc sæí
duûng trong caïc voìng làûp, khi gàûp lãûnh naìy maïy seî thoaït ra khoíi voìng làûp. Træåìng håüp caïc
voìng làûp läöng nhau thç khi gàûp lãûnh break, maïy seî thoaït ra khoíi voìng làûp trong cuìng nháút.
Traïi våïi lãûnh break, continue duìng âãø bàõt âáöu mäüt voìng måïi cuía chu trçnh maì khäng
thæûc hiãûn pháön coìn laûi cuía chu trçnh. Khi gàûp lãûnh continue bãn trong thán chu trçnh cuía voìng
làûp for, maïy seî chuyãøn tåïi bæåïc thæûc hiãûn biãøu thæïc thay âäøi âiãöu kiãûn. Khi gàûp lãûnh continue
bãn trong thán chu trçnh cuía voìng làûp while, do...while , maïy seî chuyãøn tåïi bæåïc kiãøm tra biãøu
thæïc âiãöu kiãûn.
Vê duû : Duìng lãûnh break âãø thoaït ra khoíi voìng làûp såïm.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
for(i=1;i<10;i++)
{ printf(“\n%d”,i);
if (i==3) break;
}
getch();
return 0;
}
Biãún i chaûy tæì 1 âãún 9 nhæng khi i bàòng 3 thç gàûp lãûnh break nãn chæång trçnh chè hiãøn
thë ra maìn hçnh 3 säú 1,2,3.
Vê duû : Duìng lãûnh continue.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
for(i=1;i<10;i++)
{ printf(“\n%d”,i);
if (i!=3) continue;
printf(“ Day la so 3”);
}
getch();
return 0;
}
Chæång trçnh seî hiãøn thë caïc säú tæì 1 âãún 9, mäùi säú trãn mäüt doìng. Khi i khaïc 3 thç maïy
seî chuyãøn tåïi kiãøm tra tiãúp, khi i bàòng 3 thç seî hiãøn thë thãm doìng chæî “Day la so 3”.

Trang 47
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Vê duû : Tênh 10!!=2*4*6*8*10


#include <stdio.h>
#include <conio.h>
main()
{
int p=1, i=1;
while (1)
{ i++;
if(i>10) break;
if(i%2) continue;
p*=i;
}
getch();
return 0;
}

VI.2. Lãûnh goto:


Nhaîn âæåüc âàût tãn nhæ tãn biãún vaì coï dáúu “:” phêa sau. Nhaîn coï thãø âæåüc gaïn cho báút
kç cáu lãûnh naìo trong chæång trçnh.
Lãûnh goto coï daûng:
goto nhaîn;
Vê duû :
ketthuc : printf(“Het”); // ketthuc laì nhaîn cuía lãûnh printf.
......
goto ketthuc;
Khi gàûp lãûnh naìy maïy seî thæûc hiãûn caïc lãûnh sau nhaîn.
Vê duû :
nhan :
{ .....
.....
}
if (biãøu thæïc) goto nhan;

Chuï yï :
• Cáu lãûnh goto vaì nhaîn phaíi nàòm trong cuìng mäüt haìm, khäng thãø nhaíy tæì haìm
naìy sang haìm khaïc.
• Khäng cho pheïp sæí duûng goto âãø nhaíy tæì ngoaìi vaìo trong khäúi lãûnh, thæåìng laì
nhaíy tæì trong khäúi lãûnh ra ngoaìi.
Ta nãn haûn chãú sæí duûng lãûnh naìy âãún mæïc täúi âa, chè duìng trong nhæîng træåìng håüp tháût
cáön thiãút bàòng caïch sæí duûng caïc lãûnh âiãöu khiãøn khaïc vç viãûc âiãöu khiãøn dãù bë räúi.

Trang 48
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

Vê duû : Kiãøm tra xem maíng n pháön tæí coï âäúi xæïng khäng ?
Caïch 1 :
dx=1;
for(i=0,j=n-1;i<j;i++,j--)
{ if (mang[i]==mang[j])
continue;
dx=0;
break;
}
Caïch 2 :
i=0;j=n-1;
while ((i<j)&&(mang[i]==mang[j]))
{ i++;j--;
}
if (i<j) dx1=0;
else dx1=1;

VII. Baìi táûp :


1. Tênh täøng cuía 100 säú nguyãn dæång âáöu tiãn.
2. Tênh n!, täø håüp n cháûp k ( Cnk).
3. Âæa ra maìn hçnh :
x x *****
xx xxx ****
xxx xxxxx ***
xxxx xxxxxxx **
xxxxx xxxxxxxxx *
4. Nháûp vaìo mäüt säú thæûc tæì baìn phêm, kiãøm tra xem säú âoï coï thuäüc (-1,1) hay khäng ?
Tênh giaï trë haìm säú :
 3* x2 − 2 * x x<0
f ( x) =  2
x + x x≥0
5. Nháûp tuäøi cuía mäüt ngæåìi. Hiãøn thë ra maìn hçnh :
Nãúu tuäøi < 18 : treí vë thaình niãn.
Nãúu 18 <= tuäøi <= 60 : ngæåìi låïn.
Nãúu 60 < tuäøi : ngæåìi giaì.
6. Giaíi hãû pt : ax+by=c
dx+ey=f
7. Giaíi pt báûc 1, 2, 3, 4.
8. Giaíi pt truìng phæång : ax4 + bx2 + c = 0.
9. Tênh diãûn têch hçnh thang biãút âäü daìi caïc caûnh.
10. Nháûp R[i], i=1÷5. Tênh âiãûn tråí tæång âæång cuía maûch cáöu

Trang 49
Chæång V : Caïc cáu lãûnh âiãöu khiãøn

11. Nháûp säú nguyãn k, a vaì b. Tênh hoàûc âãúm xem coï bao nhiãu bäüi säú cuía k trong khoaíng
[a,b].
12. Tênh n! sæí duûng caïc voìng làûp for, do...while, while.
 1.3.5.....n nãúu n leí
13. Tênh n!! = 
 2.4.6.....n nãúu n chàôn
14. Tênh âa thæïc báûc n biãút n, maíng caïc hãû säú, biãún x.
15. Sæí duûng caïc voìng làûp âãø tênh caïc haìm sin, cos, tan, exp, lg,... theo khai triãøn Taylor våïi
âäü chênh xaïc ε=1e-6.

(− 1)n +1
16. Nháûp n vaì tênh ∑
n =1 n
våïi âäü chênh xaïc ε=1e-6.

17. Chæång trçnh sau coï läùi åí âáu :


for(i=1;i<10;i++)
{ printf(“\n%d”,i);
i=7-i;
}
18. Âãø coï âæåüc 1000 âäöng ta cáön bao nhiãu loaûi giáúy baûc 100â, 50â, 200â.
19. Tçm 3 säú a,b,c coï hai chæî säú thoía maîn phæång trçnh Fecma: a2=b2+c2.
20. Cho biãút chæång trçnh sau laìm gç ?
for(i=1;i<10;i++)
{ printf(“\n%d”,i);
if(i==5)
i=15;
}
21. Chæång trçnh sau laìm viãûc nhæ thãú naìo :
for(i=1;i<10;i++)
for(i=1;i<10;i++)
printf(“\nChao ban”);
22. Kiãøm tra säú n coï phaíi laì säú nguyãn täú hay khäng ?
23. Nháûp vaìo mäüt säú nguyãn dæång, kiãøm tra xem säú âoï coï tuáön hoaìn hay khäng.
24. Âaío ngæåüc 1 säú nguyãn (caí ám láùn dæång). Vê duû : ±123 thaình ±321
1 ∞

∫e ∫e
− x2 − x2
25. Tênh têch phán dx , dx
0 0

26. Viãút chæång trçnh nháûp säú nguyãn dæång n vaì tênh täøng caïc chæî säú cuía noï.
27. Kiãøm tra säú nguyãn n coï bàòng täøng láûp phæång caïc chæî säú cuía noï khäng .
28. Tçm säú coï 3 chæî säú sao cho säú âoï bàòng täøng caïc æåïc säú thæûc sæû cuía noï.
Vd : 6 = 1 + 2 + 3.
29. Tçm säú låïn nháút, nhoí nháút coï 3 chæî säú sao cho täøng 3 chæî säú bàòng têch cuía chuïng.

Trang 50
Chæång VI : Haìm, maíng vaì con troí

Ch−¬ng VI. HAÌM, MAÍNG VAÌ CON TROÍ


I. Haìm:
I.1. Khaïi niãûm :
Khi viãút chæång trçnh nãúu gàûp caïc baìi toaïn tæång âäúi låïn thç viãûc täø chæïc chæång trçnh
cuîng nhæ quaín lyï luäöng dæî liãûu trong chæång trçnh âoï gàûp ráút nhiãöu khoï khàn. Vç váûy trong kyî
thuáût láûp trçnh ngæåìi ta thæåìng täø chæïc chæång trçnh låïn thaình nhæîng âån vë chæång trçnh nhoí
hån vaì mäùi âån vë chæång trçnh nhæ váûy coï nhiãûm vuû riãng nháút âënh. “Chia âãø trë” (divide
and conquer) : chia nhoí váún âãö ra thaình nhiãöu baìi toaïn nhoí hån, mäùi baìi toaïn nàòm trong mäüt
haìm. Khi sæí duûng haìm, viãûc tçm läùi seî dãù daìng hån vç ta coï thãø khoanh vuìng läùi åí mäüt haìm cuû
thãø naìo âoï, chæï khäng phaíi åí âáu âoï trong chæång trçnh.
Màût khaïc, trong chæång trçnh, coï khi ta gàûp nhæîng âoaûn chæång trçnh làûp âi làûp laûi
nhiãöu láön. Âãø traïnh sæû ræåìm raì, ta sæí duûng nhæîng chæång trçnh con âãø coï thãø goüi nhiãöu láön maì
khäng phaíi viãút laûi âoaûn chæång trçnh âoï.
Nhæ váûy khi sæí duûng chæång trçnh con, chæång trçnh seî coï âoaûn maî ngàõn hån, hiãûu quaí
hån, thuáûn tiãûn trong viãûc gåî räúi, hiãûu chènh,...... ÅÍ chæång trçnh chênh, ta chè cáön quan tám
âãún kãút quaí laìm viãûc cuía haìm maì khäng cáön quan tám âãún viãûc haìm laìm nhæ thãú naìo.
Khi xáy dæûng chæång trçnh con ta phaíi chuï yï âãún muûc âêch sau :
+ Cho pheïp phán nhoí baìi toaïn thaình nhiãöu âån vë chæång trçnh
+ Cho pheïp dãù daìng viãút chæång trçnh
+ Dãù daìng trong viãûc quaín lyï caïc biãún nhåï
+ Dãù daìng kiãøm soaït caïc läùi phaït sinh trong chæång trçnh
Chæång trçnh con coï thãø laì thuí tuûc, haìm vaì macro. Trong C chè coï haìm vaì macro.
Caïc haìm thæ viãûn (haìm chuáøn) âæåüc chæïa trong caïc file header *.h. Âãø sæí duûng mäüt
haìm thæ viãûn ta cáön khai baïo bàòng chè thë tiãön xæí lê : #include <*.h> Âäúi våïi nhæîng haìm do
ngæåìi sæí duûng tæû láûp, ta cáön khai baïo vaì âënh nghéa træåïc khi sæí duûng.

I.2. Haìm :
Haìm laì mäüt âoaûn maî âäüc láûp thæûc hiãûn mäüt cäng viãûc nháút âënh khi âæåüc goüi âãún. Haìm
coï thãø coï hoàûc khäng traí vãö mäüt giaï trë åí tãn cuía noï (giaï trë traí vãö).
Ta coï thãø xem haìm nhæ laì mäüt häüp âen : noï coï thãø nháûn mäüt/nhiãöu giaï trë âáöu vaìo vaì
coï thãø cho ra mäüt giaï trë thuäüc kiãøu naìo âoï. Nãúu haìm khäng nháûn giaï trë âáöu vaìo hoàûc khäng
coï giaï trë âáöu ra thç ta sæí duûng tæì khoïa void. Caïc biãún hoàûc biãøu thæïc cung cáúp giaï trë vaìo cho
haìm goüi laì âäúi säú. Haìm coï thãø thay âäøi caïc âäúi säú cuía noï.
Caïc haìm khäng âæåüc läöng vaìo nhau (khäng khai baïo 1 haìm bãn trong haìm khaïc)
nhæng mäüt haìm coï thãø goüi mäüt haìm khaïc.
Chæång trçnh coï thãø coï nhiãöu haìm. Haìm main âæåüc goüi âáöu tiãn
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 <stdio.h>
#include <conio.h>

Trang 51
Chæång VI : Haìm, maíng vaì con troí

int tich(int a,int b); // khai baïo nguyãn máùu haìm


main()
{
int x,y,dientich; // 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);
dientich=tich(x,y); // låìi goüi haìm
printf(“\nDien tich hinh chu nhat: %d”,dientich); // haìm âæa ra maìn hçnh
getch(); // âoüc mäüt kê tæû âãø chåì
return 0;
}
int tich(int a,int b) // âënh nghéa haìm
{
return (a*b); // giaï trë traí vãö
}
ÅÍ chæång trçnh trãn, haìm âæåüc âënh nghéa sau haìm main(). Trong vê duû sau haìm âæåüc
âënh nghéa træåïc haìm main():
#include <stdio.h>
#include <conio.h>
int tich(int x,int y) // âënh nghéa haìm
{
return (x*y);
}
main()
{
int x,y,dientich; // 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);
dientich=tich(x,y); // låìi goüi haìm
printf(“\nDien tich hinh chu nhat: %d”,dientich);
getch();
return 0;
}

I.3. Khai baïo nguyãn máùu haìm :


Nãúu ta âënh nghéa haìm sau haìm main() thç træåïc haìm main() cáön phaíi thæûc hiãûn viãûc
khai baïo nguyãn máùu haìm (function prototype).
kiãøu_ giaï_trë_traí_vãö tãn_haìm(danh saïch tham säú vaì kiãøu cuía chuïng);
Nãúu coï giaï trë traí vãö thç ta sæí duûng cáu lãûnh return. Nãúu haìm khäng coï giaï trë traí vãö thç
sæí duûng tæì khoïa void âãø chè kiãøu cuía giaï trë traí vãö (khi âoï haìm giäúng nhæ thuí tuûc cuía Pascal).
Nãúu khäng duìng void thç kiãøu ngáöm âënh seî laì int. Tæì khoïa void coìn âæåüc duìng âãø chè caïc
haìm khäng coï tham säú (do âoï khi goüi haìm seî khäng cáön âäúi säú).

Trang 52
Chæång VI : Haìm, maíng vaì con troí

Tãn haìm âæåüc âàût theo caïc quy tàõc âàût tãn cuía biãún.
Trong pháön khai baïo nguyãn máùu haìm khäng cáön phaíi âàût tãn cho tham säú. Theo vê duû
trãn ta coï thãø viãút : int tich(int, int);

I.4. Lãûnh return:


Lãûnh return duìng âãø traí laûi giaï trë cho haìm. Lãûnh return coï thãø traí laûi giaï trë cuía biãøu
thæïc. Trong 1 haìm coï thãø coï nhiãöu lãûnh return, tuy nhiãn chè lãûnh return âæåüc bàõt gàûp âáöu tiãn
âæåüc thæûc hiãûn.
Vê duû :
int tuyet_doi(int x)
{ if (x>=0)
return(x);
else return(-x);
}
Nãúu kiãøu traí vãö laì void (khäng coï giaï trë traí vãö) thç duìng lãûnh “return;” hoàûc boí qua.

I.5. Hoaût âäüng cuía haìm :


Khi gàûp mäüt låìi goüi haìm thç maïy seî råìi chäù âoï cuía chæång trçnh vaì chuyãøn âãún haìm
tæång æïng âãø thæûc hiãûn. Quaï trçnh âoï diãùn ra theo 4 bæåïc sau:
+ Cáúp phaït bäü nhåï
+ Gaïn giaï trë cuía caïc âäúi säú cho caïc tham säú tæång æïng
+ Thæûc hiãûn caïc lãûnh trong thán haìm
+ Khi gàûp cáu lãûnh return hoàûc } åí cuäúi cuía thán haìm thç maïy seî giaíi phoïng
vuìng nhåï væìa cáúp phaït vaì thoaït khoíi haìm.

I.6. Låìi goüi haìm :


Haìm chè laìm viãûc trãn caïc baín sao maì thäi. Nãúu haìm coï giaï trë traí vãö thç ta coï thãø sæí
duûng haìm naìy nhæ mäüt biãøu thæïc bçnh thæåìng våïi caïc âäúi säú thêch håüp.
Vê duû :
int lapphuong(int x);
main()
{ int m,x=5;
.....
m=lapphuong(x);
}
Nãúu haìm khäng coï giaï trë traí vãö hoàûc ta khäng sæí duûng giaï trë traí vãö thç ta goüi haìm våïi
caïc âäúi säú thêch håüp nhæ sau :
Vê duû : haìm printf() coï giaï trë traí vãö kiãøu int nhæng ta muäún boí qua giaï trë traí vãö :
printf(.......);
Nãúu ta âënh nghéa caïc haìm træåïc haìm main() thç haìm træåïc khäng âæåüc goüi haìm sau.
Nãúu ta âënh nghéa caïc haìm sau haìm main() thç caïc haìm coï thãø goüi nhau âæåüc.

Trang 53
Chæång VI : Haìm, maíng vaì con troí

I.7. Truyãön âäúi säú cho haìm :


Truyãön âäúi säú cho haìm tæïc laì cung cáúp caïc giaï trë âáöu vaìo thæûc sæû cho haìm phuì håüp
våïi kiãøu vaì tráût tæû cuía caïc tham säú âaî khai baïo. Âäúi säú coï thãø laì biãún,hàòng,biãøu thæïc.
Viãûc truyãön âäúi säú cho haìm âæåüc thæûc hiãûn theo mäüt kiãøu duy nháút : truyãön theo giaï
trë: haìm khäng laìm thay âäøi giaï trë cuía caïc biãún duìng laìm âäúi säú vç haìm chè laìm viãûc trãn caïc
baín sao cuía caïc âäúi säú maì thäi.
Vê duû :
#include <stdio.h>
#include <conio.h>
void hoanvi(int a,int b);
main()
{ int x=2;
int y=3;
printf(“\nTruoc khi goi ham : x = %d , y = %d “,x,y);
hoanvi(x,y);
printf(“\nSau khi goi ham : x = %d , y = %d “,x,y);
getch();
return 0;
}
void hoanvi(int a,int b)
{ int tam;
printf(“\nTruoc khi hoan vi: a = %d , b = %d “,a,b);
tam=a;
a=b;
b=tam;
printf(“\nSau khi hoan vi: a = %d , b = %d “,a,b);
}
Kãút quaí :
Truoc khi goi ham : x = 2 , y = 3
Truoc khi hoan vi : a = 2 , b = 3
Sau khi hoan vi : a = 3 , b = 2
Sau khi goi ham : x = 2 , y = 3
Nhæ váûy haìm hoanvi âaî hoaïn vë 2 säú x vaì y, nhæng khi quay tråí laûi chæång trçnh chênh
thç giaï trë cuía x vaì y váùn khäng thay âäøi.
Âãø traïnh âiãöu naìy ta coï thãø sæí duûng caïch truyãön âëa chè hoàûc sæí duûng biãún toaìn cuûc,
nhæng sæí duûng biãún toaìn cuûc gàûp mäüt säú váún âãö nhæ bäü nhåï, giaï trë cuía noï coï thãø bë thay âäøi åí
moüi nåi trong chæång trçnh.
Chæång trçnh sæí duûng caïch truyãön âëa chè :
#include <stdio.h>
#include <conio.h>
void hoanvi(int *px,int *py);
main()

Trang 54
Chæång VI : Haìm, maíng vaì con troí

{ int x=2;
int y=3;
hoanvi(&x,&y);
printf(“\nx=%d,y=%d”,x,y);
getch();
return 0;
}
void hoanvi(int *px,int *py)
{ int tam;
tam=*px;
*px=*py;
*py=tam;
}

I.8. Phaûm vi biãún:


Phaûm vi biãún laì khaí nàng truy xuáút biãún âoï åí caïc pháön khaïc nhau trong chæång trçnh.
Caïc biãún chè âæåüc sæí duûng kãø tæì vë trê biãún âæåüc khai baïo tråí xuäúng.
• Biãún toaìn cuûc : biãún âæåüc khai baïo åí ngoaìi caïc haìm (kãø caí haìm main), âæåüc sæí
duûng åí moüi nåi trong chæång trçnh. Trçnh biãn dëch seî tæû âäüng gaïn cho biãún naìy giaï trë 0 nãúu
ta khäng khåíi taûo giaï trë cho noï.
Thæûc ra âäúi våïi chæång trçnh traíi trãn nhiãöu táûp tin, âãø sæí duûng caïc biãún toaìn cuûc trong
caïc modul khaïc ta phaíi sæí duûng tæì khoïa extern. Khi âoï trçnh biãn dëch khäng cáúp phaït ä nhåï
naìo cho biãún âoï, lãûnh naìy chè nhàòm muûc âêch baïo ràòng biãún âoï âæåüc khai baïo âáu âoï trong
chæång trçnh (trong modul naìo âoï cuía chæång trçnh).
• Biãún âëa phæång : biãún âæåüc khai baïo bãn trong haìm vaì chè sæí duûng bãn trong haìm
trong thåìi gian haìm âoï hoaût âäüng (haìm âæåüc goüi). Nãúu biãún âëa phæång truìng tãn våïi biãún
toaìn cuûc thç trong phaûm vi haìm âoï, biãún toaìn cuûc khäng coï taïc duûng.
Caïc biãún toaìn cuûc coï thãø âæåüc thay âäøi trong báút kç haìm naìo, âáy cuîng chênh laì nhæåüc
âiãøm cuía chuïng: ta khoï kiãøm soaït hån, nháút laì trong chæång trçnh låïn. Vç váûy cáön haûn chãú sæí
duûng biãún toaìn cuûc khi noï khäng cáön thiãút cho háöu hãút caïc haìm. Ta thæåìng duìng biãún toaìn cuûc
âãø giaíi quyãút viãûc phaíi truyãön caïc biãún âoï cho nhiãöu haìm khaïc nhau.
Vê duû :
int x;
main()
{
int y;
......
}
int z;
ham1()
{ .......
}

Trang 55
Chæång VI : Haìm, maíng vaì con troí

ham2()
{.......
}
biãún z coï taïc duûng âäúi våïi ham1 vaì ham2, biãún x coï taïc duìng âäúi våïi caí 3 haìm, biãún y
chè coï taïc duûng âäúi våïi haìm main().
 Caïc biãún cuûc bäü trong khäúi lãûnh:
Ta coï thãø khai baïo caïc biãún åí ngay âáöu khäúi lãûnh, caïc biãún naìy laì biãún cuûc bäü.
Khi maïy bàõt âáöu laìm viãûc våïi 1 khäúi lãûnh thç caïc biãún vaì caïc maíng khai baïo bãn trong
khäúi lãûnh âoï måïi âæåüc hçnh thaình vaì âæåüc cáúp phaït bäü nhåï. Caïc biãún naìy chè täön taûi trong thåìi
gian maïy laìm viãûc våïi khäúi lãûnh vaì chuïng seî âæåüc giaíi phoïng khi kãút thuïc khäúi lãûnh. Vç váûy :
• Giaï trë cuía biãún hoàûc maíng khai baïo bãn trong khäúi lãûnh khäng thãø âæa ra sæí duûng
bãn ngoaìi khäúi lãûnh âoï.
• ÅÍ ngoaìi khäúi lãûnh khäng thãø can thiãûp caïc biãún vaì maíng khai baïo trong khäúi lãûnh.
• ÅÍ trong khäúi lãûnh coï thãø sæí duûng biãún khai baïo ngoaìi khäúi lãûnh nãúu biãún âoï khäng
truìng tãn våïi caïc biãún khai baïo trong khäúi lãûnh.

I.9. Cáúp phaït bäü nhåï :


Biãún toaìn cuûc âæåüc cáúp phaït bäü nhåï ténh nãn goüi laì biãún ténh vaì cáúp phaït ténh.
Biãún âëa phæång coï caïc loaûi :
• Cáúp phaït âäüng : khi kãút thuïc haìm biãún âæåüc giaíi phoïng, khäng læu kãút quaí cho láön sau.
• Cáúp phaït ténh : khi kãút thuïc haìm khäng giaíi phoïng biãún, læu kãút quaí cho láön sau ( duìng
tæì khoïa static træåïc doìng khai baïo) .
Caïc biãún âëa phæång âæåüc ngáöm âënh laì cáúp phaït âäüng. Nãúu thêch, ta coï thãø thãm vaìo
tæì khoïa auto vaìo âáöu doìng khai baïo : auto int x; Caïc biãún auto âæåüc cáúp phaït åí stack.
Vê duû : sæû khaïc nhau giæîa biãún cáúp phaït âäüng vaì biãún cáúp phaït ténh.
#include <stdio.h>
#include <conio.h>
void ham(void);
main()
{ int dem;
for(dem=0;dem<=3;dem++)
{ printf(“\nLan goi thu %d”,dem);
ham();
}
getch();
return 0;
}
void ham(void)
{ static int x; // coï thãø thay bàòng static int x=0;
int y=0;
printf(“ x = %d , y = %d “,x++,y++);
}

Trang 56
Chæång VI : Haìm, maíng vaì con troí

Kãút quaí :
Lan goi thu 0 : x = 0 , y = 0
Lan goi thu 1 : x = 1 , y = 0
Lan goi thu 2 : x = 2 , y = 0
Lan goi thu 3 : x = 3 , y = 0
Cáu lãûnh static int x; chè âæåüc thæûc hiãûn khi biãn dëch, khi ham() âæåüc goüi láön âáöu tiãn
noï cuîng khäng âæåüc thæûc hiãûn. Cáu lãûnh int y=0 luän âæåüc thæûc hiãûn mäùi khi goüi haìm.
Vaì theo vê duû trãn ta tháúy caïc biãún âëa phæång ténh âæåüc khåíi taûo giaï trë âáöu bàòng 0 khi
duìng láön âáöu (nãúu ta khäng khåíi taûo).

Nãúu chæång trçnh âæåüc viãút trãn nhiãöu file vaì biãún a âæåüc khai baïo åí ngoaìi caïc haìm
nhæ sau: static int a; thç biãún a chè âæåüc biãút âãún trong modul hiãûn taûi, khäng âæåüc biãút âãún
trong caïc modul khaïc.
• Biãún âëa phæång thanh ghi : register int x;
Duìng âãø yãu cáöu trçnh biãn dëch nãúu coï thãø thç âàût biãún âoï vaìo thanh ghi thay vç âàût
vaìo mäüt ä nhåï thäng thæåìng. Khi âoï ta coï thãø truy xuáút âãún biãún naìy ráút nhanh choïng. Ta
thæåìng sæí duûng caïch khai baïo naìy våïi caïc biãún âãúm cuía voìng làûp. Nãúu trçnh biãn dëch khäng
thãø cáúp phaït åí register thç biãún âoï laì auto.
Tæì khoïa register khäng âæåüc duìng våïi caïc biãún ténh hay biãún ngoaìi. Ta khäng thãø âënh
nghéa mäüt con troí tåïi biãún thanh ghi.

I.10. Âãû qui :


Âãû qui laì mäüt haìm goüi laûi chênh noï.
Vê duû : n! = 1.2.3.....(n-1).n
1 nãúu n = 0
hay n!= 
 (n − 1)!.n nãúu n > 0
#include <stdio.h>
#include <conio.h>
long giaithua(int n);
void main()
{
int n;
printf(“\nNhap n:”);scanf(“%d”,&n);
printf(“%d!=%ld”,n,giaithua(n));
getch();
}
long giaithua(int n)
{
if (n==0) return 1;
else return(giaithua(n-1)*n);
}

Trang 57
Chæång VI : Haìm, maíng vaì con troí

Vê duû : Tênh æåïc säú chung låïn nháút cuía 2 säú :


#include <stdio.h>
#include <conio.h>
int uscln(int x,int y)
{
if (y==0) return x;
else return uscln(y,x%y);
}
main()
{
int x,y;
do
{ printf("\nNhap 2 so nguyen duong :");
scanf("%d%d",&x,&y);
}
while ((x<=0)||(y<=0));
printf("\nx=%d\ny=%d",x,y);
printf("\nUSCLN=%d",uscln(x,y));
getch();
return 0;
}
Tuy nhiãn, ta cáön haûn chãú sæí duûng âãû qui âãún mæïc täúi âa do sæí duûng nhiãöu bäü nhåï dãù
dáùn âãún traìn ngàn xãúp. Màût khaïc, thåìi gian thæûc hiãûn chæång trçnh duìng âãû quy cuîng låïn hån.
Nãúu coï thãø ta nãn sæí duûng caïc voìng làûp âãø thay thãú. Tuy nhiãn coï nhæîng baìi toaïn chè coï thãø
giaíi quyãút bàòng âãû qui.
Vê duû : ta âënh nghéa laûi haìm giaithua():
long giaithua(int n)
{
long i=1,k=1;
while (i<=n) k=k*i++;
return k;
}
Baìi táûp : tçm USCLN khäng cáön duìng âãû qui

I.11. Macro:
Macro laì mäüt táûp håüp lãûnh vaì biãøu thæïc âæåüc âaûi diãûn bàòng mäüt tãn goüi laì tãn_macro.
Bäü tiãön xæí lê khi gàûp caïc tãn_macro seî thay thãú noï bàòng táûp lãûnh tæång æïng. Nãúu gàûp
tãn_macro trong caïc xáu kê tæû thç bäü tiãön xæí lê seî khäng thay thãú.
Máùu : #define tãn_macro daîy_vàn_baín
Vê duû : #define cube(y) ((y)*(y)*(y))
Khäng âæåüc viãút #define cube (y) ((y)*(y)*(y))

Trang 58
Chæång VI : Haìm, maíng vaì con troí

z=cube(x); seî âæåüc thay thãú bàòng


z=((x)*(x)*(x));
Ta phaíi viãút mäùi toaïn haûng trong ngoàûc âån, nãúu khäng khi thay thãú seî sai:
Vê duû : #define cube(y) (y*y*y)
z=cube(x+y); seî âæåüc thay thãú bàòng :
z=(x+y*x+y*x+y); (kãút quaí khäng mong muäún)
Ngay caí khi ta duìng #define cube(y) ((y)*(y)*(y))
Kãút quaí cuîng sai khi : x=cube(++y) -> x=((++y)*(++y)*(++y))=(y+3)3
x=cube(y++) -> x=y3, y=y+3
Vê duû : #define tong(x,y) ((x)+(y))
z=tong(x,y);
So våïi viãûc sæí duûng haìm, chæång trçnh sæí duûng macro seî coï âoaûn maî daìi hån, chaûy
nhanh hån do khäng máút thuí tuûc goüi haìm. Tuy nhiãn macro khäng coï âãû quy, khäng coï tênh
modul vaì macro coï nhiãöu hiãûu æïng xáúu.

#define Do(var,begin,end) for(var=begin;var<=end;var++)


Do(i,1,10) -> for(i=1;i<=10;i++) : âuïng
Do(*ptr,1,10) -> for(*ptr=1;*ptr<=10;*ptr++) : sai vç
*ptr++ : ++ træåïc, * sau : khäng giäúng mong muäún cuía ta
Macro läöng nhau:
#define ONE 1
#define TWO (ONE + ONE)
#define THREE (ONE + TWO)
result = TWO * THREE;
Ta seî coï: result = (1 + 1) * (1 + (1 + 1));

I.12. Mäüt säú haìm vaì macro thäng duûng trong stdlib.h vaì time.h:
Macro random(n) cho mäüt säú nguyãn ngáùu nhiãn trong khoaíng tæì 0 âãún (n-1)
Haìm rand() cho säú nguyãn ngáùu nhiãn trong khoaíng tæì 0 âãún 32767
Macro randomize() khåíi âäüng bäü taûo säú ngáùu nhiãn cáön âæåüc goüi âãún khi muäún sæí
duûng random() vaì rand()
Vê duû :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void main()
{
int i;
printf(“\nChon mot so tu 0 den 99: “);
scanf(“%d”,&i);
randomize();

Trang 59
Chæång VI : Haìm, maíng vaì con troí

if(i==random(100))
printf(“\nBan da trung doc dac!!!”);
getch();
}

II. Maíng:
Mäüt maíng dæî liãûu gäöm mäüt säú hæîu haûn caïc pháön tæí cuìng kiãøu. Säú læåüng caïc pháön tæí
cuía maíng âæåüc xaïc âënh khi khai baïo.
Mäùi pháön tæí cuía maíng âæåüc truy cáûp træûc tiãúp qua tãn maíng vaì chè säú vë trê âàût giæîa
càûp ngoàûc vuäng []. Caïc pháön tæí cuía maíng âæåüc âaïnh chè säú vë trê tæì 0 tråí âi. Khi chè säú væåüt
ra ngoaìi kêch thæåïc cuía maíng, C váùn khäng baïo läùi nhæng seî truy cáûp âãún vuìng nhåï bãn ngoaìi
vaì coï thãø laìm hoíng chæång trçnh.

II.1. Khai baïo maíng :


Máùu : kiãøu_dæî_liãûu tãn_maíng[kêch_thæåïc_cuía_maíng];
Vê duû : int mang[10];
char ten[20];
float day[100];
Caïc pháön tæí âæåüc phán biãût nhåì chè säú : tæì 0 âãún kêch_thæåïc_cuía_maíng - 1.
Vê duû : #define MAX 10
int mang[MAX];
tæång âæång våïi int mang[10];
Vê duû sai : const int MAX=10;
int mang[MAX];

II.2. Khai baïo xáu kê tæû :


Trong C, mäüt maíng kê tæû âæåüc goüi laì mäüt xáu kê tæû
Vê duû : 3 vê duû sau tæång âæång nhau :
char text[5]={‘a’,’b’,’c’,’d’,’\0’};
char text[5]=”abcd”;
char text[]=”abcd”;
Xáu kê tæû trong C âæåüc kãút thuïc båíi kê tæû NULL (\0).

II.3. Khåíi taûo giaï trë maíng :


Ta coï thãø khåíi taûo maíng ngay sau khi khai baïo :
Vê duû : int x[3]={5,6,7};
Tæïc laì : x[0]=5, x[1]=6, x[2]=7.
Nãúu ta khäng khåíi taûo toaìn bäü maíng thç pháön coìn laûi cuía maíng seî tæû âäüng âæåüc âàût vãö
0 (âäúi våïi maíng nguyãn vaì thæûc) vaì vãö NULL (âäúi våïi maíng kê tæû)
Vê duû : int a[10]={1,2,3};
Khi âoï : a[0]=1, a[1]=2, a[2]=3, tæì a[3] âãún a[9] nháûn giaï trë 0
int d[]={2,5,9,7}; // d[0]=2, d[1]=5, d[2]=9, d[3]=7

Trang 60
Chæång VI : Haìm, maíng vaì con troí

Caïc pháön tæí cuía maíng âæåüc truy cáûp bçnh thæåìng thäng qua chè säú cuía pháön tæí âoï. Âãø
truy cáûp âãún pháön tæí thæï i cuía maíng M ta duìng cuï phaïp nhæ sau : M[i]
Chæång trçnh khäng kiãøm tra liãûu ta coï truy cáûp ra ngoaìi maíng hay khäng.
Vê duû : Nháûp vaì hiãøn thë caïc giaï trë cuía maíng tæì baìn phêm :
#include <stdio.h>
#define n 5
void main()
{
int i,mang[n];
for(i=0;i<n;i++)
{
printf(“\nx[%d]=”,i);
scanf(“%d”,&mang[i]);
}
printf(“\nMang gom cac phan tu :\n”);
for(i=0;i<n;i++)
printf(“\nx[%d]=%d”,i,mang[i]);
}

II.4. Tçm kiãúm vaì sàõp xãúp :


• Tçm kiãúm:
Láön læåüt duyãût qua caïc pháön tæí cuía maíng âãún khi tçm âæåüc giaï trë mong muäún.
Vê duû : tçm xem trong xáu kê tæû coï bao nhiãu kê tæû a :
int timkiem( char mang[], char a)
{ int i,count=0;
for(i=0;mang[i] != ‘\0’;i++)
{ if(mang[i]==a)
count++;
}
return count;
}
Ngoaìi ra coìn coï phæång phaïp tçm kiãúm kiãøu lênh gaïc:
Vê duû : Tçm xem trong maíng a gäöm n pháön tæí nguyãn coï säú nguyãn d khäng.
Ta khai baïo maíng a gäöm n+1 pháön tæí, âàût a[n]=d.
i=0;
while (a[i] != d)
i++;
if(i==n)
printf(“\n Maíng a khäng coï pháön tæí %d “,d);
else printf(“\n Pháön tæí %d åí vë trê %d“,d,i);
Trong træåìng håüp xáúu nháút, phæång phaïp træåïc so saïnh 2*n láön trong khi phæång phaïp
sau so saïnh nhiãöu nháút n+1 láön.

Trang 61
Chæång VI : Haìm, maíng vaì con troí

• Sàõp xãúp :
Thay âäøi vë trê cuía caïc pháön tæí trong maíng âãø chuïng tuán theo mäüt tráût tæû naìo âoï.
Phæång phaïp sàõp xãúp näøi boüt:
Sàõp xãúp theo thæï tæû tàng dáön: Âáöu tiãn âem pháön tæí thæï nháút láön læåüt so saïnh våïi caïc
pháön tæí tiãúp theo, nãúu noï låïn hån thç âäøi chäù 2 pháön tæí âæåüc so saïnh. Sau læåüt âáöu, pháön tæí thæï
nháút giæî giaï trë nhoí nháút. Tiãúp tuûc voìng hai, âem pháön tæí thæï 2 so saïnh våïi caïc pháön tæí sau
noï.....
Vê duû : Sàõp xãúp caïc pháön tæí cuía maíng tæì nhoí âãún låïn
#include <stdio.h>
#include <conio.h>
#define n 5
void main()
{
int i,j,mang[n],tam;
for(i=0;i<n;i++)
{
printf(“\nx[%d]=”,i);
scanf(“%d”,&mang[i]);
}
printf(“\nMang chua sap xep:\n”);
for(i=0;i<n;i++)
printf(“ x[%d]=%3d”,i,mang[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (mang[i]>mang[j])
{
tam=mang[i];
mang[i]=mang[j];
mang[j]=tam;
}
printf(“\nMang da sap xep:\n”);
for(i=0;i<n;i++)
printf(“ x[%d]=%3d”,i,mang[i]);
getch();
}

II.5. Maíng nhiãöu chiãöu :


Maíng 2 chiãöu laì loaûi maíng quen thuäüc nháút : ma tráûn.
Máùu : kiãøu_maíng tãn_maíng[säú_haìng][säú_cäüt];
Vê duû : int x[5][7]; // khai baïo naìy cho ta mäüt maíng säú nguyãn 5 haìng 7 cäüt.
Caïc pháön tæí cuîng âæåüc âaïnh caïc chè säú haìng vaì cäüt tæì 0.

Trang 62
Chæång VI : Haìm, maíng vaì con troí

Viãûc gaïn caïc giaï trë vaìo caïc pháön tæí cuía maíng cuîng nhæ maíng mäüt chiãöu:
x[3][4]=6;
Khåíi taûo maíng 2 chiãöu :
int x[5][3]= { { 1,2,3 },
{ 2,3,4 },
......
};
Ta coï thãø taûo ra caïc maíng 3 chiãöu, 4 chiãöu,...... :
int x[5][3][7];
int y[5][6][8][3];
Âãø truy cáûp âãún pháön tæí coï chè säú (i,j) cuía ma tráûn M ta duìng M[i][j].
Vê duû : chæång trçnh nhán hai ma tráûn Am*n vaì Bn*p :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
main()
{
int i,j,k,m,n,p;
int a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];
printf("\nNhap vao 3 so m,n,p:");
scanf("%d%d%d",&m,&n,&p);
printf("\n");
randomize();
for (i=0;i<m;i++)
for (j=0;j<n;j++)
a[i][j]=random(100);
for (i=0;i<n;i++)
for (j=0;j<p;j++)
b[i][j]=random(100);
for (i=0;i<m;i++)
for (j=0;j<p;j++)
{ c[i][j]=0;
for (k=0;k<n;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}

Trang 63
Chæång VI : Haìm, maíng vaì con troí

printf("\n\n");
for (i=0;i<n;i++)
{ for (j=0;j<p;j++)
printf("%4d",b[i][j]);
printf("\n");
}
printf("\n\n");
for (i=0;i<m;i++)
{ for (j=0;j<p;j++)
printf("%6d",c[i][j]);
printf("\n");
}
getch();
return 0;
}
Trong chæång trçnh trãn, ta khäng sæí duûng haìm vç âäúi våïi maíng nhiãöu chiãöu, ta khäng
truyãön nhæ maíng mäüt chiãöu âæåüc. Âãø coï thãø sæí duûng haìm, ta phaíi duìng con troí.

III. Con troí:


III.1. Khaïi niãûm con troí :
Khi ta khai baïo mäüt biãún trong C, trçnh biãn dëch seî daình riãng 1 ä nhåï våïi âëa chè duy
nháút âãø læu biãún âoï.
Vê duû : int b=5;
F0F4
Ta noïi biãún b coï näüi dung
5
laì 5, coï âëa chè laì F0F4
b
Con troí laì biãún duìng âãø chæïa âëa chè cuía 1 biãún khaïc. Nãúu con troí p chæïa âëa chè cuía
biãún b thç ta noïi : con troí p âang troí tåïi biãún b.
Coï nhiãöu kiãøu biãún nãn coï nhiãöu kiãøu con troí tæång æïng.

III.2. Con troí vaì biãún âån :


• Khai baïo con troí : kiãøu_dæî_liãûu *tãn_con_troí
Vê duû : int *p,b; // p laì con troí duìng âãø troí tåïi biãún kiãøu nguyãn
// b laì biãún nguyãn
Ta coï thãø viãút khai baïo int* p; . Tuy nhiãn, khi viãút int* p,b; ta seî dãù nháöm láùn khi
cho ràòng p vaì b laì 2 biãún con troí. Thæûc ra, p laì biãún con troí, b laì biãún int thæåìng.
• Khåíi taûo con troí : tãn_con_troí=&tãn_biãún
trong âoï & laì toaïn tæí láúy âëa chè
Vê duû : p=&b; // con troí p troí âãún biãún b
Hoàûc int *p=&b; // væìa khai baïo con troí væìa khåíi taûo con troí

Trang 64
Chæång VI : Haìm, maíng vaì con troí

• Sæí duûng con troí :


*p laì biãún maì p troí tåïi ( tæïc laì biãún b)
Vç váûy *p vaì b âãöu chè näüi dung cuía biãún b
p vaì &b âãöu chè âëa chè cuía biãún b
Vê duû : printf(“%d”,b); tæång âæång våïi lãûnh printf(“%d”,*p);
b=5; tæång âæång våïi lãûnh *p=5;
Vê duû :
#include <stdio.h>
int x,y,*px,*py;
void main()
{ px=&x;py=&y;
printf(“Nhap x:”);scanf(“%d”,px);
printf(“Nhap y:”);scanf(“%d”,py);
}
Vê duû sai :
#include <stdio.h>
void main()
{ int b,*p;
b=10;
*p=20;
}
ÅÍ âáy con troí p chæa âæåüc khåíi taûo, noï coï thãø troí âãún 1 nåi naìo âoï. Lãûnh *p=20 coï thãø
laìm hoíng chæång trçnh. Vç váûy træåïc khi duìng con troí, nãúu chæa cho biãút noï troí âãún âáu thç ta
duìng lãûnh p=NULL hoàûc int *p=0; // p khäng troí âãún âáu caí.
Vê duû kiãøm âënh caïc giaï trë cuía con troí :
#include <stdio.h>
#include <conio.h>
void main()
{
int number=10;
int *pointer=&number;
printf(“\nGia tri cua number : %d”,number);
printf(“\nDia chi cua number : %p”,&number);
printf(“\nGia tri cua con tro pointer : %p”,pointer);
printf(“\nGia tri duoc tro toi boi con tro pointer : %d”,*pointer);
printf(“\nDia chi cua con tro pointer : %p”,&pointer);
getch();
}
%p : duìng âãø in ra giaï trë cuía con troí (pointer value).
Caïc vê duû trãn roî raìng ta coï thãø sæí duûng træûc tiãúp biãún maì khäng cáön âãún con troí. Tuy
nhiãn caïc vê duû sau seî cho tháúy låüi êch cuía con troí.

Trang 65
Chæång VI : Haìm, maíng vaì con troí

Vê duû :
#include <stdio.h>
void hoanvi(int *px,int *py)
{ int tam;
tam=*px;
*px=*py;
*py=tam;
}
void main()
{ int x=2;
int y=3;
hoanvi(&x,&y);
printf(“\nx=%d,y=%d”,x,y);
}
Do ta chè coï thãø truyãön giaï trë cho haìm nãn ta phaíi sæí duûng con troí. Con troí px troí âãún
biãún x, py troí âãún biãún y nãn khi ta hoaïn vë *px vaì *py thç x vaì y seî hoaïn vë giaï trë cho nhau.
Vê duû :
#include <stdio.h>
#include <conio.h>
void ham(int x,int y,int *sum,int *product)
{
*sum=x+y;
*product=x*y;
}
main()
{
int x=2,y=3,tong,tich;
ham(x,y,&tong,&tich);
printf("\n x=%d",x);
printf("\n y=%d",y);
printf("\n tong=%d",tong);
printf("\n tich=%d",tich);
getch();
return 0;
}

Qua vê duû trãn ta tháúy ràòng caïc giaï trë âáöu vaìo thç ta khai baïo biãún bçnh thæåìng, caïc giaï
trë âáöu ra thç ta sæí duûng con troí vç ta cáön phaíi thay âäøi giaï trë cuía chuïng.
Vê duû : haìm printf duìng biãún thæåìng, haìm scanf duìng biãún con troí.
Tæång tæû nhæ trãn ta coï thãø viãút haìm giaíi phæång trçnh báûc 2, giaï trë traí vãö tuìy theo
viãûc phæång trçnh coï nghiãûm hay khäng, giaï trë âáöu ra laì caïc nghiãûm (nãúu coï).

Trang 66
Chæång VI : Haìm, maíng vaì con troí

#include <stdio.h>
#include <math.h>
int ptb2(float, float, float, float *, float *);
void main()
{ float a,b,c,x1,x2;
int tam;
clrscr();
printf("Nhap gia tri a,b,c:");
scanf("%f %f %f", &a, &b, &c);
tam=ptb2(a,b,c,&x1,&x2);
switch(tam)
{ case 0 : printf("\nPhuong trinh vo nghiem");
break;
case 1 : printf("\nPhuong trinh co 1 nghiem : %f",x1);
break;
case 2 : printf("\nPhuong trinh co 2 nghiem : \n x1= %f \n x2= %f",x1,x2);
break;
case 3 : printf("\nPhuong trinh vo so nghiem");
}
}
int ptb2(float a, float b, float c, float *nghiem1, float *nghiem2)
{ float delta;
if(a==0)
if(b==0)
if(c==0) return 3;
else return 0;
else { *nghiem1=-c/b;
return 1;
}
else { delta=b*b-4*a*c;
if (delta<0.0)
return 0;
else if (delta==0.0)
{ *nghiem1=-b/(2*a);
return 1;
}
else { *nghiem1=(-b+sqrt(delta))/(2*a);
*nghiem2=(-b-sqrt(delta))/(2*a);
return 2;
}
}
}

Trang 67
Chæång VI : Haìm, maíng vaì con troí

const int *p; : con troí âãún 1 biãún nguyãn hàòng : khäng thãø thay âäøi giaï trë cuía biãún âoï.
int* const p; : con troí hàòng âãún 1 biãún nguyãn : khäng thãø gaïn con troí âãún biãún khaïc.
const int* const p; : con troí hàòng âãún 1 biãún nguyãn hàòng.

III.3. Con troí vaì caïc kiãøu biãún :


ÅÍ trãn ta âaî boí qua váún âãö caïc biãún coï kiãøu khaïc nhau seî chiãúm læåüng bäü nhåï khaïc
nhau: biãún kiãøu nguyãn chiãúm 2 byte, biãún kiãøu säú float chiãúm 4 byte,......
Âëa chè cuía biãún laì âëa chè byte tháúp nháút cuía biãún âoï.

III.4. Con troí vaì maíng:


Tãn maíng khäng coï càûp ngoàûc vuäng laì hàòng con troí. Âáy laì con troí khäng thãø thay
âäøi giaï trë âæåüc, noï luän troí âãún pháön tæí âáöu tiãn cuía maíng.
Khi ta khai baïo 1 maíng, caïc pháön tæí cuía maíng âæåüc sàõp xãúp tuáön tæû nhau, pháön tæí âáöu
tiãn coï âëa chè tháúp nháút.

Säú hoüc con troí: pheïp tàng / giaím con troí laìm cho giaï trë cuía noï tàng / giaím mäüt læåüng
bàòng säú byte nhåï maì biãún âæåüc noï troí tåïi chiãúm trong bäü nhåï. Tæì âoï, nãúu ta khai baïo maíng a
coï 10 pháön tæí thç : a=&a[0]; a+1 = &a[1]; ... a+i = &a[i] våïi i tæì 0 âãún 9.
Vê duû : p=a; khi âoï âãø truy cáûp a[i] ta coï thãø duìng *(p+i) hoàûc p[i] hoàûc a[i].
Khi tàng / giaím con troí p thç p seî troí âãún pháön tæí sau / træåïc so våïi pháön tæí ban âáöu.
Nãúu ptr1 vaì ptr2 laì 2 con troí troí âãún 2 pháön tæí cuía cuìng 1 maíng thç hiãûu ptr1 - ptr2 cho
ta biãút khoaíng caïch giæîa 2 pháön tæí âoï trong maíng. Pheïp træì giæîa 2 con troí chè coï yï nghéa khi 2
con troí cuìng troí âãún 2 pháön tæí trong mäüt maíng.

Ngoaìi viãûc truy cáûp pháön tæí maíng bàòng chè säú, viãûc truy cáûp giaïn tiãúp qua con troí thç
chæång trçnh chaûy nhanh hån.
Vê duû sai : Xuáút caïc pháön tæí cuía mäüt biãún maíng
int a[10],i;
for(i=0; i<10; i++)
{ printf(“%d \n”, *a);
a++;
}

Vê duû: Xuáút caïc pháön tæí cuía mäüt biãún maíng


int a[10],i,*p;
p=a; //p=&a[0]
for(i=0; i<10; i++)
{ printf(“%d \n”, *p);
p++;
}

Trang 68
Chæång VI : Haìm, maíng vaì con troí

Khi duìng biãún con troí p âãø duyãût caïc pháön tæí cuía maíng, chuïng ta coï thãø tçm chè säú i
thäng qua biãøu thæïc i = p - a ;

Truyãön maíng mäüt chiãöu cho haìm :


Âäúi säú coï kiãøu dæî liãûu báút kç nhæng phaíi laì giaï trë âån, vç váûy âãø truyãön caí 1 maíng cho
haìm ta phaíi sæí duûng con troí. Khi âoï ta coï thãø thay âäøi giaï trë cuía maíng åí bãn trong haìm vaì khi
thoaït ra khoíi haìm, giaï trë cuía maíng coï thãø thay âäøi so våïi luïc goüi haìm (khaïc våïi truyãön biãún
âån cho haìm).
#include <stdio.h>
int mang[10],i;
int lonnhat(int x[]);
main()
{ for(i=0;i<10;i++)
mang[i]=i;
prçnt(“\n So lon nhat = %d “,lonnhat(mang));
return 0;
}
int lonnhat(int x[]) // int lonnhat(int *x)
{ int j,ln;
ln=*x; // ln=x[0];
for(j=0;j<10;j++)
if( *(x+j) > ln ) // if ( x[j] > ln )
ln=*(x+j); // ln=x[j];
return ln;
}

Khi ta truyãön maíng cho haìm nhæng khäng muäún thay âäøi giaï trë cuía maíng thç ta khai
baïo âáöu maíng våïi tæì khoaï “const”.
Vê duû : Nháûp mäüt maíng caïc säú nguyãn vaì sàõp xãúp maíng theo thæï tæû tàng dáön.
#include <stdio.h>
#include <conio.h>
#define N 20;
viod nhap(int *), sapxep(int *), xuat(const int *);
void main()
{
int a[N];
nhap(a); xuat(a); sapxep(a); xuat(a);
}
void nhap(int *x)
{
clrscr();
for(char i=0; i<N; i++) {

Trang 69
Chæång VI : Haìm, maíng vaì con troí

printf(“x[%d]=”,i);
scanf(“%d”,&x[i]);
}
}
void sapxep(int *x)
{ char i, j;
int tam;
for(i=0; i<N-1; i++)
for(j=0; j<N; j++)
if (x[i]>x[j]) { tam=x[i];
x[i]=a[j];
x[j]=tam;
}
}
void xuat(const int *x)
{ clrscr();
for(int i=0; i<N; i++)
printf(“\n x[%d]=%d”, i, x[i]);
getch();
}

III.5. Con troí vaì xáu kê tæû :


Vê duû :
char *pst,st[50]; // pst laì con troí kiãøu char, st[50] laì maíng kiãøu char
pst=”thu”;
gets(st);
printf(“%s %s”,pst,st); laì âuïng.
ÅÍ âáy con troí pst seî coï giaï trë laì âëa chè âáöu cuía maíng âang chæïa xáu kê tæû “thu”. Vç
váûy 2 cáu lãûnh sau : puts(“thu”) vaì puts(pst) laì tæång âæång.
Nãúu ta viãút
st=”thu”;
gets(pst); thç sai.
st laì hàòng con troí cuía maíng st (cuû thãø laì st[0]) nãn ta khäng thãø gaïn hàòng âëa chè cho
hàòng con troí âæåüc. pst laì con troí, khi noï chæa âæåüc khåíi taûo thç khäng nãn gaïn giaï trë cho noï.
Nãúu træåïc âoï ta gaïn pst=st;
Thç gets(pst); laì âuïng, lãûnh naìy tæång âæång gets(st).
 Caïc haìm thao taïc trãn xáu kê tæû : caïc haìm naìy nàòm trong táûp tin string.h
Vê duû : char s1[80]=”Cäng nghãû”;
char s2[80]=”Thäng tin”;
• Haìm xaïc âënh âäü daìi xáu : int strlen(char *str);
Âäü daìi xáu bàòng säú kê tæû coï nghéa trong xáu tênh tæì âáöu âãún kê tæû \0.
Vê duû : strlen(s1)=9.

Trang 70
Chæång VI : Haìm, maíng vaì con troí

• Haìm gheïp xáu kê tæû : char *strcat(char *str1,char *str2);


Copy näüi dung xáu str2 vaìo âuäi xáu str1, kãút quaí âæåüc læu tråí laûi trong str1.
Vê duû : strcat(s1,s2); s1 seî laì “Cong ngheThong tin”, s2 khäng âäøi.
Ta cáön chuï yï xem xáu str1 coï âuí chäù chæïa caí 2 xáu khäng.
• Haìm copy xáu kê tæû : char *strcpy(char *str1,char *str2);
Copy näüi dung xáu str2 vaìo xáu str1.
Vê duû : strcpy(s1,s2); s1 seî laì “Thong tin”, s2 khäng âäøi.
Ta khäng thãø viãút s1=s2 vç tãn maíng laì hàòng âëa chè, khäng thãø gaïn âæåüc.
Træåïc khi duìng haìm naìy cáön cáúp phaït bäü nhåï cho chuäùi âêch.
• Haìm copy xáu kê tæû : char *strdup(const char *s);
Nhæ haìm strcpy() nhung noï tæû âäüng cáúp phaït bäü nhåï cho chuäùi âêch
• Haìm tçm kiãúm kê tæû c trong xáu kê tæû str : strchr(str,c)
• Haìm tçm kiãúm xáu kê tæû str2 trong xáu kê tæû str1 : strstr(str1,str2)
• Haìm xaïc âënh kê tæû alphabet : isalpha(c)
• Haìm xaïc âënh kê tæû thæåìng vaì kê tæû in : islower(c) vaì isupper(c)
• Haìm xaïc âënh kê tæû chæî säú : isdigit()
• Haìm xaïc âënh kê tæû âiãöu khiãøn : iscntrl()
• Haìm xaïc âënh kê tæû \n , \t, blank : isspace()
• Haìm so saïnh xáu kê tæû : int strcmp(char *str1,char *str2);
Haìm traí vãö giaï trë :
0 nãúu str1=str2
>0 nãúu str1>str2
<0 nãúu str1<str2
Haìm so saïnh nhæ sau :
- So saïnh tæìng càûp kê tæû cuía 2 xáu theo giaï trë cuía chuïng trong baíng maî ASCII
- Hai xáu coï âäü daìi khaïc nhau, giäúng nhau âãún kê tæû cuäúi cuìng cuía xáu ngàõn thç
xáu daìi låïn hån.
- Hai xáu truìng nhau caí näüi dung láùn âäü daìi thç bàòng nhau.
• Mäüt säú haìm so saïnh khaïc :
- strcmpi(str1,str2) : so saïnh khäng phán biãût chæî hoa, chæî thæåìng.
- strncmp(str1,str2,n) : so saïnh n kê tæû âáöu.
- strnicmp(str1,str2,n) : so saïnh n kê tæû âáöu khäng phán biãût chæî hoa, chæî thæåìng.
• Caïc haìm chuyãøn âäøi :
- int atoi(str): chuyãøn âäøi xáu str thaình säú nguyãn int.
- long atol(str): chuyãøn âäøi xáu str thaình säú nguyãn long.
- float atof(str): chuyãøn âäøi xáu str thaình säú thæûc float.
- itoa(int value,char *string,int radix): chuyãøn âäøi säú nguyãn cå säú radix thaình xáu
- ltoa(long value, char *string, int radix): chuyãøn âäøi säú nguyãn value cå säú radix
thaình xáu
- ultoa(unsigned long value,char *string,int radix): chuyãøn âäøi säú nguyãn value
khäng dáúu cå säú radix thaình xáu
trong âoï cå säú radix thuäüc [2,36].

Trang 71
Chæång VI : Haìm, maíng vaì con troí

- char *ecvt(double value, int ndig, int *dec, int *sign) : chuyãøn säú thæûc thaình xáu
- char *fcvt(double value, int ndig, int *dec, int *sign) : chuyãøn säú thæûc thaình xáu

III.6. Con troí vaì maíng nhiãöu chiãöu:


Ta læu yï ràòng trong mäüt säú træåìng håüp, pheïp toaïn láúy âëa chè våïi maíng nhiãöu chiãöu
(&a[i][j]) laì khäng håüp lãû. Trong træåìng håüp caïc pháön tæí cuía maíng coï kiãøu dæî liãûu int thç ta coï
thãø sæí duûng pheïp toaïn láúy âëa chè cho noï : &a[i][j]

Vê duû :
#include <stdio.h>
void main()
{
float a[4][6];
int i,j;
for (i=0;i<4;i++)
for (j=0;j<6;j++)
scanf(“%f”,&a[i][j]);
}
Khi chaûy chæång trçnh trãn maïy seî baïo läùi. Ta coï thãø duìng cáu lãûnh scanf bàòng caïch sæí
duûng biãún trung gian:
#include <stdio.h>
void main()
{
float tam,a[4][6];
int i,j;
for (i=0;i<4;i++)
for (j=0;j<6;j++)
{
scanf(“%f”,&x);
a[i][j]=x;
}
}
Caïc pháön tæí trong maíng 2 chiãöu âæåüc sàõp xãúp nhæ sau : caïc pháön tæí cuía haìng âáöu tiãn,
sau âoï âãún caïc pháön tæí haìng kãú tiãúp,...... Nhæ váûy ta coï:
int *pa,a[4][6];
pa=(int *)a; // pheïp eïp kiãøu
thç pa troí tåïi a[0][0]
pa + 1 troí tåïi a[0][1]
pa + 2 troí tåïi a[0][2]
........
pa + i*6 + j troí tåïi a[i][[j]

Trang 72
Chæång VI : Haìm, maíng vaì con troí

a[0] chæïa âëa chè cuía haìng âáöu


a[1] chæïa âëa chè cuía haìng thæï hai
......
a[3] chæïa âëa chè cuía haìng thæï bäún
Nãúu ta gaïn træûc tiãúp pa=a thç C seî caính baïo (warning) vç pa laì con troí kiãøu int coìn a laì
con troí kiãøu int[6].
Vê duû :
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j;
int *pa,a[4][6];
pa=(int *)a;
printf(“\nNhap vao cac phan tu cua mang:”);
clrscr();
for (i=0;i<4;i++)
for (j=0;j<6;j++)
{ gotoxy(10*j+3,i+3);
printf(“a[%d][%d]=”,i,j);
scanf(“%d”,pa+i*6+j);
}
/* hien thi*/
printf(“\n\n”);
for (i=0;i<4;i++)
{ for (j=0;j<6;j++)
{ printf(“a[%d][%d]=%4d”, i, j, *(pa+i*6+j));
}
printf(“\n”);
}
getch();
}
 Truyãön âäúi säú laì maíng nhiãöu chiãöu cho haìm :
float a[4][5];
âãø truyãön maíng cho haìm ta coï 2 caïch :
• Caïch 1 : Khai baïo theo mäüt trong hai máùu sau :
float (* pa)[5]; /* Duìng âãø khai baïo con troí kiãøu float[5] */
float pa[][5];
Trong thán haìm, âãø truy cáûp pháön tæí a[i][j] ta duìng pa[i][j].
Våïi caïch naìy, ta chè duìng våïi maíng 2 chiãöu coï säú cäüt khäng âäøi (åí âáy laì 5)

Trang 73
Chæång VI : Haìm, maíng vaì con troí

• Caïch 2 : duìng 2 tham säú :


float *pa; /* biãøu thë âëa chè âáöu cuía maíng */
int n; /* biãøu thë säú cäüt cuía maíng */
Våïi caïch naìy ta âaî khàõc phuûc âæåüc khuyãút âiãøm cuía caïch 1 (säú cäüt coï thãø thay âäøi).
Trong thán haìm, âãø truy cáûp pháön tæí a[i][j] ta duìng *(pa+ i*n + j).
Vê duû : Nháûp vaì hiãøn thë maíng 2 chiãöu theo caïch 1 :
#include <stdio.h>
void nhap(int a[][6],int m,int n);
void hienthi(int a[][6],int m,int n);
void main()
{
int m,n;
int a[10][6];
printf("\nNhap m,n:");
scanf("%d%d",&m,&n);
nhap(a,m,n);
printf("\n\n");
hienthi(a,m,n);
}
void nhap(int a[][6],int m,int n)
{
int i,j;
int x; /* biãún trung gian */
clrscr();
printf("\nNhap vao cac phan tu cua mang:");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",&x);
a[i][j]=x;
}
}
void hienthi(int a[][6],int m,int n)
{ int i,j;
printf("\nCac phan tu cua mang:\n");
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf(" a[%d][%d]=%4d", i, j,a[i][j]);
printf("\n");
}
}

Trang 74
Chæång VI : Haìm, maíng vaì con troí

Vê duû : Nháûp vaì hiãøn thë maíng 2 chiãöu theo caïch 2 :


#include <stdio.h>
#include <conio.h>
#define N 5
void nhap(int *p,int m,int n);
void hienthi(int *p,int m,int n);
main()
{
int m,n;
int *pa,a[10][N];
pa=(int *)a;
printf("\nNhap m,n:");
scanf("%d%d",&m,&n);
nhap(pa,m,n);
printf("\n\n");
hienthi(pa,m,n);
getch();
return 0;
}
void nhap(int *p,int m,int n)
{
int i,j;
clrscr();
printf("\nNhap vao cac phan tu cua mang:");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",p+i*N+j);
}
}
void hienthi(int *p,int m,int n)
{
int i,j;
printf("\nCac phan tu cua mang:\n");
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf(" a[%d][%d]=%4d", i, j, *(p+i*N+j));
printf("\n");
}
}

Trang 75
Chæång VI : Haìm, maíng vaì con troí

Ta truyãön maíng 3,4 chiãöu cho maíng theo caïch tæång tæû.
Vê duû : maíng 3 chiãöu a[m][n][p] ta duìng 3 tham säú :
float *pa;
int n,p;
pa=(float *)a;
Trong thán haìm, âãø truy cáûp pháön tæí a[i][j][k] ta duìng *(pa+ i*n*p + j*p + k).

III.7. Con troí vaì maíng caïc xáu kê tæû :


Maíng xáu kê tæû âæåüc xem nhæ laì mäüt maíng 2 chiãöu caïc kê tæû.
Vê duû : char x[5][20];
Khi âoï ta coï 5 xáu kê tæû : x[0], x[1], .....x[4], mäùi xáu chæïa nhiãöu nháút 20 kê tæû (kãø caí kê
tæû NULL).
Vê duû :
#include <stdio.h>
main()
{
char x[2][10];
puts(gets(x[0]));
puts(gets(x[1]));
return 0;
}

Maíng con troí:


char *x[]= {
"Hop",
"Tac",
"Xa"
};
x laì maíng con troí troí tåïi caïc xáu kê tæû.
x[0] chæïa âëa chè cuía vuìng nhåï åí âoï chæïa xáu “Hop”
x[1] chæïa âëa chè cuía vuìng nhåï åí âoï chæïa xáu “Tac”
x[2] chæïa âëa chè cuía vuìng nhåï åí âoï chæïa xáu “Xa”
x laì hàòng con troí chæïa âëa chè cuía x[0].

Ta thæåìng duìng maíng con troí khi xæí lyï caïc xáu kê tæû.

III.8. Con troí kiãøu void:


Khai baïo : void *tãn_con_troí;
Âáy laì con troí âàûc biãût, coï thãø nháûn báút kç âëa chè kiãøu naìo.
Vê duû : void *pa;
int a[5][6];
pa=a;

Trang 76
Chæång VI : Haìm, maíng vaì con troí

Caïc pheïp tàng giaím âëa chè, truy cáûp bäü nhåï vaì so saïnh khäng âæåüc duìng våïi con troí
kiãøu void.
Con troí kiãøu void thæåìng âæåüc duìng laìm tham säú âãø nháûn báút kç âëa chè kiãøu naìo tæì âäúi
säú. Trong thán haìm phaíi sæí duûng pheïp eïp kiãøu.
Vê duû : Nháûp ma tráûn m*n vaì hiãøn thë ma tráûn chuyãøn vë n*m
#include <stdio.h>
void nhap(int *a,int N,int m,int n);
void chuyenvi(void *a,void *b,int N,int m,int n);
void hienthi(int *a,int N,int m,int n);
void main()
{ int m,n; /* ma tran kich thuoc m*n */
int a[10][10],b[10][10];
printf("\nNhap m,n:");
scanf("%d%d",&m,&n);
nhap((int *)a,10,m,n); /* a la ma tran m*n */
printf("\n\n");
hienthi((int *)a,10,m,n);
chuyenvi(a,b,10,m,n); /* b la ma tran n*m */
hienthi((int *)b,10,n,m);
}
void nhap(int *a,int N,int m,int n)
{
int i,j;
clrscr();
printf("\nNhap vao cac phan tu cua mang:");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",a+i*N+j);
}
}
void chuyenvi(void *a,void *b,int N,int m,int n)
{
int i,j;
int *pa,*pb;
pa=(int *)a;
pb=(int *)b;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(pb+j*N+i)=*(pa+i*N+j);
}

Trang 77
Chæång VI : Haìm, maíng vaì con troí

void hienthi(int *a,int N,int m,int n)


{
int i,j;
printf("\nCac phan tu cua mang:\n");
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf(" a[%d][%d]=%4d", i, j,*(a+i*N+j));
printf("\n");
}
}
ÅÍ chæång trçnh trãn, con troí kiãøu void nháûn âëa chè cuía ma tráûn a vaì b trong låìi goüi
haìm chuyenvi. Ta khäng thãø sæí duûng træûc tiãúp con troí void maì phaíi chuyãøn sang con troí kiãøu
int.

III.9. Cáúp phaït bäü nhåï âäüng : <alloc.h>


Nãúu cáúp phaït bäü nhåï âäüng, ta seî sæí duûng bäü nhåï hiãûu quaí hån, cho nhiãöu muûc âêch
khaïc nhau. Vê duû: cáúp phaït bäü nhåï væìa âuí, khäng laîng phê bäü nhåï.
Haìm malloc :
• Máùu : void *malloc(size_t size)
• Cäng duûng : cáúp phaït 1 khäúi nhåï size byte tæì bäü nhåï heap. Haìm naìy cho pheïp
chæång trçnh cáúp phaït mäüt læåüng ä nhåï væìa âuí, chênh xaïc.
• Giaï trë traí vãö : Nãúu thaình cäng, haìm traí vãö con troí troí âãún khäúi nhåï væìa cáúp phaït.
Nãúu läùi (khäng âuí bäü nhåï) thç traí vãö NULL.
Vê duû :
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
void main()
{ char *str;
if ((str = (char *) malloc(10)) == NULL)
{ printf("\n Khong du bo nho de cap phat");
exit(1);
}
strcpy(str, "Hello");
str[0]=’h’;
printf("String is %s\n", str);
free(str); /* giaíi phoïng vuìng nhåï væìa cáúp phaït */
}
Âäúi våïi maíng int, ta duìng : if ((mang = (int *) malloc(10*sizeof(int))) == NULL) .....

Cáúp phaït bäü nhåï duìng cho maíng 2 chiãöu m*n pháön tæí :

Trang 78
Chæång VI : Haìm, maíng vaì con troí

#include <stdio.h>
#include <alloc.h>
void main()
{ int **a , m, n, OK, i, j;
printf("\nNhap m = " );scanf("%d",&m);
printf("\nNhap n = " );scanf("%d",&n);
a=(int**)malloc(m*sizeof(int*));
if (a!=NULL ) /*Cap phat thanh cong */
{ OK = 1 ;
for(i=0;i<m;i++) /* gia tri ban dau cho bien con tro*/
a[i] = NULL;//(int*) ;
for(i=0;(i<m)&&OK;i++)
{ a[i]=(int*)malloc(n*sizeof(int));
if(a[i]==NULL)
OK = 0 ;
}
if(OK) //su dung a[0][0] , a[0][1]....., a[i][j] ...., a[m][n]
{ clrscr();
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
printf("\n\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("a[%d][%d]=%d",i,j,a[i][j]);
printf("\n");
}
}
}
/* giai phong vung nho cap phat */
if(a!=NULL)
{ for(i=0;i<m;i++)
if(a[i]!=NULL)
free(a[i]);
free(a);
}
}

Trang 79
Chæång VI : Haìm, maíng vaì con troí

Khi xem maíng 2 chiãöu laì maíng 1 chiãöu, ta coï thãø khai baïo :
a = (int*) malloc ( m*n * size of ( int ));
vaì a[i][j] = a[ i*N + j]*/

#include <stdio.h>
#include <alloc.h>
#include <conio.h>
void main()
{ int *a , m, n, OK, i, j;
printf("\nNhap m = " );scanf("%d",&m);
printf("\nNhap n = " );scanf("%d",&n);
a=(int*)malloc(m*n*sizeof(int));
if (a!=NULL ) /*Cap phat thanh cong */
{ clrscr();
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",a+i*n+j);
}
printf("\n\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("a[%d][%d]=%d",i,j,a[i*n+j]);
printf("\n");
}
free(a);
}
getch();
}
Haìm calloc :
• Máùu : void *calloc(size_t nitems, size_t size);
• Cäng duûng : cáúp phaït mäüt khäúi nhåï kêch thæåïc nitems*size byte vaì xoïa vãö 0. Âãø
cáúp phaït khäúi nhåï låïn hån 64K, duìng farcalloc.
• Giaï trë traí vãö : Nãúu thaình cäng, haìm traí vãö con troí troí âãún khäúi nhåï væìa cáúp phaït.
Nãúu läùi (khäng âuí bäü nhåï) thç traí vãö NULL.
Vê duû :
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main()
{ char *str = NULL;

Trang 80
Chæång VI : Haìm, maíng vaì con troí

str = (char *) calloc(10, sizeof(char));


strcpy(str, "Hello");
printf("String is %s\n", str);
free(str);
return 0;
}
Âiãøm khaïc biãût giæîa haìm malloc vaì calloc: caïc pháön tæí do haìm calloc luän âæåüc khåíi
taûo bàòng 0, coìn haìm malloc thç khäng chàõc chàõn.

Haìm realloc :
• Máùu : void *realloc(void *block, size_t size);
• Cäng duûng : âiãöu chènh kêch thæåïc cuía khäúi nhåï âaî cáúp phaït block thaình size byte,
copy näüi dung tåïi vë trê måïi nãúu cáön thiãút. Khäúi nhåï block træåïc âáy âaî âæåüc cáúp phaït nhåì caïc
haìm malloc, calloc hoàûc chênh baín thán haìm realloc.
• Giaï trë traí vãö : Nãúu thaình cäng, haìm traí vãö âëa chè cuía khäúi nhåï måïi âæåüc cáúp phaït
laûi, âëa chè naìy coï thãø khaïc våïi âëa chè ban âáöu. Nãúu läùi (khäng âuí bäü nhåï, cáúp phaït laûi khäng
âæåüc) thç traí vãö NULL.
Haìm giæî nguyãn säú liãûu tæì pháön tæí âáöu tiãn âãún pháön tæí coï chè säú laì min(new_size,
old_size) -1. Haìm khäng thiãút láûp giaï trë cho caïc ä nhåï måïi. Khi giaï trë traí vãö laì 0, khäúi nhåï cuî
coï thãø bë máút giaï trë.
realloc(NULL, 5 * sizeof(int)); tæång âæång malloc(5 * sizeof(int));
free(ptr); tæång âæång realloc(ptr,0);
Vê duû:
#include <stdio.h>
#include <alloc.h>
#include <string.h>
void main(void)
{ char *str;
str = (char *) malloc(10);
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = (char *) realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
free(str);
}
Chuï yï: Ta nãn kiãøm tra giaï trë traí vãö cuía caïc haìm trãn træåïc khi laìm viãûc våïi khäúi nhåï
væìa âæåüc cáúp phaït. Caïc haìm malloc, calloc, realloc cáúp phaït bäü nhåï åí heap.

III.10. Con troí troí tåïi haìm:


Khi chæång trçnh âæåüc thæûc hiãûn, caïc lãûnh trong haìm âæåüc naûp vaìo bäü nhåï tæì mäüt âëa
chè xaïc âënh. Con troí troí tåïi haìm chæïa âëa chè bàõt âáöu naìy cuía haìm.

Trang 81
Chæång VI : Haìm, maíng vaì con troí

Khai baïo : kiãøu_dæî_liãûu (*con_troí)(danh saïch tham säú);


Vê duû: int (*p1)(int a); // con troí troí âãún haìm nháûn 1 âäúi säú int vaì traí vãö kiãøu int
void (*p2)(char z); // con troí troí âãún haìm nháûn 1 âäúi säú char vaì khäng coï
giaï trë traí vãö.
Ta cáön phán biãût våïi khai baïo sau:
int *ham(int a); // haìm nháûn 1 âäúi säú int vaì traí vãö con troí kiãøu int.
Khåíi taûo: Con troí troí tåïi haìm cáön phaíi khåíi taûo âãø chè âãún 1 haìm naìo âoï, haìm vaì con
troí phaíi coï kiãøu traí vãö vaì danh saïch tham säú giäúng nhau.
Vê duû : int binhphuong(int a);
int (*p)(int a);
p=binhphuong; // khåíi taûo con troí p
Sæí duûng : Sau khi khai baïo vaì khåíi taûo nhæ trãn ta coï thãø goüi haìm binhphuong() bàòng
caïch duìng con troí p :
t = p(x);
Tãn haìm khäng coï dáúu () laì hàòng con troí troí tåïi haìm âoï (tæïc laì chæïa âëa chè bàõt âáöu
cuía haìm âoï), vç váûy khi ta khåíi taûo con troí (con troí troí tåïi haìm) ta coï thãø thao taïc trãn con troí
nhæ thao taïc trãn haìm váûy.

III.11. Chuyãøn âäúi säú cho haìm main() :


main(int argc, char *argv[],char *env[])
Trong âoï :
biãún argc (argument count) laì säú âäúi säú goî vaìo tæì doìng lãûnh.
biãún argv (argument vector) laì maíng caïc con troí troí tåïi caïc âäúi säú trong doìng lãûnh
*argv[0] laì tãn âæåìng dáùn âãún chæång trçnh.
*argv[1] laì âäúi säú thæï nháút
*argv[2] laì âäúi säú thæï hai.....
biãún env laì maíng con troí. Mäùi con troí chæïa âëa chè cuía mäüt biãún mäi træåìng, con troí
cuäúi cuìng chæïa NULL.
Vê duû : C:\>copy t1.dat t2.dat
argc=3
*argv[0] laì “C:\>copy.exe”
*argv[1] laì “t1.dat”
*argv[2] laì “t2.dat”
argv[3] chæïa NULL

Vê duû : chæång trçnh sàõp xãúp caïc âäúi säú doìng lãûnh theo thæï tæû tàng dáön :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int n,char *ds[])
{
int i,j,tam;

Trang 82
Chæång VI : Haìm, maíng vaì con troí

int a[10];
if(n>1)
{ for(i=1;i<n;i++)
a[i]=atoi(ds[i]);
for(i=1;i<n-1;i++)
for(j=i+1;j<n;j++)
if (a[i]>a[j])
{
tam=a[i];
a[i]=a[j];
a[j]=tam;
}
printf(“\nDanh sach cac tham so da sap xep:\n”);
for(i=1;i<n;i++)
printf(“ a[%d]=%3d”,i,a[i]);
}
getch();
return 0;
}
Ta læu tãn cuía chæång trçnh laì sapxep.c. Sau âoï ta dëch thaình file sapxep.exe
Khi ta chaûy : sapxep.exe 2 5 3 6 8 1 thç seî coï kãút quaí:
Danh sach cac tham so da sap xep:
^^^a[1]= ^^1^^^a[2]=^^2^^^a[3]=^^3^^^a[4]=^^5^^^a[5]=^^6^^^a[6]=^^8
Vê duû :
#include <stdio.h>
#include <conio.h>
main(int n,char *argv[],char *env[])
{
int i,j;
for(i=0;env[i]!=NULL;i++)
printf("\n %s",env[i]);
for(i=1;i<n;i++)
printf("\n argv[%d] : %s",i,argv[i]);
getch();
return 0;
}
Ta læu file vaì chaûy chæång trçnh giäúng nhæ vê duû trãn.

IV. Baìi táûp :


1. Sæí duûng haìm viãút chæång trçnh tênh an (a:thæûc, n nguyãn dæång) duìng âãû qui vaì khäng
duìng âãû qui.

Trang 83
Chæång VI : Haìm, maíng vaì con troí

2. Tênh pháön tæí thæï n theo cäng thæïc truy häöi (duìng âãû qui vaì khäng âãû qui) :
a. pháön tæí Fibonaci F1 = F2 = 1;
Fn = Fn-1 + Fn-2 våïi n > 2.
b. càn báûc hai cuía x våïi âäü chênh xaïc ε=1e-6.
1  a 
F1 = 1; Fn = *  Fn −1 + ;
2  Fn −1 
x = lim Fn .
n → +∞

3. Tênh C theo 3 caïch :


k
n
n!
a. C nk =
k!(n − k )!
 1 nãúu k = 0
b. C nk =  n − k + 1
* C nk −1 nãúu 1 ≤ k ≤ n
 k
 1 nãúu k = 0 hoàûc k = n
c. C nk =  k −1
 C n −1 + C n −1
k
nãúu 1 ≤ k ≤ n
4. Tçm säú nguyãn täú thæï n (duìng maíng âãø læu caïc säú nguyãn täú).
5. Sæí duûng haìm âãø viãút laûi caïc chæång trçnh træåïc âáy.
6. Sæí duûng haìm viãút chæång trçnh nháûp, sàõp xãúp vaì hiãøn thë maíng 1 chiãöu gäöm 10 säú
nguyãn. Nháûp 1 säú nguyãn vaì kiãøm tra xem säú âoï coï nàòm trong maíng khäng.
7. Sæí duûng haìm viãút chæång trçnh tênh täøng caïc säú dæång, täøng bçnh phæång cuía caïc säú ám
trong maíng 1 chiãöu.
8. Nháûp maíng 1 chiãöu, nháûp säú n vaì kiãøm tra xem trong maíng coï chuäùi con (gäöm n pháön
tæí liãn tiãúp) tàng hay khäng.
9. Xáy dæûng chuäùi con (liãn tiãúp) tàng daìi nháút tæì maíng 1 chiãöu.
10. Kiãøm tra säú x coï låïn hån (nhoí hån) giaï trë låïn nháút (nhoí nháút) cuía maíng 1 chiãöu hay
khäng.
11. Kiãøm tra caïc pháön tæí cuía maíng 1 chiãöu coï âäi mäüt phán biãût hay khäng.
12. Nháûp vaìo 1 daîy säú, kiãøm tra xem daîy âoï coï tàng dáön hay giaím dáön khäng.
13. Tçm pháön tæí trong maíng coï giaï trë gáön säú x nháút.
14. Tçm caïc pháön tæí xi sao cho täön taûi càûp pháön tæí xi, xk thoaí maîn : xi = xj + xk
15. Nháûp m,n; xoïa pháön tæí thæï m vaì thæï n trong 1 maíng 1 chiãöu.
16. Xoïa caïc pháön tæí bàòng 0 trong maíng 1 chiãöu.
17. Âáöu vaìo: säú thaïng vaì nàm nhuáûn hay khäng, âáöu ra: säú ngaìy trong thaïng âoï.
18. Nháûp vaìo ngaìy thaïng nàm (tæì nàm 2001 âãún nàm 2150). Kiãøm tra tênh håüp lãû.
19. Nháûp ma tráûn, tçm xem cäüt naìo coï nhiãöu säú dæång nháút.
20. Sæí duûng haìm viãút chæång trçnh cäüng, nhán 2 ma tráûn
21. Sæí duûng haìm viãút chæång trçnh nháûp, chuyãøn vë vaì hiãøn thë ma tráûn.
22. Nháûp ma tráûn vuäng n*n, caïc pháön tæí laì caïc säú nguyãn. Xuáút ra maìn hçnh :
- Ma tráûn âoï coï âäúi xæïng qua âæåìng cheïo chênh khäng ?
- Coï 2 cäüt naìo tè lãû våïi nhau khäng, coï 2 haìng naìo bàòng nhau hay khäng
- Tênh täøng caïc pháön tæí trãn âæåìng cheïo phuû.

Trang 84
Chæång VI : Haìm, maíng vaì con troí

- Tênh täøng caïc pháön tæí a[i][[j] maì i+j chia hãút cho 5.
- Tçm min, max trãn tæìng haìng, tæìng cäüt vaì toaìn bäü ma tráûn.
- Ma tráûn âoï sau khi âäøi cäüt 3 vaì cäüt 4
23. Cho hai daîy säú tàng, viãút chæång trçnh xáy dæûng daîy tàng tæì hai daîy âoï.
24. Tçm chäù sai trong âoaûn chæång trçnh sau :
void main()
{ char str[]={‘H’,’e’,’l’,’l’,’o’};
puts(str);
}
25. Tçm läùi :
int i;
void ham1(int a);
void main()
{ int a=4;
for(i=0;i<10;i++)
ham1(a);
}
void ham1(int a)
{ for(i=0;i<5;i++)
printf(“\na=%d”,a);
}
26. Âãúm säú láön xuáút hiãûn cuía caïc kê tæû trong xáu kê tæû.
27. Thay caïc dáúu tab trong xáu kê tæû bàòng caïc khoaíng tràõng.
28. Thay thãú caïc chuäùi khoaíng tràõng bàòng 1 læåüng dáúu tab vaì khoaíng tràõng êt nháút.
29. Taïch tæì âáöu tiãn vaì tæì cuäúi cuìng cuía chuäùi.
30. Âãúm säú tæì trong xáu ( caïc tæì chè chæïa caïc kê tæû alphabet, âæåüc ngàn caïch nhau båíi
khoaíng tràõng, dáúu tab).
31. Xáu goüi laì palindrone nãúu noï khäng thay âäøi khi ta âaío ngæåüc thæï tæû trong noï (vê duû
“madam”). Kiãøm tra xáu coï tênh cháút palindrone khäng.
32. Nháûp vaìo 1 chuäùi, xoaï caïc khoaíng tràõng vaì in ra maìn hçnh.
33. Nháûp vaìo 1 chuäùi, sau âoï thay thãú caïc khoaíng tràõng bàòng 1 khoaíng tràõng vaì in ra maìn
hçnh.
34. Âaío ngæåüc thæï tæû caïc tæì trong chuäùi.
Vê duû : “con choï con càõn con meìo con” thaình “con meìo con càõn con choï con”.
Vê duû : “ngäü aïi në” thaình “në aïi ngäü”
35. Nháûp chuäùi, âäøi kê tæû âáöu mäùi tæì thaình chæî hoa, caïc tæì coìn laûi cuía tæì thaình chæî thæåìng.
36. Duìng haìm âãø tênh :
Z = A + B + C * D ; Z = ABC + ABC + ABC

Trang 85
Chæång VII : Dæî liãûu kiãøu cáúu truïc

Ch−¬ng VII. DÆÎ LIÃÛU KIÃØU CÁÚU TRUÏC


I. Kiãøu cáúu truïc:
I.1. Khai baïo vaì khåíi taûo kiãøu biãún cáúu truïc :
Maíng laì táûp håüp gäöm caïc pháön tæí coï cuìng kiãøu. Khi ta muäún taûo kiãøu dæî liãûu maì caïc
pháön tæí cuía chuïng coï kiãøu khaïc nhau nhæng coï sæû liãn kãút våïi nhau, ta sæí duûng kiãøu struct.
Máùu : struct tãn_kiãøu_cáúu_truïc
{ khai baïo caïc thaình pháön (caïc træåìng)
};
Vê duû : struct khach
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
};
Ta coï mäüt kiãøu måïi laì kiãøu khach gäöm caïc træåìng ten, diachi, tuoi vaì dienthoai.
Khai baïo vaì khåíi taûo biãún :
struct khach khach_thu_1 = {“Nguyen Van A”,”Da Nang”,20,888888};
Ta cuîng coï thãø khai baïo biãún cuìng luïc våïi kiãøu nhæ sau:
struct khach
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
} khach_thu_1, khach_thu_2;
Ta coï thãø khai baïo biãún khäng khai baïo kiãøu:
struct
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
} khach_thu_1, khach_thu_2;
Khai baïo kiãøu duìng typedef:
typedef struct
{ char ten[20];
char diachi[100];
int tuoi;
int dienthoai;
} khach;
khi khai baïo biãún ta seî khäng duìng tæì khoïa struct:

Trang 86
Chæång VII : Dæî liãûu kiãøu cáúu truïc

khach khach_thu_1, khach_thu_2;


Âënh nghéa kiãøu cáúu truïc läöng nhau:
Vê duû :
struct ngay
{ int ngaythu;
int thang;
int nam;
};
struct nhansu
{ char hoten[20];
struct ngay ngaysinh;
int gioitinh;
float hsluong;
}nguoi1;

I.2. Truy cáûp âãún caïc pháön tæí cuía mäüt biãún kiãøu cáúu truïc :
Máùu : tãn_biãún.tãn_pháön_tæí
Vê duû : strcpy(khach_thu_1.ten,”Tran Van B”);
khach_thu_1.tuoi=40;
printf(“Tuoi cua %s la %d”, khach_thu_1.ten, khach_thu_1.tuoi);
Ta coï thãø gaïn biãún cáúu truïc naìy cho biãún cáúu truïc khaïc coï cuìng kiãøu :
khach_thu_2= khach_thu_1;
Ta coï thãø khåíi taûo biãún cáúu truïc tæì luïc khai baïo nhæ khåíi taûo maíng:
khach khach_1={“John”,”17 Le Duan, Da Nang”,40,876543};
Våïi caïc cáúu truïc läöng nhau ta cuîng truy cáûp tæång tæû.
Vê duû : nguoi1.ngaysinh.nam
Ta coï thãø sæí duûng pheïp toaïn láúy âëa chè âäúi våïi thaình pháön cáúu truïc
Vê duû : scanf(“%d”,&khach_thu_1.tuoi);
Våïi thaình pháön cáúu truïc khäng nguyãn, ta nháûp thäng qua biãún trung gian.

I.3. Thaình pháön kiãøu field:


Khi ta muäún coï âæåüc caïc thaình pháön nguyãn giaï trë nhoí, tiãút kiãûm bäü nhåï thç ta duìng
kiãøu field. Caïc pháön tæí âæåüc âënh nghéa âæåïi daûng caïc bit coï dáúu hoàûc khäng dáúu. Âäü daìi cuía
mäùi træåìng khäng væåüt quaï 16 bit.
struct bit_field
{ int bit_1 : 1;
int bits_2_to_5 : 4;
int bit_6 : 1;
int bits_7_to_16 : 10;
} bit_var;
Ta khäng thãø láúy âëa chè thaình pháön kiãøu field, khäng thãø xáy dæûng maíng kiãøu field vaì
thaình pháön kiãøu field khäng thãø laìm giaï trë traí vãö.

Trang 87
Chæång VII : Dæî liãûu kiãøu cáúu truïc

I.4. Con troí troí âãún kiãøu cáúu truïc :


typedef struct
{ int x;
int y;
}diem;
diem diem1,diem2;
diem *pointer=&diem1;
Ta duìng con troí âãø truy cáûp âãún caïc pháön tæí cuía cáúu truïc :
tãn_con_troí->tãn_thaình_pháön
hoàûc (*tãn_con_troí).tãn_thaình_pháön
toaïn tæí -> goüi laì toaïn tæí troí tåïi
Vê duû : pointer->x=5; tæång âæång våïi diem1.x
(*pointer).y=6; tæång âæång våïi diem1.y
Tæång tæû nhæ con troí biãún thæåìng, pheïp toaïn säú hoüc âäúi våïi con troí cáúu truïc cuîng hoaût
âäüng tæång tæû.

I.5. Maíng cáúu truïc :


Ta khai baïo toüa âäü bàòng cáúu truïc :
typedef struct
{ int x;
int y;
}diem;
diem diem1,diem2;
Âãø læu træî toüa âäü cuía 20 âiãøm ta duìng maíng :
diem taphop[20]= { {2,3},
{3,4}
};
Cuîng nhæ maíng khaïc, maíng cáúu truïc cuîng âæåüc âaïnh säú thæï tæû tæì 0.
Âãø truy cáûp vaìo caïc pháön tæí cuía maíng :
taphop[3].x=4;
taphop[3].y=6;
Cuîng nhæ caïc biãún cáúu truïc, ta coï thãø gaïn caïc pháön tæí cuía maíng cho nhau vaì cho caïc
biãún cáúu truïc âån.
Chuï yï : thæåìng khäng âæåüc sæí duûng pheïp toaïn láúy âëa chè âäúi våïi caïc thaình pháön cuía
maíng cáúu truïc.
Âãø cáúp phaït bäü nhåï hiãûu quaí, ta duìng haìm malloc:
diem *d;
int sodiem;
d=(diem *)malloc(sodiem*sizeof(diem));

I.6. Cáúu truïc vaì haìm :


Chuyãøn tæìng pháön tæí cuía biãún cáúu truïc hoàûc caí biãún cáúu truïc cho haìm :

Trang 88
Chæång VII : Dæî liãûu kiãøu cáúu truïc

ham1(diem1.x);
ham2(diem1.y);
Ta coï thãø chuyãøn âëa chè cuía tæìng pháön tæí cho haìm.
ham1(&diem1.x);
ham2(&diem1.y);

Vê duû :
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 giaï trë cuía cáúu truïc ta truyãön con troí cáúu truïc.
Giaï trë traí vãö cuía haìm coï thãø laì cáúu truïc hoàûc con troí cáúu truïc.

Vê duû:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
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 = 0 ; i < n ; i++)
{ printf("\nNhap Ho ten nguoi thu %d : " , i + 1 ) ; gets ( p->ten);
printf ( " diem = " ) ; scanf ( "%d" , &diem ) ; p->diem = diem ;

Trang 89
Chæång VII : Dæî liãûu kiãøu cáúu truïc

printf ("%c", getchar()); /* khu stdin */


p++ ;
}
}
/* Ham sap xep*/
void sapxep ( int n, kieuHV lop[ ])
{ int i , j ; kieuHV tam ;
for ( i = 0 ; i < n-1 ; i++)
for ( j=i + 1 ; 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 = 0 ; 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:


Cuîng nhæ cáúu truïc, union gäöm nhiãöu thaình pháön khaïc nhau, nhæng chuïng khaïc nhau åí
chäù : caïc thaình pháön cuía cáúu truïc chiãúm caïc vuìng nhåï khaïc nhau trong khi caïc thaình pháön cuía
union âæåüc cáúp phaït chung mäüt vuìng nhåï. Âäü daìi cuía union bàòng âäü daìi cuía thaình pháön låïn
nháút.
Viãûc khai baïo vaì truy xuáút caïc thaình pháön cuía union cuîng tæång tæû nhæ struct.
Seî laì vä nghéa nãúu chuïng ta khåíi taûo cho táút caí caïc thaình pháön cuía biãún union.
Ta coï thãø khåíi taûo : union u { char ch;
int x;
} a_union = {`H'};

Trang 90
Chæång VII : Dæî liãûu kiãøu cáúu truïc

Vê duû :
#include <stdio.h>
#include <conio.h>
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 quaí laì : ax=4660
ay=4660
Vê duû:
#include <stdio.h>
#include <conio.h>
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); A
printf("%c\n", val.num >> 8); b
}
Vê duû :
#include <stdio.h>
#include <conio.h>
typedef union
{ unsigned int ax;
struct
{ unsigned char al;
unsigned char ah;
} byte;
} thanh_ghi;
void main()

Trang 91
Chæång VII : Dæî liãûu kiãøu cáúu truï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 quaí :
r.ax=1234
r.ah=12
r.al=34

Thæûc ra trong dos.h ngæåìi ta âaî âënh nghéa kiãøu dæî liãûu union coï tãn REGS âãø phuûc vuû
cho viãûc truy cáûp caïc thanh ghi cuía CPU trong viãûc goüi ngàõt trong 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 vaìo thaình pháön type maì ta biãút âæåüc cáön xæí lyï säú liãûu theo kiãøu säú naìo. Caïch laìm
naìy êt täún bäü nhåï.
Ngæåìi ta coìn duìng union âãø trêch xuáút caïc bit trong byte,word.

Trang 92
Chæång VII : Dæî liãûu kiãøu cáúu truïc

III. Baìi táûp :


1. Xáy dæûng maíng cáúu truïc maì mäùi cáúu truïc (æïng våïi mäùi sinh viãn) gäöm caïc træåìng sau :
- Hoü vaì tãn
- Tuäøi
- Låïp
- Âiãøm thi
trong âoï âiãøm thi laì mäüt cáúu truïc gäöm ba træåìng : toaïn, lyï, hoïa.
Nháûp säú liãûu cuía 10 thê sinh, hiãøn thë caïc thê sinh coï âiãøm trung bçnh låïn hån 5 theo
thæï tæû tàng 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 ra ngæåìi âáöu
tiãn vaì ngæåìi cuäúi cuìng.
2. Viãút chæång trçnh cäüng, træì, nhán, chia caïc säú phæïc.
3. Nháûp vaìo toaû âäü 4 âiãøm A,B,C,D. Kiãøm tra xem âiãøm D coï nàòm trong tam giaïc ABC
khäng, 2 âoaûn thàóng AC vaì BD coï càõt nhau khäng.

Trang 93
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

Ch−¬ng VIII. DÆÎ LIÃÛU KIÃØU TÁÛP TIN (FILE)


I. Khaïi niãûm:
Âãø læu træî vénh viãùn dæî liãûu ta phaíi læu træî lãn thiãút bë nhåï ngoaìi cuía maïy tênh nhæ âéa,
bàng tæì,... Khi læu nhæ váûy thç nhoïm dæî liãûu âoï goüi laì táûp tin (file).
File laì mäüt kiãøu dæî liãûu coï cáúu truïc, bao gäöm táûp håüp caïc pháön tæí dæî liãûu coï cuìng kiãøu
âæåüc nhoïm laûi våïi nhau taûo thaình mäüt daîy. Mäüt file gäöm caïc byte âæåüc ghi trong caïc bäü nhåï
ngoaìi (âéa tæì, bàng tæì.....). File coï tãn vaì âäü daìi cuía noï chênh bàòng säú byte cuía daîy.
Mäüt táûp tin báút kyì coï thãø âæåüc áún âënh laì táûp tin vàn baín, cuîng coï thãø laì táûp tin nhë
phán. Viãûc áún âënh nhæ váûy phuû thuäüc vaìo muûc âêch sæí duûng táûp tin vaì phuû thuäüc vaìo caïch
khai baïo kiãøu truy cáûp khi måí táûp tin.

- Táûp tin dæî liãûu nhë phán : Dæî liãûu trãn file nhë phán giäúng nhæ åí trong bäü nhåï
- Táûp tin dæî liãûu vàn baín : Khaïc våïi file nhë phán khi xæí lê maî chuyãøn doìng :
+ Khi ghi giaï trë LF thç chuyãøn thaình 2 giaï trë laì CR vaì LF.
+ Khi âoüc 2 giaï trë CR vaì LF thç chuyãøn thaình LF.
Trong âoï CR (maî 13) : vãö âáöu doìng; LF (maî 10) : xuäúng doìng.

Caïc bæåïc xæí lê file :


- Khai baïo biãún file FILE *con_troí_file;
- Måí âãø ghi hoàûc âoüc con_troí_file=fopen(tãn_file, kiãøu_xæí_lê );
- Ghi hoàûc âoüc file
- Âoïng file fclose(con_troí_file);
Coï 5 tãûp chuáøn : stdin, stdout, stdprn, stderr, stdlog

II. Caïc haìm xæí lê táûp tin trong C :


II.1. Caïc haìm duìng chung cho caí 2 kiãøu nhë phán vaì vàn baín.
• Haìm fopen:
Máùu : FILE *fopen(const char *tãn_file,const char *kiãøu_xæí_lê);
Trong âoï : tãn_file: laì âæåìng dáùn tåïi file trãn âéa.
kiãøu_xæí_lê : laì xáu våïi caïc yï 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 âaî täön taûi âãø âoüc, nãúu khäng traí vãö läùi
“w” “wt” “wb” Måí file måïi âãø ghi, nãúu file âaî täön taûi noï seî bë xoï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 âãø âoüc/ghi, nãúu file khäng täön taûi seî baïo läùi
“w+” “w+t” “w+b” Måí file måïi âãø âoüc/ghi, nãúu âaî täön taûi noï seî bë xoïa
“a+” “a+t” “a+b” Måí file âãø âoüc/ghi bäø sung, nãúu chæa täön taûi thç taûo file måïi

Trang 94
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

Cäng duûng: duìng âãø måí táûp tin, nãúu thaình cäng seî traí vãö con troí kiãøu FILE æïng våïi táûp
tin væìa måí, nãúu coï läùi traí vãö NULL.
Chuï yï : Trong caïc kiãøu âoüc ghi, cáön laìm saûch vuìng âãûm træåïc khi chuyãøn tæì âoüc sang
ghi hoàûc ghi sang âoüc nhåì haìm fflush hoàûc haìm dëch chuyãøn vë trê con troí.
• Haìm fclose:
Máùu : int fclose(FILE *tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön âoïng.
Cäng duûng : duìng âãø âoïng táûp tin, bao gäöm caïc cäng viãûc :
- Âáøy dæî liãûu coìn trong vuìng âãûm lãn âéa (khi ghi)
- Xoïa vuìng âãûm (khi âoüc)
- Giaíi phoïng biãún tãn_troí_file, nãúu thaình cäng traí vãö giaï trë 0, nãúu khäng : EOF
• Haìm fcloseall:
Máùu : int fcloseall(void);
Cäng duûng : âoïng táút caí caïc táûp tin âang måí, nãúu thaình cäng traí vãö giaï trë bàòng säú táûp
tin âoïng âæåüc, nãúu khäng traí vãö giaï trë EOF.
• Haìm fflush:
Máùu : int fflush(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : laìm saûch vuìng âãûm cuía táûp tin, nãúu thaình cäng traí vãö giaï trë 0, nãúu khäng
traí vãö EOF
• Haìm fflushall:
Máùu : int fflushall(void);
Cäng duûng : laìm saûch táút caí vuìng âãûm cuía caïc táûp tin âang måí, nãúu thaình cäng traí vãö
giaï trë bàòng säú táûp tin âæåüc laìm saûch, nãúu khäng traí vãö giaï trë EOF.
• Haìm ferror
Máùu : int ferror(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : kiãøm tra läùi thao taïc trãn táûp tin, nãúu khäng coï läùi traí vãö giaï trë 0, nãúu coï
läùi traí vãö giaï trë khaïc 0.
• Haìm perror:
Máùu : void perror(const char *s);
Trong âoï s laì con troí troí tåïi chuäùi kê tæû
Cäng duûng : in chuäùi s vaì thäng baïo läùi.
• Haìm feof:
Máùu : int feof(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : kiãøm tra kãút thuïc táûp tin, traí vãö giaï trë khaïc 0 nãúu gàûp cuäúi táûp tin khi âoüc,
nãúu khäng traí vãö giaï trë 0.
• Haìm unlink:
Máùu : int unlink(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön xoïa.
Cäng duûng : xoïa táûp tin trãn âéa, nãúu thaình cäng traí vãö giaï 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_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön xoïa.
Cäng duûng : xoïa táûp tin trãn âéa, haìm naìy laì mäüt macro goüi tåïi haìm unlink.
Caïc haìm naìy duìng cho caí 2 kiãøu nhë phán vaì vàn baín nhæng coï vaìi âiãøm khaïc nhau.
• Haìm rename:
Máùu : rename(const char *f1,const char *f2);
Cäng duûng : Âäøi tãn tãûp f1 thaình tãûp f2
• Haìm putc vaì fputc:
Máùu : int putc(int ch, FILE *con_troí_file);
int fputc(int ch, FILE *con_troí_file);
trong âoï ch laì mäüt säú nguyãn, con_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : ghi lãn táûp tin kê tæû coï maî bàòng m=ch%256 (ch âæåüc xem nhæ khäng
dáúu). Nãúu thaình cäng traí vãö giaï trë maî kê tæû âæåüc ghi, nãúu khäng traí vãö giaï trë EOF.
• Haìm getc vaì fgetc:
Máùu : int getc(FILE *con_troí_file);
int fgetc(FILE *con_troí_file);
trong âoï con_troí_táûp tin laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : âoü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 chuyãøn con troí chè vë trê:


Caïc file âang måí coï 1 con troí chè vë trê (File Position Locator) duìng âãø xaïc âënh vë trê
âoüc ghi trãn file.
• Haìm rewind:
Máùu : rewind(FILE f);
Cäng duûng : Tråí vãö âáöu tãûp âang måí.
• Haìm ftell:
Máùu : long ftell(FILE f);
Cäng duûng : Cho biãút vë trê hiãûn taûi cuía con troí tãûp (vë trê tênh theo byte, bàõt âáöu tæì 0,
cho -1L nãúu coï läùi)
• Haìm fseek:
Máùu : int fseek(f, long n, int xuatphat);
Cäng duûng : Dëch chuyãøn n byte kãø tæì vë trê xuáút phaït (cho khaïc 0 nãúu coï 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ê con troí hiãûn thåìi.

II.3. Caïc haìm nháûp xuáút kiãøu vàn baín:


• Haìm fprintf:
int frintf(FILE *f, const char *âk,dsâs);
Cäng duûng : Ghi giaï trë danh saïch caïc âäúi säú (dsâs) lãn tãûp f theo khuän daûng âæåüc
chè âënh trong chuäù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 duûng : Âoüc dæî liãûu tæì tãûp f theo khuän daûng âæåüc xaïc âënh trong chuäùi âiãöu
khiãøn âk vaì kãút quaí âæåüc læu vaìo trong danh saïch caïc âäúi säú (dsâs).
• Haìm fputs:
int fputs(const char *s, FILE *f);
Trong âoï : s laì con troí troí âãún âëa chè âáöu cuía mäüt chuäùi kyï tæû
f laì con troí tãûp.
Cäng duûng : Ghi chuäùi s lãn tãûp f (dáúu ‘\0’ khäng ghi lãn tãûp). Khi thaình cäng haìm traí
vãö kyï tæû cuäúi cuìng âæåüc ghi lãn tãûp. Khi coï läùi haìm cho EOF.
• Haìm fgets:
char *fgets(char *s, int n, FILE *f);
Trong âoï : s laì con troí troí âãún vuìng nhåï âuí låïn âãø chæïa chuäùi kyï tæû âoüc tæì tãûp
n laì âäü daìi cæûc âaûi cuía daîy cáön âoüc
f laì con troí tãûp.
Cäng duûng : Âoüc daîy kyï tæû tæì tãûp f vaì chæïa vaìo vuìng nhåï s. Khi thaình cäng, haìm traí
laûi âëa chè vuìng nháûn kãút quaí. Khi coï läùi hoàûc gàûp cuäúi tãûp, haìm cho giaï trë NULL.
Vê duû : #include <stdio.h>
#include <ctype.h>
void main()
{ FILE *f;
char ch;
f=fopen("a.txt","w");
do
putc(toupper(ch=getchar()),f);
while(ch!='\n');
fclose(f);
}

Vê duû: #include <stdio.h>


#include <ctype.h>
void main()
{ FILE *f;
char ch;
if((f=fopen("a.txt","r"))==NULL)
printf("\nKhong mo duoc file");
else
do
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 <stdio.h>
#include <conio.h>
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<n;i++)
{ scanf("%f",&a);
fprintf(f,"%f\n",a);
}
fclose(f);
getch();
}

Vê du:Viãút chæång trçnh xuáút theo kiãøu vàn baín


#include <stdio.h>
#include <conio.h>
void main()
{ FILE *f;
int i,n;
float a;
f=fopen("a.txt","r");
fscanf(f,"%d",&n);
for(i=0;i<n;i++)
{ fscanf(f,"%f",&a);
printf("\n%f",a);
}
fclose(f);
getch();
}

Vê duû 3: Måí mäüt tãûp vàn baín vaì in ra táön suáút xuáút hiãûn cuía baíng chæî caïi
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#define N 256
void main()

Trang 98
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

{ int i;
FILE *f;
static unsigned tso[26];
char *s;
clrscr();
f=fopen("a.txt","rt");
s=(char *)malloc(N);
while (!feof(f))
{ fgets(s,N,f);
strupr(s);
for(i=0;i<strlen(s);i++)
if ((s[i]>'A') && (s[i]<='Z'))
tso[s[i]-'A']++;
}
free(s);
printf("\n Cac chu cai trong tap tin :");
for(i=0;i<26;i++)
if (tso[i])
printf("\n %d chu %c",tso[i],i+'A');
getch();
}

II.4. Caïc haìm nháûp xuáút kiãøu nhë phán:


• Haìm putw:
int putw(int n, FILE *f);
Cäng duûng : Ghi giaï trë n lãn tãûp f dæåïi daûng 2 byte. Nãúu thaình cäng haìm traí vãö säú
nguyãn cáön ghi. Khi coï läùi haìm traí vãö EOF.
• Haìm getw:
int getw(FILE *f);
Cäng duûng : Âoüc mäüt säú nguyãn 2 byte tæì tãûp f. Nãúu thaình cäng haìm traí vãö säú
nguyãn âæåüc âoüc. Khi coï läùi hoàûc gàûp cuäúi tãûp haìm traí vãö EOF.
• Haìm fwrite:
int fwrite(void *ptr, int size, int n, FILE *f);
Cäng duûng : Ghi n máùu tin, mäùi máùu tin coïï kêch thæåïc size byte tæì vuìng nhåï ptr
lãn tãûp f.
• Haìm fread:
int fread(void *ptr, int size,int n, FILE *f);
Cäng duûng : Âoüc n máùu tin, mäùi máùu tin coï kêch thæåïc size byte tæì tãûp f vaì chæïa vaìo
vuìng nhåï ptr

Trang 99
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

Vê duû: Copy tãûp tæì tãûp nguäön sang tãûp âêch


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 1
void main()
{ int i;
char t1[20],t2[20],a[N];
FILE *f1,*f2;
printf("Nhap ten tep nguon:"); scanf("%s",t1);
printf("Nhap ten tep dich:"); scanf("%s",t2);
f1=fopen(t1,"rb");
if (f1==NULL)
{ printf("Tep %s khong ton tai",t1);
getch();
exit(1);
}
f2=fopen(t2,"wb");
while ((fread(a,1,N,f1)) >0)
fwrite(a,1,N,f2);
fclose(f1);fclose(f2);
getch();
}

Vê duû2: Viãút chæång trçnh ghi cáúu truïc lãn âéa


#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
void main()
{ char so[20];
FILE *f;
struct person
{ char ten[25];
int maso;
int diem;
} sv;
clrscr();
if ((f=fopen("a.txt","wb"))==NULL)
{ printf("Khong mo duoc tep");
getch();
exit(1);

Trang 100
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

}
do
{ fflush(stdin);
printf("Nhap ho ten :");gets(sv.ten);
printf("Ma so :");scanf("%d",&sv.maso);
printf("Diem :");scanf("%d",&sv.diem);
fwrite(&sv,sizeof(sv),1,f);
printf("Tiep tuc khong (C/K)?");
}
while(toupper(getch())=='C');
fclose(f);
}

Vê duû3: Viãút chæång trçnh âoüc cáúu truïc tæì âéa


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ char so[20];
FILE *f;
struct person
{ char ten[25];
int maso;
int diem;
} sv;
clrscr();
if ((f=fopen("a.txt","rb"))==NULL)
{ printf("Khong mo duoc tep");
getch();
exit(1);
}
while(fread(&sv,sizeof(sv),1,f)==1)
{ printf("\n Ten %s",sv.ten);
printf(" Ma so %d",sv.maso);
printf(" Diem %d",sv.diem);
}
fclose(f);
getch();
}

Trang 101
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)

Vê duû : Âoüc säú liãûu vaìo 2 ma tráûn(n*n) tæì hai tãûp “a.txt” vaì “b.txt”. Tênh C=A*B vaì
ghi vaìo tãûp “c.txt”

#include <stdio.h>
FILE *f;
int n, a[10][10], b[10][10], c[10][10];
void main()
{ int i, j, k;
printf("Nhap n"); scanf("%d",&n);
f=fopen("a.txt","rb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fscanf(f,"%d",&a[i][j]);
fclose(f);
f=fopen("b.txt","rb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fscanf(f,"%d",&b[i][j]);
fclose(f);
for(i=0; i<n;i++)
for(j=0;j<n;j++)
{ c[i][j]=0;
for(k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
}
f=fopen("c.txt", "wb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fprintf(f," %d",c[i][j]);
fclose(f);
}

III. Baìi táûp:


1. Kiãøm tra hai tãûp coï näüi dung nhæ nhau khäng
2. Näúi hai tãûp thaình mäüt tãûp tin måïi
3. Loaûi boí caïc cáu chuï thêch trong chæång trçnh C.
4. Kiãøm tra läùi cuï phaïp nhæ caïc dáúu ngoàûc (), [], {}, ‘ ’, “ ”, caïc chuï thêch.

Trang 102

Você também pode gostar