CHƯƠNG 3 : CÁC CẤU TRÚC ĐIỀU KHIỂN
4. Các lệnh chuyển điều khiển
4.1. Câu lệnh break
Câu lệnh break cho phép ra khỏi các chu trình với các tốn tử for, while và switch. Khi có nhiều chu trình lồng nhau, câu lệnh break sẽ đưa máy ra khỏi chu trình bên trong nhất chứa nó khơng cần điều kiện gì. Mọi câu lệnh break có thể thay bằng câu lệnh goto với nhãn thích hợp.
Ví dụ: Biết số nguyên dương n sẽ là số ngun tố nếu nó khơng chia hết cho các số
nguyên trong khoảng từ 2 đến căn bậc hai của n. Viết đoạn chương trình đọc vào số nguyên dương n, xem n có là số nguyên tố.
#include <stdio.h> #include <math.h> unsigned int n; void main(){ int i,nt=1; printf("\n cho n="); scanf("%d",&n); for (i=2;i<=sqrt(n);++i) if ((n % i)==0){ nt=0; break; } if (nt)
printf("\n %d la so nguyen to",n); else
printf("\n %d khong la so nguyen to",n); }
4.2.Câu lệnh continue
Trái với câu lệnh break, lệnh continue dùng để bắt đầu một vịng mới của chu trình chứa nó. Trong while và do while, lệnh continue chuyển điều khiển về thực hiện ngay phần kiểm tra, còn trong for điều khiển được chuyển về bước khởi đầu lại (tức là bước: tính biểu thức 3, sau đó quay lại bước 2 để bắt đầu một vịng mới của chu trình).
Chú ý:
Lệnh continue chỉ áp dụng cho chu trình chứ khơng áp dụng cho switch.
Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ đi số 13 và số 17.
#include <stdio.h> void main(){
for (int i=10 ; i<=20; i++){ if (i==13||i==17) continue; printf(“%d , ”,i); } printf(“Ket thuc”); } 4.3.Câu lệnh Goto
Lệnh goto cho phép nhảy vô điều kiện tới bất kỳ điểm nào trong chương trình.
Ví dụ: #include <stdio.h> void main (){ int n=10; loop: ; printf(“%d ,”,n); n--; if (n>0) goto loop; printf(“Kết thúc!”); getch(); } 4.4. Hàm Exit
Hàm exit() trong C được sử dụng để thoát khỏi chương trình. Hàm này, khi được triệu gọi sẽ ngay lập tức kết thúc chương trình và chuyển quyền điều khiển cho hệ điều hành.
mã_trả_về thường là số 0. Số 0 sẽ xác định việc kết thúc chương trình một cách
bình thường. Tuy nhiên có một vài trường hợp mã_trả_về là những số khác 0 để xác định một vài loại lỗi.
5. Kết hợp các cấu trúc điều khiển trong chương trình
Ví dụ 1: Viết chương trình tìm ước số chung của 2 số.
#include<stdio.h> #include<conio.h> void main(){
unsigned int a,b;
printf("\nNhap hai so a,b: "); scanf("%u%u",&a,&b);
while (a%b==0 || b%a ==0){ if (a>b & ((a%b)==0))
printf("\nUoc chung la= %d",a/b); else if (b>a & ((b%a)==0))
printf("\Uoc chung la= %d",b/a); }
printf("\nKhong co uoc so!!!"); getch();
}
Ví dụ 2: Nhập 3 số nguyên a, b và n với a, b < n. Tính tổng các số nguyên dương nhỏ hơn n chia hết cho a nhưng không chia hết cho b.
#include <stdio.h> #include <conio.h> void main(){ int a, b, n, i, s; do{ printf(“Nhap a, b, n: ”); scanf(“%d%d%d”, &a, &b, &n);
} while (a >= n || b >= n); s = 0;
for (i = 1; i <= n – 1; i++)
if (i % a == 0 && i % b != 0) s = s + i;
printf(“Tong cac thoa yeu cau la %d”, s);
BÀI TẬP Lý thuyết
1. Nêu cú pháp và vẽ sơ đồ khối của câu lệnh if, switch for, lệnh while và lệnh do… while. Chỉ rõ điều kiện của các thành phần trong cú pháp.
2. Cho các ví dụ tương ứng
Thực hành
3. Nhập một số nguyên bất kỳ. Hãy đọc giá trị của số nguyên đó nếu nó có giá trị từ 0 đến 9, ngược lại thông báo không đọc được.
4. Nhập 3 số nguyên a, b và c từ bàn phím. Hãy tìm số có giá trị nhỏ nhất ( hoặc lớn nhất). 5. Tính tiền đi taxi từ số km nhập vào. Biết:
- 1 km đầu giá 15000đ
- Từ km thứ 2 đến km thứ 5 giá 13500đ - Từ km thứ 6 trở đi giá 11000đ
- Nếu đi hơn 120 km sẽ được giảm 10% trên tổng số tiền.
6. Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày.
Hướng dẫn: Nhập vào tháng
Nếu là tháng 1, 3, 5, 7,8, 10, 12 thì có 30 ngày Nếu là tháng 4, 6, 9, 11 thì có 31 ngày
Nếu là tháng 2 và là năm nhuận thì có 29 ngày ngược lại 28 ngày (Năm nhuận là năm chia chẵn cho 4)
7. Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, /. Nếu là + thì in ra kết quả x + y, nếu là – thì in ra x – y, nếu là * thì in ra x * y, nếu là / thì in ra x / y (nếu y = 0 thì thơng báo khơng chia được)
8. Nhập một số nguyên dương n. Hãy cho biết: a. Có phải là số đối xứng? Là số nghịch đảo bằng chính nó. Ví dụ: 121, … b. Có phải là số chính phương? Là số bằng bình phương số khác. Ví dụ: 4, 9, … c. Có phải là số nguyên tố? Là số lớn hơn 1 và chỉ có 2 ước số là 1 và nó. Ví dụ: 2, 3, 5, 7, 11, 13, … d. Chữ số lớn nhất và nhỏ nhất? Ví dụ: số 1706, nhỏ nhất 0 và lớn nhất 7
e. Các chữ số có tăng dần hay giảm dần khơng?
9. Nhập số ngun n. Tính: a. S = 1 + 2 + … + n b. S = 12 + 22 + … + n2
c. S = 1 + 1/2 + … + 1/n d. S = 1! + 2! + … + n! 10. Nhập 3 số nguyên n, a, b (a, b < n).
Tính tổng các số chia hết cho a nhưng không chia hết cho b và nhỏ hơn n. 11. Tính tổng các số nguyên tố nhỏ hơn n (0 < n < 50).
12. Nhập một số nguyên dương. Xuất ra số ngược lại.
13. Tìm và in lên màn hình tất cả các số nguyên trong phạm vi từ 10 đến 99 sao cho tích của 2 chữ số bằng 2 lần tổng của 2 chữ số đó.
14. Tìm các ước số chung nhỏ nhất của 2 số nguyên dương 15. In n số đầu tiên trong dãy Fibonacy.
Dãy Fibonacy là dãy a0, a1, …, an-2, an-1, an với: a. a0 = a1 = 1