Kỹ thuật lập trình C Chương 4: Cấu trúc 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);

pdf14 trang | Chia sẻ: lylyngoc | Lượt xem: 1578 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Kỹ thuật lập trình C Chương 4: Cấu trúc lặp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
bangtqh@hotmail.com KỸ THUẬT LẬP TRÌNH C Chương 4: Cấu trúc lặp 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 2bangtqh@hotmail.com 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); 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 3bangtqh@hotmail.com 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 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ụ: 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 4bangtqh@hotmail.com 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. FALSE TRUE 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 5bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 6bangtqh@hotmail.com 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 7bangtqh@hotmail.com NSTính 3...963 ++++= Vòng lặp chạy ngược từ N trở về 1 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 8bangtqh@hotmail.com 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. 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 9bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 10bangtqh@hotmail.com Kiểu array – mng • 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 11bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 12bangtqh@hotmail.com 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 a[5] = { 10, 20, 30, 40, 50}; double d[100] = { 1.5, 2.7}; short primes[] = { 1, 2, 3, 5, 7, 11, 13}; long b[50] = { 0 }; cách nhanh nhất để khởi tạo tất cả các thành phần bằng 0 Trình biên dịch xác định kích thước gồm 7 thành phần int i = 7; const int c = 5; int a[i]; double d[c]; short primes[]; 2 thành phần đầu tiên được khởi tạo, phần còn lại: 0 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 13bangtqh@hotmail.com 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 main() { int a[6]; int i = 7; a[0] = 59; a[5] = -10; a[i/2] = 2; a[6] = 0; a[-1] = 5; return 0; } int main() { int a[6]; int i = 7; a[0] = 59; a[5] = -10; a[i/2] = 2; a[6] = 0; a[-1] = 5; return 0; } 0 a 1 2 3 4 5 59 -10 2 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 14bangtqh@hotmail.com Kiểu array – Thao tác cơ sở Giới hạn chỉ số mảng ? 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 15bangtqh@hotmail.com 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. 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 16bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 17bangtqh@hotmail.com Lặp dạng while – Ví dụ 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 18bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 19bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 20bangtqh@hotmail.com Lặp do…while - ví dụ 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 21bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 22bangtqh@hotmail.com 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. 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 23bangtqh@hotmail.com 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. 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 24bangtqh@hotmail.com Bắt phím 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 25bangtqh@hotmail.com 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 bắt phím …… Phím PgDn0/81 Phím PgUp0/73 Phím Delete0/83 Phím F20/60 Phím F10/59 Phím ESC27 Phím sang phải →0/77 Phím sang trái ←0/75 Phím xuống ↓0/80 Phím lên ↑0/72 Phím điều khiểnMã 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 26bangtqh@hotmail.com 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 04/2010 Kỹ thuật lập trình C - Cấu trúc lặp 27bangtqh@hotmail.com