Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
414,03 KB
Nội dung
KỸ THUẬT LẬP TRÌNH C Chương 4: Cấu trúc lặp bangtqh@hotmail.com 04/2010 Khái niệm vòng lặp • Một công việc ñược thực lặp lặp lại nhiều lần • Ví dụ – In hình số từ đến 10, số 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ừ tới 10 printf(“%d\n”, i); bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Lặp dạng for – Cú pháp for([B.Thức 1]; [B.thức 2]; [B.Thức 3]) ; • Các phần cặp dấu “[” “]” không bắt buộc • Các dấu “;” cặp ngoặc “(” “)” bắt buộc phải có – Ví dụ: bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Lặp dạng for Các bước hoạt động: 1.Tính B.Thức 2.Tính B.Thức • Nếu sai thoát vòng lặp • Nếu ñi vào thực việc cần lặp 3.Tính B.Thức 3, sau quay trở lại bước ñể bắt đầu bước lặp bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp FALSE TRUE 04/2010 Lặp dạng for • Biểu thức 1: Thường 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 biểu thức điều kiện • Biểu thức 3: Cũng phép gán để thay ñổi giá trị biến điều khiển bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Tính S = + + + + N Vòng lặp chạy ngược từ N trở bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Lặp dạng for • Nhận xét – Biểu thức ñược tính lần – Biểu thức 2, biểu thức khối lệnh thân lệnh for ñược lặp lặp lại nhiều lần – Dựa giá trị khởi tạo biến điều khiển, ñiều kiện lặp biểu thức tính số lần lặp • Khi biểu thức vắng mặt ñược xem ñúng (vòng lặp vô hạn) – Để thoát khỏi lệnh for trường hợp phải dùng lệnh break return • Có thể sử dụng lệnh for lồng bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Lặp dạng for Tính TBC số lẻ ≤ N Tìm ước số chung lớn (UCLN) số a, b Kiểm tra xem số N có phải số nguyên tố không? Số tiền nhiều người tham gia “Đấu trường 100” ñạt ? Hiển thị tất số nguyên tố ≤ N In hình tam giác cân độ cao N gồm toàn dấu ‘*’ có dạng bên bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 04/2010 Kiểu array – m ng • Mảng kiểu liệu có cấu trúc người lập trình định nghĩa • Dùng biểu diễn đối tượng liệu dạng dãy thành phần có kiểu với (kiểu sở) • NNLT C ñịnh khối nhớ liên tục cho biến kiểu mảng • Kích thước mảng ñược xác định khai báo không thay ñổi bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 10 04/2010 Khai báo array C kiểucơsở TênBiến[Sốphầntử]; kiểu thành phần số, số thành phần tối đa mảng Do lập trình viên đặt tên int a[100]; //a 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 bangtqh@hotmail.com 11 04/2010 Kiểu array – ví dụ #define SIZE 10 int a[5]; // a dãy gồm 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}; }; Trình biên dịch xác định kích thước gồm thành phần cách nhanh để khởi tạo tất thành phần bangtqh@hotmail.com thành phần khởi tạo, phần lại: 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 mảng truy xuất thông qua số chúng n-1 • Thao tác truy xuất không kiểm tra giới hạn 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; }} bangtqh@hotmail.com a 59 2 -10 Kỹ thuật lập trình C - Cấu trúc lặp 13 04/2010 Kiểu array – Thao tác sở Giới hạn số mảng ? bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 14 04/2010 Lặp dạng for Tính TBC số lẻ dãy số a1, a2,…,aN Tìm giá trị min/max dãy a1, a2,…,aN Đếm xem dãy a1, a2,…,aN có số nguyên tố ? Cho dãy điểm M1(x1, y1), M2(x2, y2),…,Mn(xn, yn) 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 Đếm xem có ñoạn cắt trục 0y Có ñiểm thuộc góc phần tư thứ bangtqh@hotmail.com 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 biểu thức có giá trị ñúng (khác 0) phải thực khối lệnh Việc lặp dừng lại biểu thức có giá trị sai (bằng 0) • Lặp while kiểm tra điều kiện trước thực khối lệnh – Hãy vẽ sơ ñồ khối biểu diễn lệnh while bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 16 04/2010 Lặp dạng while – Ví dụ bangtqh@hotmail.com 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 dược đặt cặp dấu “(” “)” – Biểu thức điều kiện ñược tính toán nên phải có giá trị xác định • Câu lệnh sau làm ? while(0) printf(“nothing\n”); • Hãy chuyển lệnh for dạng tổng quát thành lệnh while bangtqh@hotmail.com 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 khối lệnh; while (biểu thức); • Ý nghĩa – Thực khối lệnh biểu thức có giá trị ñúng (khác 0) – Thực khối lệnh trước kiểm tra biểu thức điều kiện – Khối lệnh thực lần • Hãy vẽ sơ ñồ khối biểu diễn lệnh … while bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 19 04/2010 Lặp do…while - ví dụ bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 20 04/2010 Lặp while do…while Viết chương trình nhập vào số nguyên N Hãy in hình biểu diễn dạng nhị phân (Binary) Viết chương trình tìm phần tử ñầu tiên dãy a1, a2,…,an thỏa mãn: tổng phần tử ñứng trước Viết lại chương trình kiểm tra xem số N có nguyên tố hay không cách sử dụng do…while Chuyển đoạn mã lệnh dạng do…while thành dạng while bangtqh@hotmail.com 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 ñệm bàn phím hàm getch() có ñược mã phím bị nhấn • Nếu ñệm bàn phím rỗng ñợi nhấn phím – Phím bị nhấn phím thường ñệm bàn phím nhận mã x – Nếu phím bị nhấn phím điều khiển ñệm bàn phím tiếp nhận mã liên tiếp ( x ) • Hàm getch() ñọc ký tự có đệm theo thứ tự ngược với thứ tự ñưa vào bangtqh@hotmail.com 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 ñệm bàn phím xem có phím bị nhấn không kbhit() Bước 2: Nếu hàm kbhit() trả giá trị ≠ 2.1 Bắt phím lần 1: key1 = getch(); 2.2 Kiểm tra key1 == • 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 bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 23 04/2010 Bắt phím bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 24 04/2010 Kỹ thuật bắt phím 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 … bangtqh@hotmail.com ↓ Viết chương trình hiển thị lên hình dấu ‘*’ sau ñó cho phép người dùng dùng phím mũi tên di chuyển dấu ‘*’ khắp hình Chương trình kết thúc 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 continue • Lệnh break thường sử dụng kết hợp lệnh lặp – Dùng để thoát khỏi vòng lặp 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 lệnh break thoat vòng lặp trực tiếp chứa • Lệnh continue – Dùng để quay trở lại từ ñầu vòng lặp – Thực lần lặp mà không ñi hết lệnh lại thân vòng lặp bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 26 04/2010 bangtqh@hotmail.com Kỹ thuật lập trình C - Cấu trúc lặp 27 [...]... 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... lập trình C - C u tr c lặp 23 04/ 2010 Bắt phím bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 24 04/ 2010 Kỹ thuật bắt phím 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 … bangtqh@hotmail.com ↓ Viết chương trình hiển thị lên màn hình 1 dấu ‘*’ sau ñó cho phép... bangtqh@hotmail.com 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... 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... bangtqh@hotmail.com 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 bangtqh@hotmail.com Kỹ thuật lập trình. .. 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 bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 26 04/ 2010 bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 27 ... phím điều khiển bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 23 04/ 2010 Bắt phím bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 24 04/ 2010 Kỹ thuật bắt phím Mã Phím điều khiển... bangtqh@hotmail.com a 59 2 -10 Kỹ thuật lập trình C - C u tr c lặp 13 04/ 2010 Kiểu array – Thao t c sở Giới hạn số mảng ? bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 14 04/ 2010 Lặp dạng... NNLT C ñịnh khối nhớ liên t c cho biến kiểu mảng • Kích thư c mảng ñư c x c định khai báo không thay ñổi bangtqh@hotmail.com Kỹ thuật lập trình C - C u tr c lặp 10 04/ 2010 Khai báo array C kiểucơsở