Slide bài giảng Lập trình C++ - Lương Trần Hy Hiến - Cấu trúc điều khiển

Tuần tự(sequence)

Rẽnhánh (branch)

Lặp (loop) (Böhm-Jacopini theorem)

pdf10 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 2373 | Lượt tải: 5download
Tóm tắt nội dung Slide bài giảng Lập trình C++ - Lương Trần Hy Hiến - Cấu trúc điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Nội dung
 Cấu trúc rẽ nhánh
 if, switch
 Cấu trúc lặp
 while, for, do – while
 Các từ khóa
 break, continue
2
 Tuần tự (sequence)
 Rẽ nhánh (branch)
 Lặp (loop) (Böhm-Jacopini theorem)
3
bool exprT F
4
block 1 block 2
bool expr
block 1
T F-
 Dạng thiếu:
if (bool expr) statement;
if (bool expr) { … }
 Dạng đủ:
if (bool expr) statement1;
else statement2;
if (bool expr) {…}
else {…}
5
//Tìm số lớn nhất trong 2 số
int a, b, max;
cin >> a >> b;
if (a > b)
max = a;
else
max = b;
cout << ”max = ” << max << endl;
6
//In ra 2 số a,b nhập từ bàn phím sao cho b luôn 
mang giá trị lớn nhất
int a, b;
cin >> a >> b; 
if (a > b) {
int tmp = a;
a = b;
b = tmp;
}
cout << a << ”, ” << b << endl;
7
Lưu ý
 Nếu đặt dấu chấm phẩy (;) ở ngay sau biểu thức 
điều kiện thì lệnh S của if xem như “KHÔNG 
LÀM GÌ”
if (expr1) statement1;
else if (expr2) statement2;
else if (expr3) statement3;
…
else
statementn;
9
Ví dụ về if-else-if
if ( N< 0 ){
cout << N << " là số âm" << endl;
}
else if ( N > 0 ) { 
cout << N << " là số dương " << endl;
}
else {
cout << N << " bằng 0" << endl;
}
Chuyển if, switch, for sang while
if(BTDK)
{
Lệnh;
}
while(BTDK)
{
Lệnh; break;
}
11
if(BTDK1)
Khối Lệnh 1;
else if (BTDK2)
Khối lệnh 2;
else
khối lệnh;
bool flag = true;
while(BTDK1)
12
{
khối lệnh 1; flag = false; break;
}
while(BTDK2)
{
khối lệnh 2; flag = false; break;
}
while(flag){
Khối lệnh; break; }
 Yêu cầu: Viết chương trình thực hiện: 
1. nhập từ bàn phím số nguyên dương year
2. in ra màn hình Yes nếu là năm nhuận, No
nếu không
13
 Dễ nhầm với toán tử gán, kết quả của toán tử 
gán cũng có thể đổi thành giá trị logic
 if (a = 10) luôn đúng
if (a = 0) luôn sai
 if (a = b) tương đương if ( (a=b) > 0)
 Đảo thứ tự
 if ( 0 == a)
 if (10 == a)
14
Cấu trúc switch
 Cú pháp:
switch (biểu thức){
case : Lệnh/Khối lệnh 1; break;
case : Lệnh/Khối lệnh 2; break;
case : Lệnh/Khối lệnh 3; break;
…
case : Lệnh/Khối lệnh n; break;
default:
Lệnh/Khối lệnh;
}
15
Ví dụ về switch
char ch; cout> ch;
switch (ch) {
case 'a': case 'A':
case 'e': case 'E':
case 'i': case 'I': 
case 'o': case 'O':
case 'u': case 'U':
cout << ch << " là nguyên âm" << endl;
break;
default:
cout << ch << " không phảI nguyên âm" << 
endl;
}
cout << “Nhập vào biểu thức: ";
int a;
int b;
char Operator;
cin >> a>> Operator >> b;
cout << a<< " " << Operator << " " << b
<< " = ";
switch (Operator) {
case '+' : cout << a + b << endl; break;
case '-' : cout << a – b << endl; break;
case '*' : cout << a * b << endl; break;
case '/' : cout << a / b << endl; break;
default: cout << “Không hợp lệ" << endl;
}
Ví dụ khác – switch
//Doan chuong trinh doc so 0..9
switch(so) {
case 0: cout<<“khong”<<endl;
case 1: cout<<“mot"<<endl;
2 h i dlcase : cout<<“ a "<<en ;
case 3: cout<<“ba"<<endl;
case 4: cout<<“bon"<<endl;
case 5: cout<<“nam"<<endl;
case 6: cout<<“sau"<<endl;
case 7: cout<<“bay"<<endl;
case 8: cout<<“tam"<<endl;
case 9: cout<<“chin"<<endl;
}
block block
19
bool exprT
F
bool exprT
F
while (BT điều kiện) lệnh;
while (BT điều kiện) {
…
}
20
int i = 1, n, gt = 1;
cin >> n;
while (i++ < n) gt *= i;
// while (i < n) gt *= ++i;
/* while (i < n) {
i++;
gt *= i;
} */
cout << gt << endl;
21
Lưu ý dấu chấm phẩy ;
 Dấu ‘;’ đặt ngay sau biểu thức điều kiện đồng 
nghĩa với lệnh S là rỗng.
int j = 5;
while(j > 0);
cout<<"j = “<<j--;
Chương trình bị lặp 
không thoát được
 Yêu cầu: Viết chơng trình:
1. Nhập vào 2 số nguyên dương m, n
2. In ra ước số chung lớn nhất của 2 số này
23
for (state1; bool expr; expr2) 
state2;
int i, gt=1, n;
cin >> n;
for (i=1; i<=n; i++)
gt *= i;
cout << gt << endl;
24
int gt=1, n;
…
for (int i=1; i<=n; i++) gt *= i;
-------------------------------------
int i=1, gt=1, n;
…
for (; i<=n;) gt *= i++;
25
 Thường được sử dụng cho lặp với số lần 
xác định
 Không nhất thiết bước lặp là 1
 Trong C/C++, vòng lặp for là sự mở rộng 
của while
26
for (state1; bool expr; expr2) state2;
Tương đương với:
{
state1;
while (bool expr) {
state2;
expr2;
}
}
27
Nói thêm về for
 Phần lệnh khởi động và lệnh điều khiển có thể 
gồm nhiều lệnh đơn giản, các lệnh này cách 
nhau bởi dấu phẩy (,)
i t i j kn , , ;
for(i = 0, j = 5, k = -1; i < 10; i++, j++, k--)
 Các phần: khởi động, điều kiện lặp, điều 
khiển có thể không có lệnh nào.
for(; i < 10; i++, j++, k--)
for(;i < 10;)
for(;;)
Dùng while sẽ 
hợp lý hơn
Vòng lặp không kết thúc
do statement; 
while (bool expr);
do {
…
} while (bool expr);
29
do{
khối lệnh;
}while (biểu thức điều kiện);
30
khối lệnh;
while(biểu thức điều kiện)
{
khối lệnh;
}
int n;
do {
cout << ”n = ”;
cin >> n;
} while (0 >= n); 
31
Chờ nhập phím thích hợp
char TraLoi;
do {
cout << “Có hay không? (c/k): ";
if (cin >> TraLoi) 
TraLoi = tolower(Traloi);
else
TraLoi = ‘k';
} while ((TraLoi != ‘c') && (TraLoi 
!= ‘k'));
 Các vòng lặp chiếm nhiều thời gian thực hiện 
chương trình nhất
 Cần tối ưu vòng lặp
 dùng các phép toán có tốc độ cao
 đưa ra khỏi vòng lặp các giá trị có thể tính 
toán trước, không thay đổi trong vòng lặp
 Kiểm tra về tính dừng
33
 break: lệnh nhảy, đến vị trí ngay sau vòng lặp
 thoát khỏi vòng lặp
 continue: lệnh nhảy, đến vị trí ngay sau câu 
lệnh cuối cùng trong vòng lặp
 bắt đầu lượt lặp mới
34
//Nhập và In các số lẻ từ bàn phím cho tới nhập 
giá trị 0
int n;
while (true) { 
cout << ”n = ”;
cin >> n;
if (0 == n) break;
if (0 == n%2) continue;
cout << n << endl;
}
35
 Nhập số nguyên dương n từ bàn phím, in ra 
màn hình Yes nếu là số nguyên tố, No nếu 
không
Nh p các số nguyên t bàn phím, d ng l i khi  ậ ừ ừ ạ
gặp số nguyên tố, in ra màn hình tổng số các số 
đã nhập 
36
 Nhập số nguyên dương m, in ra m số Fibonacy 
đầu tiên, mỗi số cách nhau một dấu cách 
(space)
f(1) = 1, f(2) = 1;
 f(i+2) = f(i+1) + f(i) : i >0;
37
 Nhập số thực dương a, tính căn bậc 2 của a với 
độ chính xác đến 5 chữ số thập phân. Không sử 
dụng hàm thư viện.
Ph ng pháp Newton ươ
 s(1) = 1;
 s(i+1) = ( s(i) + a/s(i) )/2 : i > 0;
38
 Thao tác thành thạo với các câu lệnh điều khiển 
đã học
 Cài đặt hoàn chỉnh các ví dụ trong bài giảng
39

File đính kèm:

  • pdfSlide bài giảng Lập trình C++ - Lương Trần Hy Hiến - Cấu trúc điều khiển.pdf