1 of 29

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++

2 of 29

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;

}

  • Ta chỉ tìm nghiệm của phương trình thôi, không quan tâm đến việc phương trình vô nghiệm và có nghiệm kép. Vậy nếu muốn giải bài phương trình bậc 2 hoàn chỉnh có biện luận nghiệm với delta > < =0 thì ta phải làm sao?

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

3 of 29

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

4 of 29

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 xy đều nhận giá trị true

or

x or y

Cho kết quả là false khi và chỉ khi x y đều nhận giá trị false

not

not x

Đảo giá trị lô gic của x

5 of 29

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

6 of 29

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 ( >> )

  • Phép dịch trái hay dịch phải được gọi chung là phép dịch bit.
  • Phép dịch trái n bit tương đương với phép nhân cho 2^n.

int a = 5; int b = a << 4;

cout<<b; //b = 80 = 5 * 2*2*2*2

  • Phép dịch phải n bit tương đương với phép chia cho 2^n.

int a = 24; int b = a >> 2;

cout<<b; //b = 6 = 24 / (2*2)

  • Sau khi dịch bit, các bit có chỉ số âm sẽ bị bỏ đi.

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

7 of 29

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

8 of 29

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

9 of 29

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

10 of 29

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 of 29

11

12 of 29

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

13 of 29

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

14 of 29

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

15 of 29

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

16 of 29

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

17 of 29

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

18 of 29

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:

    • Các câu lệnh ở khối trong viết lùi các đầu dòng nhiều hơn các câu lệnh khối ngoài,
    • Các câu lệnh cùng một khối: có khoảng cách tới đầu dòng như nhau,
    • Dùng dấu chấm phẩy để tách các câu lệnh trên một dòng,
    • Dùng cặp ngoặc tròn để viết một biểu thức trên nhiều dòng.

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

19 of 29

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

20 of 29

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

21 of 29

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

22 of 29

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

23 of 29

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

24 of 29

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

25 of 29

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

26 of 29

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

27 of 29

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

28 of 29

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 of 29

29

THE END!