BÀI 8: CẤU TRÚC�RẼ NHÁNH
Giáo viên:
Gmail: thayhuetnh@gmail.com
SĐT, Zalo: 0382.1682.32
Blog: thayhuetnh.blogspot.com
1
Chương III: NGÔN NGỮ LẬP TRÌNH C++
BÀI 8: CẤU TRÚC RẼ NHÁNH
Trong bài giải phương trình bậc 2 ax2 + bx + c = 0 (a#0)
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b, c; //khai bao a, b, c kieu nguyen
float x1, x2, d; //khai bao x1, x2, d kieu thuc
cin>>a>>b>>c; d=b*b-4*a*c; //tinh delta
x1=(-b-sqrt(d))/(2*a);//tinh nghiem x1
x2=(-b+sqrt(d))/(2*a);//tinh ngiem x2
cout<<fixed<<setprecision(2);//lay 2 so le
cout<<x1<<" "<<x2; //in 2 nghiem
return 0;
}
2
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.1. Các phép tính quan hệ và lô gic
8.1.1. Các phép tính quan hệ
3
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
Biểu thức toán học | Phép tính trong C++ | Biểu thức tương đương trong C++ |
x = y | == | x == y |
x ≠ y | != | x != y |
x < y | < | x < y |
x ≤ y | <= | x <= y |
x > y | > | x > y |
x ≥ y | >= | x >= y |
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.1. Các phép tính quan hệ và lôgic
8.1.2. Các phép tính lô gic
4
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
Phép tính | Biểu thức | Ý nghĩa |
and | x and y | Cho kết quả true khi và chỉ khi x và y đều nhận giá trị true |
or | x or y | Cho kết quả là false khi và chỉ khi x và y đều nhận giá trị false |
not | not x | Đảo giá trị lô gic của x |
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.1. Các phép tính quan hệ và lôgic
8.1.2. Các phép tính lô gic
Mức ưu tiên của các phép tính
5
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
Phép tính | Biểu thức |
:: | Phạm vi |
++ -- () [] .-> | Hậu tố (một ngôi) |
++ -- ~ ! + - & * new delete sizeof (type) | Tiền tố (một ngôi) |
* / % + - | Số học, tỷ lệ |
<< >> | |
< <= > >= == != | So sánh |
and xor not or | Logical |
= *= /= %= += -= &= |= ^= >>= <<= | Gán |
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.1. Các phép tính quan hệ và lôgic
8.1.2. Các phép tính lô gic
Dịch trái – Bits shift left ( << )
Dịch phải – Bits shift right ( >> )
int a = 5; int b = a << 4;
cout<<b; //b = 80 = 5 * 2*2*2*2
int a = 24; int b = a >> 2;
cout<<b; //b = 6 = 24 / (2*2)
6
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.2. Quy tắc chung viết câu lệnh
Quy tắc chung
- Dấu hiệu kết thúc câu lệnh là dấu ;
- Các câu lệnh nên cách đầu dòng 1 khoảng.
- Các câu lệnh cùng mức có số cách đầu dòng như nhau.
- Câu lệnh ở khối lồng bên trong: có số dấu cách đầu dòng lớn hơn số dấu cách đầu dòng mức ngoài.
Lưu ý: Việc lùi xa lề trái nên được thực hiện bằng cách gõ trực tiếp các dấu cách, hoặc tab
7
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.3. Câu lệnh rẽ nhánh if
a. Câu lệnh if dạng thiếu
if (điều kiện) { khối lệnh; }
Nếu điều kiện đúng (true) thì thực hiện câu lệnh rồi kết thúc, ngược lại điều kiện sai (false) thì không thực hiện gì rồi kết thúc.
Ví dụ: Nếu a>b thì thông báo giá trị a
if (a>b) cout<<a;
8
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.3. Câu lệnh rẽ nhánh if
b. Câu lệnh if dạng đủ
if (điều kiện) { khối lệnh 1; } else { khối lệnh 2; }
- Nếu điều kiện đúng (true) thì thực hiện câu lệnh 1 rồi kết thúc, ngược lại điều kiện sai (false) thì thực hiện câu lệnh 2 gì rồi kết thúc.
Ví dụ: Nếu a>b thì thông báo giá trị a ngược lại thông báo giá trị b.
if (a>b) cout<<a;
else cout<<b;
9
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.3. Câu lệnh rẽ nhánh if
c. Câu lệnh if lồng nhau:
- Nếu điều kiện 1 đúng (true) thì thực hiện câu lệnh 1 rồi kết thúc, ngược lại (false) thì kiểm tra điều kiện 2; nếu điều kiện 2 đúng thì thực hiện câu lệnh 2 ngược lại thì thực hiện câu lệnh 3 rồi kết thúc.
Ví dụ: Tìm số lớn nhất trong 3 số a, b, c cho trước.
if ((a>b) and (a>c)) cout<<a;
else if (b>c) cout<<b;
else cout<<c
10
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
11
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.4. Các cách viết đặc biệt
Có thể viết nhiều câu lệnh trên một dòng, các câu lệnh cách nhau bởi dấu chấm phẩy (;)
Nếu khối con chỉ chứa một câu lệnh có thể viết cùng dòng với khối chính.
12
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.5. Lệnh gán có điều kiện
Câu lệnh if cho phép gán giá trị cho một biến phụ thuộc vào điều kiện nào đó. Ví dụ, khi cần xác định dấu của giá trị biến x (nhập vào hoặc nhận được trong quá trình tính toán trước đó), với câu lệnh if đã xét chương trình sẽ có dạng:
#include<bits/stdc++.h>
using namespace std;
int main(){
int d, x;
cout<<"x = "; cin>>x;
if (x<0) d=-1; else d=1;
cout<<"d="<<d;
return 0;
}
13
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.5. Lệnh gán có điều kiện
Giải bài phương trình bậc 2 với câu lệnh if
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b, c; //khai bao a, b, c kieu nguyen
float x1, x2, d; //khai bao x1, x2, d kieu thuc
cin>>a>>b>>c; d=b*b-4*a*c;//nhap a, b,c tinh delta
if (d<0) cout<<"PTVN";
else if (d==0) {
cout<<fixed<<setprecision(2);//lay 2 so le
cout<<-b/(2*a);
}
else {
x1=(-b-sqrt(d))/(2*a);//tinh nghiem x1
x2=(-b+sqrt(d))/(2*a);//tinh ngiem x2
cout<<x1<<" "<<x2; //in 2 nghiem
} return 0;
}
14
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.6. Câu lệnh switch:
8.6.1. Cú pháp
switch (biểu thức điều khiển){
case biểu_thức_1: dãy lệnh 1 ;
case biểu_thức_2: dãy lệnh 2 ;
case ………………………………: ............ ;
case biểu_thức_n: dãy lệnh n ;
default: dãy lệnh n+1;
}
- Biểu thức điều khiển: phải có kiểu nguyên hoặc kí tự,
- Các biểu_thức_i: được tạo từ các hằng nguyên hoặc kí tự,
- Các dãy lệnh có thể rỗng. Không cần bao dãy lệnh bởi cặp dấu {}
- Nhánh default có thể có hoặc không và vị trí của nó có thể nằm bất kỳ trong câu lệnh (giữa các nhánh case), không nhất thiết phải nằm cuối cùng.
15
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.6. Câu lệnh switch:
8.6.1. Cú pháp
switch (biểu thức điều khiển){
case biểu_thức_1: dãy lệnh 1 ; break;
case biểu_thức_2: dãy lệnh 2 ; break;
case ……………………………: .......... ; break;
case biểu_thức_n: dãy lệnh n ; break;
default: dãy lệnh n+1;
}
Cách thực hiện
Nếu muốn lệnh switch chỉ thực hiện nhánh thứ i (khi btđk = biểu_thức_i) mà không phải thực hiện thêm các lệnh còn lại thì cuối dãy lệnh thứ i thông thường ta đặt thêm lệnh break; đây là lệnh cho phép thoát ra khỏi một lệnh cấu trúc bất kỳ.
16
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.6. Câu lệnh switch:
8.6.2. Ví dụ minh họa
In số ngày của một tháng (1<=tháng<=12) bất kỳ được nhập vào từ bàn phím (không tính năm nhuận).
#include<bits/stdc++.h>
using namespace std;
int main(){
int th; cout<<"Nhap thang:"; cin>>th;
switch (th) {
case 1: case 3: case 5: case 7: case 8:
case 10: case 12: cout<<31; break;
case 2: {
cout<<28; break;
}
case 4: case 6: case 9: case 11: cout<<30; break;
default: cout<<"Ban da nhap sai thang";
} return 0;
}
17
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.7. Tóm tắt
Các phép tính quan hệ:
x==y, x!=y, x<y, x<=y, x>y, x>=y
Các phép tính lô gic:
x and y, x or y, not x
Cách viết câu lệnh:
18
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
8.7. Tóm tắt
Cú pháp lệnh if
if (điều kiện) {khối lệnh 1;}
if (điều kiện) {khối lệnh 1;} else {khối lệnh 2;}
Các từ khóa if, else tổ chức rẽ nhánh ở mức ngoài cùng,
Từ khóa else tổ chức if lồng nhau.
Cú pháp lệnh switch
switch (biểu thức điều khiển)
{
case biểu_thức_1: dãy lệnh 1 ;
case biểu_thức_2: dãy lệnh 2 ;
case ……………...: ............... ;
case biểu_thức_n: dãy lệnh n ;
default: dãy lệnh n+1;
}
19
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 1: Chọn đáp án đúng nhất
A. if (điều kiện) {khối lệnh 1}
B. if (điều kiện) {khối lệnh 1;}
C. if (điều kiện) {khối lệnh 1;
D. if (điều kiện) khối lệnh 1;}
20
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 2: Chọn đáp án đúng nhất
A. if (điều kiện) {khối lệnh 1;} else {khối lệnh 1;}
B. if (điều kiện) {khối lệnh 2;} else {khối lệnh 2;}
C. if (điều kiện) {khối lệnh 1 } else {khối lệnh 2;}
D. if (điều kiện) {khối lệnh 1;} else {khối lệnh 2;}
21
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 3: Cho đoạn chương trình sau:
if (a > b) a = b + a;
else b = b - a;
Với a = 9; b = 9; Hãy cho biết giá trị a, b sau khi chạy chương trình
A. a = 9; b = 9;
B. a = 18; b = 0;
C. a = 9; b = 0;
D. a = 18; b = 9;
22
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 4: Cho đoạn chương trình sau:
if (0) cout<<“Hello”;
else cout<<“Good Bye”;
Hãy cho biết kết quả sau khi chạy đoạn chương trình trên
A. Hello
B. Good Bye
C. Kết quả khác
D. Chương trình báo lỗi
Giải thích: Vì if(0) trả về giá trị false nên đoạn code bên trong else sẽ được thực thi. Trong C++ 0 là false, 1 là true.
23
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 5: Cho đoạn chương trình sau:
if ((a>b) and (a>c)) d=a;
else if (b>c) d=b;
else d=c;
Với a = 6; b = 8; c = 9; Hãy cho biết giá trị d sau khi chạy chương trình
A. d = 6
B. d = 8
C. d = 9
D. d = 23
24
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 6: Cho đoạn chương trình sau:
switch (t) {
case 1: case 2: case 3: cout<<“Mua Xuan”;break;
case 4: case 5: case 6: cout<<“Mua Ha”; break;
case 7: case 8: case 9: cout<<“Mua Thu”; break;
case 10: case 11: case 12:
cout<<“Mua Dong”; break;
}
Với t = 6 hãy cho biết kết quả sau khi chạy đoạn chương trình trên
A. Mua Xuan
B. Mua Ha
C. Mua Thu
D. Mua Dong
25
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 7: Cho đoạn chương trình sau:
int x=0;
switch (x){
Case 1: cout<<“One”;
Case 0: cout<<“Zero”;
Case 2: cout<<“Hello”;
}
Hãy cho biết kết quả sau khi chạy đoạn chương trình trên
A. One
B. Zero
C. Hello
D. OneZeroHello
26
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
Câu 8: Cho đoạn chương trình sau:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a=128, b;
b=a>>1; cout<<b;
return 0;
}
Hãy cho biết kết quả sau khi chạy đoạn chương trình trên
A. 1
B. 128
C. 64
D. 256
27
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
BÀI 8: CẤU TRÚC RẼ NHÁNH
28
Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên
Tổ Tin học Chương III
29
THE END!