Professional Documents
Culture Documents
Chương 04
CẤU TRÚC RẼ NHÁNH
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 1
Chuẩn đầu ra
■ L.O.3.1 – Liệt kê được các kiểu điều khiển và vẽ
sơ đồ mô tả chúng.
■ L.O.3.2 – Mô tả được được nguyên tắc kết hợp
các kiểu điều khiển để mô tả các giải thuật.
■ L.O.3.3 – Hiện thực được các kiểu điều khiển bằng
ngôn ngữ C.
■ L.O.3.4 – Sử dụng các cấu trúc điều khiển để giải
quyết bài toán thực tế.
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 2
Đặt vấn đề
Bài toán 1: nhập một ngày (gồm ngày, tháng, năm)
■ Một chương trình tốt không được giả sử người
dùng phải nhập đúng ngày, tháng, năm (đã thuộc
miền giá trị cho phép)
■ Để kiểm tra trường hợp nhập sai tháng, ta có thể
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 3
Đặt vấn đề
Bài toán 2: Giải phương trình bậc 2
■ Chương trình cần yêu cầu nhập các hệ số A, B, C
nói trên
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 4
Câu lệnh
■ Câu lệnh là một câu viết bằng ngôn ngữ lập trình.
Kết thúc câu lệnh là dấu chấm phẩy (;)
■ Các loại câu lệnh
■ Câu lệnh đơn (câu đơn)
■ Ví dụ: câu khai báo biến, câu lệnh gán, …
■ Câu lệnh phức (câu phức)
■ Nhiều câu lệnh được đặt trong cặp ngoặc { … }
■ Câu lệnh thuộc cấu trúc điều khiển như: if, if-else,
switch, for, while, do … while
■ Câu lệnh rỗng:
■ Chỉ có dấu ; đứng cuối
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 5
Chương trình
■ Chương trình là một danh sách tuyến tính (có thứ
tự) của các câu lệnh (đơn, phức, …)
■ Mặc định máy tính sẽ thực hiện lần lượt từ câu đầu
tiên đến câu lệnh cuối cùng.
■ Trừ khi gặp các cấu trúc điều khiển như:
■ Rẽ nhánh
■ if, if-else, switch
■ Lặp
■ for, while, do … while
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 6
Câu lệnh: if
■ Cú pháp:
if (<biểu thức điều kiện>) <câu lệnh>;
<câu lệnh>
<câu lệnh>: một trong các
loại câu lệnh đơn, kép hay
rỗng
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 8
Câu lệnh: if
■ Cú pháp + phong cách lập trình:
if (<biểu thức điều kiện>) <câu lệnh> if (<biểu thức điều kiện>) {
<câu lệnh>
//có thể có 1 hay nhiều câu lệnh
if (<biểu thức điều kiện>) }
<câu lệnh>
if (<biểu thức điều kiện>)
{
<câu lệnh>
TA //có thể có 1 hay nhiều câu lệnh
B }
TA
B
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 9
Câu lệnh: if-else
■ Cú pháp:
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 10
Câu lệnh: if-else
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 11
Câu lệnh: if-else
■ Cú pháp + phong cách lập trình
if (<biểu thức điều kiện>)
<câu lệnh đơn khi đúng>
else
<câu lệnh đơn khi sai> if (<biểu thức điều kiện>)
{
if (<biểu thức điều kiện>) { <câu lệnh đơn/kép khi đúng>
<câu lệnh đơn/kép khi đúng> //...
//... <câu lệnh đơn/kép khi đúng>
<câu lệnh đơn/kép khi đúng> }
} else
else { {
<câu lệnh đơn/kép khi sai> <câu lệnh đơn/kép khi sai>
//... //...
<câu lệnh đơn/kép khi sai> <câu lệnh đơn/kép khi sai>
} }
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 12
Cần phân rã các công
việc con trong đó để có
giải thuật hoàn thiện
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 13
Giải Phương trình bậc 2
#include <stdio.h>
#include <conio.h>
void main(){
float a, b, c, delta;
printf("Nhap vao gia tri cac so a, b, c: \n");
scanf("%f%f%f", &a, &b, &c);
if(a == 0) {
// giai phuong trinh bac 1
}
else {
delta = b*b - 4*a*c;
if(delta < 0) // tiep tuc giai phuong trinh bac 2 ...
}
getch();
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 14
Câu lệnh: if-else lồng nhau
Bài toán: xếp loại học sinh dựa theo điểm
■ Yếu: điểm thuộc [0, 5]
■ Trung bình: điểm thuộc [5, 6.5)
■ Khá: điểm thuộc [6.5, 8)
■ Giỏi: điểm thuộc [8, 9.5)
■ Xuất sắc: điểm thuộc [9.5, 10]
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 15
Câu lệnh: if-else lồng nhau
loai = “TB”
loai = “Y”
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 16
Câu lệnh: if-else lồng nhau
Có nhiều cách biểu diễn
if (<biểu thức điều kiện 1>) <Câu lệnh thực thi 1>
else if (<biểu thức điều kiện 2>) <Câu lệnh thực thi 2>
else if (<biểu thức điều kiện 3>) <Câu lệnh thực thi 3>
else <Câu lệnh thực thi 4>
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 17
Câu lệnh: if-else lồng nhau
if (<biểu thức điều kiện 1>) <Câu lệnh thực thi 1>
else if (<biểu thức điều kiện 2>) <Câu lệnh thực thi 2>
else if (<biểu thức điều kiện 3>) <Câu lệnh thực thi 3>
else <Câu lệnh thực thi 4>
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 18
Câu lệnh: if-else lồng nhau
#include <stdio.h>
#include <conio.h>
void main(){
float diem = 8.7f;
Phong cách: if(diem < 5.0f)
Canh lề thẳng đứng printf("%s", "Yeu");
else if(diem < 6.5f)
printf("%s", "Trung Binh");
else if(diem < 8.5f)
printf("%s", "Kha");
else if(diem < 9.5f)
printf("%s", "Gioi");
else
printf("%s", "Xuat sac");
getch();
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 19
Biểu thức điều kiện ? :
Cú pháp :
<điều kiện> ? <giá trị 1> : <giá trị 2>
nếu <điều kiện> đúng thì trả về <giá trị 1>, ngược lại
trả về <giá trị 2>
Ví dụ: lệnh
if (hours > 40) rate = 0.45;
else rate = 0.02;
có thể thay bằng :
rate = (hours > 40) ? 0.45 : 0.02;
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 20
Câu lệnh switch-case
Ví dụ: chương trình quản lý sách
■ Chương trình cung cấp menu các chức năng cho
người dùng chọn
■ Người dùng chọn một mục của menu
■ Chương trình thực hiện khối công việc tương ứng
với menu đã chọn
=> Phù hợp cấu trúc switch-case
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 21
Câu lệnh switch-case
Cú pháp: switch (<mã trường hợp>){
case <mã 1>: <câu lệnh 1>
case <mã 2>: <câu lệnh 2>
...
case <mã N>: <câu lệnh N>
default: <câu lệnh mặc nhiên>
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 22
Câu lệnh switch-case
<câu lệnh 1> <câu lệnh 2> <câu lệnh N> <mặc nhiên>
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 23
Câu lệnh switch-case
■ Chương trình kiểm tra xem trường hợp nào xảy ra trong
các trường hợp được liệt kê: <case 1>, <case 2>, ..,
<case N>
■ Nếu trường hợp thứ i xảy ra (i = 1 .. N):
■ Thực hiện lần lượt các câu lệnh từ i đến N, kể cả câu
trúc switch-case
■ Nếu không có trường hợp nào xảy ra thì chương trình
thực thi câu lệnh <mặc nhiên> và thoát khỏi cấu trúc
switch-case
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 24
Câu lệnh switch-case
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 25
Câu lệnh switch-case
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 26
Câu lệnh switch-case
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 27
Ví dụ
#include <stdio.h>
#include <conio.h>
int main(){
int luachon;
printf("Nhap vao lua chon: \n");
scanf("%d", &luachon);
switch (luachon){
case 1:
printf("Truong hop 1\n"); printf("Hanh dong 1\n");
case 2:
printf("Truong hop 2\n"); printf("Hanh dong 2\n");
default:
printf("Hanh dong mac dinh\n");
}
return 0;
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 28
Ví dụ
#include <stdio.h>
#include <conio.h>
int main(){
int luachon;
break: khiến chương trình
printf("Nhap vao lua chon: \n"); chỉ in ra tên hành động
scanf("%d", &luachon); tương ứng lựa chọn
switch (luachon){
case 1:
printf("Truong hop 1\n"); printf("Hanh dong 1\n"); break;
case 2:
printf("Truong hop 2\n"); printf("Hanh dong 2\n"); break;
default:
printf("Hanh dong mac dinh\n");
}
return 0;
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 29
Sử dụng kiểu liệt kê (enum)
#include <stdio.h>
#include <conio.h>
enum THop {DongY, TuChoi, ChuaQuyetDinh};
int main(){
enum THop luachon;
printf ("Nhap vao lua chon cua ban \n");
printf ("0. Ban dong y \n");
printf ("1. Ban tu choi \n");
printf ("2. Ban chua co quyet dinh \n");
scanf ("%d", &luachon);
switch (luachon) {
case DongY: printf ("Ban dong y\n"); break;
case TuChoi: printf ("Ban tu choi y\n"); break;
case ChuaQuyetDinh:printf ("Ban chua co quyet dinh\n"); break;
default: printf ("Ban khong nhap lua chon dung\n");
}
return 0;
}
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 30
So sánh if - else với switch
■ không dùng switch-case cho bài toán xếp loại sinh
viên theo điểm vì điểm không phải kiểu số nguyên
■ Câu lệnh switch có thể được biểu diễn lại bằng
một trình tự các câu lệnh if-else
■ Một số trường hợp switch-case tường minh và dễ
hiểu hơn.
■ Tất cả các cấu trúc điều khiển có thể được biểu
diễn lại bằng các câu lệnh if-else và các câu lệnh
goto (Với sự hỗ trợ của các nhãn)
Đại học Bách Khoa TpHCM Chương 4: Cấu trúc rẽ nhánh Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 31
Ôn tập
1. Câu lệnh nào dưới đây 2. Câu lệnh nào sau đây
không hợp lệ: KHÔNG tăng giá trị của
biến a lên 1
A. x = y;
B. x = x + 1; A. a++;
C. x + 1 = x; B. a += 1;
D. x += x * x; C. a = a + 1;
D. a += a + 1;
Đại học Bách Khoa TpHCM Chương 6: Hàm và tổ chức chương trình Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 32
Ôn tập
3. Hãy cho biết sau khi 4. Hãy cho biết câu lệnh
thực hiện đoạn chương sau xuất kết quả gì ra màn
trình sau, x có giá trị bằng hình
bao nhiêu? printf ("%f\n", cos(90));
int x = 2, y = 7;
x *=(y + 2) + 3;
Đại học Bách Khoa TpHCM Chương 6: Hàm và tổ chức chương trình Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 33
Ôn tập
5. Hãy cho biết kết xuất 6. Hãy cho biết kết xuất của
của chương trình sau đoạn chương trình sau
void main() { void main() {
int a = 6, b = 6; int a = 6;
if(a > 5) { printf( " a = %d ", a++);
a -= 1; b += 1; printf( " a = %d", ++a);
} {
else { int a = 8;
a += 1; b -= 1; printf( " a = %d", ++a );
} }
printf( " a = %d", a ); printf( " a = %d\n", a);
printf( " b = %d", b); }
}
Đại học Bách Khoa TpHCM Chương 6: Hàm và tổ chức chương trình Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 34
Ôn tập
7. Hãy cho biết kết xuất 8. Hãy cho biết câu lệnh
của đoạn chương trình sau đây:
sau switch (i)
void main(){ { case 1:
case 2:
int x = 6, y = 8; case 3:
if (x++ < 6) case 7: j = i; break; }
printf (“%d \n“, ++y ); tương đương với câu lệnh
nào dưới đây:
if(x > 6)
A. if (i == 1) j = i;
printf(“%d \n”, --y); B. if (i == 7) j = i;
else C. if ((i == 1) && (i == 2) &&
printf(“%d \n”, y++ );} (i == 3) && (i == 7)) j = i;
D. if ((i == 1) || (i == 2) ||
(i == 3) || (i == 7)) j = i;
Đại học Bách Khoa TpHCM Chương 6: Hàm và tổ chức chương trình Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 35
Ôn tập
9. Đoạn chương trình sau 10. Đoạn chương trình sau
xuất gì ra màn hình xuất gì ra màn hình
int x = 4; int x = 6;
int y = 7; int y = 4;
if ( x > 5 ) if ( x > 5 )
if ( y > 5 ) if ( y > 5 )
printf ("x and y are > 5"); printf( "x and y are > 5" );
else else
printf( "x is <= 5"); printf( "x is <= 5");
Đại học Bách Khoa TpHCM Chương 6: Hàm và tổ chức chương trình Môn: Nhập môn lập trình
Khoa KH & KT Máy Tính Slide 36