You are on page 1of 31

KỸ THUẬT LẬP TRÌNH

Chương 4: Các cấu trúc


điều khiển

Kỹ thuật lập trình


2
Nội dung
01 Lệnh và khối lệnh
1.1 Lệnh
1.2 Khối lệnh
02 Cấu trúc rẻ nhánh
2.1 Cấu trúc điều kiện if
2.2 Cấu trúc switch…case
03 Cấu trúc vòng lặp
3.1 Vòng lặp for
3.2 Vòng lặp while
04 Các lệnh nhảy
3
1.1. Lệnh

int a, b = 0; Một phát biểu, biểu thức được
printf(“Nhập a, b: “); kết thúc bằng dấu “;” được gọi
scanf(“%d %d”,&a,&b); là câu lệnh.

Ngoài lệnh thực thi, còn có lệnh điều khiển:


1. Lệnh rẽ nhánh có điều kiện: if-else; switch – case.
2. Lệnh rẽ nhánh không điều kiện: break; continue; goto.
3. Lệnh lặp (chu trình): for; while; do{…}while.

4
1.2. Khối lệnh

… • Khối lệnh là một cấu trúc tập hợp nhiều câu


{ lệnh đơn lẻ, được bao bọc bởi dấu “{…}”.
… lệnh 1; • Cấu trúc khối lệnh có thể lồng ghép vào bên
{ trong nhau.
… lệnh 1.1;
{ Lưu ý: ở cấu trúc lồng ghép, để phân biệt các
… lệnh cấp, các câu lệnh thuộc khối lệnh con nên được
1.1.1; viết cách vào một khoảng so với khối lệnh cha.
}
… lệnh 1.2;
}
… lệnh 2;
}
5
1.2. Khối lệnh
#include <stdio.h>
int main()
{ WHY?
int a, b;
a=1; b=2;
{
int a, b;
a=10; b=20;
printf("Ket qua 01: %d\n", a+b);
}
printf("Ket qua 02: %d\n", a+b);
return 0;
}

Ket qua 01: 30


Ket qua 02: 3 6
2. Cấu trúc rẽ nhánh

7
2. Cấu trúc rẽ nhánh
Ví dụ: Nhập vào 2 số a và b, in ra số lớn nhất.
#include <stdio.h> Begin

int main()
{ Nhập a, b
int a, b;
printf(“Nhập 2 số a, b: ”); False
a>b
scanf(“%d %d”,&a,&b);
True
if(a>b) a b
printf(“Max=%d”,a)
else
printf(“Max=%d”,b) End

return 0;
} 8
2.1 Cấu trúc điều kiện if
A. Cấu trúc if

Cú pháp
Biểu thức
if (biểu thức)
{ True
lệnh 1; lệnh 1

lệnh n; lệnh n
}

9
2.1 Cấu trúc điều kiện if
B. Cấu trúc if - else
Cú pháp
if (biểu thức)
{
lệnh 1;
… Khối lệnh 1
Biểu thức
False
lệnh n;
} True
else Khối lệnh 1 Khối lệnh 2
{
lệnh n+1;
lệnh n+2; Khối lệnh 2

} 10
2.1 Cấu trúc điều kiện if
C. Cấu trúc if – else if
Cú pháp Biểu False
thức 1
if (biểu thức)
{ Biểu False
thức 2
Lệnh 1;
} else if (biểu thức 2) True Biểu False
{ thức n-1
True
Lệnh 2; True
}… else if (biểu thức n-1)
{ Lệnh 1 Lệnh 2 Lệnh n-1 Lệnh n
Lệnh n-1;
} else Lệnh n;

11
2.1 Cấu trúc điều kiện if

Bài tập: Viết chương trình phân loại học sinh dựa theo điểm số,
biết rằng:

a. Giỏi: từ 8 đến 10 điểm.

b. Khá: từ 6.5 đến dưới 8 điểm.

c. Trung bình: từ 5 đến dưới 6.5 điểm.

d. Yếu: từ 3.5 đến dưới 5 điểm.

e. Kém: còn lại.

12
2.2 Cấu trúc switch - case
Cú pháp
switch (biểu thức)
{
case 1: lệnh 1;
switch(i)
break;
case 2: lệnh 2;
case 1 case 2 case n
break;
case n: lệnh n;
break;
default: lệnh n+1;
(break;)
13
}
2.2 Cấu trúc switch - case

Bài tập: Viết chương trình in ra màn hình địa chỉ tương ứng với
các tùy chọn số sau đây:
1: 104 Nguyễn Văn Trỗi, P8, Phú Nhuận, Hồ Chí Minh
2: 18A/1 Cộng Hòa, Quận Tân Bình, Hồ Chí Minh

14
3. Cấu trúc vòng lặp

15
3. Cấu trúc vòng lặp
Ví dụ: Xuất ra màn hình các số từ 1 đến 1000.

#include <stdio.h>

int main() Begin


{
int i; False
i<=1000; i++;
for (i=1; i<=1000; i++) True
{ i
printf(“%d\n”,i);
}
End
return 0;
}
16
3.1 Vòng lặp for
Cú pháp
for (biểu thức 1; biểu thức 2; biểu thức 3)
{
Lệnh 1;

Lệnh n;
}

Trong đó:
• Biểu thức 1 - initialization: biến dùng để đếm số bước của vòng lặp
• Biểu thức 2 - condition: điều kiện thực hiện vòng lặp
• Biểu thức 3 - increase: đại lượng tăng số bước nhảy trong vòng lặp
• Lệnh – statement 17
3.1 Vòng lặp for
Bài tập:
1. Tính tổng các số từ 1 đến n, với n là số nguyên dương
được người dùng nhập vào (dùng vòng lặp for)
*Lưu ý: cần kiểm tra điều kiện nhập n, nếu sai thì in ra
báo lỗi và thoát khỏi chương trình.
2. Tính tổng các số lẻ trong đoạn từ 1 đến n, với n là số
nguyên dương được người sử dụng nhập vào (dùng vòng
lặp for).
3. Tính tổng các số chẵn trong đoạn từ 1 đến n, với n là số
nguyên dương được người sử dụng nhập vào (dùng vòng
lặp for).
18
3.2 Vòng lặp while
Cú pháp
❑ while ❑ do…while

while(biểu thức) do
{ {
Lệnh 1; Lệnh 1;
… …
Lệnh n; Lệnh n;
} } while(biểu thức);

Trong đó:
• Biểu thức - condition: điều kiện thực thi của vòng lặp
19
3.2 Vòng lặp while
Cú pháp Giải thích
❑ while ❑ Kiểm tra biểu thức:
▪ True: Thực hiện khối lệnh
while(biểu thức) ▪ False: Bỏ qua khối lệnh
{ ❑ Có sự thay đổi của biểu thức:
Lệnh 1; ▪ Vẫn còn True: Thực hiện khối lệnh

Lệnh n; ▪ False: Thoát khỏi vòng lặp
} → Thực hiện khối lệnh cho đến khi
biểu thức False (điều kiện sai) thì thoát
khỏi vòng lặp while.

20
3.2 Vòng lặp while
Cú pháp Giải thích
❑ do…while ❑ Thực hiện khối lệnh trước
❑ Kiểm tra biểu thức
do ▪ True: Tiếp tục lặp lại khối lệnh
{ ▪ False: Thoát khỏi vòng lặp
Lệnh 1;

Lệnh n;
} while(biểu thức);

21
3.2 Vòng lặp while
Ví dụ: Xuất ra màn hình các số từ 1 đến 1000, sử dụng lặp while

#include <stdio.h>
Begin

int main()
{ False
i<=1000
int i = 1;
True
while(i<=1000) i
{
printf(“%d\n”,i);
i++
i++;
}

return 0; End
} 22
3.2 Vòng lặp while
Ví dụ: Xuất ra màn hình các số từ 1 đến 1000,
sử dụng lặp do … while
#include <stdio.h> Begin

int main()
{ i
int i = 1;

do i++
{
printf(“%d\n”,i); True False
i<=1000
i++;
} while(i<=1000);
End
return 0;
} 23
3.2 Vòng lặp while
Bài tập: Dùng vòng lặp while / do...while
1. Tính tổng các số từ 1 đến n, với n là số nguyên dương
được người sử dụng nhập vào
2. Tính tổng các số chẵn trong đoạn từ 1 đến n, với n là số
nguyên dương được người sử dụng nhập vào (dùng vòng
lặp while / do…while).
3. Tính tổng các số chia hết cho 3 trong đoạn từ 1 đến n, với
n là số nguyên dương được người sử dụng nhập vào (dùng
vòng lặp while / do…while).
*Lưu ý: Cần kiểm tra điều kiện nhập n, nếu sai thì bắt
buộc người dùng nhập lại cho đến khi nhập đúng, chỉ
thoát chương trình khi nhập n=0.
24
4. Các lệnh nhảy (jump statements)
A. Lệnh Break
➢ Gặp lệnh break trong vòng lặp, chương trình sẽ thoát
khỏi vòng lặp và chỉ đến câu lệnh liền sau nó;

Chương trình Kết quả


1
2
3
4
5
6
7
8
9
10
25
4. Các lệnh nhảy (jump statements)
A. Lệnh Break
➢ Nếu có nhiều vòng lặp, khi gặp lệnh break thì chương
trình thoát khỏi vòng lặp gần nhất.
Chương trình Giải thích
- Tăng giá trị và in biến
i = 1…5
- Khi i >= 5 thì thoát
khỏi vòng while bên trong
và xóa biến i = 0;
- Quá trình này lặp vô hạn
theo vòng while bên ngoài.
Kết quả
1 2 3 4 5 1 2 3 4 5 1 2 3
4 5 1 2 3 4 5 1 2 3 4 5 1
2 3 4 5 1 2 3 4 5 1 2 3 4
26
5 1 2 3 4 5 …
4. Các lệnh nhảy (jump statements)
B. Lệnh Continue
➢ Gặp lệnh continue trong vòng lặp, CT sẽ bỏ qua các lệnh
còn lại trong vòng lặp và thực hiện lần lặp tiếp theo;
➢ Đối với lặp for(BT1,BT2,BT3): BT3 vẫn tính giá trị và quay
lại xét BT2
Kết quả
1
3
4
5
CT 1
3
4
5

27
4. Các lệnh nhảy (jump statements)
B. Lệnh Continue
➢ Đối với while(condition), do…while(condition): condition sẽ
được kiểm tra để biết có thực hiện vòng lặp nữa hay không.
Kết quả
0
1
Infinite
loop

0
1
3
4

28
4. Các lệnh nhảy (jump statements)
C. Lệnh Goto
➢ Gặp lệnh goto trong vòng lặp, CT sẽ thoát ra ngoài vòng
lặp và nhảy đến nhãn label định trước;
Kết quả
0
1
0
1
0
CT 1
0
1

Infinite
loop
29
Bài tập về nhà
Bài tập 01: Viết chương trình nhập vào 1 số (từ 1 đến 7),
in ra các thứ trong tuần tương ứng. VD: nhập 1 in ra “thứ
hai”.
Bài tập 02: Viết chương trình nhập vào từ bàn phím n số
nguyên. Kiểm tra và in ra tất cả các số nguyên tố.
Bài tập 03: Viết chương trình cho phép nhập vào 1 số, kiểm
tra số chẵn hay lẻ và xuất ra màn hình. Sau đó chương
trình lại tiếp tục cho nhập số mới để tiếp tục kiểm tra.
Chương trình chỉ dừng khi người dùng nhập vào số 0.

30
Kết
thúc

31

You might also like