- Ý nghĩa và vai trò căa môn hçc: Mÿc tiêu cāa môn hác: - VÁ ki¿n thức: - Trình bày đ°ÿc nhċng khái niám c¢ bÁn vÅ ngôn ngċ lÁp trình C; - Trình bày đ°ÿc ph°¢ng pháp giÁi quyÃt vÃn đÅ tr
Trang 1Sè LAO ĐâNG, TH¯¡NG BINH VÀ Xà HâI ĐÂK LÂK
TR¯èNG TRUNG CÂP TR¯èNG S¡N
GIÁO TRÌNH
MÔ N HàC: L¾P TRÌNH C¡ BÀN NGHÀ: CÔNG NGHÞ THÔNG TIN TRÌNH Đä: TRUNG CÂP
của Hiệu trưởng Trường trung cấp Trường Sơn
Đắk Lắk, năm 2022
Trang 3LèI GIæI THIÞU
Hián nay, t¿i Tr°çng ch°a có giáo trình LÁp trình c¢ bÁn ĐÁc biát trên thå tr°çng không có tài liáu hçc tÁp, tham khÁo phù hÿp våi ch°¢ng trình khung Cao đẳng nghÅ, trung cÃp nghÅ thuãc nghÅ Công nghá thông tin (CNTT) trong quá trình đào t¿o nghÅ hián nay
Nhóm tác giÁ biên so¿n giáo trình lÁp trình c¢ bÁn nhÅm māc đích giúp hçc sinh, sinh viên (HSSV) sĉ dāng giáo trình làm tài liáu nghiên cąu và hçc tÁp mãt cách thuÁn tián Ch°¢ng trình môn hçc đ°ÿc sĉ dāng đÇ giÁng d¿y cho sinh viên trung cÃp nghÅ Công nghá thông tin (ąng dāng phÅn mÅm) và làm tài liáu tham khÁo cho các nghÅ thuãc các ngành nghÅ kỹ thuÁt
VÁy, rÃt mong đ°ÿc sč góp ý căa b¿n đçc đÇ tài liáu này ngày càng đ°ÿc hoàn thián h¢n, chúng tôi xin chân thành cÁm ¢n
Xin chân thành c Ám ¢n!
ĐÃk LÃk, ngày 02 tháng 8 năm 2022
Tham gia biên so¿n
1 Ph¿m Hồng Quëc - Chă biên
2 ĐÁu Nguyßn Thanh Nhàn
3 Nguyßn Thái V°¢ng
Trang 4MĀC LĀC
LæI GIäI THIàU III
GIÁO TRÌNH MÔN HæC 1
CH¯¡NG I: GIäI THIàU NGÔN NGĊ LÀP TRÌNH C 3
1.1 GIäI THIàU NGÔN NGĊ C 3
1.1.1 Låch sĉ phát triÇn 3
1.1.2 Sč cÅn thiÃt 4
1.2 CÁC THAO TÁC C¡ BÀN 9
1.2.1 Khéi đãng 9
1.2.2 Thoát khéi 10
1.2.3 T¿o måi, ghi mãt ch°¢ng trình C 10
1.3 SĈ DĀNG TRþ GIÚP 13
1.4 BÀI TÀP 15
CH¯¡NG II: CÁC THÀNH PHÄN C¡ BÀN CĂA NGÔN NGĊ LÀP TRÌNH C 16
2.1 TĆ KHÓA VÀ KÍ HIàU 16
2.1.1 Tć khóa 16
2.1.2 TÁp ký tč dùng trong ngôn ngċ C 17
2.1.3 TÁp ký hiáu 17
2.2 CÁC KIÆU DĊ LIàU S¡ CÂP 17
2.2.1 KiÇu së nguyên 17
2.2.2 KiÇu së thčc (KiÇu dÃu phẩy đãng) 18
2.2.3 KiÇu ký tč 19
2.3 BIÂN, HÄNG, BIÆU THĄC 20
2.3.1 Phân lo¿i, khai báo và sĉ dāng biÃn 20
2.3.2 HÅng (Constant) 20
2.3.3 BiÃn và BiÇu thąc 22
2.4 CÂU TRÚC MâT CH¯¡NG TRÌNH 26
2.4.1 TiÅn xĉ lý và biên dåch 26
2.4.2 CÃu trúc mãt ch°¢ng trình C 26
2.4.3 Các th° vián thông dāng 27
2.5 CÂU LàNH 28
2.5.1 Khái niám 28
2.5.2 Lánh gán và lánh gãp 28
2.5.3 NhÁp và xuÃt dċ liáu 31
Trang 52.6 THČC THI CH¯¡NG TRÌNH 33
2.7 BÀI TÀP 33
CH¯¡NG III: CÁC CÂU LàNH CÓ CÂU TRÚC 35
3.1 CÂU TRÚC RÀ NHÁNH 35
3.1.1 D¿ng không đÅy đă 35
3.1.2 D¿ng đÅy đă 36
3.2 CÂU TRÚC LČA CHæN 43
3.3 CÂU TRÚC LÀP 47
3.3.1 CÃu trúc lÁp for: 47
3.3.2 CÃu trúc lÁp While 49
3.3.3 Vòng lÁp do& while 52
3.4 CÁC LàNH ĐÀC BIàT 54
3.4.1 Lánh Break 54
3.4.2 Lánh Continue 55
3.5 BÀI TÀP 56
CH¯¡NG IV: HÀM VÀ CH¯¡NG TRÌNH CON 57
4.1 KHÁI NIàM HÀM 57
4.1.1 Phân lo¿i hàm 58
4.1.2 Quy tÃc ho¿t đãng căa hàm 59
4.2 XÂY DČNG HÀM 59
4.2.1 Đånh nghĩa hàm 59
4.2.2 Sĉ dāng hàm 60
4.3 CÁC THAM Sê CĂA HÀM 61
4.3.1 Phân biát các lo¿i tham së 61
4.3.2 Cách truyÅn tham së 62
4.4 BÀI TÀP: 65
CH¯¡NG V: DĊ LIàU KIÆU MÀNG 66
5.1 KHÁI NIàM MÀNG 66
5.2 KHAI BÁO MÀNG 66
5.2.1 MÁng 1 chiÅu 66
5.3 TRUY XUÂT MÀNG 68
5.3.1 Truy xuÃt mÁng 1 chiÅu 71
5.3.2 Truy xuÃt mÁng 2 chiÅu 71
5.4 BAI TÀP 75
CH¯¡NG VI: CON TRè 76
Trang 66.1 KHAI NIàM VÄ CON TRè VA DäA CHâ 76
6.2 KHAI BAO VA SĈ DĀNG BIÂN CON TRè 76
6.2.1 Khai báo biÃn con tré 77
6.2.2 Các thao tác trên con tré 78
6.3 BÀI TÀP 81
CH¯¡NG VII: CHUàI KÝ TČ 82
7.1 KHÁI NIàM 82
7.2 KHAI BÁO 82
7.2.1 Khai báo theo mÁng 82
7.2.2 Khai báo theo con tré 82
7.2.3 Vća khai báo vća gán giá trå 82
7.3 CÁC THAO TÁC TRÊN CHUàI 83
7.3.1 NhÁp chuái tć bàn phím 83
7.3.2 XuÃt chuái ra màn hình 83
7.3.3 Mãt së hàm xĉ lý chuái 84
7.4 BÀI TÀP 87
TÀI LIàU THAM KHÀO 89
Trang 7GIÁO TRÌNH MÔ N HàC Tên môn h ác: LÀP TRÌNH C¡ BÀN
Mã môn h ác: MH11
V ß trí, tính chÃt, ý nghĩa và vai trò cāa mô đun:
- Vå trí: Là môn hçc c¢ sé nghÅ trong ch°¢ng trình đào t¿o Trung cÃp nghÅ Công nghá thông tin (ąng dāng phÅn mÅm) Môn hçc này đ°ÿc hçc sau khëi môn hçc chung và môn CÃu trúc dċ liáu và giÁi thuÁt
- Tính chÃt: Là môn hçc cung cÃp cho hçc sinh nhċng khái niám, thuÁt toán c¢ bÁn vÅ ngôn ngċ lÁp trình C và kỹ năng lÁp trình c¢ bÁn
- Ý nghĩa và vai trò căa môn hçc:
M ÿc tiêu cāa môn hác:
- V Á ki¿n thức:
- Trình bày đ°ÿc nhċng khái niám c¢ bÁn vÅ ngôn ngċ lÁp trình C;
- Trình bày đ°ÿc ph°¢ng pháp giÁi quyÃt vÃn đÅ trên máy tính bÅng ngôn ngċ
lÁp trình;
- Cung cÃp cho hçc sinh nhċng khái niám c¢ bÁn vÅ ngôn ngċ lÁp trình C: câu lánh, tć khóa, cú pháp, cách khai báo và sĉ dāng biÃn, hàm và các cÃu trúc lánh trong ngôn ngċ C;
- Trình bày đ°ÿc qui tÃc xây dāng hàm, cách sĉ dāng hàm trong mãt ch°¢ng trình;
- Trình bày đ°ÿc ý nghĩa, cách khai báo, cách truy xuÃt våi mãt së cÃu trúc dċ
- ViÃt đ°ÿc các ch°¢ng trình đ¢n giÁn thčc hián các thao tác truy xuÃt trên các
phÅn tĉ căa mÁng và truy xuÃt trên đëi t°ÿng kiÇu con tré;
- ViÃt đ°ÿc các ch°¢ng trình đ¢n giÁn thčc hián các thao tác truy xuÃt trên các
Trang 8- V Á năng lăc tă chā và trách nhißm:
- Có khÁ năng t° ̣nghiên cąu, t° ̣hoc,̣ tham khÁo tài liêā liên quan đÃn môn hçc
đÇ vâ渃⌀ dung ̣ vào hoa球⌀ đông̣ hoc tâp;
- Nghiêm túc, có tinh thÅn phëi hÿp tham gia hçc, làm nhóm theo yêu cÅu căa giáo viên;
- Rèn luyán tính tß chąc, tính tÁp thÇ, linh ho¿t, khoa hçc, cẩn thÁn;
- Hçc sinh phÁi tích lũy đă së giç hçc theo quy đånh, tham gia đÅy đă các giç
1 Ch°¢ng I: Giåi thiáu ngôn ngċ lÁp trình C 3 1 2
2 Ch°¢ng II: Các thành phÅn c¢ bÁn căa ngôn
Trang 9CH¯¡NG I: GIæI THIÞU NGÔN NGĀ L¾P TRÌNH C
- Chă đãng tìm hiÇu các tính năng căa ngôn ngċ C;
- Rèn luyán tính cẩn thÁn, tã mã, chính xác, sáng t¿o, linh ho¿t trong công viác
Nåi dung
1.1 Giçi thißu ngôn ngā C
1.1.1 Lßch sÿ phát triÃn
Ngôn ngċ C là ngôn ngċ lÁp trình cÃp cao, đ°ÿc sĉ dāng rÃt phß biÃn đÇ lÁp
trình há thëng cùng våi Assembler và phát triÇn các ąng dāng
Vào nhċng năm cuëi thÁp kỷ 60 đÅu thÁp kỷ 70 căa thà kỷ XX, Dennish Ritchie (làm viác t¿i phòng thí nghiám Bell) đã phát triÇn ngôn ngċ lÁp trình C dča trên ngôn ngċ BCPL (do Martin Richards đ°a ra vào năm 1967) và ngôn ngċ B (do Ken Thompson phát triÇn tć ngôn ngċ BCPL vào năm 1970 khi viÃt há điÅu hành UNIX đÅu tiên trên máy PDP-7) và đ°ÿc cài đÁt lÅn đÅu tiên trên há điÅu hành UNIX căa máy DEC PDP-11 Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuÃt bÁn
quyÇn <Ngôn ngċ lÁp trình C= và đ°ÿc phß biÃn rãng rãi đÃn nay
Lúc ban đÅu, C đ°ÿc thiÃt kà nhÅm lÁp trình trong môi tr°çng căa há điÅu hành Unix nhÅm māc đích há trÿ cho các công viác lÁp trình phąc t¿p Nh°ng vÅ sau, våi nhċng nhu cÅu phát triÇn ngày mãt tăng căa công viác lÁp trình, C đã v°ÿt qua khuôn khß căa phòng thí nghiám Bell và nhanh chóng hãi nhÁp vào thà giåi lÁp trình đÇ rồi các công ty lÁp trình sĉ dāng mãt cách rãng rãi Sau đó, các công ty sÁn xuÃt phÅn mÅm lÅn l°ÿt đ°a ra các phiên bÁn há trÿ cho viác lÁp trình bÅng ngôn ngċ C và chuẩn
ANSI C cũng đ°ÿc khai sinh tć đó
Ngôn ngċ lÁp trình C là mãt ngôn ngċ lÁp trình há thëng rÃt m¿nh và rÃt <mÅm d¿o=, có mãt th° vián gồm rÃt nhiÅu các hàm (function) đã đ°ÿc t¿o s¿n Ng°çi lÁp trình có thÇ tÁn dāng các hàm này đÇ giÁi quyÃt các bài toán mà không cÅn phÁi t¿o måi H¢n thà nċa, ngôn ngċ C há trÿ rÃt nhiÅu phép toán nên phù hÿp cho viác giÁi quyÃt các bài toán kỹ thuÁt có nhiÅu công thąc phąc t¿p Ngoài ra, C cũng cho phép ng°çi lÁp trình tč đånh nghĩa thêm các kiÇu dċ liáu trću t°ÿng khác Tuy nhiên, điÅu
mà ng°çi måi vća hçc lÁp trình C th°çng gÁp <rÃc rëi= là <h¢i khó hiÇu= do sč <mÅm
Trang 10d¿o= căa C Dù vÁy, C đ°ÿc phß biÃn khá rãng rãi và đã tré thành mãt công cā lÁp trình khá m¿nh, đ°ÿc sĉ dāng nh° là mãt ngôn ngċ lÁp trình chă yÃu trong viác xây
tr°åc khi trao quyÅn cho ng°çi dùng
ĐÇ làm đ°ÿc điÅu này, há điÅu hành phÁi đ°ÿc cÃu t¿o tć mãt tÁp hÿp các ch°¢ng trình Mçi ch°¢ng trình đÅu cë gÃng đ°a ra lçi giÁi cho mãt hay nhiÅu bài toán nào đó Mçi ch°¢ng trình cë gÃng đ°a ra giÁi pháp cho mãt hay nhiÅu vÃn đÅ Mái ch°¢ng trình là tÁp hÿp các câu lánh giÁi quyÃt mãt bài toán cā thÇ Mãt nhóm lánh t¿o
thành mãt ch°¢ng trình và mãt nhóm các ch°¢ng trình t¿o thành mãt phÅn mÅm
PhÅn này chúng ta sÁ tìm hiÇu mãt së khái niám căn bÁn vÅ lánh (Command), thuÁt toán, ch°¢ng trình, ngôn ngċ lÁp trình ThuÁt ngċ thuÁt giÁi, thuÁt toán và PhÅn
mÅm (Software)
Ví dụ 1: Mãt ng°çi b¿n đÃn nhà ch¢i và đ°ÿc mçi món sċa dâu Anh ta thÃy
ngon miáng và muën xin công thąc làm Ta h°ång d¿n cho anh ta các b°åc làm nh°
sau:
Bước 1: LÃy mãt ít sċa
Bước 2: Đß n°åc ép dâu vào
Bước 3: Trãn hán hÿp này và làm l¿nh
Bây giç nÃu ng°çi b¿n theo nhċng chã d¿n này, hç cũng có thÇ t¿o ra món sċa
dâu tuyát vçi Hãy phân tích chã thå (lánh) é trên
Lánh đÅu tiên: Lánh này hoàn chãnh ch°a? Nó có trÁ lçi đ°ÿc câu héi lÃy sċa
8é đâu9?
Lánh thą hai: Mãt lÅn nċa, lánh này không nói rõ n°åc ép dâu đÇ 8é đâu9
May mÃn là b¿n căa chúng ta đă thông minh đÇ hiÇu đ°ÿc công thąc pha chà nói trên, dù rÅng còn nhiÅu điÇm ch°a rõ ràng Do vÁy nÃu chúng ta muën phß biÃn
cách làm, chúng ta cÅn bß sung các b°åc nh° sau:
Bước 1: Rót mãt ly sċa vào máy trãn
Bước 2: Đß thêm vào mãt ít n°åc dâu ép
Bước 3: Ðóng nÃp máy trãn
Bước 4: Mé đián và bÃt đÅu trãn
Bước 5: Dćng máy trãn l¿i
Bước 6: NÃu đã trãn đÅu thì tÃt máy, ng°ÿc l¿i thì trãn tiÃp
Bước 7: Khi đã trãn xong, rót hán hÿp vào tô và đÁt vào tă l¿nh
Bước 8: ÐÇ l¿nh mãt lúc rồi lÃy ra dùng
Trang 11So sánh hai cách h°ång d¿n nêu trên, h°ång d¿n thą hai chÃc chÃn hoàn chãnh,
TÁp lánh trên tuân thă tÃt cÁ các quy tÃc đã đÅ cÁp Vì vÁy, tÁp lánh này là mãt
ch°¢ng trình và nó sÁ thčc hián thành công viác cãng hai së trên máy tính
ThuÁt giÁi (Algorithm):
Là mãt dãy các thao tác xác đånh trên mãt đëi t°ÿng, sao cho sau khi thčc hián mãt së hċu h¿n các b°åc thì đ¿t đ°ÿc māc tiêu Theo R.A.Kowalski thì bÁn chÃt căa
giÁi bài toán này đ°ÿc)
ĐiÅu khiÇn: Thành phÅn này trÁ lçi câu héi: giÁi thuÁt phÁi làm nh° thà nào?
Chính là cách thąc tiÃn hành áp dāng thành phÅn logic đÇ giÁi quyÃt vÃn đÅ
Ch°¢ng trình (Program):
Là mãt tÁp hÿp các mô tÁ, các phát biÇu, nÅm trong mãt há thëng qui °åc vÅ ý
nghĩa và thą tč thčc hián, nhÅm điÅu khiÇn máy tính làm viác Theo Niklaus Wirth thì:
Ch°¢ng trình = ThuÁt toán + CÃu trúc dċ liáu
Trang 12Các thuÁt toán và ch°¢ng trình đÅu có cÃu trúc dča trên 3 cÃu trúc điÅu khiÇn c¢
bÁn:
xuëng, mái b°åc chã thčc hián đúng mãt lÅn
Muën tré thành lÁp trình viên chuyên nghiáp hãy làm đúng trình tč đÇ có thói quen tët và thuÁn lÿi sau này trên nhiÅu mÁt căa mãt ng°çi làm máy tính Hãy làm theo các b°åc
sau:
B°åc 1: Tìm, xây dčng thuÁt giÁi (trên giÃy)
B°åc 2: ViÃt ch°¢ng trình trên máy
B°åc 3: Dåch ch°¢ng trình
B°åc 4: Ch¿y và thĉ ch°¢ng trình
Ngôn ngċ lÁp trình (Programming language):
Ngôn ngċ lÁp trình là há thëng các ký hiáu tuân theo các qui °åc vÅ ngċ pháp
và ngċ nghĩa, dùng đÇ xây dčng thành các ch°¢ng trình cho máy tính
Mãt ch°¢ng trình đ°ÿc viÃt bÅng mãt ngôn ngċ lÁp trình cā thÇ (ví dā Pascal, C&) gçi là ch°¢ng trình nguồn, ch°¢ng trình dåch làm nhiám vā dåch ch°¢ng trình
nguồn thành ch°¢ng trình thčc thi đ°ÿc trên máy tính
Các b°åc lÁp trình:
B°åc 1: Phân tích vÃn đÅ và xác đånh các đÁc điÇm (xác đånh I-P-O)
B°åc 2: LÁp ra giÁi pháp (đ°a ra thuÁt giÁi)
I-P-O Cycle (Input-Pprocess-Output Cycle) là quy trình xĉ lý c¢ bÁn căa máy
tính nh° mô hình sau:
Xử lý (Process)
Đầu vào (Input)
Đầu ra (output)
Hình 1.2: Quy trình nhập – xử lý – xuất cơ bản của máy tính
Ví dụ 3: Xác đånh Input, Process, Output căa viác làm 1 ly n°åc chanh nóng
- dùng muáng khuÃy đÅu
Trang 13Output: ly chanh nóng đã s¿n sàng đÇ dùng
Ví dụ 4: Xác đånh Input, Process, Output căa ch°¢ng trình tính tiÅn l°¢ng công
nhân tháng 10/2002 biÃt rÅng l°¢ng = l°¢ng căn bÁn * ngày công
ĐÇ dß h¢n vÅ quy trình xĉ lý, các nhà lÁp trình đ°a ra d¿ng l°u đồ đÇ minh hça
tćng b°åc quá trình xĉ lý mãt vÃn đÅ (bài toán)
Bảng 1.1: Hình ảnh minh họa lưu đồ
TT Hình d¿ng (Symbol) Hành đãng (Activity)
6 Gçi CT con, hàm& (Procedure, Function&)
Trang 148 ĐiÇm ghép nëi (Connector)
Mãt së l°u đồ minh ho¿:
Lưu đồ 1: Chuẩn bå pha cà
phê
Lưu đồ 2: Ch°¢ng trình
tính tiÅn l°¢ng công nhân tháng 10/2015 biÃt rÅng l°¢ng = l°¢ng căn bÁn *
ngày công
Lưu đồ 3: Ch°¢ng
trình giÁi ph°¢ng trình
bÁc nhÃt ax + b = 0
Ngôn ngċ C có nhċng đÁc điÇm c¢ bÁn sau:
nh°ng hÅu hÃt đÅu đ°ÿc biÇu dißn bÅng nhċng chuái ký tč ngÃn gçn
cÃu trúc lča chçn, lÁp& Tć đó các ch°¢ng trình viÃt bÅng C đ°ÿc tß chąc rõ ràng, dß
hiÇu
cùng phong phú nên khi chuyÇn tć máy tính này sang máy tính khác các ch°¢ng trình
viÃt bÅng C v¿n hoàn toàn t°¢ng thích
Trang 15 Tính linh động (flexible): C là mãt ngôn ngċ rÃt uyÇn chuyÇn và cú pháp,
chÃp nhÁn nhiÅu cách thÇ hián, có thÇ thu gçn kích th°åc căa các mã lánh làm ch°¢ng
trình ch¿y nhanh h¢n
thành các tÁp tin đëi t°ÿng (object) và liên kÃt (link) các đëi t°ÿng đó l¿i våi nhau
Há trÿ các màu sÃc khác nhau våi các dòng code có thuãc tính khác nhau nh°
Class/Struct/Union hay Functions, Variables, Constants khi so¿n thÁo code
Há trÿ các gÿi ý các tć khoá giúp các lÁp trình viên có thÇ code nhanh và dß
Viác cài đÁt C-Free giëng nh° mãt phÅn mÅm bình th°çng
Sau khi tÁi vÅ ch¿y file setup và cài đÁt ch°¢ng trình, sau khi cài đÁt xong khéi
đãng ch°¢ng trình ta sÁ nhÁn đ°ÿc hình nh° sau:
Hình 1.1: Hộp thoại đăng nhập C-Free
T¿i đây C-Free cung cÃp mãt së ch°¢ng trình m¿u nh° CppHello.cpp Chçn mãt ch°¢ng trình đÇ xem hoÁc nhÃn Close đÇ vào màn hình chính, t¿i đây có nhċng
chąc năng nh° sau: New (hoÁc nhÃn tß hÿp phím ctrl + N) đÇ t¿o måi mãt tÁp tin:
Trang 16Hình 1.2: Màn hình làm việc C-Free
Dß dàng tra cąu công dāng mãt lánh nào đó bÅng cách tô đen dòng lánh và
nhÃn phím F1
Dß dàng biên dåch ch°¢ng trình (phím F9), nÃu code bå lái, chã viác nhÃp vào
dòng thông báo, ch°¢ng trình sÁ báo vå trí phát sinh lái
Dß dàng biên dåch thông qua biÇu t°ÿng hoÁc phím F5
Dß dàng t¿o và đ°a file vào Project thông qua menu Project
Våi phÅn mÅm C-Free này dß dàng hçc C/C++ mà không cÅn phÁi sĉ dāng Visual Studio Tuy nhiên mái phÅn mÅm l¿i có nhċng °u điÇm và nh°ÿc điÇm khác
nhau, hoÁc cũng có thÇ do sé thích căa mái ng°çi mà chçn phÅn mÅm khác nhau
1.2.2 Thoát khãi
Chçn menu File, chçn Exit;
HoÁc Ãn tß hÿp phím Alt – F4
1.2.3 T¿o mçi, ghi måt ch°¢ng trình C
Muën so¿n thÁo mãt ch°¢ng trình måi ta bÃm biÇu t°ÿng New (hoÁc dùng tß hÿp phím Ctrl+N) đÇ t¿o mãt tÁp tin må, tÁp tin này sÁ có đånh d¿ng là cpp Trong khung so¿n thÁo căa ch°¢ng trình, chã viác gõ nhċng dòng code, nÃu là tć khóa, ch°¢ng trình sÁ tč đãng hiÇn thå giúp các phÅn còn l¿i
a) Quy trình gõ mãt ch°¢ng trình trong C:
T¿i màn hình làm viác ngôn ngċ C, hãy gõ ch°¢ng trình sau và l°u våi tên VD1
sau đó dåch, quan sát kÃt quÁ
Trang 17[7] }
KÃt quÁ: Bài hçc C dau tien._
Ý nghĩa:
[1]: BÃt đÅu bÅng /* và kết thúc bằng */ cho biÃt hàng này là hàng dißn giÁi
(chú thích) Khi dåch và ch¿y ch°¢ng trình, dòng này không đ°ÿc dåch và cũng không thi hành lánh gì cÁ Māc đích căa viác ghi chú này giúp ch°¢ng trình rõ ràng h¢n Sau
này đçc l¿i ch°¢ng trình biÃt ch°¢ng trình làm gì
[2]: Chąa phát biÇu tiÅn xĉ lý #include <stdio.h> Vì trong ch°¢ng trình này ta
sĉ dāng hàm th° vián căa C là printf, do đó cÅn phÁi có khai báo căa hàm th° vián này
đÇ báo cho trình biên dåch C biÃt Nếu không khai báo chương trình sẽ báo lỗi
[3]: Hàng trÃng viÃt ra våi ý đồ làm cho bÁng ch°¢ng trình thoáng, dß đçc
[4]: void main(void) là thành phÅn chính căa mçi ch°¢ng trình C (có thể viết main() hoặc void main() hoặc main(void)) Tuy nhiên, nên viÃt theo d¿ng void
main(void) đÇ ch°¢ng trình rõ ràng h¢n Mçi ch°¢ng trình C đÅu bÃt đÅu thi hành tć hàm main CÁp dÃu ngoÁc () cho biÃt đây là khëi hàm (function) Hàm void main(void)
có tć khóa void đÅu tiên cho biÃt hàm này không trÁ vÅ giá trå, tć khóa void trong
ngoÁc đ¢n cho biÃt hàm này không nhÁn vào đëi së
[5] và [7]: CÁp dÃu ngoÁc móc {} giåi h¿n thân căa hàm Thân hàm bÃt đÅu
bÅng dÃu {và kÃt thúc bÅng dÃu}
[6]: Printf("Bai hoc C dau tien.");, chã thå cho máy in ra chuái ký tč nÅm trong
nháy kép ("") Hàng này đ°ÿc gçi là mãt câu lánh, kÃt thúc mãt câu lánh trong C phÁi
là dÃu chÃm phẩy (;)
Chú ý:
Các tć include, stdio.h, void, main, printf phÁi viÃt bÅng chċ th°çng
Chuái trong nháy kép cÅn in ra "B¿n có thÇ viÃt chċ HOA, th°çng tùy, ý"
KÃt thúc câu lánh phÁi có dÃu chÃm phẩy
KÃt thúc tên hàm không có dÃu chÃm phẩy hoÁc bÃt cą dÃu gì
Ghi chú phÁi đÁt trong cÁp /* & */
Thân hàm phÁi đ°ÿc bao béi cÁp { }
Các câu lánh trong thân hàm phÁi viÃt thāt vào
b) Ghi ch°¢ng trình đang so¿n thÁo vào đĩa:
Sĉ dāng File/Save hoÁc gõ phím F2 Có hai tr°çng hÿp xÁy ra:
NÃu ch°¢ng trình ch°a đ°ÿc ghi lÅn nào thì xuÃt hián mãt hãi tho¿i cho phép xác đånh tên tÁp tin (FileName) Tên tÁp tin phÁi tuân thă quy cách đÁt tên căa DOS và không cÅn có phÅn mé rãng (ch°¢ng trình sÁ tč đãng có phÅn mé rãng là C hoÁc CPP
sÁ nëi thêm trong phÅn Option) Sau đó gõ phím Enter
NÃu ch°¢ng trình đã đ°ÿc ghi mãt lÅn rồi thì sÁ ghi nhċng thay đßi bß sung
lên tÁp tin ch°¢ng trình cũ
c) Thčc hián ch°¢ng trình:
Trang 18ĐÇ thčc hián ch°¢ng trình hãy dùng Ctrl-F9 (giċ phím Ctrl và gõ phím F9) Thčc hián ch°¢ng trình vća so¿n thÁo xong và quan sát trên màn hình đÇ thÃy kÃt quÁ
căa viác thčc thi ch°¢ng trình sau đó gõ phím bÃt kỳ đÇ tré l¿i våi Turbo
d) Mé mãt ch°¢ng trình đã có trên đĩa:
Våi mãt ch°¢ng trình đã có trên đĩa, ta có thÇ mé ra đÇ thčc hián hoÁc sĉa chċa
bß sung ĐÇ mé mãt ch°¢ng trình dùng File/Open hoÁc gõ phím F3 Sau đó gõ tên tÁp
tin vào hãp File Name hoÁc lča chçn tÁp tin trong danh sách các tÁp tin rồi gõ Enter
Mé ch°¢ng trình trên (VD1) và sĉa l¿i dòng thą 6 bÅng câu lánh printf("Bai hoc C dau tien.\n");, sau đó l°u l¿i, dåch và ch¿y l¿i ch°¢ng trình, quan sát kÃt quÁ
Kết quả: Bài hçc C dau tien_
Dòng vća sĉa có thêm \n, \n là ký hiáu xuëng dòng sĉ dāng trong lánh printf
Sau đây là mãt së ký hiáu khác:
TT Ký hiáu Ý nghĩa
Nhóm ký tự điều khiển
1 \n NhÁy xuëng dòng kà tiÃp canh vÅ cãt đÅu tiên
2 \t Canh cãt tab ngang
3 \r NhÁy vÅ đÅu hàng, không xuëng hàng
4 \a TiÃng kêu bip
Nhóm ký tự đặc biệt
1 \\ In ra dÃu \
2 \= In ra dÃu nháy đôi (=)
3 \9 In ra dÃu nháy đôi (9)
Ví dụ: NhÁp đo¿n ch°¢ng trình trên vào máy Dåch, ch¿y và quan sát kÃt quÁ
printf("\t\tBai hoc C \rdau tien.\n");
getch();
}
KÃt quÁ: dau tien Bai hoc C_
Ý nghĩa:
Trang 19[3]: Chąa phát biÇu tiÅn xĉ lý #include <conio.h> Vì trong ch°¢ng trình này ta
sĉ dāng hàm th° vián căa C là getch, do đó cÅn phÁi có khai báo căa hàm th° vián này
đÇ báo cho trình biên dåch C biÃt NÃu không khai báo ch°¢ng trình sÁ báo lái
[8]: getch() đÇ chç nhÁn 1 ký tč bÃt kỳ tć bàn phím, nh°ng không in ra màn hình Vì thà ta sĉ dāng hàm này đÇ khi ch¿y ch°¢ng trình xong sÁ dćng l¿i é màn hình
kÃt quÁ, sau đó ta Ãn phím bÃt kỳ sÁ quay l¿i màn hình so¿n thÁo
1.3 Sÿ dÿng trợ giúp
Các phím xem thông tin trÿ giúp:
F1: Xem toàn bã thông tin trong phÅn trÿ giúp
Ctrl-F1: Trÿ giúp theo ngċ cÁnh (tąc là khi con tré đang é trong mãt tć nào
đó, chẳng h¿n int mà b¿n gõ phím Ctrl-F1 thì b¿n sÁ có đ°ÿc các thông tin vÅ kiÇu dċ
liáu int)
Các phím di chuyÇn con tré trong vùng so¿n thÁo ch°¢ng trình:
Bảng 1.2: Phím tắt và ý nghĩa của các phím di chuyển con trỏ trong ngôn ngữ C
2 Mũi tên đi lên Đ°a con tré lên hàng tr°åc Ctrl-E
3 Mũi tên đi xuëng Đ°a con tré xuëng hàng sau Ctrl-X
4 Mũi tên sang trái Đ°a con tré sang trái mãt ký tč Ctrl-S
5 Mũi tên sang phÁi Đ°a con tré sang phÁi mãt ký tč Ctrl-D
8 PgUp Đ°a con tré lên trang tr°åc Ctrl-R
9 PgDn Đ°a con tré xuëng trang sau Ctrl-C
Các phím xoá ký tč/ dòng:
Bảng 1.3: Phím tắt và ý nghĩa của các phím xóa ký tự hoặc dòng trong ngôn ngữ C
1 Delete Xoá ký tč t¿i ví trí con tré Ctrl-G
2 BackSpace Di chuyÇn sang trái đồng thçi
xoá ký tč đąng tr°åc con tré Ctrl-H
4 Xóa tć vå trí con tré đÃn cuëi
Các phím chèn ký tč/ dòng:
Trang 20Bảng 1.4: Phím tắt và ý nghĩa của các phím chèn ký tự hoặc dòng trong ngôn ngữ C
1 Insert Thay đßi viÃt xen hay viÃt chồng
2 Ctrl-N Xen mãt dòng trëng vào tr°åc vå trí con tré
Sĉ dāng khëi:
Khëi là mãt đo¿n văn bÁn ch°¢ng trình hình chċ nhÁt đ°ÿc xác đånh béi đÅu khëi là góc trên bên trái và cuëi khëi là góc d°åi bên phÁi căa hình chċ nhÁt Khi mãt khëi đã đ°ÿc xác đånh (trên màn hình khëi có màu sÃc khác chá bình th°çng) thì ta có thÇ chép khëi, di chuyÇn khëi, xoá khëi Sĉ dāng khëi cho phép chúng ta so¿n thÁo
ch°¢ng trình mãt cách nhanh chóng sau đây là các thao tác trên khëi:
Bảng 1.5: Phím tắt và ý nghĩa của các phím sử dụng khối trong ngôn ngữ C
1 Ctrl-K-B Đánh dÃu đÅu khëi
2 Ctrl-K-K Đánh dÃu cuëi khëi
3 Ctrl-K-C Chép khëi vào sau vå trí con tré
4 Ctrl-K-V ChuyÇn khëi tåi sau vå trí con tré
6 Ctrl-K-W Ghi khëi vào đĩa nh° mãt tÁp tin
7 Ctrl-K-R Đçc khëi (tÁp tin) tć đĩa vào sau vå trí con tré
2 F2 L°u ch°¢ng trình đang so¿n vào đĩa
3 F3 T¿o tÁp tin måi
1 Tab Di chuyÇn con tré mãt khoÁng đồng thçi đẩy
5 Hián hãp tho¿i tìm kiÃm và thay thà Ctrl-Q-A
Trang 216 Tìm kiÃm tiÃp tāc Ctrl-L
1.4 Bài t¿p
Xác đånh đÁc điÇm Input, Process, Output căa các ch°¢ng trình sau, tć đó vÁ
l°u đồ cho các ch°¢ng trình đã xác đånh đÁc điÇm trên:
1 Đßi tć tiÅn VND sang tiÅn USD
2 Tính điÇm trung bình căa hçc sinh gồm các môn Toán, Lý, Hóa
Trang 22CH¯¡NG II: CÁC THÀNH PHÄN C¡ BÀN CĀA NGÔN NGĀ L¾P TRÌNH C
Gi çi thißu
M ÿc tiêu
- Trình bày đ°ÿc các khái niám: tÁp kí tč, tć khóa, kiÇu dċ liáu, biÃn, hÅng, biÇu
thąc, câu lánh, khëi lánh trong ngôn ngċ C;
- Trình bày đ°ÿc cÃu trúc, ph°¢ng thąc thčc thi căa mãt ch°¢ng trình C;
- ViÃt đ°ÿc mãt së đo¿n ch°¢ng trình cā thÇ đÇ thčc hián các yêu cÅu đ¢n giÁn;
- Cài đÁt mãt së ch°¢ng trình cā thÇ đÇ thčc hián các yêu cÅu đ¢n giÁn;
- Nghiêm túc, tã mã trong viác tiÃp nhÁn các kiÃn thąc và áp dāng vào thčc hành
- Rèn luyán tính cẩn thÁn, tã mã, chính xác, sáng t¿o, linh ho¿t trong công viác
Nåi dung
2.1 T ừ khóa và kí hißu
2.1.1 T ừ khóa
Các tć khoá trong C:
Tć khóa là các tć dành riêng (reserved words) căa C mà ng°çi lÁp trình có thÇ
sĉ dāng nó trong ch°¢ng trình tùy theo ý nghĩa căa tćng tć Ta không đ°ÿc dùng tć khóa đÇ đÁt cho các tên căa riêng mình Các tć khóa căa Turbo C 3.0 bao gồm:
Bảng 2.1: Mô tả các từ khóa trong ngôn ngữ C
const continue _cs default delete extern _export virtual far _fastcall float for friend goto huge void
if inline int interrupt _loadds long Near volatile new operator pascal private protected public Register void return _saveregs _seg short signed sizeof _ss while static struct switch template this typedef Union
CÁp dÃu ghi chú thích:
Khi viÃt ch°¢ng trình đôi lúc ta cÅn phÁi có vài lçi ghi chú vÅ 1 đo¿n ch°¢ng trình nào đó đÇ dß nhå và dß điÅu chãnh sau này; nhÃt là phÅn nãi dung ghi chú phÁi không thuãc vÅ ch°¢ng trình (khi biên dåch phÅn này bå bé qua) Trong ngôn ngċ lÁp
trình C, nãi dung chú thích phÁi đ°ÿc viÃt trong cÁp dÃu /* và */
Ví dụ 1:
#include <stdio.h>
#include<conio.h>
int main ()
Trang 23{
char ten[50]; /*khai bao bien ten kieu char 50 ky tu*/
/*Xuat chuoi ra man hinh*/
printf(<Xin cho biet ten cua ban !=);
scanf(<%s=,ten); /*Doc vao 1 chuoi la ten cua ban*/
printf(<Xin chao ban %s\n =,ten);
printf(<Chao mung ban den voi Ngon ngu lap trinh C=);
/*Dung chuong trinh, cho go phim*/
getch();
return 0;
}
2.1.2 T ¿p ký tă dùng trong ngôn ngā C
Bã chċ viÃt trong ngôn ngċ C bao gồm nhċng ký tč, ký hiáu sau: (phân biát
chċ in hoa và in th°çng):
26 chċ cái latinh lån A,B,C Z
26 chċ cái latinh nhé a,b,c z
KiÇu së nguyên 1 byte (8 bits, gồm có 2 kiÇu):
Bảng 2.2: Mô tả kiểu số nguyên một byte trong ngôn ngữ C
TT KiÇu dċ liáu MiÅn giá trå (Domain)
Trang 241 unsigned char Tć 0 đÃn 255 (t°¢ng đ°¢ng 256 ký tč trong bÁng mã
ASCII)
báo mãt biÃn là kiÇu ký tč thì ta khai báo biÃn kiÇu unsigned char Mái së trong miÅn
giá trå căa kiÇu unsigned char t°¢ng ąng våi mãt ký tč trong bÁng mã ASCII
đÇ làm bit dÃu Tć đó, nÃu gán giá trå lån h¢n 127 cho biÃn kiÇu char thì giá trå căa
biÃn này có thÇ là së âm (?)
KiÇu së nguyên 2 bytes (16 bits, gồm có 4 kiÇu):
Bảng 2.3: Mô tả kiểu số nguyên hai byte trong ngôn ngữ C
TT KiÇu dċ liáu MiÅn giá trå (Domain)
1 enum Tć -32,768 đÃn 32,767
2 unsigned int Tć 0 đÃn 65,535
3 short int Tć -32,768 đÃn 32,767
4 int Tć -32,768 đÃn 32,767
bit bên trái nhÃt đÇ làm bit dÃu Tć đó, nÃu gán giá trå lån h¢n 32.767 cho biÃn có 1
trong 3 kiÇu trên thì giá trå căa biÃn này có thÇ là së âm
65535
KiÇu së nguyên 4 byte (32 bits, gồm có 2 kiÇu):
Bảng 2.4: Mô tả kiểu số nguyên bốn byte trong ngôn ngữ C
TT KiÇu dċ liáu MiÅn giá trå (Domain)
1 unsigned long Tć 0 đÃn 4,294,967,295
2 long Tć -2,147,483,648 đÃn 2,147,483,647
bên trái nhÃt đÇ làm bit dÃu Tć đó, nÃu gán giá trå lån h¢n 2.147.483.647 cho biÃn có
kiÇu long thì giá trå căa biÃn này có thÇ là së âm
4294967295
2.2.2 Ki Ãu så thăc (KiÃu dÃu phẩy đång)
Dùng đÇ l°u các së thčc hay các së có dÃu chÃm thÁp phân gồm có 3 kiÇu sau:
Bảng 2.5: Mô tả kiểu số thực trong ngôn ngữ C
TT KiÇu dċ liáu Kích th°åc (Size) MiÅn giá trå (Domain)
1 float 4 bytes Tć 3.4 * 10-38 đÃn 3.4 * 1038
2 Double 8 bytes Tć 1.7 * 10-308 đÃn 1.7 *
10308
Trang 253 long double 10 bytes Tć 3.4 *10-4932 đÃn 1.1
*104932Mái kiÇu së thčc é trên đÅu có miÅn giá trå và đã chính xác (së së l¿) khác nhau Tùy vào nhu cÅu sĉ dāng mà ta có thÇ khai báo biÃn thuãc 1 trong 3 kiÇu trên Ngoài ra ta còn có kiÇu dċ liáu void, kiÇu này mang ý nghĩa là kiÇu ráng không chąa
Có hai kiÇu dċ liáu char: kiÇu signed char và unsigned char
Bảng 2.7: Mô tả kiểu ký tự signed char và unsigned char
TT KiÇu Ph¿m vi biÇu dißn Së ký tč Kích th°åc
1 char (signed char
Ví dụ 3: Minh ho¿ sč khác nhau giċa hai kiÇu dċ liáu trên
Nh°ng cÁ ch1 và ch2 đÅu biÇu dißn cùng mãt ký tč có mã 200
Phân loại ký tự: Có thÇ chia 256 ký tč làm ba nhóm
Nhóm các ký tč điÅu khiÇn có mã tć 0 đÃn 31 Chẳng h¿n ký tč mã 13 dùng
đÇ chuyÇn con tré vÅ đÅu dòng, ký tč 10 chuyÇn con tré xuëng dòng d°åi (trên cùng
mãt cãt) Các ký tč nhóm này nói chung không hiÇn thå ra màn hình
Trang 26 Nhóm các ký tč văn bÁn có mã tć 32 đÃn 126 Các ký tč này có thÇ đ°ÿc đ°a
ra màn hình hoÁc máy in
Nhóm các ký tč đồ ho¿ có mã së tć 127 đÃn 255 Các ký tč này có thÇ đ°a ra
màn hình nh°ng không in ra đ°ÿc (bÅng các lánh DOS)
2.3 Bi ¿n, hằng, biÃu thức
2.3.1 Phân lo ¿i, khai báo và sÿ dÿng bi¿n
Tên hay còn gçi là danh biÇu (identifier) đ°ÿc dùng đÇ đÁt cho ch°¢ng trình, hÅng, kiÇu, biÃn, ch°¢ng trình con Tên có hai lo¿i là tên chuẩn và tên do ng°çi lÁp
trình đÁt
Tên chuẩn là tên do C đÁt s¿n nh° tên kiÇu: int, char, float,&; tên hàm: sin,
cos
Tên do ng°çi lÁp trình tč đÁt đÇ dùng trong ch°¢ng trình căa mình Sĉ dāng
bã chċ cái, chċ së và dÃu g¿ch d°åi (_) đÇ đÁt tên, nh°ng phÁi tuân thă quy tÃc:
BÃt đÅu bÅng mãt chċ cái hoÁc dÃu g¿ch d°åi
Không có khoÁng trëng é giċa tên
Không đ°ÿc trùng våi tć khóa
Đã dài tëi đa căa tên là không giåi h¿n, tuy nhiên chã có 31 ký tč đÅu tiên là
có ý nghĩa
Không cÃm viác đÁt tên trùng våi tên chuẩn nh°ng khi đó ý nghĩa căa tên
chuẩn không còn giá trå nċa
num-odd (sĉ dāng dÃu g¿ch ngang)
int (đÁt tên trùng våi tć khóa)
del ta (có khoÁng trÃng)
f(x) (có dÃu ngoÁc tròn)
Lưu ý: Trong C, tên phân biát chċ hoa, chċ th°çng (Ví dā: number khác
Number, case khác Case: case là tć khóa, do đó đÁt tên là Case v¿n đúng)
Trang 27Cách 1: Sĉ dāng cách viÃt thông th°çng mà chúng ta đã sĉ dāng trong các môn
Toán, Lý,& ĐiÅu cÅn l°u ý là sĉ dāng dÃu thÁp phân là dÃu chÃm (.);
Hằng số nguyên 2 bytes (int) hệ thập phân: Là kiÇu së mà chúng ta sĉ dāng
thông th°çng, há thÁp phân sĉ dāng các ký së tć 0 đÃn 9 đÇ biÇu dißn mãt giá trå
nguyên
Ví dụ 7: 123 (mãt trăm hai m°¢i ba), -242 (trć hai trăm bën m°¢i hai)
Hằng số nguyên 2 byte (int) hệ bát phân: Là kiÇu së nguyên sĉ dāng 8 ký së tć
0 đÃn 7 đÇ biÇu dißn mãt së nguyên
Chúng ta có thÇ thčc hián các phép toán së hçc trên 2 ký tč (thčc chÃt là thčc
hián phép toán trên giá trå ASCII căa chúng)
1 Mãt chuái không có nãi dung <= đ°ÿc gçi là chuái ráng
2 Khi l°u trċ trong bã nhå, mãt chuái đ°ÿc kÃt thúc bÅng ký tč NULL (8\09:
mã Ascii là 0)
3 ĐÇ biÇu dißn ký tč đÁc biát bên trong chuái ta phÁi thêm dÃu \ phía tr°åc
Trang 28Ví dụ 11: <I9m a student= phÁi viÃt <I\9m a student=
<Day la ky tu <dac biet== phÁi viÃt <Day la ky tu \=dac biet\=<
2.3.3 Bi ¿n và BiÃu thức
a) BiÃn:
BiÃn là mãt đ¿i l°ÿng đ°ÿc ng°çi lÁp trình đånh nghĩa và đ°ÿc đÁt tên thông qua viác khai báo biÃn BiÃn dùng đÇ chąa dċ liáu trong quá trình thčc hián ch°¢ng trình và giá trå căa biÃn có thÇ bå thay đßi trong quá trình này Cách đÁt tên biÃn giëng
nh° cách đÁt tên đã nói trong phÅn trên
Mái biÃn thuãc vÅ mãt kiÇu dċ liáu xác đånh và có giá trå thuãc kiÇu đó
Cú pháp khai báo biÃn:
Ví dụ 12:
int a, b, c; /*Ba biÃn a, b,c có kiÇu int*/
long int chu_vi; /*BiÃn chu_vi có kiÇu long*/
float nua_chu_vi; /*BiÃn nua_chu_vi có kiÇu float*/
double dien_tich; /*BiÃn dien_tich có kiÇu double*/
Lưu ý: ĐÇ kÃt thúc 1 lánh phÁi có dÃu chÃm phẩy (;) é cuëi lánh
Vå trí khai báo biÃn trong C:
Trong ngôn ngċ lÁp trình C, ta phÁi khai báo biÃn đúng vå trí NÃu khai báo (đÁt các biÃn) không đúng vå trí sÁ d¿n đÃn nhċng sai sót ngoài ý muën mà ng°çi lÁp trình
không l°çng tr°åc (hiáu ąng lÅ) Chúng ta có 2 cách đÁt vå trí căa biÃn nh° sau:
Khai báo biến ngoài: Các biÃn này đ°ÿc đÁt bên ngoài tÃt cÁ các hàm và nó có
tác dāng hay Ánh h°éng đÃn toàn bã ch°¢ng trình (còn gçi là biÃn toàn cāc)
Ví dụ 13:
int i; /*Bien ben ngoai */
float pi; /*Bien ben ngoai*/
int main()
{ & }
Khai báo biến trong: Các biÃn đ°ÿc đÁt é bên trong hàm, ch°¢ng trình chính
hay mãt khëi lánh Các biÃn này chã có tác dāng hay Ánh h°éng đÃn hàm, ch°¢ng trình hay khëi lánh chąa nó Khi khai báo biÃn, phÁi đÁt các biÃn này é đÅu căa khëi lánh,
Trang 29bienngoai=3;
printf("\n Gia tri cua i la %d",i);/*%d là số nguyên*/
printf("\n Gia tri cua j la %d",j);
printf("\n Gia tri cua bienngoai la %d",bienngoai);
printf("\n Gia tri cua i la %d",i);
printf("\n Gia tri cua j la %d",j);
if(j>i)
{
int hieu=j-i; /*Bien ben trong */
printf("\n Hieu so cua j tru i la %d",hieu);
}
else
{
int hieu=i-j ; /*Bien ben trong*/
printf("\n Gia tri cua i tru j la %d",hieu);
Mái toán h¿ng có thÇ là mãt hÅng, mãt biÃn hoÁc mãt biÇu thąc khác
Trong tr°çng hÿp, biÇu thąc có nhiÅu toán tĉ, ta dùng cÁp dÃu ngoÁc đ¢n () đÇ
chã đånh toán tĉ nào đ°ÿc thčc hián tr°åc
Ví dụ 17:
BiÇu thąc nghiám căa ph°¢ng trình bÁc hai: (-b + sqrt(Delta))/(2*a)
Trong đó 2 là hÅng; a, b, Delta là biÃn
Các toán tĉ së hçc:
Trang 30Trong ngôn ngċ C, các toán tĉ +, -, *, / làm viác t°¢ng tč nh° khi chúng làm viác trong các ngôn ngċ khác Ta có thÇ áp dāng chúng cho đa së kiÇu dċ liáu có s¿n đ°ÿc cho phép béi C Khi ta áp dāng phép / cho mãt së nguyên hay mãt ký tč, bÃt kỳ
phÅn d° nào cũng bå cÃt bé Chẳng h¿n, 5/2 bÅng 2 trong phép chia nguyên
Bảng 2.8: Mô tả toán tử trong ngôn ngữ C
Tăng và giảm: (++ & )
Toán tĉ ++ thêm 1 vào toán h¿ng căa nó và – trć båt 1 Nói cách khác:
Thứ tự ưu tiên của các toán tử số học: ++ sau đó là * / % rồi måi đÃn + -
Các toán tĉ quan há và các toán tĉ Logic:
Ý t°éng chính căa toán tĉ quan há và toán tĉ Logic là đúng hoÁc sai Trong C mçi giá trå khác 0 đ°ÿc gçi là đúng, còn sai là 0 Các biÇu thąc sĉ dāng các toán tĉ
quan há và Logic trÁ vÅ 0 nÃu sai và trÁ vÅ 1 nÃu đúng
Bảng 2.9: Mô tả toán tử quan hệ và toán tử logic trong ngôn ngữ C
Các toán tử quan hệ
Trang 31Các toán tĉ quan há và Logic đÅu có đã °u tiên thÃp h¢n các toán tĉ së hçc Do
đó mãt biÇu thąc nh°: 10 > 1+ 12 sÁ đ°ÿc xem là 10 > (1 + 12) và kÃt quÁ là sai (0)
Ta có thÇ kÃt hÿp vài toán tĉ l¿i våi nhau thành biÇu thąc nh° sau:
10>5&&!(10<9)||3<=4 KÃt quÁ là đúng 5>3 and 8a9= 8b9 and 8/2=4 kÃt quÁ là sai
Thứ tự ưu tiên của các toán tử quan hệ là Logic
Toán tĉ con tré & và *:
Mãt con tré là đåa chã trong bã nhå căa mãt biÃn Mãt biÃn con tré là mãt biÃn
đ°ÿc khai báo riêng đÇ chąa mãt con tré đÃn mãt đëi t°ÿng căa kiÇu đã chã ra nó
Ta sÁ tìm hiÇu kỹ h¢n vÅ con tré trong ch°¢ng vÅ con tré è đây, chúng ta sÁ đÅ
cÁp ngÃn gçn đÃn hai toán tĉ đ°ÿc sĉ dāng đÇ thao tác våi các con tré
Toán tĉ thą nhÃt là &, là mãt toán tĉ quy °åc trÁ vÅ đåa chã bã nhå căa
há së căa nó
Ví dụ 19: m = &temp
ĐÁt vào biÃn m đåa chã bã nhå căa biÃn temp
Chẳng h¿n, biÃn temp é vå trí bã nhå 2000, giÁ sĉ temp có giá trå là 100
Sau câu lánh trên m sÁ nhÁn giá trå 2000
Trang 32Toán tĉ thą hai là *, là mãt bß sung cho &; đây là mãt toán tĉ quy °åc
trÁ vÅ giá trå căa biÃn đ°ÿc cÃp phát t¿i đåa chã theo sau đó
Trong C, viác dåch (translation) mãt tÁp tin nguồn đ°ÿc tiÃn hành trên hai b°åc
hoàn toàn đãc lÁp våi nhau:
TiÅn xĉ lý
Biên dåch
Hai b°åc này trong phÅn lån thçi gian đ°ÿc nëi tiÃp våi nhau mãt cách tč đãng theo cách thąc mà ta có Ãn t°ÿng rÅng nó đã đ°ÿc thčc hián nh° là mãt xĉ lý duy nhÃt Nói chung, ta th°çng nói đÃn viác tồn t¿i căa mãt bã tiÅn xĉ lý (preprocessor?) nhÅm chã rõ ch°¢ng trình thčc hián viác xĉ lý tr°åc Ng°ÿc l¿i, các thuÁt ngċ trình biên dåch hay sč biên dåch v¿n còn nhÁp nhÅng béi vì nó chã ra khi thì toàn bã hai giai đo¿n, khi
thì l¿i là giai đo¿n thą hai
B°åc tiÅn xĉ lý t°¢ng ąng våi viác cÁp nhÁt trong văn bÁn căa ch°¢ng trình nguồn, chă yÃu dča trên viác dißn giÁi các mã lánh rÃt đÁc biát gçi là các chã thå d¿n h°ång căa bã tiÅn xĉ lý (destination directive of preprocessor); các chã thå này đ°ÿc
nhÁn biÃt béi chúng bÃt đÅu bÅng ký hiáu (symbol) # Hai chã thå quan trçng nhÃt là:
Chã thå sč gãp vào căa các tÁp tin nguồn khác: #include
Chã thå viác đånh nghĩa các macros hoÁc ký hiáu: #define
Chã thå đÅu tiên đ°ÿc sĉ dāng tr°åc hÃt là nhÅm gãp vào nãi dung căa các tÁp tin cÅn có (header file), không thÇ thiÃu trong viác sĉ dāng mãt cách tët nhÃt các hàm
căa th° vián chuẩn, phß biÃn nhÃt là: #include <stdio.h>
Chã thå thą hai rÃt hay đ°ÿc sĉ dāng trong các tÁp tin th° vián (header file) đã đ°ÿc đånh nghĩa tr°åc đó và th°çng đ°ÿc khai thác béi các lÁp trình viên trong viác
đånh nghĩa các ký hiáu nh° là: #define NB_COUPS_MAX 100 và #define SIZE 25
2.4.2 C Ãu trúc måt ch°¢ng trình C
Mãt ch°¢ng trình C bao gồm các phÅn nh°: Các chã thå tiÅn xĉ lý, khai báo biÃn
ngoài, các hàm tč t¿o, ch°¢ng trình chính (hàm main) CÃu trúc có thÇ nh° sau:
1 Đånh nghĩa kiÇu dċ liáu (phÅn này không bÃt buãc): dùng đÇ đÁt tên l¿i cho
mãt kiÇu dċ liáu nào đó đÇ gÿi nhå hay đÁt 1 kiÇu dċ liáu cho riêng mình dča trên các
kiÇu dċ liáu đã có.Cú pháp: typedef <Tên kiÇu cũ> <Tên kiÇu måi> (Ví dā: typedef
int SoNguyen; // KiÇu SoNguyen là kiÇu int)
2 Khai báo các prototype (tên hàm, các tham së, kiÇu kÃt quÁ trÁ vÅ,& căa các
hàm sÁ cài đÁt trong phÅn sau, phÅn này không bÃt buãc): phÅn này chã là các khai báo
đÅu hàm, không phÁi là phÅn đånh nghĩa hàm
3 Khai báo các biÃn ngoài (các biÃn toàn cāc) phÅn này không bÃt buãc: phÅn này khai báo các biÃn toàn cāc đ°ÿc sĉ dāng trong cÁ ch°¢ng trình
Trang 334 Ch°¢ng trình chính phÅn này bÃt buãc phÁi có
{
Các khai báo cāc bã trong hàm main: Các khai báo này chã tồn t¿i trong hàm
mà thôi, có thÇ là khai báo biÃn hay khai báo kiÇu Các câu lánh dùng đÇ đånh nghĩa
Mãt ch°¢ng trình C bÃt đÅu thčc thi tć hàm main (thông th°çng là tć câu lánh
đÅu tiên đÃn câu lánh cuëi cùng)
2.4.3 Các th° vißn thông dÿng
Đây là các tÁp tin chąa các hàm thông dāng khi lÁp trinh C, muën sĉ dāng các hàm trong các tÁp tin header này thì phÁi khai báo #include <Tên tÁp tin> é phÅn đÅu
căa ch°¢ng trình, gồm các tć khóa sau:
1 stdio.h: TÁp tin đånh nghĩa các hàm vào/ra chuẩn (standard input/output)
Gồm các hàm in dċ liáu (printf()), nhÁp giá trå cho biÃn (scanf()), nhÁn ký tč tć bàn phím (getc()), in ký tč ra màn hình (putc()), nhÁn mãt dãy ký tč tć bàm phím (gets()),
in chuái ký tč ra màn hình (puts()), xóa vùng đám bàn phím (fflush()), fopen(),
fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw()&
2 conio.h: TÁp tin đånh nghĩa các hàm vào ra trong chà đã DOS (DOS
console) Gồm các hàm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(),
clreol(),&
3 math.h: TÁp tin đånh nghĩa các hàm tính toán gồm các hàm abs(), sqrt(), log() log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),&
4 alloc.h: TÁp tin đånh nghĩa các hàm liên quan đÃn viác quÁn lý bã nhå Gồm
các hàm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), &
5 io.h: TÁp tin đånh nghĩa các hàm vào ra cÃp thÃp Gồm các hàm open(),
_open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(),
Trang 34 Lánh có cÃu trúc là lánh trong đó chąa các lánh khác Lánh có cÃu trúc bao gồm: cÃu trúc điÅu kián rÁ nhánh, cÃu trúc điÅu kián lča chçn, cÃu trúc lÁp và cÃu trúc lánh hÿp thành Lánh hÿp thành (khëi lánh) là mãt nhóm bao gồm nhiÅu khai báo biÃn
và các lánh đ°ÿc gom vào trong cÁp dÃu {}
Trang 35y = 'd'; /* y có kiÇu int, còn 8d9 có kiÇu char*/
r = 'e'; /* r có kiÇu float, 8e9 có kiÇu char*/
ch = 65.7; /* ch có kiÇu char, còn 65.7 có kiÇu float*/
return 0;
}
Trong nhiÅu tr°çng hÿp đÇ t¿o ra sč t°¢ng thích vÅ kiÇu, ta phÁi sĉ dāng đÃn cách thąc chuyÇn đßi kiÇu mãt cách t°çng minh
Cú pháp căa phép toán này nh° sau:
(Tên kiÇu) <BiÇu thąc>
ChuyÇn đßi kiÇu căa <BiÇu thąc> thành kiÇu måi <Tên kiÇu> Chẳng h¿n nh°:
float f;
f = (float) 10 / 4; /* f lúc này là 2.5*/
Chú ý:
- Khi mãt biÇu thąc đ°ÿc gán cho mãt biÃn thì giá trå căa nó sÁ thay thà giá trå
cũ mà biÃn đã l°u giċ tr°åc đó
- Trong câu lánh gán, dÃu = là mãt toán tĉ; do đó nó có thÇ đ°ÿc sĉ dāng là mãt thành phÅn căa biÇu thąc Trong tr°çng hÿp này giá trå căa biÇu thąc gán chính là giá trå căa biÃn
Ví dụ 23:
int x, y;
y = x = 3; /* y lúc này cùng bÅng 3*/
Ta có thÇ gán trå cho biÃn lúc biÃn đ°ÿc khai báo theo cách thąc sau:
<Tên kiểu> <Tên biến> = <Biểu thức>;
Ví dụ 24: int x = 10, y=x;
Lánh gãp (khëi lánh):
Mãt câu lánh trong C đ°ÿc thiÃt lÁp tć các tć khoá và các biÇu thąc & và luôn luôn đ°ÿc kÃt thúc bÅng dÃu chÃm phẩy Các ví dā vào/ra hoÁc các phép gán t¿o thành nhċng câu lánh đ¢n giÁn nh°:
x = 3 + x ;
y = (x = sqrt(x)) + 1 ;
printf(<x = %4d, y=%4.2f=, x, y );
Trang 36Các câu lánh đ°ÿc phép viÃt trên cùng mãt hoÁc nhiÅu dòng Mãt së câu lánh đ°ÿc gçi là lánh có cÃu trúc, tąc bên trong nó l¿i chąa dãy lánh khác Dãy lánh này phÁi đ°ÿc bao giċa cÁp dÃu ngoÁc {} và đ°ÿc gçi là khëi lánh Ví dā tÃt cÁ các lánh trong mãt hàm (nh° hàm main()) luôn luôn là mãt khëi lánh Mãt đÁc điÇm căa khëi lánh là các biÃn đ°ÿc khai báo trong khëi lánh nào thì chã có tác dāng trong khëi lánh
Khai báo ở đầu khối lệnh:
Các khai báo biÃn và mÁng chẳng nhċng có thÇ đÁt é đÅu căa mãt hàm mà còn
có thÇ viÃt é đÅu khëi lánh:
Sự lồng nhau của các khối lệnh và phạm vi hoạt động của các biến và mảng:
Bên trong mãt khëi lánh l¿i có thÇ viÃt lồng khëi lánh khác Sč lồng nhau theo cách nh° vÁy là không h¿n chà Khi máy bÃt đÅu làm viác våi mãt khëi lánh thì các biÃn và mÁng khai báo bên trong nó måi đ°ÿc hình thành và đƣÿc hình thành và đ°ÿc cÃp phát bã nhå Các biÃn này chã tồn t¿i trong thçi gian máy làm viác bên trong khëi lánh và chúng lÁp tąc biÃn mÃt ngay sau khi máy ra khéi khëi lánh VÁy: Giá trå căa mãt biÃn hay mãt mÁng khai báo bên trong mãt khëi lánh không thÇ đ°a ra sĉ dāng é
bÃt kỳ chá nào bên ngoài khëi lánh đó
è bÃt kỳ chá nào bên ngoài mãt khëi lánh ta không thÇ can thiáp đÃn các biÃn
và các mÁng đ°ÿc khai báo bên trong khëi lánh NÃu bên trong mãt khëi ta dùng mãt biÃn hay mãt mÁng có tên là a thì điÅu này không làm thay đßi giá trå căa mãt biÃn khác cũng có tên là a (nÃu có) đ°ÿc dùng é đâu đó bên ngoài khëi lánh này NÃu có mãt biÃn đã đ°ÿc khai báo é ngoài mãt khëi lánh và không trùng tên våi các biÃn khai báo bên trong khëi lánh này thì biÃn đó cũng có thÇ sĉ dāng cÁ bên trong cũng nh° bên
ngoài khëi lánh
Ví dụ 26: Xét đo¿n ch°¢ng trình sau :
{
Trang 37 printf: tên hàm, phÁi viÃt bÅng chċ th°çng
đëi māc 1,&: là các māc dċ kián cÅn in ra màn hình Các đëi māc này có thÇ
là biÃn, hÅng hoÁc biÇu thąc phÁi đ°ÿc đånh trå tr°åc khi in ra
chuái đånh d¿ng: đ°ÿc đÁt trong cÁp nháy kép (<&=), gồm 3 lo¿i:
Đëi våi chuái kí tč ghi nh° thà nào in ra giëng nh° vÁy
Đëi våi nhċng kí tč chuyÇn đßi d¿ng thąc cho phép kÃt xuÃt giá trå căa các
đëi māc ra màn hình t¿m gçi là mã đånh d¿ng
Cá ký tč điÅu khiÇn và ký tč đÁc biát
Bảng 2.11: Mô tả ký tự chuyển đổi dạng thức và điều khiển:
7 %x Së nguyên thÁp phân không dÃu
8 %u Së nguyên hex không dÃu
9 %o Së nguyên bát phân không dÃu
Trang 3810 l TiÅn të dùng kèm våi %d, %u, %x, %o đÇ chã
1 <Ma dinh dang= và
<in ra dau= chuái ký tč
Trang 39 chuỗi định dạng: đ°ÿc đÁt trong cÁp nháy kép (<&=) là hình Ánh d¿ng dċ liáu
nhÁp vào
sÁ tiÃp nhÁn giá trå nhÁp vào
Ví dụ 30: scanf("%d", &i); // %d: mã đånh d¿ng; &i: đëi māc 1
è đây, nhÁp vào 12abc, biÃn i chã nhÁn giá trå 12 NhÁp 3.4 chã nhÁn giá trå 3
Ví dụ 31: scanf("%d%d", &a, &b);
NhÁp vào 2 së a, b phÁi cách nhau bÅng khoÁng trÃng hoÁc enter
Ví dụ 32: scanf("%d/%d/%d", &ngay, &thang, &nam);
NhÁp vào ngày, tháng, năm theo d¿ng ngay/thang/nam (20/12/2002)
Ví dụ 33: scanf("%d%*c%d%*c%d", &ngay, &thang, &nam);
NhÁp vào ngày, tháng, năm våi dÃu phân cách /, -,&; ngo¿i trć së
Ví dụ 34: scanf("%2d%2d%4d", &ngay, &thang, &nam);
NhÁp vào ngày, tháng, năm theo d¿ng dd/mm/yyyy
2.6 Th ăc thi ch°¢ng trình
Dåch ch°¢ng trình:
Sau khi đã so¿n thÁo xong ch°¢ng trình nguồn, b°åc tiÃp theo th°çng là dåch (Ãn tß hÿp phím Alt-F9) đÇ tìm và sĉa các lái gçi là lái cú pháp Trong khi dåch C sÁ đÁt con tré vào n¢i gây lái (viÃt sai cú pháp) trong văn bÁn Sau khi sĉa xong mãt lái ng°çi lÁp trình có thÇ dùng Alt-F8 đÇ chuyÇn con tré đÃn lái tiÃp theo hoÁc dåch l¿i
ĐÇ chuyÇn con tré vÅ ng°ÿc l¿i lái tr°åc đó có thÇ dùng Alt-F7 Quá trình sĉa lái −
dåch đ°ÿc lÁp l¿i cho đÃn khi văn bÁn đã đ°ÿc sĉa hÃt lái cú pháp
ĐÇ dåch ch°¢ng trình ta chçn menu\Compile\Compile hoÁc\Compile\Make hoÁc nhanh chóng h¢n bÅng cách Ãn tß hÿp phím Alt-F6
Ch¿y ch°¢ng trình:
Ân Ctrl-F9 đÇ ch¿y ch°¢ng trình, nÃu ch°¢ng trình ch°a dåch sang mã máy, máy sÁ tč đãng dåch l¿i tr°åc khi ch¿y KÃt quÁ căa ch°¢ng trình sÁ hián ra trong mãt cĉa sß kÃt quÁ đÇ ng°çi lÁp trình kiÇm tra NÃu kÃt quÁ chƣa đ°ÿc nh° mong muën, quay l¿i văn bÁn đÇ sĉa và l¿i ch¿y l¿i ch°¢ng trình Quá trình này đ°ÿc lÁp l¿i cho đÃn khi ch°¢ng trình ch¿y đúng nh° yêu cÅu đã đÅ ra Khi ch°¢ng trình ch¿y, cĉa sß kÃt quÁ sÁ hián ra t¿m thçi che khuÃt cĉa sß so¿n thÁo
Sau khi kÃt thúc ch¿y ch°¢ng trình cĉa sß so¿n thÁo sÁ tč đãng hián ra tré l¿i
và che khuÃt cĉa sß kÃt quÁ ĐÇ xem l¿i kÃt quÁ đã hián Ãn Alt-F5 (hoÁc thêm lánh getch() vào cuëi hàm main() Sau khi xem xong đÇ quay l¿i cĉa sß so¿n thÁo Ãn phím bÃt kỳ
2.7 Bài t ¿p
1 ViÃt ch°¢ng trình đßi mãt së nguyên há 10 sang há 2
2 ViÃt ch°¢ng trình đßi mãt së nguyên há 10 sang há 16
Trang 403 ViÃt ch°¢ng trình đçc vào 2 së nguyên và in ra kÃt quÁ căa phép (+), phép
trć (-), phép nhân (*), phép chia (/) NhÁn xét kÃt quÁ chia 2 së nguyên
4 ViÃt ch°¢ng trình nhÁp vào bán kính hình cÅu, tính và in ra dián tích, thÇ tích
6 ViÃt ch°¢ng trình đçc tć bàn phím 3 së nguyên biÇu dißn ngày, tháng, năm
và xuÃt ra màn hình d°åi d¿ng "ngay/thang/nam" (chã lÃy 2 së cuëi căa năm)
7 ViÃt ch°¢ng trình nhÁp vào së giây tć 0 đÃn 86399, đßi së giây nhÁp vào
thành d¿ng "gio:phut:giay", mái thành phÅn là mãt së nguyên có 2 chċ së Ví dụ:
02:11:05