Khái niệm về lệnh cấu trúc

Một phần của tài liệu Giáo trình Lập trình căn bản (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính): Phần 1 - CĐ nghề Vĩnh Long (Trang 38)

CHƯƠNG 3 : CÁC CẤU TRÚC ĐIỀU KHIỂN

1. Khái niệm về lệnh cấu trúc

Một chương trình bao gồm nhiều câu lệnh. Thơng thường các câu lệnh được thực hiện một cách lần lượt theo thứ tự mà chúng được viết ra. Các cấu trúc điều khiển cho phép thay đổi trật tự nói trên, do đó máy có thể nhảy thực hiện một câu lệnh khác ở một ví trí trước hoặc sau câu lệnh hiện thời.

Xét về mặt cơng dụng, có thể chia các cấu trúc điều khiển thành các nhóm chính: − Nhảy khơng có điều kiện.

− Rẽ nhánh.

− Tổ chức chu trình.

− Ngồi ra cịn một số tốn tử khác có chức năng bổ trợ như break, continue.

2. Các lệnh cấu trúc lựa chọn

2.1. Câu lệnh điều kiện

2.1.1 Khái niệm

Câu lệnh if là câu lệnh làm cho chương trình thực hiện hay khơng thực hiện câu lệnh nào đó tùy vào điều kiện nêu ra.

2.1.2. Câu lệnh if (thiếu)

Cú pháp: If (điều kiện)

lệnh;

Thực hiện <Lệnh> nếu <điều kiện> đúng.

Ngược lại,<điều kiện> sai sẽ khơng làm gì.

Sơ đồ khối

bắt đầu

Trong đó:

- <điều kiện> cho kết quả đúng hoặc sai và được đặt trong cặp dấu ngoặc đơn ( ). - <Lệnh> là câu lệnh đơn hoặc khối lệnh (kẹp các câu lệnhđơn giữa { và }).

Ví dụ: Nếu a khác khơng thì xuất thơng báo “a khác 0”.

if (a != 0) printf(“a khac 0.”); 2.1.3. Câu lệnh if (đủ) Cú pháp: If (điều kiện) lệnh 1; else lệnh 2;

Thực hiện <Lệnh 1> nếu <điều kiện> đúng.

Ngược lại, <điều kiện> sai sẽ thực hiện <Lệnh 2>.

Sơ đồ khối

Ví dụ: Tùy theo giá trị của a để xuất thông báo tương ứng.

if (a != 0)

printf(“a khac 0.”);

else

printf(“a bang 0.”);

2.1.4. Một số lưu ý

Các câu lệnh if có thể lồng vào nhau và theo nguyên tắc, phần else sẽ thuộc if gần nhất. Tuy nhiên, để cho rõ ràng và dễ hiểu ta nên đặt vào đúng cấp đồng thời thêm { và }.

if (a!=0){ if (b>0)

bắt đầu

printf(“a!=0 va b>0.”);

else

printf(“a!=0 va b<=0.”);

}

printf(“a=0.”);

Không được thêm ; sau biểu thức điều kiện vì như thế câu phần theo sau if bây giờ khơng cịn thuộc if nữa. Nói cách khác, cho dù biểu thức điều kiện là đúng hay sai thì các lệnh tiếp theo cũng sẽ được thực hiện.

Ví dụ:

int a = 0;

if (a != 0); // Phải bỏ dấu ;

printf(“a khac 0.”); // Luôn thực hiện

2.2. Câu lệnh rẽ nhánh

2.2.1. Khái niệm

Câu lệnh switch là câu lệnh làm chương trình thực hiện chọn lựa một trong nhiều hành động để thực hiện.

Trong đó:

- <Biến/BT> là biến hay biểu thức cho ra dữ liệu kiểu rời rạc, hữu hạn, đếm được như các kiểu số nguyên, ký tự, liệt kê và được đặt trong cặp dấu ngoặc đơn

“( )”. Không được sử dụng kiểu số thực.

- <Lệnh 1>, …, <Lệnh n> là một hay nhiều câu lệnh đơn.

- Cuối mỗi trường hợp (case) sẽ có hoặc khơng có lệnh break. Khi gặp lệnh này, lệnh switch sẽ kết thúc.

- Phần default có thể có hoặc khơng. Nếu khơng tìm thấy trường hợp nào phù hợp, phần này sẽ được thực hiện.

Ví dụ:

Lệnh switch sau sẽ xuất thông báo “Một” nếu a bằng 1, xuất thông báo “Hai” nếu a bằng 2, xuất thông báo “Ba” nếu a bằng 3. Nếu không sẽ xuất “a<1 hoặc a>3” và “Khong biet

doc!”.

switch (a) {

case 1 : printf(“Mot”); break; case 2 : printf(“Hai”); break; case 3 : printf(“Ba”); break;

default:

printf(“a<1 hoac a>6”); printf(“\nKhong biet doc!”);

}

2.2.3. Một số lưu ý

Về mặt cú pháp, câu lệnh switch là một câu lệnh đơn. Các câu lệnh switch cũng có thể lồng vào nhau.

switch (a){

case 1 : printf(“Mot”); break;

case 2 : switch (b){

case 1 : printf(“Hai-Mot”);break;

case 2 : printf(“Hai-Hai”);break;

} break;

case 3 : printf(“Ba”); break;

default:

printf(“Khong biet doc!”);

Lệnh break sau mỗi trường hợp (case) rất quan trọng. Nếu thiếu thì sau khi thực hiện trường hợp tương ứng nó sẽ thực hiện tiếp trường hợp liền sau nó đến khi gặp lệnh break hoặc kết thúc switch. Trường hợp (case) cuối cùng không cần lệnh break.

Ví dụ sau đây do thiếu break nên sẽ in MotHaiBa khi a = 1. switch (a){

case 1: printf(“Mot”); case 2: printf(“Hai”);

case 3: printf(“Ba”); }

Tuy nhiên, trong một số trường hợp, việc bỏ break cũng có lợi nếu như ta muốn nhóm các trường hợp cùng loại. Ví dụ, thơng thường ta sẽ viết như sau nếu muốn xét các số chẵn lẻ.

switch (a){

case 1: printf(“So le”); break; case 2: printf(“So chan”); break; case 3: printf(“So le”); break; case 4: printf(“So chan”); break; case 5: printf(“So le”); break;

}

Ta viết lại như sau sẽ gọn hơn:

switch (a){ case 1: case 3:

case 5: printf(“So le”); break;

case 2:

case 4: printf(“So chan”); break;

}

3. Các câu lệnh lặp

3.1. Câu lệnh for

Câu lệnh for là câu lệnh làm cho chương trình thực hiện lặp lại một hay nhiều hành động một số lần nhất định.

Cú pháp: for (<Khởi đầu>;<Đ/K lặp>;<Bước nhảy>)

<Lệnh>;

Sơ đồ khối

Trong đó:

- <Khởi đầu>: là một câu lệnh gán để đặt cho biến đếm một giá trị cụ thể. - <Đ/K lặp>: là biểu thức logic. Nếu <Đ/K lặp> nhận giá trị sai, câu lệnh for sẽ kết thúc. Ngược lại, <Lệnh> sẽ được thực hiện.

- <Bước nhảy>: là một biểu thức nhằm tăng giá trị biến đếm trong biểu thức khởi đầu. Biểu thức này sẽ được thi hành sau khi <Lệnh> được hiện.

- <Lệnh>: là câu lệnh đơn hoặc khối lệnh.

Ví dụ: In các số từ 0 đến 9 ra màn hình.

int i;

for (i = 0; i < 10; i++)

printf(“%d\n”, i);

Ta cũng có thể vừa khai báo và khởi tạo biến trong phần khởi đầu của for:

for (int i = 0; i < 10; i++)

printf(“%d\n”, i);

Thực hiện nhiều câu lệnh đồng thời (khối lệnh):

for (int i = 0; i < 10; i++){

printf(“%d”, i); printf(“\n”);

}

3.2. Câu lệnh while

Câu while là câu lệnh làm cho chương trình thực hiện lặp lại nhiều lần một số hành động cho trước trong khi vẫn còn thỏa một điều kiện để tiếp tục quá trình lặp.

bắt đầu

Cú pháp: while (<Đ/K lặp>)

<Lệnh>;

Sơ đồ khối

Trong đó :

- <Đ/K lặp>: là một biểu thức logic và được đặt trong cặp dấu ngoặc đơn ( ). Nếu <Đ/K lặp> nhận giá trị sai, câu lệnh while sẽ kết thúc. Ngược lại, <Lệnh> sẽ được thực hiện.

- <Lệnh>: là câu lệnh đơn hoặc khối lệnh.

Ví dụ: In các số từ 0 đến 9 ra màn hình. int n = 0; while (n < 10){ printf(“%d\n”, n); n++; } 3.3. Câu lệnh do ... while

Câu lệnh do... while là câu lệnh làm cho chương trình thực hiện lặp lại nhiều lần một số hành động cho trước trong khi vẫn cịn thỏa một điều kiện để tiếp tục q trình lặp. Câu lệnh này ngược với câu lệnh while ở trên một chỗ là điều kiện lặp được kiểm tra sau khi các lệnh đã được thực hiện.

Trong đó:

<Đ/K lặp> và <Lệnh> giống như lệnh while.

Ví dụ: In các số từ 0 đến 9 ra màn hình. n = 0; do{ printf(“%d\n”, n); n++; } while (n < 10);

Ứng dụng của câu lệnh này là tạo vòng lặp nhập dữ liệu cho một biến sao cho biến đó có giá trị giới hạn trong một phạm vi nào đó. Đoạn chương trình sau đây u cầu người sử dụng nhập vào giá trị cho biến n trong đoạn từ 1 đến 100.

bắt đầu bắt đầu

int n; do{ printf(“Nhap n : ”); scanf(“%d”, &n); } while (n < 1 || n > 100); 3.4. So sánh sự khác nhau của các vòng lặp

- Vòng lặp for thường sử dụng khi biết được số lần lặp xác định.

- Vịng lặp thường while, do…while sử dụng khi khơng biết rõ số lần lặp. - Khi gọi vòng lặp while, do…while, nếu biểu thức sai vòng lặp while sẽ khơng được thực hiện lần nào nhưng vịng lặp do…while thực hiện được 1 lần.

Số lần thực hiện ít nhất của while là 0 và của do…while là 1

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 để thố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 tố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

Một phần của tài liệu Giáo trình Lập trình căn bản (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính): Phần 1 - CĐ nghề Vĩnh Long (Trang 38)

Tải bản đầy đủ (PDF)

(49 trang)