1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng kỹ thuật lập trình c

78 1 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài giảng kỹ thuật lập trình c
Người hướng dẫn TS. Lấ Quặc Định, TS. Ng Duy Trường
Trường học Trường Đại học Hàng Hải Việt Nam
Chuyên ngành Kỹ thuật lập trình C
Thể loại Bài giảng
Năm xuất bản 2015
Thành phố Hải Phòng
Định dạng
Số trang 78
Dung lượng 660,87 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mô tả nội dung học phần: - Hác phÅn này trình bày nhāng vÃn đß c¢ bÁn vß lập trình nói chung và lập trình trên ngôn ngā C nói riêng vãi nái dung cā thá vß cÃu trúc chung của ch°¢ng trìn

Trang 1

&&&&& Hải Phòng, ngày &&&&& &&&&& Hải Phòng, ngày

TS LÊ QUàC ĐàNH TS NG DUY TR¯âNG GIANG Th S Nguyßn H¿nh Phúc

HÀI PHÒNG – 2015

BM.02-QT.PDT.01 26/11/13-REV: 0

Trang 2

ii

MĀC LĀC

Danh māc hình vẽ vii

Danh māc các bÁng vii

CH¯¡NG 1 GIâI THIàU 8

1.1 Giãi thiáu ngôn ngā lập trình C 8

1.2 CÃu trúc chung của ch°¢ng trình C 8

1.3 Các phÅn tÿ c¢ bÁn của ngôn ngā lập trình C 9

1.4 Các b°ãc c¢ bÁn khi lập ch°¢ng trình 11

1.5 Mát số công cā (IDE) cho lập trình C 12

1.6 Biến, hằng, biáu thức và các kiáu dā liáu c¢ sç 14

Bài tập 23

CH¯¡NG 2 CÁC CÂU LàNH TRONG C 24

2.1 Lánh gán, lánh gáp 24

2.2 Hàm in dā liáu ra màn hình 26

2.3 Hàm nhập dā liáu vào từ bàn phím 29

2.4 Câu lánh rẽ nhánh 32

2.5 Câu lánh lựa chán-lánh switch 34

2.6 Câu lánh lặp 35

2.7 Câu lánh break, continue 38

Bài tập: 38

CH¯¡NG 3 HÀM 40

3.1 Khái niám vß ch°¢ng trình con 40

3.2 Hàm trong C 40

3.2 Tham số của hàm 41

3.3 Biến toàn cāc, biến đßa ph°¢ng 42

3.4 Hàm không cho các giá trß: 43

3.5 Hàm đá qui 44

3.6 Bá tißn sÿ lý C 47

Bài tập 49

CH¯¡NG 4 KIàU DĀ LIàU CÓ CÂU TRÚC 50

4.1 MÁng 50

4.2 Xâu ký tự 54

BÁng 4.2 Mát số hàm vß xâu 55

4.3 Biến con trỏ 55

4.4 Con trỏ và mÁng 56

Trang 3

iii

4.5 Kiáu bÁn ghi (struct) 59

Bài tập 64

CH¯¡NG 5 DĀ LIàU KIàU TàP 66

5.1 Khái niám vß táp tin 66

5.2 CÃu trúc và phân lo¿i táp 66

5.3 T¿o táp đá ghi, đác dā liáu 67

5.4 Các hàm khác 74

Bài tập 77

TÀI LIàU THAM KHÀO 78

Trang 4

iv

Đß c°¢ng chi tiÁt các hãc phần

b Đơn vị giảng dạy: Bá môn Khoa hác máy tính

c Phân bổ thời gian:

- Thực hành (TH): 30 tiết - Bài tập (BT): 0 tiết

- H°ãng dẫn BTL/ĐAMH (HD): 0 tiết - Kiám tra (KT): 2 tiết

d Điều kiện đăng ký học phần:

Hác phÅn này đ°ÿc bố trí sau các hác phÅn: Đ¿i số, Tin hác Đ¿i c°¢ng

e Mục đích, yêu cầu của học phần:

- Thành th¿o trong viác sÿ dāng các câu lánh c¢ bÁn của ngôn ngā C

- Có thá dùng ngôn ngā lập trình C đá giÁi các bài toán tin hác c¢ bÁn

Thái độ nghề nghiệp:

- Dựa trên kiến thức đã hác vß ngôn ngā lập trình C có thá tự tiếp cận đ°ÿc các ngôn

ngā lập trình có khác

f Mô tả nội dung học phần:

- Hác phÅn này trình bày nhāng vÃn đß c¢ bÁn vß lập trình nói chung và lập trình trên ngôn

ngā C nói riêng vãi nái dung cā thá vß cÃu trúc chung của ch°¢ng trình, các thành phÅn c¢

bÁn gồm hằng, biến, ch°¢ng trình con; các kiáu dā liáu c¢ bÁn nhÃt trong C; Các câu lánh và

các cÃu trúc câu lánh trong C; Cách thức cách xây dựng mát ch°¢ng trình dựa trên ngôn ngā

lập trình C và các thao tác khi so¿n thÁo mát ch°¢ng trình trên ngôn ngā C

h Nội dung chi tiết học phần:

Trang 5

Nội dung tự học(15t):

 Điám hác phÅn (Z) đ°ÿc tính theo công thức: Z = 0.5X + 0.5Y Trong đó:

 X: điám quá trình, X=0.3X1+0.3 X2+0.4X3

 Y: điám bài thi kết thúc hác phÅn

 Hình thức thi: thi thực hành trên máy, vÃn đáp, thåi gian 75 phút

- Thang điám đánh giá: A+, A, B+, B, C+, C, D+, D và F

k Giáo trình:

Ph¿m Văn Ât, Kỹ thuật lập trình C - C¢ sç và nâng cao, NXB KHKT, 2008

l Tài liệu tham khảo:

1 Hoàng Đức HÁi, Ngôn ngā lập trình C từ A đến Z, NXB Lao đáng, 2008

2 Nguyßn Hāu Ngự, Bài tập lập trình C nâng cao Nhà xuÃt bÁn Tri Thức, 2007

3 Nguyßn Quang Huy, Nguyßn Thanh Thủy, Bài tập lập trình C, NXB KHKT, 2007

Trang 6

vi

m Ngày phê duyệt: 30/06/2014

n Cấp phê duyệt: Khoa CNTT

Tr°ởng Khoa

TS Lê Quốc Định

P Tr°ởng Bß môn

ThS Nguyễn Văn Thủy

Ng°ãi biên so¿n

ThS Nguyễn Hạnh Phúc

o Tiến trình cập nhật Đề cương:

CÁp nhÁt lần 1: ngày 25/06/2014

Nßi dung: Rà soát theo kế ho¿ch Nhà tr°ång gồm:

- Chỉnh sÿa, làm rõ các māc e, i theo các māc tiêu đổi mãi

căn bÁn

- Māc h: bổ sung Nái dung tự hác cuối mßi ch°¢ng māc, bổ

sung mát số nái dung tự hác

Nßi dung: Rà soát theo kế ho¿ch

Chỉnh sÿa l¿i māc i theo tiêu chí mãi vß cách đánh giá kết quÁ hác

Trang 7

vii

Danh māc hình v¿

Hình 1.1 Giao dián Turbo C 12

Hình 1.2 Giao dián Dev C 12

Hình 1.3 Giao dián Pelles C for Windows 13

Hình 1.4 Giao dián của C-Free 14

Danh māc các bÁng BÁng 1.1 Danh māc các từ khóa của C 10

BÁng 1.2 Mát số tên sai 10

BÁng 1.3 Mã ASCII mát số ký tự 14

BÁng 1.4 Dā liáu kiáu char 14

BÁng 1.5 Dā liáu kiáu số nguyên 15

BÁng 1.6 Dā liáu kiáu số thực 15

BÁng 1.7 Các phép toán hai ngôi số hác 16

BÁng 1.8 Các phép toán quan há 17

BÁng 1.9 Các phép toán logic 18

BÁng 1.10 Thứ tự °u tiên các phép toán 19

BÁng 2.1 Ví dā vß chußi đißu khián 27

BÁng 2.2 Ý nghĩa ký tự chuyán d¿ng 28

BÁng 2.3 Ý nghĩa các ký tự chuyán d¿ng 30

BÁng 4.1 Ví dā mát số mÁng 50

BÁng 4.2 Mát số hàm vß xâu 55

BÁng 5.1 Các kiáu truy cập táp tin 68

Trang 8

CH¯¡NG 1 GIàI THIàU

1.1 Gi ái thiáu ngôn ngā lÁp trình C

KhoÁng cuối nhāng năm 1960 đÅu 1970 xuÃt hián nhu cÅu cÅn có các ngôn ngā bậc cao

đá hß trÿ cho nhāng nhà tin hác trong viác xây dựng các phÅn mßm há thống, há đißu hành Ngôn ngā C ra đåi từ đó, nó đã đ°ÿc phát trián t¿i phòng thí nghiám Bell Đến năm 1978, giáo trình " Ngôn ngā lập trình C " do chính các tác giÁ của ngôn ngā là Dennish Ritchie và B.W Kernighan viết, đã đ°ÿc xuÃt bÁn và phổ biến ráng rãi

C là ngôn ngā lập trình đa năng Ngoài viác C đ°ÿc dùng đá viết há đißu hành UNIX, ng°åi ta nhanh chóng nhận ra sức m¿nh của C trong viác xÿ lý cho các vÃn đß hián đ¿i của tin hác C không gắn vãi bÃt kỳ mát há đißu hành hay máy nào, và mặc dÅu nó đã đ°ÿc gái là

"ngôn ngā lập trình há thống" vì nó đ°ÿc dùng cho viác viết há đißu hành, nó cũng tián lÿi cho cÁ viác viết các ch°¢ng trình xÿ lý số, xÿ lý văn bÁn và c¢ sç dā liáu

1.2 C Ãu trúc chung của ch°¢ng trình C

Mát ch°¢ng trình C có thá đ°ÿc đặt trong mát hoặc nhißu file văn bÁn khác nhau Mßi file văn bÁn chứa mát số phÅn nào đó của ch°¢ng trình Vãi nhāng ch°¢ng trình đ¢n giÁn và ngắn th°ång chỉ cÅn đặt chúng trên mát file

Mát ch°¢ng trình gồm nhißu hàm, mßi hàm phā trách mát công viác khác nhau của ch°¢ng trình Đặc biát trong các hàm này có mát hàm duy nhÃt có tên hàm là main() Khi ch¿y ch°¢ng trình, các câu lánh trong hàm main() sẽ đ°ÿc thực hián đÅu tiên Trong hàm main() có thá có các câu lánh gái đến các hàm khác khi cÅn thiết, và các hàm này khi ch¿y l¿i

có thá gái đến các hàm khác nāa đã đ°ÿc viết trong ch°¢ng trình (trừ viác gái quay l¿i hàm main()) Sau khi ch¿y đến lánh cuối cùng của hàm main() ch°¢ng trình sẽ kết thúc

Cā thá, thông th°ång mát ch°¢ng trình gồm có các nái dung sau:

− PhÅn khai báo các táp nguyên mẫu: khai báo tên các táp chứa nhāng thành phÅn có sẵn (nh° các hằng chuẩn, kiáu chuẩn và các hàm chuẩn) mà NSD (ng°åi sÿ dāng) sẽ dùng trong ch°¢ng trình

− PhÅn khai báo các kiáu dā liáu, các biến, hằng do NSD đßnh nghĩa và đ°ÿc dùng chung trong toàn bá ch°¢ng trình

− Danh sách các hàm của ch°¢ng trình (do NSD viết, bao gồm cÁ hàm main()) CÃu trúc chi tiết của mßi hàm sẽ đ°ÿc đß cập đến trong ch°¢ng 4

D°ãi đây là mát đo¿n ch°¢ng trình đ¢n giÁn chỉ gồm 1 hàm chính là hàm main()

Nái dung của ch°¢ng trình dùng in ra màn hình dòng chā: Chao cac ban, bay gio là 2 gio

#include <stdio.h>// khai báo táp nguyên mẫu đá đ°ÿc sÿ dāng hàm printf, scanf

int main()

{

int h = 2; // Khai báo và khçi t¿o biến h = 2 printf(<Chao cac ban, bay gio la %d gio=, h) ; // in ra màn hình }

Dòng đÅu tiên của ch°¢ng trình là khai báo táp nguyên mẫu stdio.h Đây là khai báo bắt buác vì trong ch°¢ng trình có sÿ dāng hàm chuẩn printf() (in ra màn hình), hàm này đ°ÿc khai báo và đßnh nghĩa sẵn trong stdio.h

Trang 9

Không riêng hàm main(), mái hàm khác đßu phÁi bắt đÅu tập hÿp các câu lánh của mình bçi dÃu { và kết thúc bçi dÃu } Tập các lánh bÃt kỳ bên trong cặp dÃu này đ°ÿc gái là khối lánh Khối lánh là mát cú pháp cÅn thiết trong các câu lánh có cÃu trúc nh° ta sẽ thÃy trong các ch°¢ng tiếp theo

Vậy nói tóm l¿i cÃu trúc c¢ bÁn của ch°¢ng trình nh° sau:

 Các #include

 Các #define

 Khai báo các đối t°ÿng dā liáu ngoài (biến, mÁng, cÃu trúc vv )

 Khai báo nguyên mẫu các hàm

 Hàm main()

 Đßnh nghĩa các hàm đ°ÿc khai báo nguyên mẫu ç trên

Trong phÅn đßnh nghĩa các hàm, hàm main có thá đặt sau hoặc xen vào giāa các hàm khác

1.3 Các ph ần tÿ c¢ bÁn của ngôn ngā lÁp trình C

a) Tập ký tự dùng trong ngôn ngā C

Mái ngôn ngā lập trình đßu đ°ÿc xây dựng từ mát bá ký tự nào đó Các ký tự đ°ÿc nhóm l¿i theo nhißu cách khác nhau đá t¿o nên các từ Các từ l¿i đ°ÿc liên kết vãi nhau theo mát qui tắc nào đó đá t¿o nên các câu lánh Mát ch°¢ng trình bao gồm nhißu câu lánh và thá hián mát thuật toán đá giÁi mát bài toán nào đó Ngôn ngā C đ°ÿc xây dựng trên bá ký tự sau:

Chú ý: Khi viết ch°¢ng trình, ta không đ°ÿc sÿ dāng bÃt kỳ ký tự nào khác ngoài các

ký tự trên Ví dā nh° khi lập ch°¢ng trình giÁi ph°¢ng trình bậc hai ax2 +bx+c=0 , ta cÅn tính biát thức delta = b2 - 4ac, trong ngôn ngā C không cho phép dùng ký tự , vì vậy ta phÁi dùng ký hiáu khác đá thay thế

b) Từ khoá

Từ khoá là nhāng từ đ°ÿc sÿ dāng đá khai báo các kiáu dā liáu, đá viết các toán tÿ và các câu lánh BÁng d°ãi đây liát kê các từ khoá của C:

Trang 10

register return short signed

BÁng 1.1 Danh māc các từ khóa của C

Ý nghĩa và cách sÿ dāng của mßi từ khoá sẽ đ°ÿc đß cập sau này, ç đây ta cÅn chú ý:

- Không đ°ÿc dùng các từ khoá đá đặt tên cho các hằng, biến, mÁng, hàm

- Từ khoá phÁi đ°ÿc viết bằng chā th°ång, ví dā: viết từ khoá for chứ không phÁi là FOR, hay For, &

c) Tên

Tên là mát khái niám rÃt quan tráng, nó dùng đá xác đßnh các đ¿i l°ÿng khác nhau trong mát ch°¢ng trình Chúng ta có tên hằng, tên biến, tên mÁng, tên hàm, tên con trỏ, tên táp, tên cÃu trúc, tên nhãn,

Tên đ°ÿc đặt theo qui tắc sau: Tên là mát dãy các ký tự bao gồm chā cái, số và g¿ch nối Ký tự đÅu tiên của tên phÁi là chā hoặc g¿ch nối Tên không đ°ÿc trùng vãi khoá

Đá dài cực đ¿i của tên theo mặc đßnh là 32 và có thá đ°ÿc đặt l¿i là mát trong các giá trß

từ 1 tãi 32 nhå chức năng: Option-Compiler-Source-Identifier length khi dùng TURBO C

Ví dā: Các tên đúng: a_1 delta x1 _step GAMA

Các tên sai: 3MN Ký tự đÅu tiên là

số m#2 Sÿ dāng ký tự # f(x) Sÿ dāng các dÃu ()

do Trùng vãi từ khoá

te ta Sÿ dāng dÃu trắng Y-3 Sÿ dāng dÃu - BÁng 1.2 Mát số tên sai

Chú ý: Trong C, tên bằng chā th°ång và chā hoa là khác nhau ví dā tên AB khác vãi

ab Trong C, ta th°ång dùng chā hoa đá đặt tên cho các hằng và dùng chā th°ång đá đặt tên cho hÅu hết cho các đ¿i l°ÿng khác nh° biến, biến mÁng, hàm, cÃu trúc Tuy nhiên đây không phÁi là đißu bắt buác

Trang 11

1.4 Các b°ác c¢ bÁn khi lÁp ch°¢ng trình

a) Qui trình viết và thực hián ch°¢ng trình

Tr°ãc khi viết và ch¿y mát ch°¢ng trình thông th°ång chúng ta cÅn:

1 Xác đßnh yêu cÅu của ch°¢ng trình Nghĩa là xác đßnh dā liáu đÅu vào (input) cung cÃp cho ch°¢ng trình và tập các dā liáu cÅn đ¿t đ°ÿc tức đÅu ra (output).Các tập hÿp dā liáu này ngoài các tên gái còn cÅn xác đßnh kiáu của nó Ví dā đá giÁi mát ph°¢ng trình bậc 2 d¿ng: ax2 + bx + c = 0, cÅn báo cho ch°¢ng trình biết dā liáu đÅu vào là a, b, c và đÅu ra là nghiám x1 và x2 của ph°¢ng trình Kiáu của a, b, c, x1, x2 là các số thực

2 Xác đßnh thuật toán giÁi

3 Cā thá hoá các khai báo kiáu và thuật toán thành dãy các lánh, tức viết thành ch°¢ng trình thông th°ång là trên giÃy, sau đó bắt đÅu so¿n thÁo vào trong máy Quá trình này đ°ÿc gái là so¿n thÁo ch°¢ng trình nguồn

4 Dßch ch°¢ng trình nguồn đá tìm và sÿa các lßi gái là lßi cú pháp

5 Ch¿y ch°¢ng trình, kiám tra kết quÁ in ra trên màn hình Nếu sai, sÿa l¿i ch°¢ng trình, dßch và ch¿y l¿i đá kiám tra Quá trình này đ°ÿc thực hián lặp đi lặp l¿i cho đến khi ch°¢ng trình ch¿y tốt theo yêu cÅu đß ra của NSD

b) So¿n thÁo táp ch°¢ng trình nguồn

So¿n thÁo ch°¢ng trình nguồn là mát công viác đ¢n giÁn: gõ nái dung của ch°¢ng trình (đã viết ra giÃy) vào trong máy và l°u l¿i nó lên đĩa Các táp ch°¢ng trình của ngôn ngā C

có phần mở rßng là C, ví dā : bai1.c, giai_pt.c, & Thông th°ång khi đã l°u l¿i ch°¢ng

trình lên đĩa lÅn sau sẽ không cÅn phÁi gõ l¿i Có thá so¿n ch°¢ng trình nguồn trên các bá so¿n thÁo (editor) khác nh°ng phÁi ch¿y trong môi tr°ång tích hÿp C++ (Borland C, Turbo C, Dev C, &) Māc đích của so¿n thÁo là t¿o ra mát văn bÁn ch°¢ng trình và đ°a vào bá nhã của máy Văn bÁn ch°¢ng trình cÅn đ°ÿc trình bày sáng sủa, rõ ràng Các câu lánh cÅn gióng thẳng cát theo cÃu trúc của lánh (các lánh chứa trong mát lánh cÃu trúc đ°ÿc trình bày thāt vào trong so vãi điám bắt đÅu của lánh) Các chú thích nên ghi ngắn gán, rõ nghĩa và phù hÿp c) 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 ch°¢ng trình Tùy vào trình biên dßch và thậm chí tùy vào phiên bÁn của các trình biên dßch mà tổ hÿp phím đá thực hián thao tác dßch, ch¿y ch°¢ng trình, & là khác nhau Viác dßch đá tìm và sÿa các lßi gái là lßi cú pháp Sau khi sÿa xong mát lßi NSD có thá dùng chuyán con trỏ đến lßi tiếp theo hoặc dßch l¿i 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

SÁn phẩm sau khi dßch là mát táp mãi gái là ch°¢ng trình đích có đuôi EXE tức là táp

mã máy đá thực hián Táp này có thá l°u t¿m thåi trong bá nhã phāc vā cho quá trình ch¿y ch°¢ng trình hoặc l°u l¿i trên đĩa tuỳ theo tuỳ chán khi dßch của NSD Trong và sau khi dßch,

C sẽ hián mát cÿa sổ chứa thông báo vß các lßi (nếu có), hoặc thông báo ch°¢ng trình đã đ°ÿc dßch thành công (không còn lßi) Các lßi này đ°ÿc gái là lßi cú pháp

d) Ch¿y ch°¢ng trình

Giống nh° dßch ch°¢ng trình, viác ch¿y ch°¢ng trình cũng tùy thuác vào các trình biên dßch 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Á đá NSD kiám tra Nếu kết quÁ ch°a đ°ÿc nh° mong muốn, NSD 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 cÿa sổ so¿n thÁo Sau khi kết thúc ch¿y ch°¢ng trình NSD có thá đóng cÿa số kết quÁ và trç vß cÿa sổ so¿n thÁo

Trang 12

1.5 M ßt sá công cā (IDE) cho lÁp trình C

a) Turbo C (TC)

Hình 1.1 Giao dián Turbo C Turbo C++ 3.0 là công cā phổ biến nhÃt hián nay đ°ÿc dùng trong các môi tr°ång giáo dāc khi cÅn d¿y vß lập trình C/C++ c¢ bÁn PhÅn mßm của hãng Borland International Inc này

ra đåi từ năm 1992, rÃt quen thuác vãi đa số sinh viên, lập trình viên vì giao dián giống giao dián của Turbo Pascal, vốn cũng là mát phÅn mßm khác của hãng Borland Turbo C++ 3.0 có khá nhißu °u điám: mißn phí (do hãng Borland không còn hß trÿ và phát trián tiếp), không cÅn cài đặt, môi tr°ång tích hÿp thuận tián, dung l°ÿng nhỏ (khoÁng 4, 3 MB), biên dßch và ch¿y ch°¢ng trình nhanh, có thá ch¿y trên mái thế há máy tính có há đißu hành DOS Tuy nhiên phÅn mßm này có mát số nh°ÿc điám c¢ bÁn: không cập nhật, vì thế chỉ có thá sÿ dāng cho nhāng ng°åi mãi hác lập trình, viết các ch°¢ng trình ch¿y trên DOS hay ch°¢ng trình ch¿y trên há thống nhúng, mô phỏng mát số thuật toán đồ háa trên DOS Các nh°ÿc điám khác của Turbo C++ 3.0: không hß trÿ các tính năng mãi của C/C++ (nh° kiáu dā liáu bool, namespace, th° vián STL, các ph°¢ng thức chuyán đổi kiáu dā liáu ), không thá biên dßch ch°¢ng trình ch¿y trên nßn Windows, không hß trÿ các công nghá mãi nh° Intellisense (nhắc ng°åi dùng các từ khóa, hàm và kiáu dā liáu) Bên c¿nh đó, thao tác so¿n thÁo của Turbo C++ 3.0 cũng không tián lÿi vì đòi hỏi sÿ dāng các tổ hÿp phím khá phức t¿p

hß trÿ C/C++ khác DevCpp hián nay đ°ÿc khá nhißu lập trình viên sÿ dāng trong viác phát trián phÅn mßm th°¢ng m¿i, nguồn mç cũng nh° trong môi tr°ång giáo dāc (có khá nhißu website d¿y lập trình C/C++ sÿ dāng DevCpp đá làm bài tập lập trình, project môn hác )

Có lẽ mã nguồn mç, mißn phí, ch¿y trên Windows chính là °u điám lãn nhÃt của DevCpp

Trang 13

Tuy nhiên DevCpp cũng có mát số nh°ÿc điám: ch°¢ng trình ch¿y chậm (mặc dù theo nh° tài liáu trÿ giúp đi kèm, yêu cÅu há thống của DevCpp khá thÃp: ch¿y trên các há thống Windows vãi 8 MB Ram, 30 MB ổ cứng, CPU 100 Mhz (cÃu hình đß nghß là Windows 2000/XP, 32

MB Ram, 200 MB ổ cứng, CPU 400 Mhz); viác biên dßch ch°¢ng trình cũng khá chậm, mã ch°¢ng trình sinh ra lãn (ví dā mát ch°¢ng trình C++ đ¢n giÁn sÿ dāng th° vián STL sinh ra file exe có dung l°ÿng tãi 470 KB, sau khi nén bằng UPX còn 270 KB), giao dián so¿n thÁo

và cÃu hình có đôi chß còn rối rắm, không thuận tián Nói chung DevCpp vẫn là mát công cā nên dùng, đặc biát là trong môi tr°ång giáo dāc, hay khi cÅn sÿ dāng mát công cā IDE mißn phí HÅu hết các ứng dāng phát trián vãi Visual C++ 6.0 (tÃt nhiên là trừ các ứng dāng viết bằng MFC) khi chuyán sang DevCpp biên dßch đßu không gây lßi

c) Pelles C for Windows

Hình 1.3 Giao dián Pelles C for Windows Pelles C for Windows (phiên bÁn hián t¿i 4.50.113) là công cā IDE mißn phí dành cho viác phát trián ứng dāng C trên Windows Dung l°ÿng bá cài đặt là 7.4 Mb PhÅn mßm này là mát phÅn dự án của Independent JPEG Group So sánh vãi DevCpp, Pelles C for Windows có mát số điám t°¢ng đồng: ch¿y trên Windows, giao dián thân thián (mát phÅn t°¢ng đối giống

MS Visual C++ 6.0), hß trÿ các tính năng mãi của C, tính tích hÿp cao Ngoài ra Pelles C có mát số °u điám so vãi DevCpp: bá trÿ giúp tốt h¢n, đÅy đủ h¢n (trên website còn có các ứng dāng mẫu khá đa d¿ng), ch°¢ng trình biên dßch và ch¿y nhanh, mã ch°¢ng trình nhỏ (nhỏ h¢n nhißu so vãi MS Visual C++) Tuy nhiên điám khác biát c¢ bÁn chính là Pelles C chỉ dành cho viác phát trián ứng dāng sÿ dāng ngôn ngā C (đúng nh° tên gái của phÅn mßm này) trên Windows (tÃt nhiên các ch°¢ng trình C viết trên DOS vẫn có thá ch¿y đ°ÿc) DevCpp khi biên dßch mát ch°¢ng trình đ¢n giÁn (chỉ có 1 file chẳng h¿n) thì không cÅn t¿o Project đá quÁn lý nh°ng Pelles C thì luôn sÿ dāng project đá quÁn lý các ch°¢ng trình Pelles C for Windows sÿ dāng trình biên dßch riêng và các th° vián API của Windows cung cÃp Nói chung Pelles C for Windows rÃt thích hÿp đá phát trián các ch°¢ng trình há thống trên Windows và trên Pocket PC, SmartPhone

d) C-Free

Trang 14

Hình 1.4 Giao dián của C-Free

Là công cā IDE của hãng phÅn mßm xuÃt xứ từ Trung Quốc ProgramArts, C-Free là phÅn mßm th°¢ng m¿i, phiên bÁn ch¿y ổn đßnh là 3.5.2 (7.07 Mb) và 4.0 (8.4 Mb) Đặc biát

từ C-Free 4.0 có bÁn Education mißn phí dành cho māc đích d¿y hác và các môi tr°ång giáo dāc Cũng sÿ dāng trình biên dßch Mingw nh°ng C-Free dßch nhanh h¢n so vãi DevCpp, file kết quÁ exe cũng nhỏ h¢n C-Free sÿ dāng kỹ thuật gái là Intelligence Input (gÅn giống vãi công nghá Intellisense của Microsoft) cho phép lập trình viên nhanh chóng chèn các đo¿n mã lánh theo kiáu nhắc lánh và các đo¿n mã template vào file đang làm viác So vãi DevCpp và Pelles C, C-Free tỏ ra v°ÿt trái ç giao dián, khÁ năng hß trÿ so¿n thÁo mã nguồn Nói chung nếu đá làm viác vãi C/C++ thì C-Free là mát lựa chán tuyát våi

e) Visual C++ (nhißu phiên bÁn)

Nằm trong bá phÅn mßm Visual Studio của Microsoft , Visual C++ (hián có nhißu phiên bÁn) chuyên nghiáp h¢n so vãi các công cā đã đ°ÿc liát kê ç trên Đây là mát phÅn mßm th°¢ng m¿i vãi các tính năng tuyát våi: biên dßch, gỡ lßi, so¿n thÁo và trÿ giúp (bá trÿ giúp MSDN) tích hÿp, có tính năng trÿ giúp so¿n thÁo bằng nhắc lánh

1.6 Bi Án, hằng, biáu thức và các kiáu dā liáu c¢ sở

Có hai kiáu dā liáu char: kiáu signed char và unsigned char

Kiáu Ph¿m vi biáu dißn Số ký tự Kích th°ãc char (signed char) -128 đến 127 256 1 byte

BÁng 1.4 Dā liáu kiáu char

Ví dā sau minh ho¿ sự khác nhau giāa hai kiáu dā liáu trên Xét đo¿n ch°¢ng trình sau: char ch1;

unsigned char ch2;

Trang 15

ch1=200; ch2=200;

Khi đó thực chÃt:

ch1= -56;

ch2= 200;

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 1: 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

Nhóm 2: 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 3: 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)

b) Kiáu sá nguyên

Trong C cho phép sÿ dāng số nguyên kiáu int, số nguyên dài kiáu long và số nguyên không dÃu kiáu unsigned, & Kích cỡ và ph¿m vi biáu dißn của chúng đ°ÿc chỉ ra trong bÁng d°ãi đây:

long -2147483648 đến 2147483647 4 byte

BÁng 1.5 Dā liáu kiáu số nguyên

Chú ý: Kiáu ký tự cũng có thá xem là mát d¿ng của kiáu nguyên

c) Kiáu dÃu phÁy đßng (sá thực)

Trong C cho phép sÿ dāng ba lo¿i dā liáu dÃu phÁy đáng, đó là float, double và long double Kích cỡ và ph¿m vi biáu dißn của chúng đ°ÿc chỉ ra trong bÁng d°ãi đây:

Kiáu Ph¿m vi biáu dißn Số chā số

có nghĩa Kích th°ãc float 3.4E-38 đến 3.4E+38 7 đến 8 4 byte

double 1.7E-308 đến 1.7E+308 15 đến 16 8 byte

long double 3.4E-4932 đến 1.1E4932 17 đến 18 10 byte

BÁng 1.6 Dā liáu kiáu số thực

GiÁi thích:

Trang 16

Máy tính có thá l°u trā đ°ÿc các số kiáu float có giá trß tuyát đối từ 3.4E-38 đến 3.4E+38 Các số có giá trß tuyát đối nhỏ h¢n3.4E-38 đ°ÿc xem bằng 0 Ph¿m vi biáu dißn của

số double đ°ÿc hiáu theo nghĩa t°¢ng tự

Chú ý: Trong C không có kiáu logic Boolean (thá hián giá trß true, false) C sÿ dāng kiáu số nguyên đá xây dựng kiáu logic, 0 ứng vãi false, ≠ 0 ứng vãi trß true Ví dā: biáu thức 6>8 nhận giá trß 0, 6>3 nhận giá trß 1

d) Đánh nghĩa kiáu bằng typedef

Công dāng: Từ khoá typedef dùng đá đặt tên cho mát kiáu dā liáu Tên kiáu sẽ đ°ÿc dùng đá khai báo dā liáu sau này Nên chán tên kiáu ngắn và gán đá dß nhã Chỉ cÅn thêm từ khoá typedef vào tr°ãc mát khai báo ta sẽ nhận đ°ÿc mát tên kiáu dā liáu và có thá dùng tên này đá khai báo các biến, mÁng, cÃu trúc, vv

Cách viết: Viết từ khoá typedef, sau đó kiáu dā liáu (mát trong các kiáu trên), rồi đến tên của kiáu Ví dā câu lánh:

typedef int nguyen;

sẽ đặt tên mát kiáu int là nguyen Sau này ta có thá dùng kiáu nguyen đá khai báo các biến, các mÁng int nh° ví dā sau ;

Các phép toán + và - có cùng thứ tự °u tiên, có thứ tự °u tiên nhỏ h¢n các phép * , / , %

và cÁ ba phép này l¿i có thứ tự °u tiên nhỏ h¢n phép trừ mát ngôi

Các phép toán số hác đ°ÿc thực hián từ trái sang phÁi Số °u tiên và khÁ năng kết hÿp của phép toán đ°ÿc chỉ ra trong mát māc sau này

Các phép toán quan há và logic:

Trang 17

Phép toán quan há và logic cho ta giá trß đúng (1) hoặc giá trß sai (0) Nói cách khác, khi các đißu kián nêu ra là đúng thì ta nhận đ°ÿc giá trß 1, trái l¿i ta nhận giá trß 0

Bốn phép toán đÅu có cùng số °u tiên, hai phép sau có cùng số thứ tự °u tiên nh°ng thÃp h¢n số thứ tự của bốn phép đÅu Các phép toán quan há có số thứ tự °u tiên thÃp h¢n so vãi các phép toán số hác, cho nên biáu thức: i<n-1 đ°ÿc hiáu là i<(n-1)

Trang 18

Phép toán tăng giÁm: C đ°a ra hai phép toán mát ngôi đá tăng và giÁm các biến

(nguyên và thực) Toán tÿ tăng là ++ sẽ cáng 1 vào toán h¿ng của nó, toán tÿ giÁm thì sẽ trừ toán h¿ng đi 1

Ví dā: n=5

++n Cho ta n=6

n Cho ta n=4

Ta có thá viết phép toán ++ và tr°ãc hoặc sau toán h¿ng nh° sau: ++n, n++, n, n

Sự khác nhau của ++n và n++ ç chß: trong phép n++ thì tăng sau khi giá trß của nó đã đ°ÿc sÿ dāng, còn trong phép ++n thì n đ°ÿc tăng tr°ãc khi sÿ dāng Sự khác nhau giāa n

và n cũng nh° vậy

Ví dā: n=5

x=++n Cho ta x=6 và n=6

x=n++ Cho ta x=5 và n=6

Thứ tự °u tiên các phép toán:

Các phép toán có đá °u tiên khác nhau, đißu này có ý nghĩa trong cùng mát biáu thức sẽ

có mát số phép toán này đ°ÿc thực hián tr°ãc mát số phép toán khác Thứ tự °u tiên của các phép toán đ°ÿc trình bày trong bÁng sau:

hÿp

2 ! ~ & * - ++ (type) sizeof PhÁi qua trái

Trang 19

10 | Trái qua phÁi

14 = += -= *= /= %= <<= >>= &= ^= |= PhÁi qua trái

BÁng 1.10 Thứ tự °u tiên các phép toán

Chú thích: Các phép toán tên mát dòng có cùng thứ tự °u tiên, các phép toán ç hàng trên có số °u tiên cao h¢n các số ç hàng d°ãi Đối vãi các phép toán cùng mức °u tiên thì

trình tự tính toán có thá từ trái qua phÁi hay ng°ÿc l¿i đ°ÿc chỉ ra trong cát trình tự kết hợp

Ví dā: * px=*( px) (phÁi qua trái)

8/4*6=(8/4)*6 (trái qua phÁi)

Nên dùng các dÃu ngoặc tròn đá viết biáu thức mát cách chính xác

Các phép toán l¿:

[ ] Dùng đá biáu dißn phÅn tÿ mÁng, ví dā: a[i][j]

Dùng đá biáu dißn thành phÅn cÃu trúc, ví dā: ht.ten

-> Dùng đá biáu dißn thành phÅn cÃu trúc thông qua con trỏ

* Dùng đá khai báo con trỏ, ví dā: int *a

& Phép toán lÃy đßa chỉ, ví dā: &x

(type) là phép chuyán đổi kiáu, ví dā: (float)(x+y)

Toán tÿ dÃu phẩy , th°ång dùng đá viết mát dãy biáu thức trong toán tÿ for

1.6.2 BiÁn, hằng

a) Hằng: Hằng là các đ¿i l°ÿng mà giá trß của nó không thay đổi trong quá trình tính

toán

Tên hằng: Nguyên tắc đặt tên hằng ta đã xem xét trong māc đặt tên ç phÅn tr°ãc Đá

khai báo mát hằng, ta dùng dòng lánh sau:

#define tên_hằng giá_trá_hằng hoặc: const tên_hằng = giá_trá_hằng ;

Ví dā:

#define sosv 50

#define MAX 100

const sosv = 50 ;

Lúc này, tÃt cÁ các tên MAX trong ch°¢ng trình xuÃt hián sau này đßu đ°ÿc thay bằng

100 Vì vậy, ta th°ång gái MAX là tên hằng, nó biáu dißn số 100

Mát ví dā khác: #define pi 3.141593

Đặt tên cho mát hằng float là pi có giá trß là 3.141593

Trang 20

Các lo¿i hằng:

Hằng int: Hằng int là số nguyên có giá trß trong khoÁng từ -32768 đến 32767

Ví dā: #define number1 -50 Đßnh nghĩa hằng int number1 có giá trß là -50

#define sodem 2732 Đßnh nghiã hằng int sodem có giá trß là 2732

Chú ý: CÅn phân biát hai hằng 5056 và 5056.0: ç đây 5056 là số nguyên còn 5056.0 là hằng thực

Hằng long: Hằng long là số nguyên có giá trß trong khoÁng từ -2147483648 đến

2147483647

Hằng long đ°ÿc viết theo cách: 1234L hoặc 1234l (thêm L hoặc l vào đuôi)

Mát số nguyên v°ÿt ra ngoài mißn xác đßnh của int cũng đ°ÿc xem là long

Ví dā: #define sl 8865056L Đßnh nghĩa hằng long sl có giá trß là 8865056

#define sl 8865056 Đßnh nghĩa hằng long sl có giá trß là 8865056

Hằng int há 8: Hằng int há 8 đ°ÿc viết theo cách 0c1c2c3 ç đây ci là mát số nguyên

d°¢ng trong khoÁng từ 1 đến 7 Hằng int há 8 luôn luôn nhận giá trß d°¢ng

Ví dā: #define h8 0345 Đßnh nghiã hằng int há 8 có giá trß là

Trang 21

Hằng ký tự: Hằng ký tự là mát ký tự riêng biát đ°ÿc viết trong hai dÃu nháy đ¢n, ví dā

'a' Giá trß của 'a' chính là mã ASCII của chā a Nh° vậy giá trß của 'a' là 97 Hằng ký tự có thá tham gia vào các phép toán nh° mái số nguyên khác Ví dā: '9'-'0'=57-48=9

Ví dā: #define kt 'a' Đßnh nghiã hằng ký tự kt có giá trß là 97

Hằng ký tự còn có thá đ°ÿc viết theo cách sau: ' \c1c2c3' Trong đó c1c2c3 là mát số há

8 mà giá trß của nó bằng mã ASCII của ký tự cÅn biáu dißn

Ví dā: chā a có mã há 10 là 97, đổi ra há 8 là 0141 Vậy hằng ký tự 'a' có thá viết d°ãi d¿ng '\141' Đối vãi mát vài hằng ký tự đặc biát ta cÅn sÿ dāng cách viết sau (thêm dÃu \):

Chú ý: CÅn phân biát hằng ký tự '0' và '\0' Hằng '0' ứng vãi chā số 0 có mã ASCII là

48, còn hằng '\0' ứng vãi kýtự \0 (th°ång gái là ký tự null) có mã ASCII là 0

Hằng ký tự thực sự là mát số nguyên, vì vậy có thá dùng các số nguyên há 10 đá biáu dißn các ký tự, ví dā lánh printf("%c%c", 65, 66) sẽ in ra AB

Hằng xâu ký tự: Hằng xâu ký tự là mát dãy ký tự bÃt kỳ đặt trong hai dÃu nháy kép

Ví dā: #define xau1 "Ha noi"

#define xau2 "My name is Giang"

Xâu ký tự đ°ÿc l°u trā trong máy d°ãi d¿ng mát bÁng có các phÅn tÿ là các ký tự riêng biát Trình biên dßch tự đáng thêm ký tự null \0 vào cuối mßi xâu (ký tự \0 đ°ÿc xem là dÃu hiáu kết thúc của mát xâu ký tự)

Chú ý: CÅn phân biát hai hằng 'a' và "a" 'a' là hằng ký tự đ°ÿc l°u trā trong 1 byte, còn

"a" là hằng xâu ký tự đ°ÿc l°u trā trong 1 mÁng hai phÅn tÿ: phÅn tÿ thứ nhÃt chứa chā a còn phÅn tÿ thứ hai chứa \0

b) BiÁn: Là đ¿i l°ÿng mà giá trß có thá thay đổi đ°ÿc trong ch°¢ng trình Mßi biến cÅn

phÁi đ°ÿc khai báo tr°ãc khi đ°a vào sÿ dāng, giá trß của biến có thá thay đổi đ°ÿc trong ch°¢ng trình Viác khai báo biến đ°ÿc thực hián theo mẫu sau:

Kiáu_dā_liáu_của_biÁn tên biÁn=giá trá ;

Hoặc: Kiáu_dā_liáu_của_biÁn tên biÁn;

Ví dā: int a, b, c=9; Khai báo ba biến int là a, b, c

long dai, mn; Khai báo hai biến long là dai và mn char kt1, kt2=’a’; Khai báo hai biến ký tự là kt1 và kt2

Trang 22

float x, y=20.12; Khai báo hai biến float là x và y

double canh1, canh2; Khai báo hai biến double là canh1 và canh2

Biến kiáu int chỉ nhận đ°ÿc các giá trß kiáu int Các biến khác cũng có ý nghĩa t°¢ng tự Các biến kiáu char chỉ chứa đ°ÿc mát ký tự Đá l°u trā đ°ÿc mát xâu ký tự cÅn sÿ dāng mát mÁng kiáu char

Vá trí của khai báo biÁn: Các khai báo cÅn phÁi đ°ÿc đặt ngay sau dÃu { đÅu tiên của

thân hàm và cÅn đứng tr°ãc mái câu lánh khác Sau đây là mát ví dā vß khai báo biến sai: main() {

Khởi đầu cho biÁn: Nếu trong khai báo ngay sau tên biến ta đặt dÃu = và mát giá trß

nào đó thì đây chính là cách vừa khai báo vừa khçi đÅu cho biến

Ví dā: int a, b=20, c, d=40;

float e=-55.2, x=27.23, y, z, t=18.98;

Viác khçi đÅu và viác khai báo biến rồi gán giá trß cho nó sau này là hoàn toàn t°¢ng đ°¢ng

LÃy đáa chß của biÁn: Mßi biến đ°ÿc cÃp phát mát vùng nhã gồm mát số byte liên tiếp

Số hiáu của byte đÅu chính là đßa chỉ của biến Đßa chỉ của biến sẽ đ°ÿc sÿ dāng trong mát số hàm ta sẽ nghiên cứu sau này (ví dā nh° hàm scanf) Đá lÃy đßa chỉ của mát biến ta sÿ dāng phép toán: &tên_biÁn

1.6.3 Biáu thức

Biáu thức: Biáu thức là dãy kí hiáu kết hÿp giāa các toán h¿ng, phép toán và cặp dÃu ()

theo mát qui tắc nhÃt đßnh Các toán h¿ng là hằng, biến, hàm Biáu thức cung cÃp mát cách thức đá tính giá trß mãi dựa trên các toán h¿ng và toán tÿ trong biáu thức Nh° vậy hằng, biến, phÅn tÿ mÁng và hàm cũng đ°ÿc xem là biáu thức

Ví dā:

(x + y) * 2 - 4 ;

3 - x + sqrt(y) ;

(-b + sqrt(delta)) / (2*a) ;

[-b + sqrt(delta)] / (2*a) ; //Biáu thức sai Vì sao ?

Trong C, ta có hai khái niám vß biáu thức:

 Biáu thức gán

 Biáu thức đißu kián

Biáu thức đ°ÿc phân lo¿i theo kiáu giá trß: nguyên, thực,& Trong các mánh đß logic, biáu thức đ°ÿc phân thành đúng (giá trß khác 0) và sai (giá trß bằng 0, chúng ta th°ång quy

°ãc là 1)

Biáu thức th°ång đ°ÿc dùng trong:

Trang 23

+ Vế phÁi của câu lánh gán

+ Làm tham số thực sự của hàm

+ Làm chỉ số

+ Trong các toán tÿ của các cÃu trúc đißu khián

Tãi đây, ta đã có hai khái niám chính t¿o nên biáu thức đó là toán h¿ng và phép toán (toán tÿ) Toán h¿ng gồm: hằng, biến, phÅn tÿ mÁng và hàm tr°ãc đây ta đã xét Các phép toán đã đ°ÿc đß cập đến ç phÅn trên Hàm sẽ đ°ÿc đß cập trong ch°¢ng sau

Bài t Áp

1 Viết ch°¢ng trình in ra màn hình chußi <Chao cac ban.= trên các IDE khác nhau

2 Tìm hiáu các option của các IDE: Dev C, TC, Cfree, &

3 Tìm hiáu cách thức dßch ch°¢ng trình, soát lßi, debug của TC, DevC, Cfree, &

4 Tìm hiáu th° vián math.h trong C

Trang 24

CH¯¡NG 2 CÁC CÂU LàNH TRONG C

2.1 L ánh gán, lánh gßp

Lánh gán giá trá:

Biáu thức gán (lánh gán) là biáu thức có d¿ng: v = e

Trong đó v là mát biến (hay phÅn tÿ mÁng), e là mát biáu thức Giá trß của biáu thức gán

là giá trß của e, kiáu của nó là kiáu của v Nếu đặt dÃu ; vào sau biáu thức gán ta sẽ thu đ°ÿc phép toán gán có d¿ng: v = e;

Biáu thức gán có thá sÿ dāng trong các phép toán và các câu lánh nh° các biáu thức khác Ví dā nh° khi ta viết a=b=5; thì đißu đó có nghĩa là gán giá trß của biáu thức b=5 cho biến a Kết qủa là b=5 và a=5

Hoàn toàn t°¢ng tự nh°: a=b=c=d=6; gán 6 cho cÁ a, b, c và d

Ví dā: z=(y=2)*(x=6); gán 2 cho y, 6 cho x và nhân hai biáu thức l¿i cho ta z=12

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);

Cá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 đó

Mát dãy các câu lánh đ°ÿc bao bçi các dÃu { } gái là mát khối lánh Ví dā:

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:

Trang 25

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

Chuyán đổi kiáu giá trá:

Viác chuyán đổi kiáu giá trß th°ång dißn ra mát cách tự đáng trong hai tr°ång hÿp sau: + Khi gán biáu thức gồm các toán h¿ng khác kiáu

+ Khi gán mát giá trß kiáu này cho mát biến (hoặc phÅn tÿ mÁng) kiáu khác Đißu này xÁy ra trong toán tÿ gán, trong viác truyßn giá trß các tham số thực sự cho các đối

Ngoài ra, ta có thá chuyán từ mát kiáu giá trß sang mát kiáu bÃt kỳ mà ta muốn bằng phép chuyán sau: (type) biáu thức

Ví dā: (float) (a+b)

Chuyán đổi kiáu trong biáu thức:

Khi hai toán h¿ng trong mát phép toán có kiáu khác nhau thì kiáu thÃp h¢n sẽ đ°ÿc nâng thành kiáu cao h¢n tr°ãc khi thực hián phép toán Kết quÁ thu đ°ÿc là mát giá trß kiáu cao h¢n Chẳng h¿n: Giāa int và long thì int chuyán thành long Giāa int và float thì int chuyán thành float Giāa float và double thì float chuyán thành double

Ví dā: 1.5*(11/3)=4.5

1.5*11/3=5.5

Trang 26

(11/3)*1.5=4.5

Chuyán đổi kiáu thông qua phép gán:

Giá trß của vế phÁi đ°ÿc chuyán sang kiáu vế trái đó là kiáu của kết quÁ Kiáu int có thá đ°ÿc đ°ÿc chuyán thành float Kiáu float có thá chuyán thành int do chặt đi phÅn thập phân Kiáu double chuyán thành float bằng cách làm tròn Kiáu long đ°ÿc chuyán thành int bằng cách cắt bỏ mát vài chā số

Ví dā: int n;

n=15.6 giá trß của n là 15

Đổi kiáu d¿ng (type)biáu thức:

Theo cách này, kiáu của biáu thức đ°ÿc đổi thành kiáu type theo nguyên tắc trên

Ví dā: Phép toán: (int)a

cho mát giá trß kiáu int Nếu a là float thì ç đây có sự chuyán đổi từ float sang int Chú ý rằng bÁn thân kiáu của a vẫn không bß thay đổi Nói cách khác, a vẫn có kiáu float nh°ng (int)a có kiáu int

Đối vãi hàm toán hác của th° vián chuẩn, thì giá trß của đối và giá trß của hàm đßu có kiáu double, vì vậy đá tính căn bậc hai của mát biến nguyên n ta phÁi dùng phép ép kiáu đá chuyán kiáu int sang double nh° sau: sqrt((double)n)

Phép ép kiáu có cùng số °u tiên nh° các toán tÿ mát ngôi

Chú ý:Muốn có giá trß chính xác trong phép chia hai số nguyên cÅn dùng phép ép kiáu: (float)a/b

Đá đổi giá trß thực r sang nguyên, ta dùng: (int)(r+0.5)

2.2 3 аa kÁt quÁ lên màn hình - hàm printf:

Cách dùng: prinf(đißu khián, đối số 1, đối số 2, );

Hàm printf chuyán, t¿o khuôn d¿ng và in các đối của nó ra thiết bß ra chuẩn d°ãi sự đißu

khián của xâu điều khiển Xâu điều khiển chứa hai kiáu đối t°ÿng: các ký tự thông th°ång,

Trang 27

chúng sẽ đ°ÿc đ°a ra trực tiếp thiết bß ra, và các đặc tÁ chuyán d¿ng, mßi đặc tÁ sẽ t¿o ra viác

đổi d¿ng và in đối tiếp sau của printf

Chußi điều khiển có thá có các ký tự đißu khián:

\n xuống dòng mãi; \f sang trang mãi; \b lùi l¿i mát b°ãc; \t dÃu tab

D¿ng tổng quát của đặc tÁ:

%[-][n][.m] ký_tự_chuyán_d¿ng

Mßi đặc tÁ chuyán d¿ng đßu đ°ÿc đ°a vào bằng ký tự % và kết thúc bçi mát

ký_tự_chuyển_dạng Giāa % và ký_tự_chuyển_dạng có thá có:

DÃu trừ: Khi không có dÃu trừ thì kết quÁ ra đ°ÿc dồn vß bên phÁi nếu đá dài thực tế của kết quÁ ra nhỏ h¢n đá ráng tối thiáu n dành cho nó Các vß trí d° thừa sẽ đ°ÿc lÃp đÅy bằng các khoÁng trống Riêng đối vãi các tr°ång số, nếu dãy số n bắt đÅu bằng số 0 thì các vß trí d° thừa bên trái sẽ đ°ÿc lÃp đÅy bằng các số 0

Khi có dÃu trừ thì kết quÁ đ°ÿc dồn vß bên trái và các vß trí d° thừa vß bên phÁi (nếu có) luôn đ°ÿc lÃp đÅy bằng các khoÁng trống

n: Khi n lãn h¢n đá dài thực tế của kết quÁ ra thì các vß trí d° thừa sẽ đ°ÿc lÃp đÅy bçi các khoÁng trống hoặc số 0 và nái dung của kết quÁ ra sẽ đ°ÿc đẩy vß bên phÁi hoặc bên trái Khi không có n hoặc n nhỏ h¢n hay bằng đá dài thực tế của kết quÁ ra thì đá ráng trên thiết bß

ra dành cho kết quÁ sẽ bằng chính đá dài của nó T¿i vß trí của n ta có thá đặt dÃu *, khi đó n đ°ÿc xác đßnh bçi giá trß nguyên của đối t°¢ng ứng

m: Tham số m chỉ đ°ÿc sÿ dāng khi đối t°¢ng ứng là mát xâu ký tự hoặc mát giá trß kiáu float hay double Trong tr°ång hÿp đối t°¢ng ứng có giá trß kiáu float hay double thì m

là đá chính xác của tr°ång ra Nói mát cách cā thá h¢n giá trß in ra sẽ có pp chā số sau số thập phân Khi vắng mặt pp thì đá chính xác sẽ đ°ÿc xem là 6 Khi đối là xâu ký tự: Nếu m nhỏ h¢n đá dài của xâu thì chỉ pp ký tự đÅu tiên của xâu đ°ÿc in ra Nếu không có n hoặc nếu m lãn h¢n hay bằng đá dài của xâu thì cÁ xâu ký tự sẽ đ°ÿc in ra

BÁng 2.1 Ví dā vß chußi đißu khián

Các ký tự chuyán d¿ng và ý nghĩa của nó:

Ký tự chuyán d¿ng là mát hoặc mát dãy ký hiáu xác đßnh quy tắc chuyán d¿ng và d¿ng

in ra của đối t°¢ng ứng Nh° vậy sẽ có tình tr¿ng cùng mát số sẽ đ°ÿc in ra theo các d¿ng khác nhau CÅn phÁi sÿ dāng các ký tự chuyán d¿ng theo đúng qui tắc đßnh sẵn BÁng sau cho các thông tin vß các ký tự chuyán d¿ng

Trang 28

Ký tự chuyán

o Đối đ°ÿc chuyán sang há tám không dÃu (không có số 0 đứng tr°ãc)

x Đối đ°ÿc chuyán sang há m°åi sáu không dÃu (không có 0x đứng tr°ãc)

s Đối là xâu ký tự, các ký tự trong xâu đ°ÿc in cho tãi khi gặp ký tự không hoặc

cho tãi khi đủ số l°ÿng ký tự đ°ÿc xác đßnh bçi các đặc tÁ vß đá chính xác m

e Đối đ°ÿc xem là float hoặc double và đ°ÿc chuyán sang d¿ng thập phân có

d¿ng [-]m.n nE[+ hoặc -] vãi đá dài của xâu chứa n là pp

f

Đối đ°ÿc xem là float hoặc double và đ°ÿc chuyán sang d¿ng thập phân có d¿ng [-]m m.n n vãi đá dài của xâu chứa n là pp Đá chính xác mặc đßnh là 6 L°u ý rằng đá chính xác không xác đßnh ra số các chā số có nghĩa phÁi in theo

Lánh này t°¢ng đ°¢ng vãi printf("\n%f\n%8.2f", x, n, y);

Vì n=8 t°¢ng ứng vãi vß trí *

25.500000 -47.34

Trang 29

2.3 Hàm nh Áp dā liáu vào từ bàn phím

2.3.1 Hàm getchar (): C¢ chế vào đ¢n giÁn nhÃt là đác từng ký tự từ thiết bß vào chuẩn, nói chung là bàn phím và màn hình của ng°åi sÿ dāng, bằng hàm getchar()

Cách dùng: biến = getchar();

Công dāng: Nhận mát ký tự vào từ bàn phím và không đ°a ra màn hình Hàm sẽ trÁ vß

ký tự nhận đ°ÿc và l°u vào biến

NÁu dùng: biến=getch(); Thì biến sẽ chứa ký tự đác vào

Ví dā: c = getch(); // biến c sẽ chứa ký tự đác vào

2.3 3 Vào sá liáu từ bàn phím - hàm scanf:

Hàm scanf là hàm đác thông tin từ thiết bß vào chuẩn (bàn phím), chuyán dßch chúng (thành số nguyên, số thực, ký tự vv ) rồi l°u trā nó vào bá nhã theo các đßa chỉ xác đßnh

Cách dùng: scanf(xâu đißu khián, đối 1, đối 2, );

sau của scanf

Đặc tÁ có thá viÁt mßt cách tổng quát nh° sau:

%[*][d d]ký tự chuyán d¿ng

Viác có mặt của dÃu * nói lên rằng tr°ång vào vẫn đ°ÿc dò đác bình th°ång, nh°ng giá trß của nó bß bỏ qua (không đ°ÿc l°u vào bá nhã) Nh° vậy đặc tÁ chứa dÃu * sẽ không có đối t°¢ng ứng

d d: là mát dãy số xác đßnh chißu dài cực đ¿i của tr°ång vào, ý nghĩa của nó đ°ÿc giÁi thích nh° sau:

Nếu tham số d d vắng mặt hoặc nếu giá trß của nó lãn h¢n hay bằng đá dài của tr°ång vào t°¢ng ứng thì toàn bá tr°ång vào sẽ đ°ÿc đác, nái dung của nó đ°ÿc dßch và đ°ÿc gán cho đßa chỉ t°¢ng ứng (nếu không có dÃu *)

Nếu giá trß của d d nhỏ h¢n đá dài của tr°ång vào thì chỉ phÅn đÅu của tr°ång có kích

cỡ bằng d d đ°ÿc đác và gán cho đßa chỉ của biến t°¢ng ứng PhÅn còn l¿i của tr°ång sẽ đ°ÿc xem xét bçi các đặc tÁ và đối t°¢ng ứng tiếp theo

Ví dā: int a;

float x, y;

char ch[6], ct[6] ; //khai báo xâu ký tự

scanf("%f%5f%3d%3s%s", &x, &y, &a, &ch, &ct);

Vãi dòng vào: 54.32e-1 25 12452348a

Trang 30

Kết quÁ là lánh scanf sẽ gán

5.432 cho x

25.0 cho y

124 cho a

xâu "523" và dÃu kết thúc \0 cho ch

xâu "48a" và dÃu kết thúc \0 cho ct

Ký tự chuyán d¿ng: Ký tự chuyán d¿ng xác đßnh cách thức dò đác các ký tự trên dòng

vào cũng nh° cách chuyán dßch thông tin đác đựÿc tr°ãc khi gán nó cho các đßa chỉ t°¢ng ứng

Cách dò đác thứ nhÃt là đác theo tr°ång vào, khi đó các khoÁng trắng bß bỏ qua Cách này áp dāng cho hÅu hết các tr°ång hÿp

Cách dò đác thứ hai là đác theo ký tự, khi đó các khoÁng trắng cũng đ°ÿc xem xét bình đẳng nh° các ký tự khác Ph°¢ng pháp này chỉ xÁy ra khi ta sÿ dāng mát trong ba ký tự chuyán d¿ng sau: C, [ dãy ký tự ], [^ dãy ký tự ]

Các ký tự chuyán d¿ng và ý nghĩa của nó:

c Vào mát ký tự, đối t°¢ng ứng là con trỏ ký tự Có xét ký tự khoÁng trắng

d Vào mát giá trß kiáu int, đối t°¢ng ứng là con trỏ kiáu int Tr°ång phÁi vào là số

s Vào mát giá trß kiáu double, đối t°¢ng ứng là con trỏ kiáu char, tr°ång vào phÁi

là dãy ký tự bÃt kỳ không chứa các dÃu cách và các dÃu xuống dòng BÁng 2.3 Ý nghĩa các ký tự chuyán d¿ng

Trang 31

[ Dãy ký tự ]: Các ký tự trên dòng vào sẽ lÅn l°ÿt đ°ÿc đác cho đến khi nào gặp mát ký

tự không thußc tập các ký tự đặt trong[] Đối t°¢ng ứng là con trỏ kiáu char Tr°ång vào là

dãy ký tự bÃt kỳ (khoÁng trắng đ°ÿc xem nh° mát ký tự)

[ ^Dãy ký tự ]: Ng°ÿc l¿i của tr°ång hÿp trên

Ví dā:

int a, b;

char ch[10], ck[10];

scanf("%d%[0123456789]%[^0123456789]%3d", &a, ch, ck, &b);

Vãi dòng vào: 35 13145 xyz 584235

Sẽ gán: 35 cho a

xâu "13145" cho ch

xâu "xyz' cho ck

584 cho b

Chú ý: Xét đo¿n ch°¢ng trình dùng đá nhập (từ bàn phím) ba giá trß nguyên rồi gán cho

ba biến a, b, c nh° sau: int a, b, c;

scanf("%d%d%d=, &a, &b, &c);

Đá vào số liáu ta có thá thao tác theo nhißu cách khác nhau:

Cách 1: аa ba số vào cùng mát dòng, các số phân cách nhau bằng dÃu cách hoặc dÃu tab

Cách 2: аa ba số vào ba dòng khác nhau

Cách 3: Hai số đÅu cùng mát dòng (cách nhau bçi dÃu cách hoặc tab), số thứ ba trên dòng tiếp theo

Cách 4: Số thứ nhÃt trên mát dòng, hai số sau cùng mát dòng tiếp theo (cách nhau bçi dÃu cách hoặc tab), số thứ ba trên dòng tiếp theo Khi vào sai sẽ báo lßi và nhÁy vß ch°¢ng trình chứa låi gái nó

Ví dā minh háa sÿ dāng hàm printf, scanf nhập vào hai số a, b kiáu nguyên, tính toán và đ°a kết quÁ biáu thức ab, alên màn hình

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

void main()

{ int a, b; float kq;

printf("\nNhap so thu nhat a= "); scanf("%d", &a);

printf("\nNhap so thu hai b= "); scanf("%d", &b);

kq=sqrt(a);

printf("\nKet qua %d ^ %4d = %6.2f", a, b, pow(a, b));

printf("\nKet qua can bac 2 cua %d = %4.2f", a, kq);

getch();

}

Trang 32

2.4 Câu l ánh r¿ nhánh

2.4 1 Lánh if-else: Toán tÿ if cho phép lựa chán ch¿y theo mát trong hai nhánh tuỳ

thuác vào sự bằng không và khác không của biáu thức Nó có hai cách viết sau:

if (biáu thức) khối lánh 1;

// D¿ng mát

if (biáu thức) khối lánh 1;

else khối lánh 2 ; // D¿ng hai Ho¿t đáng của biáu thức d¿ng 1:

Máy tính giá trß của biáu thức Nếu biáu thức đúng (biáu thức có giá trß khác 0) máy sẽ

thực hián khối lánh 1 và sau đó sẽ thực hián các lánh tiếp sau lánh if trong ch°¢ng trình Nếu

biáu thức sai (biáu thức có giá trß bằng 0) thì máy bỏ qua khối lánh 1 mà thực hián ngay các

lánh tiếp sau lánh if trong ch°¢ng trình

Ho¿t đáng của biáu thức d¿ng 2:

Máy tính giá trß của biáu thức Nếu biáu thức đúng (biáu thức có giá trß khác 0) máy sẽ thực hián khối lánh 1 và sau đó sẽ thực hián các lánh tiếp sau khối lánh 2 trong ch°¢ng trình Nếu biáu thức sai (biáu thức có giá trß bằng 0) thì máy bỏ qua khối lánh 1 mà thực hián khối lánh 2 sau đó thực hián tiếp các lánh tiếp sau khối lánh 2 trong ch°¢ng trình

printf("\n Cho a="); scanf("%f", &a);

printf("\n Cho b="); scanf("%f", &b);

printf("\n Cho a= "); scanf("%f", &a);

printf("\n Cho b= "); scanf("%f", &b);

printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f", a, b, max);

Trang 33

}

Sự lồng nhau của các toán tÿ if:

C cho phép sÿ dāng các toán tÿ if lồng nhau có nghĩa là trong các khối lánh (1 và 2) ç trên có thá chứa các toán tÿ if - else khác Trong tr°ång hÿp này, nếu không sÿ dāng các dÃu đóng mç ngoặc cho các khối thì sẽ có thá nhÅm lẫn giāa các if-else

Chú ý là máy sẽ gắn toán tÿ else vãi toán tÿ if không có else gÅn nhÃt Chẳng h¿n nh°

thì else ç đây sẽ đi vãi if thứ hai

Đo¿n ch°¢ng trình trên t°¢ng đ°¢ng vãi :

Trang 34

printf("\n Phuong trinh vo nghiem ");

2.5 Câu l ánh lựa chãn-lánh switch

Là cÃu trúc t¿o nhißu nhánh đặc biát Nó căn cứ vào giá trß mát biáu thức nguyên đá chán mát trong nhißu cách nhÁy

CÃu trúc tổng quát của nó là:

switch (biáu thức nguyên)

Vãi ni là các số nguyên, hằng ký tự hoặc biáu thức hằng Các ni cÅn có giá trß khác

nhau Đo¿n ch°¢ng trình nằm giāa các dÃu { } gái là thân của toán tÿ switch

default là mát thành phÅn không bắt buác phÁi có trong thân của switch

Sự ho¿t đáng của toán tÿ switch phā thuác vào giá trß của biáu thức viết trong dÃu

ngoặc () nh° sau:

Khi giá trß của biáu thức này bằng ni, máy sẽ nhÁy tãi các câu lánh có nhãn là case ni

Khi giá trß biáu thức khác tÃt cÁ các ni thì cách làm viác của máy l¿i phā thuác vào sự có mặt hay không của lánh default nh° sau:

Khi có default máy sẽ nhÁy tãi câu lánh sau nhãn default

Khi không có default máy sẽ nhÁy ra khỏi cÃu trúc switch

Chú ý:

Máy sẽ nhÁy ra khỏi toán tÿ switch khi nó gặp câu lánh break hoặc dÃu ngoặc xoắn đóng cuối cùng của thân switch Ta cũng có thá dùng câu lánh goto trong thân của toán tÿ

switch đá nhÁy tãi mát câu lánh bÃt kỳ bên ngoài switch

Khi toán tÿ switch nằm trong thân mát hàm nào đó thì ta có thá sÿ dāng câu lánh return trong thân của switch đá ra khỏi hàm này (lánh return sẽ đß cập sau)

Khi máy nhÁy tãi mát câu lánh nào đó thì sự ho¿t đáng tiếp theo của nó sẽ phā thuác

vào các câu lánh đứng sau câu lánh này Nh° vậy nếu máy nhÁy tãi câu lánh có nhãn case ni

Trang 35

thì nó có thá thực hián tÃt cÁ các câu lánh sau đó cho tãi khi nào gặp câu lánh break, goto

hoặc return Nói cách khác, máy có thá đi từ nhóm lánh thuác case ni sang nhóm lánh thuác

case thứ ni+1 Nếu mßi nhóm lánh đ°ÿc kết thúc bằng break thì toán tÿ switch sẽ thực hián chỉ mát trong các nhóm lánh này

Ví dā: Lập ch°¢ng trình phân lo¿i hác sinh theo điám sÿ dāng cÃu trúc switch:

case 3: printf("Kem\n"); break;

case 4: printf("Yeu\n"); break;

case 10: printf("Gioi\n"); break;

default: printf(<Vao sai du lieu\n=);

Câu lánh for dùng đá xây dựng cÃu trúc lặp có d¿ng sau:

for (biáu thức 1; biáu thức 2; biáu thức 3)

Lánh hoặc khối lánh ;

Trang 36

Lánh for gồm ba biáu thức và thân for Thân for là mát câu lánh hoặc mát khối lánh viết sau từ khoá for BÃt kỳ biáu thức nào trong ba biáu thức trên có thá vắng mặt nh°ng phÁi giā dÃu ;

Thông th°ång biáu thức 1 là toán tÿ gán đá t¿o giá trß ban đÅu cho biến đißu khián, biáu thức 2 là mát quan há logic biáu thß đißu kián đá tiếp tāc chu trình, biáu thức ba là mát toán tÿ gán dùng đá thay đổi giá trß biến đißu khián

Ho¿t đßng của toán tÿ for:

Toán tÿ for ho¿t đáng theo các b°ãc sau:

B1: Xác đßnh biáu thức 1

B2: Xác đßnh biáu thức 2 (kiám tra biáu thức 2)

Tuỳ thuác vào tính đúng sai của biáu thức 2 đá máy lựa chán mát trong hai nhánh:

Nếu biáu thức hai có giá trß 0 (sai), máy sẽ ra khỏi for và chuyán tãi câu lánh sau thân for Nếu biáu thức hai có giá trß khác 0 (đúng), máy sẽ thực hián các câu lánh trong thân for B3: Tính biáu thức 3, sau đó quay l¿i b°ãc 2 đá bắt đÅu mát vòng mãi của chu trình

Chú ý: Nếu biáu thức 2 vắng mặt thì nó luôn đ°ÿc xem là đúng Trong tr°ång hÿp này viác ra khỏi chu trình for cÅn phÁi đ°ÿc thực hián nhå các lánh break, goto hoặc return viết trong thân chu trình

Trong dÃu ngoặc tròn sau từ khoá for gồm ba biáu thức phân cách nhau bçi dÃu ; Trong mßi biáu thức không nhāng có thá viết mát biáu thức mà có quyßn viết mát dãy biáu thức phân cách nhau bçi dÃu phÁy Khi đó các biáu thức trong mßi phÅn đ°ÿc xác đßnh từ trái sang phÁi Tính đúng sai của dãy biáu thức đ°ÿc tính là tính đúng sai của biáu thức cuối cùng trong dãy này

Trong thân của for ta có thá dùng thêm các toán tÿ for khác, vì thế ta có thá xây dựng các toán tÿ for lồng nhau

Khi gặp câu lánh break trong thân for, máy ra sẽ ra khỏi toán tÿ for sâu nhÃt chứa câu lánh này Trong thân for cũng có thá sÿ dāng toán tÿ goto đá nhÁy đến mát ví trí mong muốn bÃt kỳ

2.6.2 Câu lánh while

- Cú pháp: while (biểu thức) Câu_lánh ;

- Nguyên tắc thực hián:

+b1 Tính giá trß của biểu thức

+b2 Nếu giá trß của biểu thức sai (= 0) thì ch°¢ng trình ra khỏi vòng while

+b3 Nếu giá trß của biểu thức đúng thì thực hián Câu_lánh và quay l¿i b1

- Chú ý: Biểu thức có thá gồm nhißu biáu thức nh°ng tính đúng sai phā thuác vào biáu

Trang 37

printf ("\n Số thu hai: "); scanf (" %d", &b);

printf ("\n Số thu %d: ", i);

scanf (" %d", & dayso [i]);

i ++ ; }

}

2.6.3 Câu lánh do while

- Cú pháp: do câu_lánh ; while (biểu thức) ;

- Nguyên tắc thực hián:

+b1 Máy thực hián câu_lánh;

+b2 Sau đó tính giá trß của biểu thức, nếu giá trß của biểu thức sai thì ch°¢ng trình thoát

ra khỏi vòng lặp Nếu giá trß của biểu thức đúng thì quay l¿i b1

Chú ý:

- while: Ðißu kián đ°ÿc kiám tra tr°ãc, nếu đúng mãi thực hián

- do while: câu lánh đ°ÿc thực hián tr°ãc khi kiám tra Câu lánh thực hián bao giå ít nhÃt là mát lÅn

Trang 38

i=1.0; dau = -1; saiso = 1e -4 ; pi = 4.0;

printf ("\n đang xÿ lý vui lòng đÿi !");

do{

eps = 4.0 / (2.0 * i + 1.0);

pi + = dau * eps ; dau = dau * - 1.0 ;

i + = 1.0;

}while (eps > saiso);

printf ("\n số pi là: " % f ", pi) ;

}

2.7 Câu l ánh break, continue

- Cú pháp break: Dùng đá thoát khỏi vòng lặp hoặc switch Khi gặp câu lánh này trong vòng lặp, máy ra khỏi và chỉ đến câu lánh sau các lánh trên Nếu nhißu vòng lặp > break sẽ thoát ra khỏi vòng lặp gÅn nhÃt

- Cú pháp continue: khi gặp lánh này trong các vòng lặp, máy sẽ bỏ qua phÅn còn l¿i trong vòng lặp và tiếp tāc thực hián vòng lặp tiếp theo

- Ðối vãi lánh for máy sẽ tính l¿i biáu thức 3 (bt3) và quay l¿i b°ãc 2

- Ðối vãi lánh while, do while máy sẽ tính l¿i giá trß của biểu thức và quay l¿i b°ãc 1

Ví dā: Nhập 1 chußi ký tự ká cÁ ký tự trống và bỏ qua các ký tự không hÿp lá và kết thúc khi Ãn ESC hoặc số ký tự v°ÿt quá kích th°ãc mÁng

char xau [MAXL], kytu ;

1 Viết ct giÁi bÃt pt ax+b>0

2 Nhập vào đá dài 3 c¿nh a, b, c của 1 tam giác

a Cho biết 3 c¿nh đó có lập thành mát tam giác không ?

b Nếu có, cho biết lo¿i tam giác này (th°ång, cân, vuông, đßu, vuông cân)

3 Viết ch°¢ng trình nhập vào mát số nguyên n gồm ba chā số XuÃt ra màn hình chā số lãn nhÃt ç vß trí nào?

Ngày đăng: 28/07/2023, 21:17

HÌNH ẢNH LIÊN QUAN

Hình 1.2. Giao dián Dev C  DevCpp là mỏt phÅn mòm mó nguồn mỗ, dung l°ÿng bỏ cài đặt DevCpp khoÁng 8, 89 - Bài giảng kỹ thuật lập trình c
Hình 1.2. Giao dián Dev C DevCpp là mỏt phÅn mòm mó nguồn mỗ, dung l°ÿng bỏ cài đặt DevCpp khoÁng 8, 89 (Trang 12)
Hình 1.1. Giao dián Turbo C  Turbo C++ 3.0 là cụng cā phổ biến nhÃt hiỏn nay đ°ÿc dựng trong cỏc mụi tr°ồng giỏo  dāc khi cÅn d¿y vò lập trỡnh C/C++ c bÁn - Bài giảng kỹ thuật lập trình c
Hình 1.1. Giao dián Turbo C Turbo C++ 3.0 là cụng cā phổ biến nhÃt hiỏn nay đ°ÿc dựng trong cỏc mụi tr°ồng giỏo dāc khi cÅn d¿y vò lập trỡnh C/C++ c bÁn (Trang 12)
Hình 1.3. Giao dián Pelles C for Windows  Pelles C for Windows (phiờn bÁn hiỏn t¿i 4.50.113) là cụng cā IDE miòn phớ dành cho  viỏc phỏt triỏn ứng dāng C trờn Windows - Bài giảng kỹ thuật lập trình c
Hình 1.3. Giao dián Pelles C for Windows Pelles C for Windows (phiờn bÁn hiỏn t¿i 4.50.113) là cụng cā IDE miòn phớ dành cho viỏc phỏt triỏn ứng dāng C trờn Windows (Trang 13)
Hình 1.4. Giao dián của C-Free - Bài giảng kỹ thuật lập trình c
Hình 1.4. Giao dián của C-Free (Trang 14)