Tải bản đầy đủ (.ppt) (38 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (159.3 KB, 38 trang )

Bài 2
CÁC CẤU TRÚC ĐIỀU KHIỂN




Trong mỗi chương trình
thường bao gồm rất
nhiều dòng lệnh từ các
câu lệnh đơn, lệnh
ghép...để thể hiện thuật
toán. Tuy nhiên, các
lệnh này được diễn tả và
thực hiện theo các cấu
trúc điều khiển là:



Cấu trúc tuần tự: Các
lệnh trong hàm được
thực hiện lần lượt từ dấu
mở ‘{’ đến dấu kết thúc
‘}’. Thực hiện từ trái
sang phải và từ trên
xuống dưới cho đến khi
kết thúc chương trình.




Cấu trúc rẽ nhánh:


Có một số lệnh bị phụ
thuộc vào điều kiện C
và chỉ được thực hiện
khi C thỏa mãn,
ngược lại thì không
được thực hiện.



Cấu trúc lặp: Có
một số lệnh phụ
thuộc vào điều kiện C
nào đó, nếu C còn
đúng thì các lệnh này
được thực hiện cho
đến khi C sai.


1. Lệnh ghép


Cú pháp:

{
S1;
S2;
...
Sm;

}




Có nơi trong CT không cho phép viết
nhiều hơn một lệnh, khi đó ta cần phải
“gói” chúng lại thành một khối lệnh
(block) gọi là lệnh ghép. Lệnh ghép
bắt đầu là dấu { và kết thúc là dấu },
ở giữa là dãy các lệnh. Mỗi lệnh đơn
kết thúc bằng dấu chấm phảy (;).


Chú ý: Để chương trình rõ dàng, sáng sủa, dễ soát lỗi
và debug thuật tiện ta nên viết riêng mỗi lệnh trên
một dòng. Dưới đây là ví dụ:
Nên viết:
#include <iostream>
using namespace std;
int main() {
int a, b;
int result;
a = 5;
b = 2;
a = a + 1;
result = a - b;
cout << result;

}

Không nên viết:

#include <iostream>
using namespace std;
int main() {
int a, b; int result;
a = 5; b = 2; a = a + 1;
result = a - b; cout << result;

}


2. Lệnh if...
a. Dạng 1: if (C) S;
trong đó:
C là BTĐK (logic) được tính
toán trả về kết quả true
(1) hoặc false (0).
Nếu C = true, thì thực hiện
lệnh S. Nếu C= false thì
bỏ qua S. CT thực hiện
lệnh sau if.


2. Lệnh if...
a. Dạng 1: if (C) S;
Ví dụ, đoạn mã sau đây sẽ viết n is even khi số
nguyên n chẵn:
if (n % 2 == 0) cout << "n is even";
 Nếu có hơn một lệnh được thực hiện trong trường hợp
C=true, ta sử dụng câu lệnh ghép - { }:



if (a!=0) {
x = (float) -b/a;
cout<
}


2. Lệnh if...
b. Dạng 2:
if (C)
S1;
else
S2;

Máy tính BTĐK C, nếu C = true
thì S1 được thực hiện và bỏ
qua S2. Ngược lại, máy bỏ
qua S1 và thực hiện S2.


2. Lệnh if...
b. Dạng 2:


Ví dụ n chẵn thì in “n is even”, ngược lại in
“n is odd”
if (n % 2 == 0)
cout << "n is even";
else

cout << "n is odd";



Hoặc max là giá trị lớn nhất của a và b:
If (a>b) max=a;
else max=b;


2. Lệnh if...
c. Dạng 3:

if (C1) S1;
else if (C2) S2;
else if (C3) S3;

else S_other;





Máy lần lượt thực hiện từ C1 trở
đi. Nếu Ci=true chỉ lệnh Si được
thực hiện và thoát khỏi if, các Ci+1
trở đi sẽ không được thực hiện.
Nếu không có Ci nào bằng true,
lệnh S_other được thực hiện và
kết thúc lệnh if.
Cấu trúc này có thể được móc

nối để kiểm tra giá trị của biến
có tính liên tục trong khoảng giá
trị nào đó.


2. Lệnh if...
c. Dạng 3:


Ví dụ: Nhập điểm
trung bình của hs.
Nếu thuộc từ 8 đến
10 in GIOI, từ 6.5
đến dưới 8 in KHA,
từ 5 đến dưới 6.5 in
TB và dưới 5 in KEM
ta áp dụng như
sau:

int main() {
if (dtb>=8)
cout<<"GIOI";
else if (dtb>=6.5)
cout<<"KHA";
else if (dtb>=5)
cout<<"TB";
else
cout<<"KEM";
return 0;


}


2. Lệnh if…


VD: VCT giải ptb1: ax + b = 0


3. Lệnh switch
switch (E) {
case C1:
S1; break;
case C2:
S2; break;
...
default:
default S;
}



Trong đó:








E là một biểu thức cho kết
quả là số nguyên hoặc kí tự
(giá trị kiểu đếm được);
C-i: là một hằng kiểu đếm
được;
S-i: là câu lệnh;
break: gặp lệnh này sẽ thoát
khỏi lệnh switch, các lệnh phía
sau break này không được
thực hiện


3. Lệnh switch







switch tính giá trị biểu thức E và kiểm tra xem:
Nếu E=C1 thì thực hiện các lệnh S ngay sau C1 cho
đến khi gặp lệnh break, và thoát khỏi lệnh switch.
Nếu không, switch sẽ kiểm tra E với C2. Nếu E=C2 thì
thực hiện các lệnh S ngay sau C2 cho đến khi gặp
lệnh break, và thoát khỏi lệnh switch. Nếu không,
switch sẽ kiểm tra E với C3, cứ tiếp tục như vậy.
Cuối cùng, nếu E không bằng bất kì C-i nào, máy thực
hiện lệnh trong phần default: (nếu có).



3. Lệnh switch


Ví dụ: hãy
nhập số
nguyên n,
nếu n thuộc
[1..12] thì
thông báo
số ngày của
tháng đó,
ngược lại
thông báo
“It is not
month!”

int main (){
int n;
cout << “n= " ; cin >> n;
switch (n){
case 1:cout << "co 31 ngay" ; break ;
case 2:cout << "co 28 ngay" ; break;
case 3:cout << "co 31 ngay" ; break;
case 4:cout << "co 30 ngay" ; break;
case 5:cout << "co 31 ngay" ; break ;
case 6:cout << "co 30 ngay" ; break;
case 7:cout << "co 31 ngay" ; break ;
case 8:cout << "co 31 ngay" ; break ;
case 9:cout << "co 30 ngay" ; break;

case 10:cout << "co 31 ngay" ; break ;
case 11:cout << "co 30 ngay" ; break;
case 12:cout << "co 31 ngay" ; break ;
default: cout << "It not month!" ;
}


3. Lệnh switch int main (){
 Ví

dụ:

…những

trường hợp
cho giá trị
giống nhau ta
xếp gọn vào
một vị trí và
đặt lệnh
break vào
trường hợp
cuối cùng.

int n;
cout << “n = " ; cin >> n;
switch (n){

case 1:
case 5:

case 7:
case 8:
case 10:
case 12:cout << "co 31 ngay" ; break ;
case 2: cout << "co 28 ngay" ; break;
case 4:
case 6:
case 9:
case 11:cout << "co 30 ngay" ; break;
default: cout << "It is not month!" ;

}//switch }//main


4. Cấu trúc lặp.
Mục đích của các vòng lặp là thực hiện lệnh với một số
lần nhất định hoặc chừng nào điều kiện còn đúng thì
lệnh còn được thực hiện.
a. Lệnh while…:


while (C) S;
trong đó: C (condition) là biểu thức điều kiện,
S (statement) là một lệnh.


Sơ đồ minh họa


4. Cấu trúc lặp.

a. Lệnh while…:

Thực hiện:
 B1: máy tính giá trị của C
 - Nếu C = true sang B2.
 - Nếu C = false sang B3.
 B2: thực hiện lệnh S, chuyển B1.
 B3: thoát khởi lệnh while…do…, chuyển đến các lệnh
sau while.


4. Cấu trúc lặp.
a. Lệnh while…:

Ví dụ 1: VCT nhập vào
số nguyên dương n,
in ra các số từ:
n, n-1, n-2, …1.
Input: 5
Output: 5 4 3 2 1

Chương trình:
int main(){
int n;
cout<<"n= "; cin>>n;
while (n>0) {
cout<--n;
}
}




4. Cấu trúc lặp.
a. Lệnh while…:


Lưu ý:






Vòng lặp phải kết thúc sau hữu hạn lần lặp, vì vậy bên
trong vòng lặp phải cung cấp một phương thức (thao
tác, hay lệnh) để điều kiện C trở thành false nếu không
thì nó sẽ lặp lại mãi mãi.
Trong ví dụ trên, lệnh --n; để làm cho C=false sau một
số lần lặp.
Lệnh S có thể không được thực hiện lần nào.


4. Cấu trúc lặp.
a. Lệnh while…:
Ví dụ 2: Nhập vào số nguyên dương A, xác định số N nhỏ nhất
sao cho: S = 1 + 2 + … + N > A.
 Giả sử A = 10 thì N = 5. (1+2+3+4+5>10)
HD:
 Ban đầu: S=0, N=0 và nhập A=10



S<=A

N

S

T

1

1

T

2

3

T

3

6

T

4


10

T

5

15

F


4. Cấu trúc lặp.
a. Lệnh while…:


Ví dụ 2: Nhập
vào số nguyên
dương A, xác
định số N nhỏ
nhất sao cho:
S=1+2+…
+ N > A.

int main(){
int n=0, s=0, a;
cout<<"nhap a= "; cin>>a;
while (s<=a){
n++;
s +=n;
}

cout<<"n = "<return 0;
}


4. Cấu trúc lặp.
b. Lệnh do…while…
Cú pháp:
do {
S;
} while (C);
 Máy thực hiện S, tiếp theo nếu C = true thì
thực hiện lần lặp tiếp theo từ lệnh S… ngược
lại, thoát khỏi vòng lặp.


4. Cấu trúc lặp.
b. Lệnh do…while…
Ví dụ 1: VCT nhập và in ra
các số nguyên, CT sẽ dừng
lại khi nhập vào số 0.
HD
Lệnh nhập số nguyên n:
cout<<“\n n= “; cin>>n;
Lệnh in số n:
cout<<“ output n: “<Điều kiện: (n!=0) thì nhập tiếp.


int main(){

int n;
do {
cout<<"\nn= ";
cin>>n;
cout<<"output: "<
} while (n!=0);

}


4. Cấu trúc lặp.
b. Lệnh do…while…

VD nhập và phân tích n ra thừa số nguyên tố.
G/s n=12, thừa số nguyên tố: 2 2 3
Đoạn mã:


cin>>n;
int i=2;
do {
if (n%i==0) { cout<else i++;
} while (n!=1);


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×