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

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

Đ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

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ở

Ngày đăng: 04/12/2015, 18:18

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan