Chổồng I : Tọứng quan
Trang 1
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 nm 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 nm 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 vn 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 nng 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ù khn 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.
Chổồng I : Tọứng quan
Trang 2
+ 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
Thổỷc hióỷn cọng vióỷc A
A
Goỹi chổồng trỗnh con A Nhỏỷp xuỏỳt dổợ lióỷu
A
B
uùng
Sai
Begin
End
Tuỡy thuọỹc vaỡo traỷng thaùi õuùng
sai cuớa bióứu thổùc B maỡ reợ
nhaùnh thờch hồỹp
Bừt õỏửu vaỡ kóỳt thuùc mọỹt thuỏỷt toaùn
Chỉång I : Täøng quan
Trang 3
I.6.
Cạc bỉåïc cå bn khi viãút chỉång trçnh C:
• Thiãút kãú chỉång trçnh :
Xạc âënh âáưu vo, âáưu ra ca bi toạn
Xáy dỉûng thût toạn âãø gii quút bi toạn.
• Soản tho :
Sỉí dủng chỉång trçnh soản tho TURBO C hồûc BORLAND C hồûc C++, sau âọ lỉu
lải file âọ våïi tãn l *.c ( âäúi våïi C++ l *.cpp )
• Dëch :
Chỉång trçnh soản tho cng l trçnh biãn dëch.
Trçnh biãn dëch s cọ nhiãûm vủ dëch chỉång trçnh ngưn sang m mạy qua 2 gian
âoản: dëch ra táûp tin *.obj v liãn kãút cạc file *.obj lải våïi nhau qua trçnh liãn kãút. Nãúu
cọ läùi thç ta quay tråí lải bỉåïc soản tho âãø sỉỵa chỉỵa.
• Chảy chỉång trçnh
Nãúu cọ läùi thç ta phi kiãøm tra lải thût toạn, läùi logic, .... âãún khi cho kãút qu âụng.
II.
Cạc pháưn tỉí cå bn ca ngän ngỉỵ C:
II.1.
Bäü kê tỉû ca C:
Ngän ngỉỵ C âỉåüc xáy dỉûng trãn bäü kê tỉû sau :
•
Cạc chỉỵ cại hoa A .. Z, cạc chỉỵ cại thỉåìng a .. z
• Cạc chỉỵ säú 0 .. 9
• Dáúu cháúm cáu : , ; . ?
• Cạc kê tỉû âàûc biãût nhỉ []{}!@#$%^&*()-=\+|...
•
Cạc kê tỉû khäng nhçn tháúy nhỉ khong tràõng, dáúu tab, k tỉû xúng dng.
• Kê tỉû gảch dỉåïi _
Âáy chè l táûp con ca Bng m ASCII
Ta khäng âỉåüc phẹp sỉí dủng cạc kê tỉû ngoi bäü kê tỉû trãn.
II.2.
Cạc tỉì khoạ (keyword):
Tỉì khoạ l tỉì dng riãng, khäng thãø âënh nghéa lải, mäùi tỉì khoạ cọ mäüt nghéa riãng.
Ta khäng âỉåüc sỉí dủng tỉì khoạ vo mủc âêch khạc nhỉ âàût tãn cho biãún, hàòng, mng; cáưn
phi viãút chênh xạc tỉì khoạ.
auto asm break case cdecl char const
continue default 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
Chổồng I : Tọứng quan
Trang 4
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óứ )
Chổồng I : Tọứng quan
Trang 5
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();
......
}
Chổồng I : Tọứng quan
Trang 6
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);
}
Chổồng I : Tọứng quan
Trang 7
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!
b. Tờnh
=
n
i
i
1
c. Giaới phổồng trỗnh ax + b = 0
d. Giaới phổồng trỗnh ax
2
+ bx + c = 0
e. Giaới phổồng trỗnh ax
3
+ bx
2
+ cx + d = 0
f. Giaới phổồng trỗnh ax
4
+ bx
3
+ cx
2
+ 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 .
Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàòng
Trang 8
Ch−¬ng II. KIÃØU DỈỴ LIÃÛU, BIÃÚN V HÀỊNG
I.
Kiãøu dỉỵ liãûu:
Kiãøu dỉỵ liãûu l táûp håüp cạc giạ trë m cạc biãún thüc kiãøu âọ cọ thãø nháûn âỉåüc.
Mäùi kiãøu dỉỵ liãûu cọ mäüt säú phẹp toạn tỉång ỉïng.
Cạc kiãøu dỉỵ liãûu âỉåüc phán loải nhỉ sau :
II.
Biãún v hàòng, cạc phẹp gạn cå bn:
Biãún dng âãø lỉu dỉỵ liãûu cọ thãø thay âäøi giạ trë âỉåüc.
Hàòng dng âãø lỉu dỉỵ liãûu khäng thãø thay âäøi.
Biãún v hàòng l vng nhåï lỉu trỉỵ dỉỵ liãûu âỉåüc âàût tãn cho dãù truy cáûp (khäng phi
dng âëa chè) .
Trỉåïc khi sỉí dủng biãún v hàòng ta cáưn khai bạo trỉåïc.
II.1.
Khai bạo v khåíi tảo biãún:
Khai bạo biãún : kiãøu_dỉỵ_liãûu danh_sạch_cạc_tãn_biãún
Ta cọ thãø khai bạo nhiãưu biãún cng kiãøu cng mäüt lục, cạc biãún cạch nhau dáúu pháøy.
Vê dủ : int dem, tam, x, y;
float tr_binh;
Khåíi tảo biãún : biãún = biãøu thỉïc
Vê dủ : int x ;
x = 10;
hồûc : int x =10 ;
Ta cáưn chụ x = y khäng phi l x bàòng y m l gạn giạ trë ca y vo x.
Vê dủ : int x,y;
y=x;
kiãøu säú ngun
kiãøu säú thỉûc
kiãøu kê tỉû
kiãøu logic
kiãøu cå såí
kiãøu vä hỉåïng
tỉû âënh nghéa
kiãøu liãût kã
kiãøu vä hỉåïng
âån gin
kiãøu dỉỵ liãûu cọ
cáúu trục
kiãøu file
kiãøu array
kiãøu struct
kiãøu con tr
Kiãøu
dỉỵ
liãûu
Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàòng
Trang 9
Ta nãn nhåï ràòng bäü nhåï mạy tênh khäng räùng khi mạy tênh lm viãûc. Cạc khäúi nhåï cáúp
phạt cho biãún cọ thãø â cọ giạ trë trỉåïc âọ. Ta chỉa khåíi tảo x nãn ta khäng biãút âỉåüc giạ trë x.
II.2.
Khai bạo v khåíi tảo hàòng:
Khai bạo hàòng :
const kiãøu_dỉỵ_liãûu tãn_hàòng = giạ trë hàòng
Vê dủ : const int so_luong = 50 ;
const float sai_so = 0.5 ;
II.3.
Phẹp gạn:
Biãún nháûn giạ trë qua phẹp gạn våïi dáúu bàòng : tãn_biãún = biãøu thỉïc
Vê dủ : a = 5; // gạn cho a giạ trë l 5
b = a - 4; // tênh giạ trë a - 4 räưi gạn giạ trë âọ cho b
Phẹp gạn kẹp :
Vê dủ : a = b = c = 7 ;
a = (b = 4 ) + ( c = 5 ) ;
Khi ta sỉí dủng phẹp gạn kẹp, cáu lãûnh s ngàõn hån tuy nhiãn khäng nãn lảm dủng.
III.
Kiãøu säú ngun:
Cạc kiãøu säú ngun l nhỉỵng táûp håüp con ca táûp Z, khäng phi l ton bäü táûp Z .
•
Cạc kiãøu säú ngun ca C våïi cạc di giạ trë khạc nhau :
Kiãøu biãún Tỉì khoạ Säú byte
Di giạ 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 c cạc kiãøu, ta chè nãn gạn cho biãún cạc giạ trë nàòm trong di giạ trë ca kiãøu
âọ, nãúu khäng ta s nháûn âỉåüc kãút qu khäng mong mún màûc d C khäng thäng bạo läùi.
Kiãøu int l kiãøu thäng dủng nháút. Kiãøu char thỉûc ra l kiãøu kê tỉû nhỉng C cho phẹp sỉí
dủng kiãøu char nhỉ l kiãøu ngun: trong biãøu thỉïc säú hc thç char âỉåüc hiãøu l kiãøu ngun.
•
Cạc phẹp tênh säú hc âäúi våïi säú ngun :
Phẹp toạn Kê hiãûu Vê dủ
Cäüng + x+y
Trỉì - x-y
Nhán * x*y
Chia láúy pháưn ngun / x/y
Chia láúy pháưn dỉ % x%y
Tàng ++ x++ hồûc ++x
Gim -- x--hồûc --x
Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàòng
Trang 10
Vê dủ : 10 % 3 =1 ; 5 / 3 = 1 ;
•
Biãøu diãùn säú ngun dỉåïi dảng Hexa ( hãû tháûp lủc phán) :
Hãû tháûp phán sỉí dủng : 0 1 2 3 4 5 6 7 8 9
Hãû nhë phán sỉí dủng : 0 1
Hãû tháûp lủc phán sỉí dủng : 0 1 2 3 4 5 6 7 8 9 A B C D E F
Vê dủ : säú 53 åí dảng nhë phán l 110101, åí dảng Hexa l 35.
Säú ngun âỉåüc biãøu diãùn dỉåïi dảng Hexa : 0xgiạ_trë_Hexa hồûc 0Xgiạ_trë_Hexa
Vê dủ : 0x12 (=18) ; 0X12 (=18)
Âäúi våïi säú hãû 8 ta viãút thãm säú 0 vo trỉåïc : 0giạ_trë_Oct
Vê dủ : 0123 (=83)
• Biãøu diãùn säú ám trong mạy tênh:
Säú ám : Vê dủ : int x= - 21 ;
21 : 0000 0000 0001 0101
Säú b 1 : 1111 1111 1110 1010
Säú b 2 : 1111 1111 1110 1011
• Hiãûn tỉåüng trn säú :
Hiãûn tỉåüng ny xy ra khi kãút qu dỉû kiãún ca phẹp tênh säú hc vỉåüt ra khi di giạ trë
cọ thãø biãùu diãùn âỉåüc ca kiãøu dỉỵ liãûu âọ. Lục âọ kãút qu thỉûc tãú s l kãút qu sai.
Vê dủ : 32767 + 1 s cọ kãút qu -32768
Âãø khàõc phủc ta chuøn sang sỉí dủng cạc kiãøu dỉỵ liãûu cọ di giạ trë cho phẹp räüng hån
Chụng ta nãn khai bạo våïi kiãøu dỉỵ liãûu täúi ỉu âãø vỉìa cọ kãút qu mong mún vỉìa tiãút
kiãûm bäü nhåï.
Nãúu chụng ta âàût mäüt säú ám vo biãún khäng dáúu hồûc âàût mäüt säú vo kiãøu dỉỵ liãûu cọ
di giạ trë nh hån säú âọ thç trçnh biãn dëch s khäng bạo läùi nhỉng ta s cọ kãút qu khäng
mong mún.
• Hàòng säú ngun cọ kiãøu âënh trỉåïc :
Âäi khi chụng ta mún ghi cạc hàòng säú våïi kiãøu âënh trỉåïc mäüt cạch tỉåìng minh âãø
âm bo âäü chênh xạc : ghi thãm 1 kê tỉû vo cúi säú âọ
Vê dủ : U : unsigned int
UL : unsigned long int
0x123L: hàòng säú ngun dỉåïi dảng Hexa kiãøu long.
Vê dủ : signed char ch= 0xFF;
int x= 0xFFFF;
unsigned int y= 0xFFFFu;
printf("\n The decimal of signed 0xFF is %d", ch); -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
Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàòng
Trang 11
IV.
Kiãøu säú thỉûc:
• Cạc kiãøu säú thỉûc ca C :
Kiãøu biãún Tỉì khoạ Säú byte
Di giạ trë
Säú thỉûc cọ âäü chênh xạc âån float 4
1.2E-38 ÷ 3.4E38
Säú thỉûc cọ âäü chênh xạc kẹp double 8 2.2E-308 ÷ 1.8E308
Säú thỉûc cọ âäü chênh xạc kẹp âäü di låïn long double 10
3.4E-4932 ÷ 3.4E4932
Biãøu diãùn säú thỉûc åí dảng tháûp phán :
Vê dủ : 3.14 ; 2.718281828
Biãøu diãùn säú thỉûc åí dảng khoa hc :
Vê dủ : 6.023e23=6.023E23 (= 6.023 * 10
23
)
Trong vê dủ trãn, pháưn âënh trë l 6.023, pháưn m l 23
Pháưn âënh trë v pháưn m cọ thãø cọ dáúu âi km, chụng âỉåüc viãút liãưn nhau khäng cọ
dáúu ngàn cạch. Vê dủ : -12.23e-23
Pháưn ngun hay pháưn tháûp phán cọ thãø khäng cọ nhỉng dáúu cháúm khäng thãø thiãúu.
Vê dủ : 3. .14
Ta âãø : 3 l säú ngun nhỉng 3. l säú thỉûc.
• Biãøu diãùn säú tháûp phán trong mạy tênh:
Säú tháûp phán : Vê dủ : 12.5 : 1100.1
0.25 : 0.01
Quy trçnh chuøn âäøi .
• Hàòng säú thỉûc cọ kiãøu âënh trỉåïc :
Tỉång tỉû nhỉ säú ngun :
F : kiãøu float
L : kiãøu long
• Cạc phẹp toạn våïi kiãøu säú thỉûc :
Phẹp cäüng ( + ) , trỉì ( - ) , nhán ( * ) , chia ( / ) , phẹp tàng gim.
Phẹp chia (/) âäúi våïi säú thỉûc s cho kãút qu l säú thỉûc. Säú thỉûc khäng cọ phẹp %.
Khai bạo v khåíi tảo säú thỉûc : tỉång tỉû nhỉ säú ngun :
float x;
x=0.3333;
Hồûc float x=0.3333;
Do cạch lỉu trỉỵ säú thỉûc trong mạy tênh, ta khäng nãn kiãøm tra sỉû bàòng nhau giỉỵa 2 säú
thỉûc m 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 r rng kiãøu Boolean. Kiãøu ny täưn tải dỉåïi
dảng säú ngun.
Säú ngun cọ giạ trë 0 âỉåüc hiãøu l FALSE, cn lải âỉåüc hiãøu l TRUE. Nãúu kãút qu l
FALSE thç cọ giạ trë l 0, nãúu kãút qu l TRUE thç cọ giạ trë l 1.
Cạc phẹp toạn logic v cạc phẹp toạn quan hãû cho kãút qu kiãøu Boolean
Chổồng II : Kióứu dổợ lióỷu, bióỳn vaỡ hũng
Trang 12
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ổỷ vn 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 :
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.
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
Chổồng II : Kióứu dổợ lióỷu, bióỳn vaỡ hũng
Trang 13
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;
}
Chỉång II : Kiãøu dỉỵ liãûu, biãún v hàòng
Trang 14
Hm toascii xọa táút c cạc bit ngoải trỉì 7 bit cúi -> kãút qu thüc [0,127]
Kãút qu : 511 127 ∆
Hàòng xáu kê tỉû : l dy kê tỉû nàòm giỉỵa 2 dáúu ngồûc kẹp
Vê dủ : “Ngän ngỉỵ”
Xáu kê tỉû âỉåüc lỉu trong 1 mng ä nhåï liãưn nhau cọ cạc pháưn tỉí l cạc kê tỉû riãng biãût,
pháưn tỉí cúi cng l kê tỉû NULL ( \0 l kê hiãûu kãút thục ca xáu kê tỉû ) . Vê dủ :
Sỉû khạc nhau giỉỵa ‘Z’ v “Z” :
- ‘Z’ gäưm 1 byte, “Z” gäưm 2 byte lỉu trong bäü nhåï
- ‘Z’ cọ thãø âỉåüc sỉí dủng trong biãøu thỉïc toạn hc, cn “Z” thç khäng.
VII.
Khai bạo bàòng cạc hàòng tỉåüng trỉng:
Máùu khai bạo :
#define tãnbanâáưu dy_ thay_thãú
trong âọ dy_ thay_thãú cọ thãø l hàòng säú, hàòng xáu kê tỉû, hàòng logic ....
Trçnh biãn dëch s thay thãú táút c tãnbanâáưu trong chỉång trçnh bàòng dy_thay_thãú
Vê dủ :
#define PI 3.141592653589793
#define TRUE 1
#define FALSE 0
#define begin {
#define end }
Chụ : Khäng cọ dáúu = v dáúu ; åí cúi cáu vç âáy khäng phi l lãûnh
VIII.
Cạc kiãøu dỉỵ liãûu tỉû âënh nghéa:
VIII.1.
Kiãøu liãût kã :
Khi mún âënh nghéa 1 kiãøu dỉỵ liãûu bàòng cạch liãût kã táút c cạc tãn, cạc giạ trë m ta
mún cọ, ta sỉí dủng tỉì khọ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ê dủ :
enum colors {BLUE,GREEN,RED};
enum colors color ;
color = RED ;
Dy cạc pháưn tỉí âỉåüc liãût kã tỉång ỉïng våïi dy säú tỉû nhiãn bàõt âáưu tỉì 0.
Vê dủ : theo vê dủ trãn :
printf(“%d%d”,BLUE,RED);
s cọ kãút qu l 02.
Âãø pháưn tỉí bàõt âáưu cọ giạ trë khạc 0, ta âënh nghéa nhỉ sau :
T O I \0
Chổồng II : Kióứu dổợ lióỷu, bióỳn vaỡ hũng
Trang 15
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, nm 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 ?
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 16
Ch−¬ng III.
CÁU LÃÛNH, BIÃØU THỈÏC, V TOẠN TỈÍ
I.
Cáu lãûnh:
Cáu lãûnh l 1 chè thë hon chènh, ra lãûnh cho mạy tênh thỉûc hiãûn cäng viãûc no âọ. Cạc
cáu lãûnh kãút thục båíi dáúu cháúm pháøy, thỉåìng âỉåüc viãút trãn 1 dng âãø chỉång trçnh r rng.
Trçnh biãn dëch s b qua cạc kê tỉû khäng nhçn tháúy nhỉ tab, enter, spacebar, vç váûy 2
cáu lãûnh sau âáy l tỉång âỉång våïi nhau :
x=y+z;
v x = y + z ;
Khong tràõng chè cọ nghéa trong xáu kê tỉû nhỉ “Dai hoc Da Nang”
Våïi xáu kê tỉû âãø cọ thãø viãút trãn cạc dng khạc nhau thç ta phi dng kê tỉû \ .
Vê dủ : int x,\
y,z;
printf(“\nDai hoc \
Da Nang”);
Cáu lãûnh âån gin l nhỉỵng lãûnh khäng chỉïa lãûnh khạc nhỉ phẹp gạn, låìi gi hm kiãøu
void (hm khäng cọ giạ trë tr vãư), lãûnh nhy khäng âiãưu kiãûn.
Cáu lãûnh cáúu trục l khäúi lãûnh, lãûnh thỉí v lãûnh r nhạnh, lãûnh làûp.
II.
Khäúi lãûnh:
Khäúi lãûnh l mäüt nhọm cáu lãûnh âỉåüc bao båíi càûp dáúu ngồûc {}.
Vê dủ : { cáu lãûnh 1;
cáu lãûnh 2;
........
cáu lãûnh n;
}
Nhỉỵng nåi cọ thãø âàût mäüt lãûnh âån thç cọ thãø âàût 1 khäúi lãûnh. Bãn trong khäúi lãûnh cọ
thãø cọ khäúi lãûnh khạc.
III.
Biãøu thỉïc:
Biãøu thỉïc bao gäưm cạc toạn hảng v toạn tỉí.
Toạn hảng cọ thãø l biãún, hàòng, hm.
Toạn tỉí l + - * / % & | ......
Vê dủ : biãøu thỉïc tan(x)*y - 2 gäưm cạc toạn hảng l hm tan ca x, biãún y v hàòng 2;
cạc toạn hảng l *, - .
• Biãøu thỉïc säú hc l biãøu thỉïc cọ kãút qu l giạ trë säú hc.
• Biãøu thỉïc logic l biãøu thỉïc cọ kãút qu l TRUE hồûc FALSE ( thäng qua 0 v 1).
• Biãøu thỉïc quan hãû l cạc biãøu thỉïc logic âån gin, chỉïa cạc toạn tỉí quan hãû nhỉ
>,<,>=,<=,==,!=. Cạc toạn hảng trong biãøu thỉïc ny khäng nháút thiãút phi tỉång
thêch våïi nhau vãư kiãøu.
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 17
IV.
Toạn tỉí:
Toạn tỉí l mäüt kê hiãûu nhàòm thỉûc hiãûn cạc tênh toạn trãn 1 hay nhiãưu säú hảng.
IV.1.
Phẹp tênh theo bit:
Khäng ạp dủng cho kiãøu float v double
Toạn tỉí nghéa
& phẹp AND theo tỉìng bit
| phẹp OR theo tỉìng bit
^ phẹp XOR theo tỉìng bit
~ phẹp âo tỉìng bit
Vê dủ : 3 = 0000 0000 0000 0011
~3 = 1111 1111 1111 1100
Ta cáưn phi phán biãût giỉỵa cạc toạn tỉí & v && :
3 & 4 = 0, 3 && 4 = 1.
Tỉång tỉû nhỉ váûy våïi cạc toạn tỉí | v || :
3 | 4 = 7, 3 || 4 = 1.
Ta dng cạc phẹp tênh theo bit âãø xoạ hồûc láûp cạc bit trong cạc säú nhë phán.
Vê dủ : âãø láûp bit thỉï 0 v bit thỉï 3 ca säú ngun x, ta dng lãûnh x = x | 0x9;
âãø xoạ bit thỉï 1 v bit thỉï 2 ca säú ngun x, ta dng lãûnh x = x & 0xF9;
• Phẹp dëch säú hc >> v << :
I<<M : dëch säú ngun I sang trại âi M bit, tỉång âỉång våïi I*2
M
.
I>>M : dëch säú ngun I sang phi âi M bit, tỉång âỉång våïi I/2
M
.
Vê dủ : âãø tênh I*20 ta viãút (I<<4) + (I<<2) vç 20 = 2
4
+ 2
2
.
Vê dủ : int i=0x123;
i=i>>3;
printf(“\n i=%#x”,i); 0x24
printf(“\n i=%#o”,i); 044
Chụ :
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 qu: 0xFFFC; /* khäng phi x*2
2
*/
3. I>>M tỉång âỉång våïi I/2
M
khi I > 0.
Vê dủ: int i=-15;
clrscr();
printf("\ni=%d",i) ; -15
i=i>>3;
printf("\ni=%d",i) ; -2
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 18
IV.2.
Phẹp gạ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
Chụ : 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 dng phẹp gạn måí räüng cọ thãø gáy khọ hiãøu nhỉng nhiãưu bäü biãn dëch tảo ra m
hiãûu qu hån nãúu ta dng nọ.
IV.3.
Phẹp tàng / gim giạ trë 1 âån vë (dng våïi cạc biãún):
i=i+1 <=> i++ hồûc ++i
i=i-1 <=> i-- hồûc --i
Sỉû khạc nhau giỉỵa 2 lãûnh gạn a= ++i v a= i++ :
++i : tàng i lãn 1 âån vë, sau âọ måïi gạn.
i++ : gạn trỉåïc, sau âọ måïi tàng i lãn 1 âån vë.
Vê dủ : x=0;a=x++; // a=x; x++; : a=0, x=1;
x=0;a=++x; // x++; a=x; : a=1,x=1;
IV.4.
Toạn tỉí quan hãû :
Toạn tỉí nghéa
== toạn hảng 1 cọ bàòng toạn hảng 2 khäng ?
> toạn hảng 1 cọ låïn hån toạn hảng 2 khäng ?
< toạn hảng 1 cọ nh hån toạn hảng 2 khäng ?
>= toạn hảng 1 cọ låïn hån hồûc bàòng toạn hảng 2 khäng ?
<= toạn hảng 1 cọ nh hån hồûc bàòng toạn hảng 2 khäng ?
!= toạn hảng 1 cọ khạc toạn hảng 2 khäng ?
Ta cáưn phi phán biãût toạn tỉí quan hãû == v toạn tỉí gạn =
IV.5.
Toạn tỉí sizeof():
Toạn tỉí sizeof(x) tr lải säú byte m x chiãúm.
Ta cn cọ thãø viãút sizeof(kiãøu_dỉỵ_liãûu)
Vê dủ : float x;
printf(“\n Kêch thỉåïc ca kiãøu säú thỉûc l : %d”, sizeof(x));
printf(“\n Kêch thỉåïc ca kiãøu säú ngun l : %d”, sizeof(int));
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 19
IV.6.
Toạn tỉí âiãưu kiãûn :
biãøu_thỉïc1 ? biãøu_thỉïc2 : biãøu_thỉïc3;
Nãúu biãøu_thỉïc1 l âụng (khạc 0) thç giạ trë ca biãøu thỉïc trãn l biãøu_thỉïc2, nãúu
biãøu_thỉïc1 l sai (bàòng 0) thç giạ trë ca biãøu thỉïc trãn l biãøu_thỉïc3.
Vê dủ : Gi sỉí ta mún tçm giạ trë låïn nháút max ca 2 säú a v b. Ta cọ thãø viãút nhỉ sau :
max = a > b ? a : b
Nãúu a > b l TRUE thç max âỉåüc gạn bàòng a, nãúu khäng thç âỉåüc gạn bàòng b.
Vê dủ: 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 cạc phẹp toạn:
Toạn tỉí Chiãưu tênh toạn
() [] ->
L → R
- ++ -- ! ~ sizeof() &(âëa chè) *(con tr) toạn tỉí ẹp kiãøu : toạ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 cọ thãø dng cạc dáúu ngồûc âån ().
Nãúu cạc toạn tỉí cng cáúp thç lm theo chiãưu tênh toạn.
Ta khäng nãn viãút : x = f (...) + g (...); nãúu 1 trong 2 hm f v/hồûc g cọ thãø lm thay
âäøi giạ trë ca cạc biãún truưn cho hm cn lải. C khäng chè r hm no s âỉåü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 toạn :
Ngän ngỉỵ C cho phẹp sỉû träün láùn cạc toạn hảng thüc cạc kiãøu khạc nhau.
VI.1.
Sỉû chuøn âäøi säú hc :
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 20
Viãûc chuøn âäøi kiãøu giạ trë xy ra tỉû âäüng khi trong biãøu thỉïc cọ cạc toạn hảng khạc
kiãøu. Viãûc chuøn âäøi kiãøu giạ trë cng xy ra khi gạn giạ trë kiãøu ny cho biãún (hồûc pháưn tỉí
mng) kiãøu kia, khi truưn giạ trë cạc âäúi säú cho cạc tham säú, trong cáu lãûnh return.
int → long → float → double → long double.
Khi chuøn âäøi theo chiãưu ngỉåüc lải thç s bë máút mạt thäng tin, cọ thãø cọ cnh bạo
nhỉng khäng cọ läùi.
Vê dủ: int n;
long p;
float x,s;
s=n*p+x;
âáưu tiãn khi tênh n*p, n âỉåüc âäøi thnh kiãøu long. Têch cọ kiãøu long nãn khi tênh täøng,
têch âỉåüc chuøn thnh kiãøu float. Täøng cọ kiãøu float s âỉåüc gạn cho s.
VI.2.
Sỉû ỉu tiãn cho kiãøu säú :
Cạc phẹp tênh säú hc khäng âënh nghéa cho kiãøu char v short. C tỉû âäüng hiãûu chènh
kiãøu char v kiãøu short thnh kiãøu int.
VI.3.
Chuøn âäøi âäúi våïi kiãøu kê tỉû char:
Kiãøu kê tỉû char khi åí trong biãøu thỉïc säú hc s âỉåüc chuøn âäøi thnh kiãøu int dỉûa vo
bng m ASCII.
Vê dủ : char ch;
ch = ‘A’ + 1; // ‘A’=65 nãn ‘A’+1=66 tỉì âọ ch=’B’
VII.
Cäú chuøn âäøi kiãøu giạ trë:
Âãø nháûn âỉåüc kãút qu mong mún âäi khi ta phi chuøn âäøi kiãøu ca giạ trë.
Vê dủ :
#include <stdio.h>
#include <conio.h>
main()
{
int m,n;
float x;
m=3;n=2;
x=m/n; // phẹp chia láúy pháưn ngun, sau âọ chuøn sang kiãøu float âãø gạn vo 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 cọ nghéa l chuøn âäøi n sang kiãøu säú thỉûc.
Khi âọ (float)m/n l phẹp chia giỉỵa 2 säú thỉûc.
Ta cọ thãø viãút (float)(m) hồûc (float)m.
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 21
VIII.
Cạc hm säú hc chøn:
Cạc hm säú hc chøn nháûn cạc âäúi säú l cạc säú ngun hồûc säú thỉûc, cạc hm ny
nàòm trong file math.h. Vç váûy trỉåïc khi sỉí dủng ta cáưn khai bạo #include <math.h>
Hm nghéa
int abs(int i) tr lải giạ trë tuût âäúi ca säú ngun i
double fabs(double d) tr lải giạ trë tuût âäúi ca säú thỉûc d
double sin(double d) tr lải hm sin
double cos(double d) tr lải hm cos
double cosh(double d) tr lải hm ch (hyberbolic)
double tan(double d) tr lải hm tg
double exp(double d) tr lải giạ trë e m d
double log(double d) tr lải hm loga cå säú e
double log10(double d) tr lải hm loga cå säú 10
double pow(double d1, double d2) tr lải giạ trë d1 m d2
double floor(double d) tr lải hm càõt trn säú
double ceil(double d) tr lải hm lm trn säú
double fmod(double d1, double d2) tr lải hm pháưn dỉ ca phẹp chia d1/d2
double sqrt(double d) tr lải hm càn báûc hai
void srand(double d) khåíi tảo bäü säú ngáùu nhiãn
Vê dủ :
floor(3.2) = 3. floor(3.7) = 3.
ceil(3.2) = 4. ceil(3.7) = 4.
Âãø lm trn cạc säú thỉûc tỉì 2.5 âãún cáûn 3.5 thnh 3 ta dng floor(i+0.5)
IX.
Bi táûp :
1. Gi sỉí ta cọ :
float x,y;
x=(int)3.4;
y=(int)3.8;
Tênh x,y. (3,3)
2. Gi sỉí ta cọ :
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
Chổồng III : Cỏu lóỷnh, bióứu thổùc vaỡ toaùn tổớ
Trang 22
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 :
)(cos3)tan(
2
xx
ez
+
=
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 :
>
=
<
=
0 n nóỳu
0 n nóỳu0
0 n nóỳu
1
1
)(nsign
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 ) ;
Chỉång IV : Nháûp xút dỉỵ liãûu
Trang 23
Ch−¬ng IV. NHÁÛP XÚT DỈỴ LIÃÛU
I.
Hm printf() :
Hm printf() nàòm trong stdio.h. Hm ny cọ kh nàng chuøn dảng, tảo khn v âỉa
cạc kiãøu dỉỵ liãûu ra mn hçnh.
I.1.
Dảng :
int printf(“xáu âënh dảng”, dy cạc biãøu thỉïc )
Vê dủ :
printf(“%d %d %c”,1,2,’c’);
ÅÍ vê dủ trãn ta tháúy cọ sỉû tỉång ỉïng 1-1 v âụng trçnh tỉû giỉỵa cạc m âënh dảng trong
xáu âënh dảng v dy cạc biãøu thỉïc.
I.2.
Xáu âënh dảng :
bao gäưm :
•
Cạc kê tỉû âiãưu khiãøn :
- \n : sang dng.
- \f : sang trang.
- \b : xọa li mäüt kê tỉû
- \t : tab (tỉång ỉïng våïi 8 khong tràõng)
• Cạc m âënh dảng (%) cho cạc biãøu thỉïc tỉång ỉïng
• Cạc kê tỉû hiãøn thë: Ngoi nhỉỵng kê tỉû bçnh thỉåìng, âãø âỉa ra nhỉỵng kê tỉû âàûc biãût,
ta phi viãút nhỉ sau :
- \’ : in ra dáúu ‘
- \* : in ra dáúu *
- \\ : in ra dáúu \
Khn âënh dảng :
%[flag][fw][.pp]kêtỉûâënhdảng
trong âọ % v kêtỉûâënhdảng bàõt büc phi cọ
• flag: cọ bäún cåì:
- Canh trại cạc giạ trë xút (màûc âënh l canh phi)
+ Hiãøn thë dáúu ca cạc säú ( + hồûc - ).
‘ ‘ Cạc säú khäng dáúu âỉåüc bàõt âáưu bàòng khong tràõng, säú ám bàõt âáưu bàòng dáúu -
# In cạc säú cọ kê hiãûu ca hãû thäúng säú (chè dng våïi cạc kê tỉû chuøn dảng x, X hồûc o) :
in 0x hồûc 0X trỉåïc säú tháûp lủc phán, in 0 trỉåïc säú bạt phán.
- Khi khäng cọ dáúu trỉì thç kãút qu âỉåüc däưn vãư phêa bãn phi nãúu âäü di thỉûc tãú
ca nọ nh hån âäü di ca khn in dnh cho nọ. Cạc vë trê dỉ thỉìa s âỉåüc láúp bàòng cạc
khong träúng. Nãúu dy säú fw bàõt âáưu bàòng säú 0 thç cạc vë trê dỉ thỉìa s âỉåüc láúp âáưy bàòng säú 0
- Khi cọ dáúu trỉì thç kãút qu âỉåüc däưn vãư phêa bãn trại v cạc vë trê dỉ thỉìa ln
âỉåüc láúp bàòng cạc khong träúng.
Chỉång IV : Nháûp xút dỉỵ liãûu
Trang 24
Trỉåìng ra fw Dáúu - Kãút qu
-2035 8 cọ -2035
-2035 08 cọ -2035
-2035 8 khäng -2035
-2035 08 khäng -0002035
“abcdef” 08 cọ abcdef
“abcdef” 08 khäng abcdef
“abcdef” 8 khäng abcdef
•
fw : l dy säú ngun xạc âënh âäü räüng täúi thiãøu dnh cho trỉåìng ra :
- Khi fw låïn hån âäü di thỉûc tãú ca trỉåìng ra thç cạc vë trê dỉ thỉìa s âỉåüc láúp
âáưy båíi cạc khong tràõng hồûc cạc säú 0 ty thüc vo sỉû cọ màût ca säú 0. Näüi dung trỉåìng ra
âỉåüc âáøy sang bãn trại hay phi ty thüc vo sỉû cọ màût ca dáúu trỉì.
- Khi khäng cọ fw hồûc fw låïn hån âäü di thỉûc tãú ca trỉåìng ra thç âäü räüng dnh
cho trỉåìng s bàòng âäü di thỉûc tãú ca trỉåìng ra.
Vê dủ : âãø âỉa ra dng 123^^^^^^000123123^^^ ta viãút nhỉ sau :
printf(“%-9d%06d%-6d”,123,123,123);
•
.pp : pp l säú ngun cọ chỉïc nàng :
- Âäúi våïi säú ngun thç in ra êt nháút pp chỉỵ säú (nãúu thiãúu thç chn cạc säú 0). Âäúi
våïi pháưn tháûp phán, nãúu khäng cọ pp thç âäü chênh xạc màûc âënh l 6. Nãúu pp låïn hån âäü di
thỉûc ca trỉåìng ra thç nọ chn cạc säú 0 vo, nãúu nh hån thç nọ s càõt båït.
- Âäúi våïi xáu kê tỉû : Nãúu pp nh hån âäü di xáu thç chè cọ pp kê tỉû âáưu tiãn ca
xáu âỉåüc âỉa ra. Nãúu khäng cọ pp hồûc pp låïn hån âäü di xáu thç ton bäü xáu âỉåüc âỉa ra.
Vê dủ : printf(“%-10.2f”,-123.456); s cho kãút qu -123.46^^^
Tải vë trê fw v .pp ta cọ thãø âàût dáúu *, khi âọ chụng âỉåüc xạc âënh båíi biãøu thỉïc tỉång
ỉïng: Vê dủ : int n=8;
float y=4.5;
printf(“\n%*.2f”,n,y);
s cho kãút qu ^^^^4.50
• Kê tỉû âënh dảng : l kê hiãûu xạc âënh quy tàõc âënh dảng v dảng in ra ca biãøu thỉïc.
Kê tỉû âënh dảng nghéa
%c In ra kê tỉû kiãøu char, cọ thãø dng cho short hồûc int
%d, %i In ra säú ngun int, cọ thãø dng cho char
%u In ra unsigned int, cọ thãø dng cho unsigned char, unsigned short
%ld In ra säú ngun kiãøu long int
%lu In ra säú ngun kiãøu unsigned long int
%x,%X In ra säú ngun dảng Hexa (%x: lower case, %X: upper case)
%o In ra säú ngun dảng Octal
%f In ra säú thỉûc åí dảng thỉåìng våïi 6 chỉỵ säú tháûp phán, dng cho float, double
%e,%E In ra säú thỉûc åí dảng m e hay E
%g,%G In ra säú thỉûc kiãøu %f hay %e ty thüc vo cại no ngàõn hån
%s In ra xáu kê tỉû bàòng cạch cung cáúp âëa chè ca xáu kê tỉû
Chỉång IV : Nháûp xút dỉỵ liãûu
Trang 25
I.3.
Dy cạc biãøu thỉïc :
Cạc biãøu thỉïc cạch nhau dáúu pháøy, biãøu thỉïc l hàòng, biãún, hm, pháưn tỉí ca mng
hồûc biãøu thỉïc củ thãø.
I.4.
Giạ trë ca hm printf():
Khi thỉûc hiãûn thnh cäng, printf() cho ta säú kê tỉû (kãø c kê tỉû âiãưu khiãøn) âỉåüc âỉa ra.
Khi cọ läùi hm tr vãư giạ trë -1.
Vê dủ : m=printf(“\n 123456”);
→
m=8
Mäüt säú läùi hay màõc phi :
- M âënh dảng khäng ph håüp våïi kiãøu ca biãøu thỉïc.
- Säú m âënh dảng khäng tỉång ỉïng våïi säú biãøu thỉïc.
II.
Hm scanf() :
II.1.
Máùu :
int scanf(“xáu âënh dảng”, dy âëa chè cạc biãún)
Vê dủ : int x,y;
scanf(“%d%d”,&x,&y);
Dng vo : l dy kê tỉû liãn tiãúp nháûp tỉì thiãút bë vo, cúi dng vo l kê tỉû \n.
Trong dng vo cọ cạc khong tràõng, dáúu tab, ... cạc thnh pháưn ny l dáúu phán cạch
giỉỵa cạc trỉåìng vo.
ÅÍ âáy cọ sỉû tỉång ỉïng 1-1 v âụng trçnh tỉû giỉỵa cạc m âënh dảng trong xáu âënh dảng
v dy cạc âëa chè cạc biãún.
Xáu âënh dảng : %[*][dd]]kêtỉûâënhdảng
• Dáúu * : Trỉåìng vo váùn âc bçnh thỉåìng nhỉng khäng âỉåüc lỉu vo bäü nhåï. Vç
váûy s khäng cọ âäúi tỉång ỉïng.
• dd : dy säú xạc âënh âäü di trỉåìng vo.
- Nãúu dd vàõng màût hồûc dd låïn hån âäü di ca trỉåìng vo thç ton bäü trỉåìng
vo âỉåüc âc v ghi vo vng nhåï tỉång ỉïng.
- Nãúu dd nh hån âäü di ca trỉåìng vo thç chè cọ pháưn âáưu ca trỉåìng vo cọ
kêch cåỵ dd âỉåüc âc v ghi vo vng nhåï tỉång ỉïng, pháưn cn lải âỉåüc xem xẹt sau.
Vê dủ :
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 vo 12345 12 12345678abcd thç :
x=12345
y=12
a=123
ch=”456” (cọ kê tỉû NULL åí cúi)
ct=”78abcd” (cọ kê tỉû NULL åí cúi)