Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 8: Các lệnh điều khiển và vòng lặp
8.1 Lệnh đơn và lệnh phức
8.2 Lệnh IF
8.3 Lệnh SWITCH-CASE
8.4 Lệnh WHILE
8.5 Lệnh DO-WHILE
8.6 Lệnh FOR
8.7 Lệnh BREAK và lệnh
CONTINUE
8.8 Lệnh RETURN
8.9 Lệnh GOTO
8.10 Lệnh RỖNG
Bài tập cuối chương
ƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.6 LỆNH FOR CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.6 LỆNH FOR Ví dụ: vòng lặp for để tính tổng từ 1 tới n như sau s = 0; for (i = 1; i <= n; i++) s += i; Có thể viết ngắn gọn hơn như sau for (i = 1, s = 0; i <= n; i++) s += i; CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.6 LỆNH FOR Ví dụ: Nhập các ký tự cho đến khi nào nhận được ký tự ESC có mã ASCII là 27 thì kết thúc chương trình. #include #include #define ESC 27 main() { char c; clrscr(); printf ("Cac ky tu duoc nhap la: "); for ( ; (c = getch()) != ESC;) ; } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE Đây là hai lệnh nhảy không điều kiện của C, chúng cho phép lập trình viên có thể thay đổi tiến trình lặp của các cấu trúc lặp mà ta đã biết: for, while, do-while. CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 1. Lệnh break Trong cấu trúc switch-case, lệnh break sẽ kết thúc lệnh switch-case; còn trong các cấu trúc lặp thì lệnh break cho phép thoát sớm ra khỏi vòng lặp (while, for hoặc do-while) chứa nó mà không cần xét điều kiện của lệnh kế tiếp sau vòng lặp. Cú pháp của lệnh break: break; CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 1. Lệnh break CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 1. Lệnh break Ví dụ: CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 1. Lệnh break Ví dụ: CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue lệnh continue có tác dụng chuyển điều khiển chương trình về đầu vòng lặp chuẩn bị cho chu kỳ lặp mới, bỏ qua các lệnh còn lại nằm ngay sau lệnh nó trong chu kỳ lặp hiện hành. Lệnh này chỉ được dùng trong các vòng lặp, để bỏ qua các lệnh không cần thực thi trong vòng lặp khi cần thiết. Cú pháp lệnh continue: continue; CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue Ví dụ: i = 0; while (i <= 10) { i ++; if (i >= 6 && i <= 8) continue; printf ("Trị hiện thời của i là %d\n", i); } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue Ví dụ: Viết chương trình nhập một dãy số, tính tổng của các số dương trong dãy số đó và thương số của tổng đó với từng số dương này. CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue #include #include main() { double a[100]; double tong; int i, n; clrscr(); printf ("Co bao nhieu so can tinh: "); scanf ("%d", &n); printf ("Nhap cac so can tinh tong: "); CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue for (i = 0; i < n; i++) scanf ("%lf", &a[i]); for (i = 0, tong = 0; i < n; i++) { if (a[i] <= 0) continue; tong += a[i]; } printf ("Tong cua cac so duong la %/. 2f\n", tong); CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.7 LỆNH BREAK VÀ LỆNH CONTINUE 2. Lệnh continue for (i = 0; i < n; i++) { if (a[i] <= 0) continue; printf("Thuong cua tong voi so thu %d la %5,2f\n",i,tong/a[i]); } getch(); } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 2.8 LỆNH RETURN Lệnh này dùng để thoát ra khỏi hàm hiện thời trở về hàm đã gọi nó, có thể trả về cho hàm gọi một trị. Lệnh này sẽ kết thúc hàm dù nó nằm ở đâu trong thân hàm. Khi gặp lệnh này C sẽ không thực hiện bất cứ lệnh nào sau lệnh return nữa. Các cú pháp của lệnh return như sau: return; return (biểu-thức); return biểu-thức; CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: Thiết kế hàm trả về kết quả so sánh hai số theo quy tắc sau đây: số đầu > số sau: hàm trả về trị 1 số đầu = số sau: hàm trả về trị 0 số đầu < số sau: hàm trả về trị -1 CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: int so_sanh (int a, int b) { if (a > b)/* Lệnh return kết thúc hàm, trả về trị i cho */ return 1; /* nơi đã gọi hàm */ else if (a == b) return 0; /* Trả về trị 0 cho nơi gọi hàm khi a = b */ else /* a < b */ return -1; /* Trả về trị -1 cho nơi gọi hàm khi a < b */ } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: int so_sanh (int a, int b) { if (a > b) /* Lệnh return kết thúc hàm, trả về trị 1 cho */ return 1; /* nơi đã gọi hàm */ else if (a == b) return 0; /* Trả về trị 0 cho nơi gọi hàm khi a = b */ return -1; /* Trả về trị -1 cho nơi gọi hàm khi a < b */ } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: int so_sanh (int a, int b) { return (a > b) ? 1 : (a == b) ? 0 : -1; } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: Chương trình sau dùng lệnh return để kết thúc vòng lặp lặp vô tận khi điều kiện thỏa (là phím ESC được nhấn). CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: #include #include #define ESC '\x1b' void nhan_ky_tu (void); prototype của hàm main() { char c; clrscr(); printf ("Moi ban nhap cac ky tu: "); nhan_ky_tu (); gọi hàm } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.8 LỆNH RETURN Ví dụ: void nhan_ky_tu (void) định nghĩa hàm { while (1) if (getche() == ESC) return; } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.9 LỆNH GOTO Mặc dù không ủng hộ cho việc lập trình có goto nhưng C vẫn có lệnh rẽ nhánh không điều kiện goto, lệnh này cho phép chuyển điều khiển chương trình cho một lệnh nào đó. Cú pháp của lệnh goto: goto nhãn; CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.9 LỆNH GOTO Với nhãn là một danh hiệu không chuẩn, danh hiệu này sẽ được đặt ở trước lệnh mà ta muốn nhảy đến theo cú pháp sau: nhan: lệnh nhãn mà lệnh goto muốn nhảy đến phải nằm trong cùng một hàm với lệnh goto đó, do đó trong những hàm khác nhau có thể có các tên nhãn giống nhau, nhưng trong cùng một hàm các tên nhãn này phải khác nhau. CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.9 LỆNH GOTO Ví dụ: Cách sử dụng lệnh goto trong một chương trình C main() { lap_lai: clrscr(); ... if ((c = getch()) != ESC) goto lap_lai; } CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.10 LỆNH RỖNG Trong C có khái niệm lệnh rỗng, lệnh này chỉ có một dấu chấm phẩy (;), nó rất cần thiết trong nhiều trường hợp, như đối với các vòng lặp, khi ta đặt các lệnh biểu thức thực thi vào trong các biểu thức của lệnh thì ta không cần có thêm lệnh thực thi làm thân cho chúng nữa, khi đó nếu để trống, C sẽ hiểu nhầm rằng lệnh kế tiếp sẽ là thân của vòng lặp, do đó chỉ còn cách cho một lệnh rỗng làm thân của chúng. CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.10 LỆNH RỖNG Ví dụ: Vòng lặp for để tính giai thừa từ 1 tới n như sau for (i = gt = 1; i <= n; gt *= i++) ; printf ("Giai thua %d! = %d\n", n, gt); CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP 8.10 LỆNH RỖNG Ví dụ: for (i =1,s = 0; i < 10; i++) ; s += i; printf("Tong la %d \n",s); CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP BÀI TẬP CUỐI CHƯƠNG 1. Viết một chương trình nhập 4 số và in ra a) số lớn nhất trong 4 số đó b) số nhỏ nhất trong 4 số đó 2. Viết chương trình tìm số nguyên tố từ 1 tới 100 3. Nhập một số nguyên từ bàn phím, in ra màn hình theo thứ tự ngược lại. Ví dụ nhập: 54321 xuất: 12345 CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP BÀI TẬP CUỐI CHƯƠNG 4. In ra màn hình bản cửu chương cần biết. 5. In ra màn hình các bản cửu chương từ 2 đến 9. 6. Vẽ ra màn hình hình sau: CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP BÀI TẬP CUỐI CHƯƠNG 7. Tính biểu thức sau đây a) T =1! + 2! +...+n! thông số nhập là n b) thông số nhập là n c) thông số nhập là n Biết trong C có hàm exp(x) để tính , prototype hàm này nằm trong file math.h. ! ( )! ... ( ... )! ! 1 1 2 1 n T n ... ! ! ! 1 2 n e e e T 1 2 n CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP BÀI TẬP CUỐI CHƯƠNG 8. Tính biểu thức sau: Hãy viết chương trình nhập một số a thỏa: 1 < a < 2, sau đó tìm số n thỏa điều kiện (1): s < a ... 1 1 1 1 s 1 2 (1) 2 4 8 n CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP BÀI TẬP CUỐI CHƯƠNG 9. Một người muốn gởi một số tiền vào ngân hàng, hãy viết chương trình tính tổng số tiền mà người đó có được sau khi đã gởi ngân hàng theo một trong hai cách gởi: - Gởi từng tháng rút tiền lãi - Gởi không rút lãi từng tháng, mà nhập lãi vào vốn Thông số nhập cần thiết:- Số tiền gởi lúc đầu - Thời gian gởi (theo tháng) - Lãi suất/tháng CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP KẾT THÚC CHƯƠNG 8 CHƯƠNG 8 CÁC LỆNH ĐIỀU KHIỂN VÀ VÒNG LẶP
File đính kèm:
- bai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_8_cac_lenh.pdf