Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

TIN HỌC CƠ SỞ 2

Các cấu trúc điều khiển

1
ThS. Nguyễn Văn Tiến
Nội dung

1. Cấu trúc lệnh tuần tự

2. Cấu trúc lệnh rẽ nhánh

3. Cấu trúc lệnh lặp

4. Lệnh break/continue

2
Cấu trúc lệnh tuần tự

Cấu trúc lệnh tuần tự được xây dựng trong C/C++. Trừ khi có hướng dẫn
khác, các câu lệnh C/C++ thực hiện lần lượt từng câu lệnh theo thứ tự mà
chúng được viết.

Lệnh 1

Lệnh 2

Lệnh 3

3
Cấu trúc lệnh rẽ nhánh

C cung cấp ba loại lựa chọn. Câu lệnh lựa chọn if thực hiện (chọn) một
hành động nếu điều kiện là đúng hoặc bỏ qua hành động nếu điều kiện
sai.
Trong ( ), cho kết quả
(false = 0, true ≠ 0)
Điều kiện? F if (<điều kiện>)
<Lệnh 1>;
T Lệnh đơn hoặc khối lệnh
Lệnh 1 (nằm giữa { và })

4
Cấu trúc lệnh rẽ nhánh

int main()
{
if (a == 0)
printf(“a bang 0”);

if (a == 0)
{
printf(“a bang 0”);
a = 2912;
}
}

5
Cấu trúc lệnh rẽ nhánh

Câu lệnh lựa chọn if...else thực hiện một hành động nếu điều kiện đúng
hoặc thực hiện một hành động khác nếu điều kiện sai.
Trong ( ), cho kết quả
(false = 0, true ≠ 0)
F if (<điều kiện>)
Điều kiện? Lệnh 2
<Lệnh 1>;
Lệnh đơn hoặc khối lệnh
T else (nằm giữa { và })
Lệnh 1 <Lệnh 2>;

6
Cấu trúc lệnh rẽ nhánh

int main(){
if (a == 0)
printf(“a bang 0”);
else
printf(“a khac 0”);

if (a == 0){
printf(“a bang 0”);
a = 2912;
}
else
printf(“a khac 0”);
}
7
Cấu trúc lệnh rẽ nhánh

Câu lệnh if có thể lồng vào nhau và else sẽ tương ứng với if gần nó nhất.
if (a != 0)
if (b > 0)
printf(“a != 0 va b > 0”);
else
printf(“a != 0 va b <= 0”);

if (a !=0){
if (b > 0)
printf(“a != 0 va b > 0”);
else
printf(“a != 0 va b <= 0”);
}
8
Cấu trúc lệnh rẽ nhánh

Nên dùng else để loại trừ trường hợp.


if (delta < 0)
printf(“PT vo nghiem”);
if (delta == 0)
printf(“PT co nghiem kep”);
if (delta > 0)
printf(“PT co 2 nghiem”);

if (delta < 0)
printf(“PT vo nghiem”);
else // delta >= 0
if (delta == 0)
printf(“PT co nghiem kep”);
else
printf(“PT co 2 nghiem”);
9
Cấu trúc lệnh rẽ nhánh

Không được thêm ; sau điều kiện của if.


int main(){
int a = 0;
if (a != 0)
printf(“a khac 0.”);

if (a != 0);
printf(“a khac 0.”);

if (a != 0){
};
printf(“a khac 0.”);
}
10
Cấu trúc lệnh rẽ nhánh

Câu lệnh switch case thực hiện một trong nhiều hành động khác nhau,
tùy thuộc vào giá trị của một biểu thức số nguyên.

switch (<Biến/Biểu thức>)


<Biến/BT> T {
Lệnh 1
= <GT1> case <GT1>:<Lệnh 1>;break;
F case <GT2>:<Lệnh 2>;break;
<Biến/BT> T …
Lệnh 2
= <GT2> }
F <Biến/Biểu thức> trả về giá trị rời rạc.
<Lệnh>: Lệnh đơn hoặc khối lệnh {}.

11
Cấu trúc lệnh rẽ nhánh

int main(){
int a;
printf(“Nhap a: ”);
scanf(“%d”, &a);

switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
}
}

12
Cấu trúc lệnh rẽ nhánh

switch (<Biến/BT>)
<Biến/BT> Đ
= <GT1>
<Lệnh 1> {
S <GT1>:<Lệnh 1>;break;
<Biến/BT> Đ
<Lệnh 2>
<GT2>:<Lệnh 2>;break;
= <GT2>

S
default:
<Lệnh n>;
<Lệnh n>
}

13
Cấu trúc lệnh rẽ nhánh

int main(){
int a;
printf(“Nhap a: ”);
scanf(“%d”, &a);

switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
default : printf(“Ko biet doc”);
}
}
14
Cấu trúc lệnh rẽ nhánh

Câu lệnh switch là một câu lệnh đơn và có thể lồng nhau.
{
switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : switch (b)
{
case 1 : printf(“A”); break;
case 2 : printf(“B”); break;
} break;
case 3 : printf(“Ba”); break;
default : printf(“Khong biet doc”);
}
}

15
Cấu trúc lệnh rẽ nhánh

Các giá trị trong mỗi trường hợp phải khác nhau.
switch (a){
case 1 : printf(“Mot”); break;
case 1 : printf(“MOT”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
case 1 : printf(“1”); break;
case 1 : printf(“mot”); break;
default : printf(“Khong biet doc”);
}

16
Cấu trúc lệnh rẽ nhánh

switch sẽ nhảy đến case tương ứng và thực hiện đến khi nào gặp break
hoặc cuối switch sẽ kết thúc.
switch (a)
{
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
}

17
Cấu trúc lệnh rẽ nhánh

switch sẽ nhảy đến case tương ứng và thực hiện đến khi nào gặp break
hoặc cuối switch sẽ kết thúc.
switch (a){
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
}
switch (a){
case 1 : printf(“Mot”); break;
case 2 : printf(“Hai”); break;
case 3 : printf(“Ba”); break;
}

18
Cấu trúc lệnh rẽ nhánh

Tận dụng tính chất khi bỏ break;


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;
}
switch (a){
case 1 :
case 3 : printf(“So le”); break;
case 2 :
case 4 : printf(“So chan”); break;
}

19
Cấu trúc lệnh rẽ nhánh

❖ Câu lệnh if ❖ Câu lệnh switch

if (a == 1) switch (a)
printf(“Mot”); {
if (a == 2) case 1: printf(“Mot”);
printf(“Hai”); break;
if (a == 3) case 2: printf(“Hai”);
printf(“Ba”); break;
if (a == 4) case 3: printf(“Ba”);
printf(“Bon”); break;
if (a == 5) case 4: printf(“Bon”);
printf(“Nam”); break;
case 5: printf(“Nam”);
}

20
Cấu trúc lệnh rẽ nhánh

❖ Câu lệnh switch ❖ Câu lệnh if

switch (a) if (a == 3.14)


{ printf(“OK”);
case 3.14: if (a < 10)
case <10: printf(“OK”);
case 1: printf(“OK”); if (a == 1)
break; printf(“OK”);
case 2: if (a == 2 || a == 3)
case 3: printf(“OK”); printf(“OK”);
break;
}

21
Cấu trúc lệnh lặp

Đặt vấn đề?


Ví dụ
Viết chương trình xuất các số từ 1 đến 10
=> Dùng 10 câu lệnh printf
Viết chương trình xuất các số từ 1 đến 1000
=> Dùng 1000 câu lệnh printf!!!
Giải pháp
Sử dụng cấu trúc lặp lại một hành động trong khi còn thỏa một điều kiện nào đó.
3 lệnh lặp: FOR, WHILE, DO… WHILE

22
Cấu trúc lệnh lặp

C cung cấp ba loại câu lệnh lặp (loop statements) cho phép các chương
trình thực hiện các câu lệnh lặp đi lặp lại miễn là điều kiện vẫn đúng. Các
câu lệnh lặp lại là các câu lệnh while, do...while và for

23
Cấu trúc lệnh lặp

Vòng lặp for là một cấu trúc điều khiển lặp lại cho phép chúng ta viết
một vòng lặp được thực hiện trong một số lần cụ thể.
Vòng lặp cho phép chúng ta thực hiện n số Khởi tạo
Bước nhảy
của các bước với nhau trong một dòng.
T
Điều kiện lặp Câu lệnh

for (<Khởi tạo>; <Điều kiện lặp>; <Bước nhảy>) F


Câu lệnh; <Khởi tạo>, <Điều kiện lặp>, <Bước nhảy>:
Là một biểu thức bất kỳ
<Câu lệnh>: Lệnh đơn hoặc khối lệnh {}
24
Cấu trúc lệnh lặp

int main()
{
int i;
for (i = 0; i < 10; i++)
printf(“%d\n”, i);
for (int j = 0; j < 10; j = j + 1)
printf(“%d\n”, j);
for (int k = 0; k < 10; k += 2){
printf(“%d”, k);
printf(“\n”);
}
}
25
Cấu trúc lệnh lặp

Câu lệnh FOR là một câu lệnh đơn và có thể lồng nhau.
if (n < 10 && m < 20){
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
printf(“%d”, i + j);
printf(“\n”);
}
}
}

26
Cấu trúc lệnh lặp

Vòng lặp while được sử dụng trong trường hợp chúng ta không biết
trước chính xác số lần lặp của vòng lặp. Việc thực hiện vòng lặp được kết
thúc trên cơ sở điều kiện. Các vòng lặp được sử dụng khi chúng ta cần
thực hiện lặp đi lặp lại một khối lệnh.

27
Cấu trúc lệnh lặp

Vòng lặp while


T
Điều kiện
lặp Câu lệnh

F là biểu thức bất kỳ,


thường là biểu thức quan hệ
cho kết quả
while (<Điều kiện lặp>) 0 (false) và != 0 (true)
<Câu lệnh>;
Lệnh đơn hoặc khối lệnh
(nằm giữa { và })

28
Cấu trúc lệnh lặp

int i = 0;
while (i < 10){
printf(“%d\n”, i);
i++;
}

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


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

int i = 0;
for (; i < 10; ){
printf(“%d\n”, i);
i++;
}
29
Cấu trúc lệnh lặp

Câu lệnh while là một câu lệnh đơn và có thể lồng nhau.
if (n < 10 && m < 20){
while (n >= 1){
while (m >= 1){
printf(“%d”, m);
m--;
}
n--;
}
}

30
Cấu trúc lệnh lặp

Câu lệnh while có thể không thực hiện lần nào do điều kiện lặp ngay từ
lần đầu đã không thỏa mãn.

int main(){
int n = 1;
while (n > 10){
printf(“%d\n”, n);
n--;
}

}

31
Cấu trúc lệnh lặp

Câu lệnh while có thể bị lặp vô tận (loop)


int main(){
int n = 1;
while (n < 10){
printf(“%d”, n);
n--;
}

n = 1;
while (n < 10)
printf(“%d”, n);
}

32
Cấu trúc lệnh lặp

Giống như while, việc thực hiện vòng lặp do-while cũng bị chấm dứt
trên cơ sở một điều kiện. Sự khác biệt chính giữa vòng lặp do-while và
vòng lặp while là trong vòng lặp do-while, điều kiện được kiểm tra ở
cuối vòng lặp

33
Cấu trúc lệnh lặp

Vòng lặp do-while


Câu lệnh

T
Điều kiện
lặp
F Lệnh đơn hoặc khối lệnh
do (nằm giữa { và })
<Câu lệnh>; là biểu thức bất kỳ,
while (<Điều kiện lặp>); thường là biểu thức quan hệ
cho kết quả
0 (false) và != 0 (true)

34
Cấu trúc lệnh lặp

int i = 0;
do{
printf(“%d\n”, i);
i++;
}
while (i < 10);
int i = 0;
printf(“%d\n”, i);
i++;
for (; i < 10; ){
printf(“%d\n”, i);
i++;
}
35
Cấu trúc lệnh lặp

Câu lệnh do… while sẽ được thực hiện ít nhất 1 lần do điều kiện lặp được
kiểm tra ở cuối.
int main(){
int n;
do{
printf(“Nhap n: ”);
scanf(“%d”, &n);
}
while (n < 1 || n > 100);
}

36
Lệnh break/continue

• Lệnh break trong C hoặc C++ là câu lệnh điều khiển vòng lặp được sử
dụng để kết thúc vòng lặp
• Lệnh continue cũng là một câu lệnh điều khiển vòng lặp giống như câu
lệnh break. câu lệnh continue ngược với câu lệnh break, thay vì kết thúc
vòng lặp, nó bắt buộc thực hiện lần lặp tiếp theo của vòng lặp.

37
Lệnh break/continue

Ví dụ
for (i = 0; i < 10; i++){
if (i % 2 == 0)
break;
printf(“%d\n”, i);
}

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


if (i % 2 == 0)
continue;
printf(“%d\n”, i);
}
38
Lệnh break/continue

Ví dụ
while (x != y) {

if (x==a) continue;
b+=6;

if (y==b) break;

}
39
THANK YOU FOR YOUR ATTENTION!

40

You might also like