Xem mẫu
- Bài giảng: ngôn ngữ
lập trình C
- Chæång I : Täøng quan
TÄØNG QUAN
Ch−¬ng I.
I. Giåïi thiãûu vãö ngän ngæî C:
I.1. Lëch sæí ngän ngæî C:
Ngän ngæî C âæåüc Dennis Ritchie thiãút kãú taûi phoìng thê nghiãûm Bell nàm 1972 våïi muûc
âêch viãút hãû âiãöu haình UNIX. Tuy nhiãn nhåì tênh æu viãût vaì linh âäüng cuía C nãn C âaî âæåüc
giåïi tin hoüc sæí duûng khàõp nåi nhæ mäüt ngän ngæî chênh thäúng. Do coï nhiãöu phiãn baín C cuía
nhiãöu nhaì saín xuáút pháön mãöm nãn nàm 1983 ANSI (American National Standard Institute)
xáy dæûng tiãu chuáøn ANSI C. Täø chæïc ISO cuîng xáy dæûng chuáøn cho C. Hai chuáøn naìy giäúng
nhau vaì âæåüc biãút âãún våïi tãn chung laì ANSI C.
I.2. Æu âiãøm cuía ngän ngæî C:
Hiãûn nay coï ráút nhiãöu ngän ngæî láûp trçnh khaïc nhau nhæ PASCAL, JAVA, DELPHI,
BASIC, ... Mäùi ngän ngæî coï mäüt säú âiãøm maûnh riãng tuy nhiãn ngän ngæî C âæåüc sæí duûng
räüng raîi nhåì nhæîng æu âiãøm sau:
• C laì ngän ngæî maûnh vaì mãöm deío (linh âäüng). C coï thãø âæåüc sæí duûng âãø viãút hãû
âiãöu haình, trçnh biãn dëch cuía ngän ngæî khaïc, trçnh âiãöu khiãøn, soaûn thaío vàn baín, âäö hoaû,
baíng tênh, ...
• Ngän ngæî C âæåüc sæí duûng räüng raîi båíi caïc nhaì láûp trçnh chuyãn nghiãûp vaì nhåì
coï chuáøn ANSI C nãn coï tênh khaí chuyãøn cao : chæång trçnh viãút cho maïy tênh IBM-PC coï thãø
âæåüc biãn dëch vaì chaûy trãn hãû thäúng maïy tênh khaïc nhæ VAX.
• Chæång trçnh dëch coï hiãûu quaí cao : âãún 80% tênh nàng cuía chæång trçnh âoï
viãút trãn maî maïy. Ngän ngæî C coï thãø sæí duûng khaï nhiãöu chæång trçnh dëch vaì caïc thæ viãûn tiãûn
êch
• C coï êt tæì khoaï nãn suïc têch vaì cä âoüng.
• C laì ngän ngæî coï cáúu truïc modul thäng qua viãûc sæí duûng caïc haìm.
I.3. Nhæåüc âiãøm cuía ngän ngæî C:
Tuy nhiãn C cuîng coï mäüt säú nhæåüc âiãøm sau :
• Ngän ngæî C coï cuï phaïp laû vaì khoï hoüc. Nhæîng ngæåìi âaî tæìng viãút ngän ngæî
khaïc coï thãø væåüt qua âæåüc khoï khàn naìy.
• Mäüt säú kê hiãûu coï yï nghéa khaïc nhau tuyì thuäüc vaìo ngæî caính sæí duûng.
• C quaï mãöm deío coï thãø laìm cho chæång trçnh coï veí báút äøn.
I.4. Thuáût toaïn (Algorithm):
Thuáût toaïn laì mäüt chuäùi caïc chè dáùn chênh xaïc âem âãún mäüt låìi giaíi cho mäüt baìi toaïn.
Khi xáy dæûng thuáût toaïn ta chuï yï noï phaíi thoaí maîn caïc âiãöu kiãûn sau :
+ Tênh khaí thi: thuáût toaïn phaíi thæûc hiãûn âæåüc khi xáy dæûng chæång trçnh âãø chaûy âæåüc
trãn maïy tênh.
Trang 1
- Chæång I : Täøng quan
+ Säú bæåïc cáön thæûc hiãûn trong thuáût toaïn laì hæîu haûn âãø sau mäüt säú láön làûp nháút âënh ta
phaíi âæåüc nghiãûm cuía baìi toaïn
+ Tênh täúi æu: thäng thæåìng âäúi våïi mäüt baìi toaïn coï nhiãöu phæång phaïp giaíi khaïc nhau
ta phaíi choün ra trong säú âoï phæång phaïp giaíi täúi æu nháút vãö thåìi gian thæûc hiãûn, cho kãút quaí
chênh xaïc nháút, khäúi læåüng tênh toaïn êt nháút vaì âån giaín khi viãút chæång trçnh.
Vê duû :
+ Phaït biãøu baìi toaïn : Trong låïp coï bao nhiãu ngæåìi tãn Xuán ?
+ Âáöu vaìo :
• Danh saïch låïp
• Tãn cáön kiãøm tra : Xuán
+ Âáöu ra :
• Säú ngæåìi coï tãn Xuán
+ Thuáût toaïn :
• Láúy danh saïch låïp
• Láúy tãn cáön kiãøm tra : Xuán
• Xoïa bäü âãúm vãö 0
• Láön læåüt âäúi våïi tæìng tãn trong danh saïch : So saïnh våïi tãn cáön kiãøm tra,
nãúu âuïng thç cäüng 1 vaìo bäü âãúm
• Thäng baïo giaï trë bäü âãúm ( säú sinh viãn coï tãn Xuán )
I.5. Læu âäö :
A A A
Thæûc hiãûn cäng viãûc A Goüi chæång trçnh con A Nháûp xuáút dæî liãûu
Begin
Sai
B
End
Âuïng
Tuìy thuäüc vaìo traûng thaïi âuïng
Bàõt âáöu vaì kãút thuïc mäüt thuáût toaïn
sai cuía biãøu thæïc B maì reî
nhaïnh thêch håüp
Trang 2
- 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 // 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 // chè thë tiãön xæí lê
void main() // haìm main()
{
printf(“\nChao cac ban !”); // cáu lãûnh
}
Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng coï sæí duûng haìm
#include
#include
int tich(int x,int y); // khai baïo nguyãn máùu haìm
main()
{
int x,y; // khai baïo biãún
printf(“\nNhap chieu dai:”);scanf(“%d”,&x); // haìm âoüc tæì baìn phêm
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);
printf(“\nDien tich hinh chu nhat: %d”,tich(x,y)); // haìm in ra maìn hçnh
getch(); // âoüc mäüt kê tæû âãø chåì
return 0;
}
int tich(int x,int y) // âënh nghéa haìm
{
return (x*y);
}
Trang 6
- Chæång I : Täøng quan
Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng khäng duìng haìm
#include
#include
main()
{
int x,y;
printf(“\nNhap chieu dai:”);scanf(“%d”,&x);
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);
printf(“\nDien tich hinh chu nhat: %d”,x*y);
getch();
return 0;
}
IV. Baìi táûp:
1. Xáy dæûng thuáût toaïn vaì veî så âäö khäúi cuía caïc baìi toaïn sau:
a. Tênh n!
n
∑
b. Tênh i
i =1
c. Giaíi phæång trçnh ax + b = 0
d. Giaíi phæång trçnh ax2 + bx + c = 0
e. Giaíi phæång trçnh ax3 + bx2 + cx + d = 0
f. Giaíi phæång trçnh ax4 + bx3 + cx2 + dx + e = 0
2. Tênh chu vi, diãûn têch cuía hçnh troìn biãút baïn kênh r = 3 cm.
3. Âæa ra maìn hçnh doìng chæî : “ Män hoüc ngän ngæî láûp trçnh C “ .
Trang 7
- Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
KIÃØU DÆÎ LIÃÛU, BIÃÚN VAÌ HÀÒNG
Ch−¬ng II.
I. Kiãøu dæî liãûu:
Kiãøu dæî liãûu laì táûp håüp caïc giaï trë maì caïc biãún thuäüc kiãøu âoï coï thãø nháûn âæåüc.
Mäùi kiãøu dæî liãûu coï mäüt säú pheïp toaïn tæång æïng.
Caïc kiãøu dæî liãûu âæåüc phán loaûi nhæ sau :
kiãøu säú nguyãn
kiãøu säú thæûc
kiãøu cå såí
kiãøu kê tæû
kiãøu vä hæåïng kiãøu logic
âån giaín
Kiãøu kiãøu vä hæåïng kiãøu liãût kã
dæî tæû âënh nghéa
liãûu
kiãøu array
kiãøu dæî liãûu coï kiãøu struct
cáúu truïc
kiãøu file
kiãøu con troí
II. Biãún vaì hàòng, caïc pheïp gaïn cå baín:
Biãún duìng âãø læu dæî liãûu coï thãø thay âäøi giaï trë âæåüc.
Hàòng duìng âãø læu dæî liãûu khäng thãø thay âäøi.
Biãún vaì hàòng laì vuìng nhåï læu træî dæî liãûu âæåüc âàût tãn cho dãù truy cáûp (khäng phaíi
duìng âëa chè) .
Træåïc khi sæí duûng biãún vaì hàòng ta cáön khai baïo træåïc.
II.1. Khai baïo vaì khåíi taûo biãún:
Khai baïo biãún : kiãøu_dæî_liãûu danh_saïch_caïc_tãn_biãún
Ta coï thãø khai baïo nhiãöu biãún cuìng kiãøu cuìng mäüt luïc, caïc biãún caïch nhau dáúu pháøy.
Vê duû : int dem, tam, x, y;
float tr_binh;
Khåíi taûo biãún : biãún = biãøu thæïc
Vê duû : int x ;
x = 10;
hoàûc : int x =10 ;
Ta cáön chuï yï x = y khäng phaíi laì x bàòng y maì laì gaïn giaï trë cuía y vaìo x.
Vê duû : int x,y;
y=x;
Trang 8
- Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Ta nãn nhåï ràòng bäü nhåï maïy tênh khäng räùng khi maïy tênh laìm viãûc. Caïc khäúi nhåï cáúp
phaït cho biãún coï thãø âaî coï giaï trë træåïc âoï. Ta chæa khåíi taûo x nãn ta khäng biãút âæåüc giaï trë x.
II.2. Khai baïo vaì khåíi taûo hàòng:
Khai baïo hàòng : const kiãøu_dæî_liãûu tãn_hàòng = giaï trë hàòng
Vê duû : const int so_luong = 50 ;
const float sai_so = 0.5 ;
II.3. Pheïp gaïn:
Biãún nháûn giaï trë qua pheïp gaïn våïi dáúu bàòng : tãn_biãún = biãøu thæïc
Vê duû : a = 5; // gaïn cho a giaï trë laì 5
b = a - 4; // tênh giaï trë a - 4 räöi gaïn giaï trë âoï cho b
Pheïp gaïn keïp :
Vê duû : a = b = c = 7 ;
a = (b = 4 ) + ( c = 5 ) ;
Khi ta sæí duûng pheïp gaïn keïp, cáu lãûnh seî ngàõn hån tuy nhiãn khäng nãn laûm duûng.
III. Kiãøu säú nguyãn:
Caïc kiãøu säú nguyãn laì nhæîng táûp håüp con cuía táûp Z, khäng phaíi laì toaìn bäü táûp Z .
• Caïc kiãøu säú nguyãn cuía C våïi caïc daíi giaï trë khaïc nhau :
Kiãøu biãún Tæì khoaï Säú byte Daíi giaï trë
Character char 1 -128 ÷ 127
-32768 ÷ 32767
Integer int 2
Short integer short 2 -32768 ÷ 32767
-2147483648 ÷ 2147483647
Long integer long 4
Unsigned character unsigned char 1 0 ÷ 255
0 ÷ 65535
Unsigned integer unsigned int 2
0 ÷ 65535
Unsigned short integer unsigned short 2
0 ÷ 4294967295
Unsigned long integer unsigned long 4
Våïi táút caí caïc kiãøu, ta chè nãn gaïn cho biãún caïc giaï trë nàòm trong daíi giaï trë cuía kiãøu
âoï, nãúu khäng ta seî nháûn âæåüc kãút quaí khäng mong muäún màûc duì C khäng thäng baïo läùi.
Kiãøu int laì kiãøu thäng duûng nháút. Kiãøu char thæûc ra laì kiãøu kê tæû nhæng C cho pheïp sæí
duûng kiãøu char nhæ laì kiãøu nguyãn: trong biãøu thæïc säú hoüc thç char âæåüc hiãøu laì kiãøu nguyãn.
• Caïc pheïp tênh säú hoüc âäúi våïi säú nguyãn :
Pheïp toaïn Kê hiãûu Vê duû
Cäüng + x+y
Træì - x-y
Nhán * x*y
Chia láúy pháön nguyãn / x/y
Chia láúy pháön dæ % x%y
Tàng ++ x++ hoàûc ++x
Giaím -- x--hoàûc --x
Trang 9
- 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ë
1.2E-38 ÷ 3.4E38
Säú thæûc coï âäü chênh xaïc âån float 4
Säú thæûc coï âäü chênh xaïc keïp double 8 2.2E-308 ÷ 1.8E308
Säú thæûc coï âäü chênh xaïc keïp âäü daìi låïn long double 10 3.4E-4932 ÷ 3.4E4932
Biãøu diãùn säú thæûc åí daûng tháûp phán :
Vê duû : 3.14 ; 2.718281828
Biãøu diãùn säú thæûc åí daûng khoa hoüc :
Vê duû : 6.023e23=6.023E23 (= 6.023 * 1023)
Trong vê duû trãn, pháön âënh trë laì 6.023, pháön muî laì 23
Pháön âënh trë vaì pháön muî coï thãø coï dáúu âi keìm, chuïng âæåüc viãút liãön nhau khäng coï
dáúu ngàn caïch. Vê duû : -12.23e-23
Pháön nguyãn hay pháön tháûp phán coï thãø khäng coï nhæng dáúu cháúm khäng thãø thiãúu.
Vê duû : 3. .14
Ta âãø yï : 3 laì säú nguyãn nhæng 3. laì säú thæûc.
• Biãøu diãùn säú tháûp phán trong maïy tênh:
Säú tháûp phán : Vê duû : 12.5 : 1100.1
0.25 : 0.01
Quy trçnh chuyãøn âäøi .
• Hàòng säú thæûc coï kiãøu âënh træåïc :
Tæång tæû nhæ säú nguyãn :
F : kiãøu float
L : kiãøu long
• Caïc pheïp toaïn våïi kiãøu säú thæûc :
Pheïp cäüng ( + ) , træì ( - ) , nhán ( * ) , chia ( / ) , pheïp tàng giaím.
Pheïp chia (/) âäúi våïi säú thæûc seî cho kãút quaí laì säú thæûc. Säú thæûc khäng coï pheïp %.
Khai baïo vaì khåíi taûo säú thæûc : tæång tæû nhæ säú nguyãn :
float x;
x=0.3333;
Hoàûc float x=0.3333;
Do caïch læu træî säú thæûc trong maïy tênh, ta khäng nãn kiãøm tra sæû bàòng nhau giæîa 2 säú
thæûc maì ta kiãøm tra fabs( a - b ) < esp hay khäng.
V. Kiãøu Boolean:
Thæûc ra ngän ngæî C khäng âënh nghéa roî raìng kiãøu Boolean. Kiãøu naìy täön taûi dæåïi
daûng säú nguyãn.
Säú nguyãn coï giaï trë 0 âæåüc hiãøu laì FALSE, coìn laûi âæåüc hiãøu laì TRUE. Nãúu kãút quaí laì
FALSE thç coï giaï trë laì 0, nãúu kãút quaí laì TRUE thç coï giaï trë laì 1.
Caïc pheïp toaïn logic vaì caïc pheïp toaïn quan hãû cho kãút quaí kiãøu Boolean
Trang 11
- Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Caïc toaïn tæí våïi kiãøu Boolean :
Toaïn tæí Pheïp toaïn logic YÏ nghéa
&& AND Pheïp vaì
|| OR Pheïp hoàûc
! NOT Pheïp phuí âënh
Caïc pheïp toaïn quan hãû :
Kê hiãûu YÏ nghéa
!= so saïnh khaïc nhau
== so saïnh bàòng nhau
>= so saïnh låïn hån hoàûc bàòng
so saïnh låïn hån
< so saïnh nhoí hån
VI. Kiãøu kê tæû (character):
Mäùi giaï trë kiãøu char chiãúm 1 byte vaì âæåüc biãøu diãùn thäng qua baíng maî ASCII.
Caïc kiãøu kê tæû trong C :
Kiãøu biãún Tæì khoaï Säú byte Daíi giaï trë
-128 ÷ 127
Kiãøu coï dáúu char ( signed char) 1
Kiãøu khäng dáúu unsigned char 1 0 ÷ 255
Phán loaûi :
• Caïc kê tæû vàn baín coï maî tæì 32 âãún 126, coï thãø âæa ra maìn hçnh vaì maïy in. Caïc
kê tæû naìy gäöm caïc kê tæû ! ” # $ % & , caïc con säú, caïc chæî caïi thæåìng vaì hoa, ...
• Caïc kê tæû âiãöu khiãøn coï maî tæì 0 âãún 31, noïi chung caïc kê tæû naìy khäng thãø âæa
ra maìn hçnh. Mäüt säú kê tæû âiãöu khiãøn :
Kê tæû Daîy maî Giaï trë hexa Giaï trë tháûp phán
âäø chuäng BEL \a x07 7
xoaï traïi BS \b x08 8
nhaíy caïch ngang \t x09 9
nhaíy caïch âæïng \v x0B 11
xuäúng doìng måïi \n x0A 10
sang trang \f x0C 12
vãö âáöu doìng \r x0D 13
dáúu “ \” x22 34
dáúu ‘ \’ x27 39
dáúu ? \? x3F 63
dáúu \ \\ x5C 92
dáúu NULL \0 x00 0
Ta cáön phán biãût hai kê tæû ‘0’ vaì ‘\0’ : Kê tæû ‘0’ laì säú 0 coï maî 48, coìn kê tæû ‘\0’ laì kê tæû
NULL coï maî 0.
Trang 12
- Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Vê duû : Âãø in ra mäüt doìng våïi tiãúng chuäng træåïc vaì sau doìng chæî :
printf(“\aHello%c”,7);
• Caïc kê tæû âäö hoüa coï maî säú tæì 127 âãún 255. Caïc kê tæû naìy coï thãø âæa ra maìn hçnh
nhæng khäng thãø âæa ra maïy in nhåì caïc lãûnh DOS.
Hàòng kê tæû âæåüc biãøu diãùn nàòm giæîa 2 dáúu nhaïy âån : ‘a’,’7’,....
Kê tæû âæåüc biãøu diãùn dæåïi daûng Hexa : \xHHH
Kê tæû âæåüc biãøu diãùn dæåïi daûng Octal : \DDD
Vê duû : ‘A’ coï thãø viãút nhæ sau : \x41 hoàûc \101
Mäüt säú haìm xæí lê kê tæû : (âæåüc cung cáúp trong thæ viãûn ctype.h)
Haìm Taïc duûng
int toascii(int c) chuyãøn c thaình maî ASCII
int tolower(int c) chuyãøn c thaình chæî thæåìng
int toupper(int c) chuyãøn c thaình chæî hoa
Vê duû : Nháûp chæî thæåìng tæì baìn phêm vaì chuyãøn thaình chæî hoa:
#include
#include
#include
main()
{
int chu_thuong,chu_hoa;
chu_thuong=getchar();
chu_hoa=toupper(chu_thuong);
putchar(chu_hoa);
getch();
return 0;
}
Vê duû : Chuyãøn mäüt säú thaình maî ASCII
#include
#include
#include
main()
{
int number,result;
number=511;
result=toascii(number);
printf(“\n%d %d %c\n”, number, result, result);
getch();
return 0;
}
Trang 13
- 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
- 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æ
>,=,
- 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ì
- 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
- Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
IV.6. Toaïn tæí âiãöu kiãûn :
biãøu_thæïc1 ? biãøu_thæïc2 : biãøu_thæïc3;
Nãúu biãøu_thæïc1 laì âuïng (khaïc 0) thç giaï trë cuía biãøu thæïc trãn laì biãøu_thæïc2, nãúu
biãøu_thæïc1 laì sai (bàòng 0) thç giaï trë cuía biãøu thæïc trãn laì biãøu_thæïc3.
Vê duû : Giaí sæí ta muäún tçm giaï trë låïn nháút max cuía 2 säú a vaì b. Ta coï thãø viãút nhæ sau :
max = a > b ? a : b
Nãúu a > b laì TRUE thç max âæåüc gaïn bàòng a, nãúu khäng thç âæåüc gaïn bàòng b.
Vê duû: printf(“There %s %d fish”, (n>1) ? ”are”:”is”, n);
printf("There %s %d dog%s", (n>1)?"are":"is", n, (n>1)?"s":"");
V. Thæï tæû æu tiãn giæîa caïc pheïp toaïn:
Toaïn tæí Chiãöu tênh toaïn
L→R
() [] ->
R→L
- ++ -- ! ~ sizeof() &(âëa chè) *(con troí) toaïn tæí eïp kiãøu : toaïn tæí 1 ngäi
L→R
*/%
L→R
+-
L→R
>
L→R
< = >
L→R
== !=
L→R
&
L→R
^
L→R
|
L→R
&&
L→R
||
R→L
?:
R→L
+= -= *= /= %= &= ^= |= =
Nãúu khäng nhåï thæï tæû thç ta coï thãø duìng caïc dáúu ngoàûc âån ().
Nãúu caïc toaïn tæí cuìng cáúp thç laìm theo chiãöu tênh toaïn.
Ta khäng nãn viãút : x = f (...) + g (...); nãúu 1 trong 2 haìm f vaì/hoàûc g coï thãø laìm thay
âäøi giaï trë cuía caïc biãún truyãön cho haìm coìn laûi. C khäng chè roî haìm naìo seî âæåüc thæûc hiãûn
træåïc.
Tæång tæû : * printf("%d %d\n", ++n, power(2, n)); /* sai */
* a[i] = i++;
VI. Sæû hiãûu chènh khi tênh toaïn :
Ngän ngæî C cho pheïp sæû träün láùn caïc toaïn haûng thuäüc caïc kiãøu khaïc nhau.
VI.1. Sæû chuyãøn âäøi säú hoüc :
Trang 19
nguon tai.lieu . vn