You are on page 1of 31

Module 03

CẤU TRÚC ĐIỀU KHIỂN

Design by Minh An

Nội dung

1. Cấu trúc rẽ nhánh


2. Cấu trúc lặp
3. Bài tập

Design by Minh An

1
1. Cấu trúc rẽ nhánh

▪ Cấu trúc rẽ nhánh if…


• Cấu trúc if …
• Cấu trúc if … else …
• Cấu trúc if…else… lồng nhau
• Cấu trúc if…else… bậc thang
• Khối lệnh nhiều if …
▪ Cấu trúc lựa chọn switch …

Design by Minh An

1.1. Giới thiệu


• Cấu trúc rẽ nhánh điều khiển máy tính thay đổi hướng
thực hiện chương trình.
• Dựa vào một điều kiện xác định, máy tính có thể thực
hiện một lệnh hay một khối lệnh hoặc không.
• Ví dụ: Muốn chia số a cho số b ta làm như sau:
1) Nhận vào hai số a và b
2) Kiểm tra số b:
✓ Nếu số b khác 0 thì thực hiện phép chia a cho b
và thông báo kết quả.
✓ Ngược lại thì không thực hiện phép chia và
không thông báo kết quả.

Design by Minh An

2
1.2. Cấu trúc if …

• Cú pháp:
if (biểu_thức_bool){
Lệnh_S;
}
• Trong đó:
✓ if là từ khóa của lệnh rẽ nhánh.
✓ biểu_thức_bool trả về một trong 2 giá trị 1 (đúng)
hoặc 0 (sai).
✓ Lệnh_S là một câu lệnh hoặc một khối lệnh.

Design by Minh An

Cấu trúc if … (tt)


• Hoạt động
– Cấu trúc if... điều khiển máy tính thực hiện:
• Tính giá trị của biểu_thức_bool.
• Nếu giá trị của biểu_thức_bool là 1 (true) thì máy tính
thực hiện Lệnh_S.
• Nếu giá trị của biểu_thức_bool là 0 (false) thì máy tính
không thực hiện Lệnh_S.

biểu_thức_bool 0

1
Lệnh_S

Design by Minh An

3
Cấu trúc if … (tt) – Ví dụ
Bắt đầu
◼ Viết chương trình:
Nhập 2 số a, b
✓ Nhập vào 2 số thực
a, b. tich = a * b;

✓ Tính và hiển thị ra Thông báo: tich


màn hình tích và 0
thương của a, b. b != 0
1
thuong = a / b;

Thông báo: thuong

Kết thúc

Design by Minh An

Cấu trúc if … (tt) – Ví dụ

Design by Minh An

4
1.3. Cấu trúc if … else …
• Cú pháp:

if (biểu_thức_bool) {
Lệnh_S1;
} • Hoạt động:
else {
Lệnh_S0;
} 0
biểu_thức_bool

Lệnh_S0
1
Lệnh_S1

Design by Minh An

Cấu trúc if … else … (tt) – Ví dụ


• Viết chương trình thực hiện:
✓ Nhập vào số nguyên n.
✓ Hiển thị ra màn hình cho biết n là số chẵn hay số lẻ.

Bắt đầu

Nhập số nguyên n

du = n % 2;

0
du == 0

1 Thông báo: la so le

Thông báo: la so chan

Kết thúc
Design by Minh An

5
Cấu trúc if … else … (tt) – Ví dụ

Design by Minh An

1.4. Cấu trúc if … else … bậc thang


• Cú pháp:
if (biểu_thức_bool_1)
Lệnh_1;
else if (biểu_thức_bool_2)
Lệnh_2;
else if (biểu_thức_bool_3)
Lệnh_3;
... ...
else if (biểu_thức_bool_n)
Lệnh_n;
else
Lệnh_n+1;

Design by Minh An

6
Cấu trúc if … else … bậc thang (tt)
• Hoạt động

biểu_thức_bool_1 1
Lệnh_1;

0
1
biểu_thức_bool_2 Lệnh_2;

0
... ...

0
1
biểu_thức_bool_n Lệnh_n;

0
Lệnh_n+1;

Design by Minh An

Cấu trúc if … else … bậc thang (tt) – Ví dụ


• Viết chương trình:
✓ Nhập vào một ký tự từ bàn phím.
✓ Cho biết ký tự vừa nhập là nguyên âm nào trong bảng
chữ cái latin.

Design by Minh An

7
Cấu trúc if … else … bậc thang (tt) – Ví dụ
Bắt đầu

Nhập ký tự ch

1
ch==‘a’||ch==‘A’ TB: la nguyen am a

0
1
ch==‘e’||ch==‘E’ TB: la nguyen am e
0
...
...
0
1
ch==‘u’||ch==‘U’ TB: la nguyen am u
0
TB: khong la nguyen am

Kết thúc

Design by Minh An

Cấu trúc if … else … bậc thang (tt) – Ví dụ

Design by Minh An

8
1.5. Cấu trúc if … else … lồng nhau

• Cú pháp: if (biểu_thức_bool_1) {
Lệnh_S1;
if (biểu_thức_bool_2)
Lệnh_2;
else
Lệnh_3;
... ...
}else{
Lệnh_S2;
if (biểu_thức_bool_k)
Lệnh_k;
... ...
}

Design by Minh An

Cấu trúc if … else … lồng nhau (tt)

• Hoạt động:

biểu_thức_bool_1 1

Lệnh_S1;
0
Lệnh_S2;
biểu_thức_bool_2 1

1 biểu_thức_bool_k 0
Lệnh_3; Lệnh_2;
0
Lệnh_k;

Design by Minh An

9
Cấu trúc if … else … lồng nhau (tt) – Ví dụ

• Viết chương trình:

✓ Nhập vào điểm trung bình cuối năm (dtb) của một học
sinh.

✓ Cho biết có phải là giá trị điểm trung bình hợp lệ hay
không? Nếu hợp lệ thì học sinh có được lên lớp hay
không?

✓ Biết rằng 0  dtb  10 là điểm trung bình hợp lệ và dtb


 5.0 được lên lớp.

Design by Minh An

Cấu trúc if … else … lồng nhau (tt) – Ví dụ


Bắt đầu

Nhập dtb

1
dtb>=0&&dtb<=10
TB: dtb hop le
0

dtb >= 5.0 0

1
TB: HS duoc len lop

TB: dtb khong hop le TB: HS khong len lop

Kết thúc
Design by Minh An

10
Cấu trúc if … else … lồng nhau (tt) – Ví dụ

Design by Minh An

1.6. Khối lệnh nhiều if …

if (biểu_thức_bool_1)
Lệnh_1;
if (biểu_thức_bool_2)
Lệnh_2;
...
if (biểu_thức_bool_n)
Lệnh_n;

Design by Minh An

11
Cấu trúc nhiều if … (tt)

• Hoạt động:

biểu_thức_bool_1 1 Lệnh_1;

biểu_thức_bool_2 1 Lệnh_2;

0
...

biểu_thức_bool_n 1 Lệnh_n;

Design by Minh An

Cấu trúc nhiều if … (tt) – Ví dụ

• Viết chương trình:

✓ Nhập vào 5 số thực từ bàn phím.

✓ Tìm và in ra màn hình giá trị lớn nhất trong 5 số đã


nhập.

Design by Minh An

12
Bắt đầu
Ví dụ
Nhập 5 số a, b, c, d, e

max = a;
1
max < b max = b;
0
1
max < c max = c;
0
1
max < d max = d;
0
1
max < e max = e;
0
TB:max

Kết thúc
Design by Minh An

Ví dụ

Design by Minh An

13
1.7. Cấu trúc switch …

• Cú pháp

switch (biểu_thức_nguyên)
{
case hằng_1: Lệnh_1; break;
case hằng_2: Lệnh_2; break;
...
case hằng_n: Lệnh_n; break;
[default: Lệnh_F;]
}

Design by Minh An

Cấu trúc switch … (tt)


• Hoạt động
1
biểu_thức_nguyên==hằng_1 Lệnh_1;

biểu_thức_nguyên==hằng_2 1
Lệnh_2;

0
...
0

biểu_thức_nguyên==hằng_n 1
Lệnh_n;

0
Lệnh_F;

Design by Minh An

14
Cấu trúc switch … (tt) – Ví dụ 1

• Viết chương trình:

✓ Nhập vào một ký tự nguyên âm latin từ bàn phím.

✓ Cho biết ký tự vừa nhập là nguyên âm nào trong bảng


chữ cái latin.

Design by Minh An

Cấu trúc switch … (tt) – Ví dụ 1


Bắt đầu

Nhập ký tự ch

1
ch==‘a’||ch==‘A’ TB: la nguyen am a
0
1 TB: la nguyen am e
ch==‘e’||ch==‘E’
0
... ...
0
1 TB: la nguyen am u
ch==‘u’||ch==‘U’
0
TB: khong la nguyen am

Kết thúc
Design by Minh An

15
Cấu trúc switch … (tt) – Ví dụ 1

Design by Minh An

Cấu trúc switch … (tt) – Ví dụ 2

• Viết chương trình:

✓ Nhập vào một ký tự chữ số từ bàn phím.

✓ Cho biết chữ số vừa nhập là chữ số mấy trong hệ


đếm thập phân.

Design by Minh An

16
Cấu trúc switch … (tt) – Ví dụ 2
Bắt đầu

Nhập chữ số ch

1
ch == ‘0’ TB: la chu so khong
0
1 TB: la chu so mot
ch == ‘1’
0
... ...
0
1 TB: la chu so chin
ch == ‘9’
0
TB: khong la chu so

Kết thúc
Design by Minh An

2. Cấu trúc lặp

1. Cấu trúc lặp for (…).


2. Cấu trúc lặp lồng nhau.
3. Cấu trúc lặp while (…).
4. Cấu trúc lặp do … while (…).
5. Toán tử chuyển điều khiển break và continue.

Design by Minh An

17
2.1. Đặt vấn đề

• Viết đoạn chương trình hiển thị lên màn hình dãy số tự
nhiên {1 2 3 4 5} với giá trị các số lần lượt được lưu trong
biến i.
void hien_thi() {
int i = 1;
printf("%d ",i); i++;
printf("%d ",i); i++;
printf("%d ",i); i++;
printf("%d ",i); i++;
printf("%d ",i); i++;
}

Design by Minh An

2.2. Cấu trúc lặp là gì?

• Một đoạn mã lệnh trong chương trình điều khiển


máy tính thực hiện lặp đi lặp lại một lệnh hoặc
một khối lệnh cho đến khi một điều kiện xác
định được thỏa mãn.

Design by Minh An

18
2.3. Cấu trúc lặp for …

• Cú pháp:
for ([BT_1]; [BT_2]; [BT_3]){
<Lệnh_S;>
}

− Các [BT_1, 2, 3] có thể khuyết, nhưng bắt buộc phải có dấu ;


− [BT_1] là một lệnh gán để khởi tạo giá trị ban đầu cho biến
điều khiển của vòng lặp.
− [BT_2] là một biểu thức quan hệ để chỉ định khi nào vòng lặp
sẽ kết thúc.
− [BT_3] định nghĩa cách thức thay đổi giá trị biến điều khiển
khi vòng lặp được thực thi.
− Lệnh_S là một câu lệnh hoặc một khối lệnh.

Design by Minh An

Cấu trúc lặp for … (tt)

• Hoạt động:
– Bước 1: [BT_1] (Biến điều khiển được gán giá trị khởi tạo)
– Bước 2: [BT_2] Kiểm tra giá trị của biểu thức quan hệ.
• Biểu thức quan hệ cho giá trị "đúng" sang bước 3
• Biểu thức quan hệ cho giá trị "sai" sang bước 4
– Bước 3:
• Thực hiện Lệnh_S
• [BT_3] (thay đổi giá trị của biến điều khiển)
• Quay lại bước 2
– Bước 4: Kết thúc vòng lặp

Design by Minh An

19
Cấu trúc lặp for … (tt)

Bắt đầu

[BT_1]

0
[BT_2]

1
Kết thúc
Lệnh_S;

[BT_3]

Design by Minh An

Cấu trúc lặp for … (tt) – Ví dụ 1


• Ví dụ 1: Trở lại ví dụ hiển thị lên màn hình các số 1 2 3 4 5
biết các số được lưu trong biến i.
• Thiết kế vòng lặp: Bắt đầu
✓ Biến điều khiển vòng lặp là biến i
✓ Biểu thức 1: i = 1
i = 1;
✓ Biểu thức 2: i <= 5.
✓ Biểu thức 3: i++
✓ Lệnh_S: printf("%d ",i); 0
i <= 5

void hien_thi() { 1
for (i=1; i<=5; i++){ printf("%d ",i); Kết
thúc
printf("%d ",i);
} i++;
}
Design by Minh An

20
Cấu trúc lặp for … (tt) – Ví dụ 2

• Ví dụ 2: Viết đoạn chương trình hiển thị lên màn hình dãy
số: 5 4 3 2 1 0 -1 -2 -3 -4 -5

• Thiết kế vòng lặp:


✓ Biến điều khiển vòng lặp là biến i

✓ Biểu thức 1: i = 5
void hien_thi() {
✓ Biểu thức 2: i >= -5
for (i=5; i>=-5; i--){
✓ Biểu thức 3: i--
printf("%d ",i);
✓ Lệnh_S: printf("%d ",i);
}
}

Design by Minh An

Cấu trúc lặp for … (tt) – bài tập

• Viết chương trình nhập số tự nhiên n, tính và hiển thị lên màn
hình:
– Tổng của n số tự nhiên đầu tiên: 1 + 2 + ... + n;
– n! = n x (n – 1) x (n – 2) x ... x 2 x 1
• Một người gửi tiết kiệm n tháng, số tiền gửi ban đầu là m, lãi
suất gửi tiết kiệm là r% / tháng. Viết chương trình nhập vào n,
m, r sau đó tính và in ra màn hình tổng số tiền người đó nhận
được sau n tháng gửi nếu:
– Sau mỗi tháng người đó rút lãi về sử dụng.
– Tiền lãi sau mỗi tháng được đưa vào tiền gốc để gửi tiếp
tháng sau.

Design by Minh An

21
4. Cấu trúc lặp for lồng nhau

• Các vòng lặp for lồng nhau khi nó có dạng như sau:

for (i = 1; i <= m; i++)


{
Lệnh_A;
for (j = 1; j <= n; j++)
{
Lệnh_B;
}
Lệnh_C;
}

Design by Minh An

Cấu trúc lặp for lồng nhau (tt)

Ví dụ 1: Viết chương trình giải quyết bài toán:


✓ Vừa gà vừa chó
✓ Bó lại cho tròn
✓ Ba mươi sáu con
✓ Một trăm chân chẵn
✓ Hỏi có bao nhiêu gà bao nhiêu chó?
Ví dụ 2: Viết chương trình giải quyết bài toán:
✓ Hiển thị bảng cửu chương thứ i (i = 2, 3, …, 10).
✓ Hiển thị các bảng cửu chương từ 2 đến 10.

Design by Minh An

22
5. Cấu trúc lặp while …

• Cú pháp:

while (biểu_thức_đk)
{
Lệnh_S;
}

Vòng lặp while lặp lại Lệnh_S trong khi


biểu_thức_đk mang giá trị 1 (true).

Design by Minh An

Cấu trúc lặp while … (tt)

• Lưu đồ thực thi

BEGIN

0
biểu_thức_đk

1 END
Lệnh_S;

Design by Minh An

23
Cấu trúc lặp while … (tt) – Ví dụ 1

/*Chương trình in ra màn hình các số tự


nhiên từ 1->10*/
#include <stdio.h>
#include <conio.h>
int main() {
printf("Day so tu nhien 1 -> 10: ");
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
printf("\nKet thuc lap voi i = %d",i);
}
Design by Minh An

Cấu trúc lặp while … (tt) Ví dụ 2

• Bài toán:
✓ Nhập số nguyên dương N.
✓ Cho biết N có bao nhiêu chữ số, tổng các chữ số của N.
• Cách giải quyết:
✓ Chia liên tiếp N cho 10 cho đến khi được kết quả bằng 0
thì dừng lại.
✓ Số lần chia 10 là số chữ số của N.
✓ Tổng các số dư trong mỗi lần chia là tổng các chữ số
của số nguyên dương N.

Design by Minh An

24
Cấu trúc lặp while … (tt) – Ví dụ 2

BEGIN

Nhập số nguyên dương N

dem = 0; tong = 0;

0
N > 0
1 TB: tong, dem
dem++;
tong = tong + N % 10;
N = N / 10; END

Design by Minh An

Cấu trúc lặp while … (tt) – Ví dụ 2

Design by Minh An

25
6. Cấu trúc lặp do … while …

• Cú pháp
do{
Lệnh_S;
} while (biểu_thức_đk);

− Trong cấu trúc lặp do … while (…) Lệnh_S trong thân


của cấu trúc lặp được thực thi trước khi
(biểu_thức_đk) kiện được kiểm tra.
− Khi (biểu_thức_đk) mang giá trị 0 (false), vòng lặp do
… while (…) sẽ kết thúc, và điều khiển chuyển đến
lệnh xuất hiện ngay sau lệnh while (…).

Design by Minh An

Cấu trúc lặp do … while … (tt)

• Lưu đồ thực thi

BEGIN

Lệnh_S;

0
biểu_thức_đk

1
END

Design by Minh An

26
Cấu trúc lặp do … while … (tt) _ Ví dụ 1

/*Chương trình in ra màn hình các số tự


nhiên từ 1->10*/
#include <stdio.h>
#include <conio.h>
int main(){
printf("So tu nhien: ");
int i = 1;
do{
printf("%d ",i);
i++;
} while(i <= 10);
printf("\nKet thuc lap i = %d", i);
}

Design by Minh An

Cấu trúc lặp do … while … (tt) _ Ví dụ 2

• Viết chương trình thực hiện:


✓ Nhập liên tiếp các số nguyên, việc nhập kết thúc
khi gặp số nhập vào có giá trị là -1.
✓ Cho biết có bao nhiêu số đã được nhập (không
tính -1) và tổng các số đó.

Design by Minh An

27
Cấu trúc lặp do … while … (tt) _ Ví dụ 2
BEGIN

dem = 0; tong = 0;

Nhập số nguyên n

dem++;
tong = tong + n;

n != -1 0

1 dem--; tong++;

TB: tong, dem

END
Design by Minh An

Cấu trúc lặp do … while … (tt) _ Ví dụ 2


#include <conio.h>
#include <stdio.h>
int main (){
int n, dem = 0, tong = 0;
printf("Nhap day so nguyen (nhap -1 de dung)\n");
do{
printf("Nhap so thu %d: ",dem+1);
scanf("%d",&n);
dem++;
tong = tong + n;
} while (n != -1);
printf("Co %d so da duoc nhap\n", dem - 1);
printf("Tong cac so da nhap la %d", tong + 1);
}

Design by Minh An

28
7. Toán tử chuyển điều khiển

break;
• Lệnh break được sử dụng để kết thúc một mệnh đề
case trong cấu trúc switch (…).
• Nó cũng có thể được sử dụng để kết thúc ngang vòng
lặp.
• Khi gặp lệnh break; , vòng lặp sẽ kết thúc ngay và điều
khiển được chuyển đến lệnh kế tiếp bên ngoài vòng
lặp.

Design by Minh An

Các lệnh chuyển điều khiển (tt) - Break

#include <stdio.h>
int main (){
int i, j = 0;
for (i = 1; i <= 100; i++) {
printf("Nhap j: ");
scanf("%d", &j);
if (j == 100) {
break;
}
}
}

Design by Minh An

29
Các lệnh chuyển điều khiển (tt)

continue;
• Lệnh continue dùng để bắt đầu thực hiện lần lặp kế
tiếp của vòng lặp.
• Khi gặp lệnh continue, các câu lệnh còn lại trong
thân vòng lặp bị bỏ qua và điều khiển được chuyển
đến lần lặp kế tiếp.

Design by Minh An

Các lệnh chuyển điều khiển (tt) - continue

#include <conio.h>
#include <stdio.h>
int main () {
int i;
for (i = 1; i <= 100; i++) {
if (i % 9 == 0) {
continue;
}
printf("%d ", i);
}
}

Design by Minh An

30
Thank you…!

Design by Minh An

31

You might also like