Tải bản đầy đủ (.pdf) (14 trang)

Bài giảng kỹ thuật lập trình c chương 4 ths trần quang hải bằng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (414.03 KB, 14 trang )

KỸ THUẬT LẬP TRÌNH C
Chương 4: Cấu trúc lặp



04/2010

Khái niệm vòng lặp
• Một công việc nào đó ñược thực hiện
lặp đi lặp lại nhiều lần
• Ví dụ
– In ra màn hình các số từ 1 đến 10, mỗi số
trên một dòng
• Giải pháp đơn giản
– printf(“1\n”);
– printf(“2\n”);
–…
– printf(“10\n”);
• Giải pháp tổng quát
– Lặp i chạy từ 1 tới 10

printf(“%d\n”, i);



Kỹ thuật lập trình C - Cấu trúc lặp

2


04/2010



Lặp dạng for
– Cú pháp

for([B.Thức 1]; [B.thức 2]; [B.Thức 3])
<Lệnh cần lặp>;
• Các phần trong cặp dấu “[” và “]” là không bắt buộc
• Các dấu “;” và cặp ngoặc “(” và “)” bắt buộc phải có

– Ví dụ:



Kỹ thuật lập trình C - Cấu trúc lặp

3

04/2010

Lặp dạng for
Các bước hoạt động:
1.Tính B.Thức 1.
2.Tính B.Thức 2.
• Nếu sai
thoát vòng lặp.
• Nếu đúng
ñi vào thực hiện
việc cần lặp

3.Tính B.Thức 3, sau đó

quay trở lại bước 2 ñể bắt
đầu các bước lặp mới.


Kỹ thuật lập trình C - Cấu trúc lặp

FALSE
TRUE

4


04/2010

Lặp dạng for
• Biểu thức 1: Thường là 1 phép gán để khởi tạo giá trị ban ñầu cho
biến điều khiển
• Biểu thức 2: Thường là 1 biểu thức điều kiện
• Biểu thức 3: Cũng là 1 phép gán để thay ñổi giá trị biến điều khiển



Kỹ thuật lập trình C - Cấu trúc lặp

5

04/2010




Kỹ thuật lập trình C - Cấu trúc lặp

6


04/2010

Tính S = 3 + 6 + 9 + ... + 3 N

Vòng lặp chạy
ngược từ N trở
về 1



Kỹ thuật lập trình C - Cấu trúc lặp

7

04/2010

Lặp dạng for
• Nhận xét
– Biểu thức 1 chỉ ñược tính một lần
– Biểu thức 2, biểu thức 3 và khối lệnh trong
thân lệnh for ñược lặp đi lặp lại nhiều lần
– Dựa các giá trị khởi tạo biến điều khiển, ñiều
kiện lặp và biểu thức 3 có thể tính được số lần
lặp.


• Khi biểu thức 2 vắng mặt thì nó ñược xem
là ñúng (vòng lặp vô hạn).
– Để thoát khỏi lệnh for trong trường hợp này
phải dùng lệnh break hoặc return

• Có thể sử dụng các lệnh for lồng nhau.


Kỹ thuật lập trình C - Cấu trúc lặp

8


04/2010

Lặp dạng for
1. Tính TBC các số lẻ ≤ N
2. Tìm ước số chung lớn nhất (UCLN) của 2
số a, b
3. Kiểm tra xem số N có phải là số nguyên
tố không?
4. Số tiền nhiều nhất 1 người tham gia “Đấu
trường 100” có thể ñạt được là bao nhiêu
?
5. Hiển thị tất cả các số nguyên tố ≤ N
6. In ra màn hình tam giác cân độ cao N
gồm toàn các dấu ‘*’ có dạng bên


Kỹ thuật lập trình C - Cấu trúc lặp


9

04/2010

Kiểu array – m ng
• Mảng là một kiểu dữ liệu có cấu trúc do
người lập trình định nghĩa
• Dùng biểu diễn các đối tượng dữ liệu ở dạng
một dãy các thành phần có cùng kiểu với
nhau (kiểu cơ sở)
• NNLT C luôn chỉ ñịnh một khối nhớ liên tục
cho một biến kiểu mảng
• Kích thước của mảng ñược xác định ngay
khi khai báo và không bao giờ thay ñổi


Kỹ thuật lập trình C - Cấu trúc lặp

10


04/2010

Khai báo array trong C
kiểucơsở TênBiến[Sốphầntử];
kiểu của mỗi thành phần

hằng số, số thành phần
tối đa của mảng


Do lập trình viên đặt tên

int

a[100];

//a là mảng biểu diễn dãy gồm 100 số nguyên int

Kỹ thuật lập trình C - Cấu trúc lặp



11

04/2010

Kiểu array – ví dụ
#define
SIZE
10
int
a[5];
// a dãy gồm 5 số nguyên
long int big[100]; // big: chiếm 400 bytes!
double d[100];
// d: chiếm 800 bytes!
long double
v[SIZE];
// v:10 long doubles


int
double
short
long

a[5]
d[100]
primes[]
b[50]

=
=
=
=

{
{
{
{

10, 20, 30, 40, 50};
1.5, 2.7};
1, 2, 3, 5, 7, 11, 13};
0 };

Trình biên dịch xác định kích
thước gồm 7 thành phần
cách nhanh nhất để khởi tạo
tất cả các thành phần bằng 0



2 thành phần đầu tiên
được khởi tạo, phần
còn lại: 0

int
i = 7;
const int c = 5;
int
a[i];
double
d[c];
short
primes[];

Kỹ thuật lập trình C - Cấu trúc lặp

12


04/2010

Kiểu array – Lưu ý
• Các thành phần của mảng được truy xuất thông qua chỉ
số của chúng 0..n-1
• Thao tác truy xuất không kiểm tra giới hạn của chỉ số
int
int main()
main()

{{
int
int a[6];
a[6];
int
i
int
i == 7;
7;
a[0]
=
59;
a[0] = 59;
a[5]
a[5] == -10;
-10;
a[i/2]
=
a[i/2] = 2;
2;
a[6]
=
0;
a[6] = 0;
a[-1]
a[-1] == 5;
5;
return
return 0;
0;

}}


a

59

0
1

2

2
3
4

-10

5

Kỹ thuật lập trình C - Cấu trúc lặp

13

04/2010

Kiểu array – Thao tác cơ sở
Giới hạn chỉ
số mảng ?




Kỹ thuật lập trình C - Cấu trúc lặp

14


04/2010

Lặp dạng for
1. Tính TBC các số lẻ trong dãy số a1,
a2,…,aN
2. Tìm giá trị min/max trong dãy a1, a2,…,aN
3. Đếm xem trong dãy a1, a2,…,aN có bao
nhiêu số nguyên tố ?
4. Cho dãy điểm M1(x1, y1), M2(x2,
y2),…,Mn(xn, yn) trên mặt phẳng. Hãy:





Tìm độ dài đường gấp khúc M1M2..Mn
Tìm đoạn MiMj (i≠j) có ñộ dài lớn nhất
Đếm xem có bao nhiêu ñoạn cắt trục 0y
Có bao nhiêu ñiểm thuộc góc phần tư thứ
nhất.




Kỹ thuật lập trình C - Cấu trúc lặp

15

04/2010

Lặp dạng while
• Lệnh lặp while
– Cú pháp
while (biểu thức)
khối lệnh cần lặp;
– Ý nghĩa
• Trong khi biểu thức có giá trị ñúng (khác 0) thì còn
phải thực hiện khối lệnh. Việc lặp dừng lại khi biểu
thức có giá trị sai (bằng 0).
• Lặp while kiểm tra điều kiện trước khi thực hiện
khối lệnh.

– Hãy vẽ sơ ñồ khối biểu diễn lệnh while


Kỹ thuật lập trình C - Cấu trúc lặp

16


04/2010

Lặp dạng while – Ví dụ




Kỹ thuật lập trình C - Cấu trúc lặp

17

04/2010

Lặp dạng while – Lưu ý
• Nhận xét
– Biểu thức điều kiện luôn dược đặt trong cặp dấu
“(” và “)”
– Biểu thức điều kiện sẽ ñược tính toán đầu tiên
nên phải có giá trị xác định

• Câu lệnh sau làm gì ?
while(0) printf(“nothing\n”);

• Hãy chuyển lệnh for dạng tổng quát thành
lệnh while


Kỹ thuật lập trình C - Cấu trúc lặp

18


04/2010

Lặp dạng do…while

• Cú pháp
do
khối lệnh;
while (biểu thức);

• Ý nghĩa
– Thực hiện khối lệnh trong khi biểu thức có giá trị ñúng (khác
0)
– Thực hiện khối lệnh trước khi kiểm tra biểu thức điều kiện
– Khối lệnh được thực hiện ít nhất 1 lần

• Hãy vẽ sơ ñồ khối biểu diễn lệnh do … while


Kỹ thuật lập trình C - Cấu trúc lặp

19

04/2010

Lặp do…while - ví dụ



Kỹ thuật lập trình C - Cấu trúc lặp

20


04/2010


Lặp while và do…while
1. Viết chương trình nhập vào số nguyên
N. Hãy in ra màn hình biểu diễn của nó
ở dạng nhị phân (Binary)
2. Viết chương trình tìm phần tử ñầu tiên
trong dãy a1, a2,…,an thỏa mãn: bằng
tổng các phần tử ñứng trước nó.
3. Viết lại chương trình kiểm tra xem số N
có nguyên tố hay không bằng cách sử
dụng do…while
4. Chuyển đoạn mã lệnh dạng do…while
thành dạng while


Kỹ thuật lập trình C - Cấu trúc lặp

21

04/2010

Kỹ thuật bắt phím
• Đọc trong bộ ñệm bàn phím bằng hàm
getch()
có ñược mã của phím bị nhấn.
• Nếu bộ ñệm bàn phím rỗng
ñợi nhấn 1
phím.
– Phím bị nhấn là phím thường
bộ ñệm bàn

phím nhận 1 mã x
– Nếu phím bị nhấn là phím điều khiển
bộ ñệm
bàn phím tiếp nhận 2 mã liên tiếp ( x và 0 )

• Hàm getch() sẽ ñọc các ký tự có trong bộ
đệm theo thứ tự ngược với thứ tự ñưa vào.


Kỹ thuật lập trình C - Cấu trúc lặp

22


04/2010

Kỹ thuật bắt phím
Bước 1: Kiểm tra bộ ñệm bàn phím xem có
phím nào bị nhấn không kbhit()
Bước 2: Nếu hàm kbhit() trả về giá trị ≠ 0
2.1. Bắt phím lần 1: key1 = getch();
2.2. Kiểm nếu tra key1 == 0
• Sai: xử lý ñối với trường hợp phím thường
• Đúng: Bắt phím lần 2: key2 = getch();
xử lý trường hợp phím điều khiển.



Kỹ thuật lập trình C - Cấu trúc lặp


23

04/2010

Bắt phím



Kỹ thuật lập trình C - Cấu trúc lặp

24


04/2010

Kỹ thuật bắt phím


Phím điều khiển

0/72

Phím lên ↑

0/80

Phím xuống

0/75


Phím sang trái ←

0/77

Phím sang phải →

27

Phím ESC

0/59

Phím F1

0/60

Phím F2

0/83

Phím Delete

0/73

Phím PgUp

0/81

Phím PgDn







Viết chương trình hiển thị lên
màn hình 1 dấu ‘*’ sau ñó
cho phép người dùng dùng
các phím mũi tên di chuyển
dấu ‘*’ khắp màn hình.
Chương trình sẽ kết thúc nếu
người dùng bấm phím ESC.


Kỹ thuật lập trình C - Cấu trúc lặp

25

04/2010

break và continue
• Lệnh break thường được sử dụng kết hợp
lệnh lặp
– Dùng để thoát khỏi vòng lặp một cách bất
thường (không quan tâm tới điều kiện lặp)
– Nếu có nhiều lệnh lặp lồng nhau thì lệnh break
chỉ thoat vòng lặp trực tiếp chứa nó

• Lệnh continue
– Dùng để quay trở lại từ ñầu vòng lặp

– Thực hiện lần lặp mới mà không ñi hết các lệnh
còn lại trong thân vòng lặp


Kỹ thuật lập trình C - Cấu trúc lặp

26


04/2010



Kỹ thuật lập trình C - Cấu trúc lặp

27



×