chương 3 cẤu trÚc ĐiỀu khiỂn - thayphet.net filekhối lệnh 1; else khối lệnh 2 ; ....
TRANSCRIPT
1
Chương 3
CẤU TRÚC ĐIỀU KHIỂN
Giảng Viên: ThS. Dương Thành Phết
Email: [email protected]
Website: http://www.thayphet.net
Tel: 0918158670 – facebook.com/duongthanhphet
KỸ THUẬT LẬP TRÌNH C/C++
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
KHOA CÔNG NGHỆ THÔNG TIN
http://www.thayphet.net
2
2
NỘI DUNG
1. Cấu trúc rẽ nhành If
2. Cấu trúc lựa chọn Switch
3. Cấu trúc lặp For
4. Cấu trúc Lặp While
5. Cấu trúc lặp Do. . . While
6. Lệnh Break và Continue
http://www.thayphet.net
3
1. CẤU TRÚC RẼ NHÁNH
3
Lệnh 1
Biểu thức
điều kiện
Lệnh 2
Lệnh 3
true
Cấu trúc rẽ nhánh cho phép thực hiện một khối lệnh dựa
vào kết quả của một biểu thức điều kiện Gồm 2 dạng:
Lệnh 1
Biểu thức
điều kiện
Lệnh 2
Lệnh 3
true
Lệnh 1
Lệnh 3
false
Lệnh 2
http://www.thayphet.net
4
4
if ( Biểu thức ĐK)
khối lệnh 1;
. . . . . . .
if ( Biểu thức ĐK )
khối lệnh 1;
else
khối lệnh 2 ;
. . . . . . .
Nếu biểu thức đk đúng thì
sẽ thực hiện khối lệnh 1 và
sau đó sẽ thực hiện các
lệnh tiếp sau khối lệnh 1..
Nếu biểu thức sai thì bỏ qua
khối lệnh 1 mà thực hiện
ngay các lệnh tiếp sau khối
lệnh 1.
Nếu biểu thức đúng thì sẽ
thực hiện khối lệnh 1 và sau
đó sẽ thực hiện các lệnh tiếp
sau khối lệnh 2.
Nếu biểu thức sai thì bỏ qua
khối lệnh 1 mà thực hiện khối
lệnh 2 sau đó thực hiện tiếp
các lệnh tiếp sau khối lệnh 2.
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
5
Vi du 01:
Viết chương trình nhập vào một số nguyên từ 1 đến 10,
nếu nhập sai thì thông báo
5
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
6
void main()
{
int k;
cout<<"Hay nhap mot so tu 1 den 10: ";
cin>>k;
if (k < 1 || k > 10)
cout<<"So ban vua nhap khong hop le"<<endl;
}
6
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
7
Ví du 02:
Nhập vào số nguyên a và b, nếu a là
bội số của b thì in thông báo “a là
bội số của b”, ngược lại in “a khong
la boi so cua b”
7
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
8
void main()
{
int a, b;
cout<<"Nhap vao a: ";
cin>>a;
cout<<"Nhap vao b: ";
cin>>b;
if(a%b==0)
cout<<"a la boi so cua b"<<endl;
else
cout<<"a khong la boi so cua b"<<endl;
}
8
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
10
void main()
{
float a, b;
cout<<"Nhap vao a: ";
cin>>a;
cout<<"Nhap vao b: ";
cin>>b;
if (a == 0)
if (b == 0)
cout<<"Phuong trinh vo so nghiem"<<endl;
else
cout<<"Phuong trinh vo nghiem"<<endl;
else
cout<<"Phuong trinh co nghiem x = "<< -b / a<<endl;
} 10
1. CẤU TRÚC RẼ NHÁNH
http://www.thayphet.net
11
switch (biêu thưc)
case n1:
cac câu lênh ;
break ;
case n2:
cac câu lênh ;
break ;
………
case nk:
<cac câu lênh> ;
break ;
[default: cac câu lênh]
11
2. CẤU TRÚC LỰA CHỌN
http://www.thayphet.net
12
ni la cac hăng sô nguyên hoặc ky tự.
Phu thuộc vao gia tri của biểu thức sau switch, nếu:
Giá tri nay = ni thi thực hiện câu lệnh sau case ni.
Khi giá tri biểu thức không thỏa tất cả cac ni thi
thực hiện câu lệnh sau default nếu có, hoặc thoat
khỏi câu lệnh switch.
Khi chương trinh đã thực hiện xong câu lệnh của
case ni nao đó thi nó sẽ thực hiện luôn cac lệnh
thuộc case bên dươi do đó để chương trinh thoat
khỏi lệnh switch, ta dung lệnh break.
12
2. CẤU TRÚC LỰA CHỌN
http://www.thayphet.net
13
void main()
{
int n;
cout<<"Nhap vao n (1<=n<=5): ";
cin>>n;
switch (n)
{
case 1: cout<<"So mot";break;
case 2: cout<<"So hai";break;
case 3: cout<<"So ba"; break;
case 4: cout<<"So bon"; break;
case 5: cout<<"So nam"; break;
default : cout<<"Khong doc duoc";
}
}
13
Ví dụ 04: Nhập vao số nguyên n có gia tri từ 1 đến 5. In cách
đọc của số đó ra man hinh.
2. CẤU TRÚC LỰA CHỌN
http://www.thayphet.net
14
14
3. CẤU TRÚC LẶP - FOR
for (<BT khơi gan> ; <BT điêu kiên>; <BT tăng/giam>)
{
<khôi lênh>;
}
Bât ky biêu thưc nao trong 3 biêu thưc noi trên đêu co thê
văng nhưng phai giư dâu châm phây (;)
http://www.thayphet.net
15
15
Thöïc hieän caùc leänh
trong voøng laëp
Khôûi gaùn
Ñuùng (Bieåu thöùc
ñieàu kieän khaùc 0)Kieåm tra bieåu
thöùc ñieàu kieän
Taêng/ giaûm chæ
soá laëp
Sai (Biểu thức
ñiều kiện = 0)
Nguyên ly hoạt động
Bươc 1: thực hiên Biêu thưc khơi gán
Bươc 2: Kiêm tra điêu kiên cua biêu thưc điêu kiên.
Nêu biêu thưc điều kiện bằng true thi cho thực hiên cac lênh trong
vong lăp, thực hiên biêu thưc tăng giảm. Quay trơ lai bươc 2.
Ngươc lai thoat khoi lăp.
3. CẤU TRÚC LẶP - FOR
http://www.thayphet.net
16
Vi du 05:
In ra man hinh 10 dòng chữ “Xin chao”
16
void main()
{
for (int buoc = 1; buoc <= 10; buoc++)
cout<<"Xin chao“<<endl;
}
3. CẤU TRÚC LẶP - FOR
http://www.thayphet.net
17
Ví dụ 06: Tinh tông: S=1+2+3+ . . +n , vơi n>0
17
BAÉT ÑAÀU
KEÁT THUÙC
S = 0 i = 1
S
n
i n Ñuùng
S = S + i
i = i + 1
Sai
3. CẤU TRÚC LẶP - FOR
http://www.thayphet.net
18
< Khơi gan>
while ( <biêu thưc điêu kiên>)
lênh/ khôi lênh;
<biêu thưc tăng/ giam>
18
4. CẤU TRÚC LẶP - WHILE
Lưu y: Cach hoat đông cua while giông for
Bươc 1: thực hiên Biêu thưc khơi gán
Bươc 2: Kiêm tra điêu kiên cua biêu thưc điêu kiên.
Nêu biêu thưc điều kiện bằng true thi thực hiên cac lênh trong
vong lăp, thực hiên biêu thưc tăng giảm. Quay trơ lai bươc 2.
Ngươc lai thoat khoi lăp.
http://www.thayphet.net
19
void main()
{
int buoc = 1;
while(buoc <= 10)
{
cout<<"Xin chao"<<endl;
buoc++;
}
}
19
Ví dụ 07: In ra màn hinh 10 dòng chữ “Xin chao”
4. CẤU TRÚC LẶP - WHILE
http://www.thayphet.net
20
< Khơi gan>
Do
{
<khôi lênh>;
<biêu thưc tăng/ giam>;
} while (biêu thưc điêu kiên);
20
5. CẤU TRÚC LẶP – DO . . .WHILE
Thực hiên khôi lênh cho đên khi biêu thưc co gia tri
băng false.
Câu trúc lăp do…while thường dùng cho trường hơp
nhập có kiêm tra điêu kiên
http://www.thayphet.net
21
Ví dụ 08: Nhập vào một số nguyên dương, nếu nhập vào số
bằng hoặc nhỏ hơn 0 thì thông báo lỗi và yêu cầu nhập lại.
21
void main()
{
int n;
do
{
cout<<"Nhap vao mot so nguyen duong: ";
cin>>n;
if (n <= 0)
cout<<"Nhap sai, hay nhap lai! "<<endl;
} while (n <= 0);
cout<<"Ban da nhap dung, ket thuc chuong trinh";
}
5. CẤU TRÚC LẶP – DO . . .WHILE
http://www.thayphet.net
22
Ngươc lai vơi câu trúc lăp for và while (kiêm tra điêu
kiên trươc khi thực hiên lăp), vong lăp do…while thực
hiên lênh lăp rôi mơi kiêm tra điêu kiên. Do đo vong lăp
do...while thực hiên lênh it nhât môt lân.
22
5. CẤU TRÚC LẶP – DO . . .WHILE
http://www.thayphet.net
23
6.1. Lệnh break:
Thoát khỏi các cấu trúc switch, while, for, do…while
chứa nó gần nhất.
Tại thời điểm break không cần kiểm tra kết quả của
biểu thức điều kiện.
Tuy nhiên, cần phân biệt vơi lệnh return là lệnh trả về
từ hàm, nghĩa là thoát khỏi hàm đang thi hành, nên
cũng giúp thoát luôn khỏi tất cả các vòng lặp.
23
6. LỆNH BREAK VÀ CONTINUE
http://www.thayphet.net
24
6.2. Lệnh continue:
Được sử dung trong các vòng lặp như while, for,
do…while.
Khi lệnh continue được gọi thì chương trình sẽ quay
trở về đầu vòng lặp để bắt đầu lần lặp mơi (có kiểm tra
điều kiện lặp để xác đinh có lặp tiếp hay không).
Nếu có các lệnh còn lại (cùng trong vòng lặp) đặt sau
continue sẽ không được thực hiện.
Nói tóm lại, lệnh continue thường dùng để bỏ qua một
lần lặp nào đó nếu thỏa điều kiện.
24
6. LỆNH BREAK VÀ CONTINUE
http://www.thayphet.net
25
void main()
{
int n;
while (true) {
cout<<"Nhap gia tri n: “;
cin>>n;
if (n <= 0){
cout<<"Ket thuc vong lap”;
break;
}
}
}
25
Ví dụ 09: Cho phép người dùng nhập liên tuc số nguyên
dương, nếu nhập số nguyên âm thì dừng
6. LỆNH BREAK VÀ CONTINUE
http://www.thayphet.net
26
Ví dụ 10: In ra man hinh gia tri từ 10 đến 20 trừ số 13 va 17.
26
void main()
{
for (int k = 10; k <= 20; k++)
{
if (k == 13 || k == 17)
continue;
cout<<k<<" ";
}
}
6. LỆNH BREAK VÀ CONTINUE
http://www.thayphet.net
27
BÀI TẬP CẤU TRÚC IF
int a=9, b=6;
a++;
a=a+b--;
a=a+(--b);
if(a%2==0)
cout<<"Gia tri cua a la chan"<<endl;
cout<<"Tong cua a va b la: " <<(a + b)<<endl;
27
Bai tập 1: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
28
int a=7, b=8;
a++;
a=a+b--;
--b;
a--;
a = (--a)+(--b);
if(a%2 != 0)
cout<<"a la so le"<<endl;
else
cout<<"a la so chan"<<endl;
cout<<"Gia tri cua a: " <<a<<endl; 28
Bai tập 2: Cho biết kết quả của đoạn chương trinh
BÀI TẬP CẤU TRÚC IF
http://www.thayphet.net
29
int x = 5, y;
y = x++ + 5;
cout<<"x= " <<x<<", y= "<<y<<endl;
y *= 6;
x = y % 7;
cout<<"x= "<<x<<", y= "<<y<<", y/x= "<<y/x<<endl;
29
Bai tập 3: Cho biết kết quả của đoạn chương trinh
BÀI TẬP CẤU TRÚC IF
http://www.thayphet.net
30
Bài tập 4: Viết chương trình nhập vao hai số nguyên a,
b. In ra man hinh gia tri lơn nhất.
Bài tập 5: Viết chương trình nhập vào ba số a, b, c đọc
vao từ ban phim. Hãy tim gia tri lơn nhất của ba số trên
va in ra kết quả.
Bài tập 6: Viết chương trình nhập ba số a, b, c đọc vao
từ ban phim. Hãy in ra man hinh theo thứ tự tăng dần
cac số. (Chi được dung thêm hai biến phu).
Bài tập 7: Viết chương trình nhập vao một số nguyên n
gồm ba chữ số. Xuất ra man hinh chữ số lơn nhất ở vi
tri nao?. Ví dun=291. Chư sô lơn nhât năm ơ hang chuc
(chư sô 9). 30
BÀI TẬP CẤU TRÚC IF
http://www.thayphet.net
31
Bài tập 6: Viết chương trinh nhập vao số nguyên n gồm ba
chữ số. Xuất ra man hinh theo thứ tự tăng dần của cac
chữ số. Vi du: n=291. Xuât ra 129.
Bài tập 7: Viết chương trình nhập vao ngay, thang, năm.
Kiểm tra xem ngay, thang, năm đó có hợp lệ hay không?
In kết quả ra man hinh.
Bài tập 8: Viết chương trình nhập vao giờ, phút, giây. Kiểm
tra xem giờ, phút, giây đó có hợp lệ hay không? In kết quả
ra man hinh.
Bài tập 9: Viết chương trinh nhập vao ngay, thang, năm
hợp lệ. Cho biết năm nay có phải la năm nhuận hay
không? In kết quả ra man hinh.
Bài tập 10: Viết chương trinh tinh diện tich va chu vi cac
hinh: tam giac, hinh vuông, hinh chữ nhật va hinh tròn vơi
những thông tin cần được nhập từ ban phim.
31
BÀI TẬP CẤU TRÚC IF
http://www.thayphet.net
32
Bài tập 11: Viết chương trinh tinh tiền cươc TAXI. Biết
rằng:
km đâu tiên la 13000đ.
Mỗi km tiêp theo la 12000đ.
Nêu lơn hơn 30km thi mỗi km thêm se la 11000đ.
Hãy nhập số km sau đó in ra số tiền phải trả.
Bài tập 12: Viết chương trình nhập vao 3 số nguyên
dương. Kiểm tra xem 3 số đó có lập thanh tam giac không?
Nếu có hãy cho biết tam giac đó thuộc loại nao? (Cân,
vuông, đều, …).
Bài tập 13: Viết chương trinh nhập vao số nguyên dương
n. Kiểm tra xem n có phải la số chinh phương hay không?
(số chinh phương la số khi lấy căn bậc 2 có kết quả la
nguyên).
32
BÀI TẬP CẤU TRÚC IF
http://www.thayphet.net
33
BÀI TẬP CẤU TRÚC SWITCH
Bài tập 14: Viết chương trình nhập vào 1 số nguyên
dương gồm 3 chữ số, in ra cách đọc của số này
33
http://www.thayphet.net
34
int a=18;
for(int i = 1; i <= a; i++)
if(a%i == 0)
cout<<i <<"\t";
34
BÀI TẬP CẤU TRÚC LẶP FOR, WHILE, DO.. WHILE
for(int i = 0; i < 5; i++){
for(int j = 0; j <= i; j++)
cout<<j<<“\t”;
cout<<endl;
}
Bai tập 15: Cho biết kết quả của đoạn chương trinh
Bai tập 16: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
35
int i = 10, s = 0;
while(i > 0){
if(i%2 == 0)
s+=i;
else
if(i > 5)
s+=2*i;
i--;
}
cout<<“s = ” <<s;
35
Bai tập 17: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
36
int a = 18, i = 1;
do{
if(a%i == 0)
cout<<i<<“\t”;
i++;
} while(i <= a);
36
Bai tập 18: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
37
int a = 11, b = 16, i = a;
while( i < b ){
if(i%2 == 0) {
Console.Write(i + "\t");
break;
}
i++;
}
37
Bai tập 19: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
38
int a = 10, s = 0, i = 0;
while( i < a ){
i++;
if (i % 2 == 0)
continue;
else
s=s+i;
}
cout<<"s = " <<s;
38
Bai tập 20: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
39
int i = 1, s = 0;
while(true){
s = s + i++;
if (i % 2)
i = i + 2;
else
i = i + 1;
if (i > 20)
break;
}
cout<<"s = " <<s;
39
Bai tập 21: Cho biết kết quả của đoạn chương trinh
http://www.thayphet.net
40
Bài tập 22: Viết chương trinh nhập số nguyên dương n.
Liệt kê n số nguyên tố đầu tiên.
Bài tập 23: Viết chương trinh nhập vao hai số nguyên
dương a va b. Tim ươc số chung lơn nhất va bội số
chung nhỏ nhất của a va b.
Bài tập 24: Viết chương trinh nhập vao một số nguyên n
gồm tối đa 10 chữ số (4 bytes). In ra man hinh gia tri nhi
phân của số trên. (Hương dân: chia lấy dư cho 2 va xuất
theo thứ tự ngược lại).
Bài tập 25: Viết chương trinh đếm số ươc số của số
nguyên dương N. Vi du: N=12 thì sô ươc sô cua 12 la 6
http://www.thayphet.net
41
Bài tập 26: Một số hoan thiện la một số có tông cac ươc
số của nó (không kể nó) bằng chinh nó. Hãy liệt kê cac
số hoan thiện nhỏ hơn 5000.
Vi du: Sô 6 la sô hoan thiên vi tông cac ươc sô:1+2+3 = 6.
Bài tập 27: Nhập vao ngay, thang, năm. Cho biết đó la
ngay thứ mấy trong năm.
Bài tập 28: In ra dãy số Fibonaci
f1 = f0 =1;
fn = fn-1 + fn-2; (n>1)
41