Tài liệu Nhập môn lập trình - Lệnh rẽ nhánh/lựa chọn - Ngô Hữu Dũng: Nhập môn lập trình
Lệnh rẽ nhánh/lựa chọn
TS. Ngô Hữu Dũng
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
Nội dung
Nhập môn lập trình - Rẽ nhánh
Rẽ nhánh/lựa chọn
Lệnh if..else
Lệnh switch..case
2
Statement(s) Statement(s)
true false
Condition
Statement(s)
Case 1
Expression
Statement(s)
Case 2
Statement(s)
Default
Statement(s)
Case 3
If statement – Câu lệnh if
Nhập môn lập trình - Rẽ nhánh3
Nếu Điều kiện đúng thì
Thực hiện Lệnh
pseudocode
IF (Condition)
THEN Statement(s);
ENDIF;
1. // if syntax
2. if (Condition)
3. {
4. Statements;
5. ...
6. }
Statement(s)
true
Condition
false
Khối lệnh - Block
Nhập môn lập trình - Rẽ nhánh4
Khối lệnh: Gồm nhiều câu lệnh
Cần đặt giữa dấu {}
Cách gọi khác: Lệnh phức, lệnh ghép
Ví dụ:
1. if (Condition)
2. {
3. Statement 1;
4. Statement 2;
5. Statement 3;
6. Statement 4;
7. }
Statement 1
Statement 2
Statement 3
Statement 4
true
Condition
false
ifelse statement – Câu lệnh if...
40 trang |
Chia sẻ: putihuynh11 | Lượt xem: 585 | Lượt tải: 1
Bạn đang xem trước 20 trang mẫu tài liệu Nhập môn lập trình - Lệnh rẽ nhánh/lựa chọn - Ngô Hữu Dũng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Nhập môn lập trình
Lệnh rẽ nhánh/lựa chọn
TS. Ngô Hữu Dũng
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
Nội dung
Nhập môn lập trình - Rẽ nhánh
Rẽ nhánh/lựa chọn
Lệnh if..else
Lệnh switch..case
2
Statement(s) Statement(s)
true false
Condition
Statement(s)
Case 1
Expression
Statement(s)
Case 2
Statement(s)
Default
Statement(s)
Case 3
If statement – Câu lệnh if
Nhập môn lập trình - Rẽ nhánh3
Nếu Điều kiện đúng thì
Thực hiện Lệnh
pseudocode
IF (Condition)
THEN Statement(s);
ENDIF;
1. // if syntax
2. if (Condition)
3. {
4. Statements;
5. ...
6. }
Statement(s)
true
Condition
false
Khối lệnh - Block
Nhập môn lập trình - Rẽ nhánh4
Khối lệnh: Gồm nhiều câu lệnh
Cần đặt giữa dấu {}
Cách gọi khác: Lệnh phức, lệnh ghép
Ví dụ:
1. if (Condition)
2. {
3. Statement 1;
4. Statement 2;
5. Statement 3;
6. Statement 4;
7. }
Statement 1
Statement 2
Statement 3
Statement 4
true
Condition
false
ifelse statement – Câu lệnh ifelse
Nhập môn lập trình - Rẽ nhánh5
Statement(s) Statement(s)
true false
Condition
1. // if else syntax
2. if (Condition)
3. {
4. Statement(s);
5. ...
6. }
7. else
8. {
9. Statement(s);
10. ...
11.}
pseudocode
IF (Condition)
THEN Statement(s);
ELSE Statement(s);
ENDIF;
Toán tử điều kiện
Nhập môn lập trình - Rẽ nhánh6
1. // C code
2. if (Điều kiện)
3. Lệnh 1;
4. else
5. Lệnh 2;
1. // Conditional ternary operator (?)
2. (Điều kiện) ? Lệnh 1 : Lệnh 2;
Lệnh 1 Lệnh 2
true false
Điều kiện
Lệnh ifelse ifelse
Nhập môn lập trình - Rẽ nhánh7
Kiểm tra nhiều trường hợp
1. if (Condition 1)
2. {
3. Statement(s);
4. }
5. else if(Condition 2)
6. {
7. Statement(s);
8. ...
9. }
10....
11.else
12.{
13. Statement(s);
14. ...
15.}
Statement(s)
true
false
Condition 1
Condition 2 Statement(s)
true
false
Statement(s)
Condition 3 Statement(s)
true
false
Ví dụ minh hoạ if
Nhập môn lập trình - Rẽ nhánh8
Trị tuyệt đối
Nếu a < 0
a = -a
Xuất a
1. if (a < 0)
2. a = -a;
3. printf("%d", a);
a = -a
true
a < 0
false
Print a
Ví dụ minh hoạ if else
Nhập môn lập trình - Rẽ nhánh9
Kiểm tra chẵn lẻ
Nếu a chia chẵn cho 2 thì
Xuất a chẵn
Ngược lại thì
Xuất: a lẻ
pseudocode
IF (a % 2 == 0)
THEN Print a even;
ELSE Print a odd;
ENDIF;
a chẵn a lẻ
true false
a%2==0
1. // C code
2. if (a % 2 == 0)
3. printf("a chan");
4. else
5. printf("a le");
(a%2==0) ? printf("a chan") : printf("a le");
Ví dụ minh hoạ if else if
Nhập môn lập trình - Rẽ nhánh10
Kiểm tra âm dương
Nếu a < 0
a âm
Ngược lại Nếu a > 0
a dương
Ngược lại
a bằng 0
1. if (a < 0)
2. printf("a am");
3. else if(a > 0)
4. printf("a duong");
5. else
6. printf("a bang 0");
a âm
true
false
a < 0
a > 0 a dương
true
false
a bằng 0
Ví dụ minh hoạ - Khối lệnh - Block
Nhập môn lập trình - Rẽ nhánh11
Tìm max
max = a
Xuất a max
max = b
Xuất b max
true false
a > b
1. if (a > b)
2. {
3. max = a;
4. printf("a max");
5. }
6. else
7. {
8. max = b;
9. printf("b max");
10.}
Lồng nhau – Nested if
Nhập môn lập trình - Rẽ nhánh12
Một câu lệnh có thể
nằm bên trong một
câu lệnh khác
Các cấu trúc if được
xem như một câu
lệnh đơn
if
ifelse
Ví dụ
1. if(a % 2 == 0)
2. if(a < 0)
3. printf("a chan va am");
4. else if(a > 0)
5. printf("a chan va duong");
6. else
7. printf("a bang 0");
8. else
9. if(a == 0)
10. printf("a bang 0");
11. else{
12. printf("a le ");
13. if (a < 0)
printf("va am");
14. else
15. printf("va duong");
16. }
Lỗi thường gặp
Nhập môn lập trình - Rẽ nhánh13
Lỗi trong chương trình sau
Chấm phẩy ở dòng 2
Điều kiện sau else ở dòng 5
Dòng 8 và 9 cần nằm trong khối lệnh
Thêm {}
1. // Giai Phuong trinh ax + b = 0
2. if(a == 0); // “;” !?
3. if(b == 0)
4. printf("PT vo so nghiem");
5. else (b != 0) // !?
6. printf("PT vo nghiem");
7. else
8. x = -b/a;
9. printf("x = %d", x); // !?
switch case statement
Nhập môn lập trình - Rẽ nhánh14
1. // switch case syntax
2. switch(Expression)
3. {
4. case Value1:
5. Statement(s);
6. break;
7. case Value2:
8. Statement(s);
9. break;
10. case Value3:
11. Statement(s);
12. break;
13. ...
14. default :
15. Statement(s);
16.}
Statement(s)
Case 1
Expression
Statement(s)
Case 2
Statement(s)
Default
Statement(s)
Case 3
Nhận xét
Nhập môn lập trình - Rẽ nhánh15
1. switch(Biểu thức)
2. {
3. case :
4. Lệnh 1;
5. break;
6. case :
7. Lệnh 2;
8. break;
9. case :
10. Lệnh 3;
11. break;
12. ...
13. default :
14. Lệnh n;
15.}
Chia thành nhiều trường hợp
để xử lý
Biểu thức có giá trị kiểu số
nguyên
Giá trị là một số nguyên cụ
thể
Các giá trị không được trùng
nhau
Mỗi trường hợp kết thúc
bằng lệnh break
Có thể khuyết phần default
Ví dụ minh hoạ
Nhập môn lập trình - Rẽ nhánh16
Xuất “khong”
true
false
a = 0
a = 1 Xuất “mot”
true
false
Xuất “Khong doc duoc”
a = 9 Xuất “chin”
true
false
1. // Đọc số
2. switch(a)
3. {
4. case 0:
5. printf("khong");
6. break;
7. case 1:
8. printf("mot");
9. break;
10. ...
11. case 9:
12. printf("chin");
13. break;
14. default :
15. printf("khong doc duoc");
16.}
Ví dụ minh hoạ - Khuyết default
Nhập môn lập trình - Rẽ nhánh17
Xuất “khong”
true
false
a%10= 0
a%10= 1 Xuất “mot”
true
false
a%10= 2 Xuất “hai”
true
false
a%10= 9 Xuất “chin”
true
1. // Đọc số
2. switch(a%10)
3. {
4. case 0:
5. printf("khong");
6. break;
7. case 1:
8. printf("mot");
9. break;
10. case 2:
11. printf("hai");
12. break;
13. ...
14. case 9:
15. printf("chin");
16.}
Ví dụ minh hoạ - Khuyết break !?
Nhập môn lập trình - Rẽ nhánh18
true
false
a%10= 0
a%10= 2
true
false
a%10= 8 Xuất “chan”
true
false
Xuất “le”
1. // Chẵn lẻ
2. switch(a%10)
3. {
4. case 0:
5. case 2:
6. case 4:
7. case 6:
8. case 8:
9. printf("chan");
10. break;
11. default :
12. printf("le");
13.}
Ví dụ minh hoạ - Lồng nhau
Nhập môn lập trình - Rẽ nhánh19
1. // Đọc tháng
2. switch(thang/10) // Số hàng chục
3. {
4. case 1:
5. printf("Thang muoi ");
6. switch(thang%10) // Số hàng đơn vị
7. {
8. case 1: printf("mot."); break;
9. case 2: printf("hai."); break;
10. }
11. break;
12. case 0:
13. switch(thang){
14. case 1: printf("Thang mot."); break;
15. ...
16. }
17.}
Lỗi thường gặp
Nhập môn lập trình - Rẽ nhánh20
1. switch(a); // “;” !?
2. {
3. case 1.2: // “1.2” !?
4. printf("1.2"); break;
5. case >0: // “>0” !?
6. printf(">0"); break;
7. case 2:
8. printf("hai"); // Thiếu break;!?
9. case 3:
10. printf("ba"); break;
11. case 2: // Trùng “2”
12. printf("trung"); break;
13. default // Thiếu “:”
14. printf("bon");
15.}
if vs. switch
Nhập môn lập trình - Rẽ nhánh21
Switch kiểm tra các giá trị số nguyên
If kiểm tra kết quả đúng/sai (True/False)
Toán tử so sánh,
Toán tử luận lý
Giá trị bằng 0: False
Giá trị khác 0: True
1. switch(a%2)
2. {
3. case 0:
4. printf("chan");
5. break;
6. case 1:
7. printf("le");
8. }
1. if (a>=10 && a<100)
2. printf("a:[10..99]");
3. if (a)
4. printf("a khac 0");
5. if (!a)
6. printf("a = 0");
7. if (a>0)
8. printf("a > 0");
9. if (!(a>0))
10. printf("a <= 0");
Tiền xử lý và lệnh rẽ nhánh
Nhập môn lập trình - Rẽ nhánh
1. #include
2. #define MAX(A, B) (A > B ? A : B)
3. // preprocessor
4. int largest(int a, int b, int c)
5. {
6. int result;
7. result = MAX(a, b);
8. result = MAX(result, c);
9. return result;
10. }
11. void main()
12. {
13. printf("%d ", MAX(1,4));
14. printf("%d ", largest(7,3,8));
15. }
22
Bài tập 3.1 – Kiểm tra số
Nhập một số nguyên bất kỳ. Hãy kiểm tra xem số ấy có tính
chất như thế nào?
Là số dương, âm hay bằng không?
Là số chẵn hay lẻ?
Có phải là số có 2 chữ số hay không?
Ví dụ: Nhập vào số 9, xuất ra màn hình:
“Ban vua nhap so duong, so le, va khong phai la so co hai
chu so.”
Gợi ý: Sử dụng lệnh if để kiểm tra từng điều kiện
Nhập môn lập trình - Rẽ nhánh23
Tham khảo 3.1 – Kiểm tra số
Nhập môn lập trình - Rẽ nhánh24
1. #include
2. int main()
3. {
4. int soNguyen;
5. printf("Nhap mot so nguyen: ");
6. scanf("%d", &soNguyen);
7. printf("Ban vua nhap so ");
8. if (soNguyen > 0)
9. printf("duong");
10. else if (soNguyen < 0)
11. printf("am");
12. else
13. printf("khong");
14. if (soNguyen % 2 == 0)
15. ...
Bài tập 3.2 – Đổi ký tự
Nhập một ký tự. Nếu là chữ thường thì đổi sang chữ hoa,
ngược lại đổi sang chữ thường, nếu không phải là chữ thì
thông báo: “Khong phai chu”.
Ví dụ: Nhập vào ký tự ‘a’, xuất ký tự ‘A’
Gợi ý:
Ký tự ‘a’ có mã 97, các ký tự ‘b’, ‘c’ sau đó tăng dần
Ký tự “A” có mã 65, các ký tự ‘B’, ‘C’ có mã tăng dần
Kiểm tra ký tự thường
if(kyTu >= ‘a’ && kyTu <=‘z’) // hoặc if (islower(kyTu))
Chuyển sang ký tự thường
kyTu = kyTu – ‘A’ + ‘a’; // hoặc kyTu = tolower(kyTu);
Nhập môn lập trình - Rẽ nhánh25
Tham khảo 3.2 – Đổi ký tự
Nhập môn lập trình - Rẽ nhánh26
1. #include
2. int main()
3. {
4. char kyTu;
5. printf("Nhap mot ky tu: ");
6. scanf("%c", &kyTu);
7. if (kyTu>='a' && kyTu <= 'z'){
8. kyTu = kyTu - 'a' + 'A';
9. printf("Chuyen sang chu hoa: %c", kyTu);
10. }else if (kyTu >= 'A' && kyTu <= 'Z'){
11. kyTu = kyTu - 'A' + 'a';
12. printf("Chuyen sang chu thuong: %c", kyTu);
13. }else
14. printf("Khong phai chu");
15. ...
Bài tập 3.3 – Phương trình bậc nhất
Giải phương trình bậc nhất ax + b = 0.
Gợi ý: Nhập giá trị cho a và b
Kiểm tra các trường hợp
a = 0
b = 0
PT có vô số nghiệm
b ≠ 0
PT vô nghiệm
a ≠ 0
PT có nghiệm x = -b/a
Nhập môn lập trình - Rẽ nhánh27
Tham khảo 3.3 – Phương trình bậc nhất
Nhập môn lập trình - Rẽ nhánh28
1. #include
2. int main()
3. {
4. float a, b, x;
5. // Nhập a, b
6. if (a == 0)
7. if (b == 0)
8. printf("PT vo so nghiem");
9. else
10. printf("PT vo nghiem");
11. else{
12. x = -b/a;
13. printf("PT co Nghiem x = %f", x);
14. }
15. ...
Bài tập 3.4 – Phương trình bậc hai
Giải phương trình bậc hai ax2 + bx + c = 0.
Gợi ý:
Kiểm tra các trường hợp
a = 0
Giải phương trình bậc nhất bx + c = 0
a ≠ 0
Tính Delta
Kiểm tra Delta
Delta > 0: Hai nghiệm
Delta = 0: Nghiệm kép
Delta < 0: Vô nghiệm
Nhập môn lập trình - Rẽ nhánh29
Tham khảo 3.4 – Phương trình bậc hai
Nhập môn lập trình - Rẽ nhánh30
1. #include
2. int main()
3. {
4. float a, b, c, Delta, x;
5. // Nhập a, b, c
6. if (a == 0)
7. // Giải phương trình bx + c = 0
8. else{
9. Delta = b*b – 4*a*c;
10. if (Delta < 0)
11. printf("PT vo nghiem");
12. else if (Delta > 0)
13. ...
14. }
15. ...
Bài tập 3.5 – Tìm max
Nhập vào 4 số, tìm số có giá trị lớn nhất.
Ví dụ: Nhập 5, 9, 1, 8 max = 9
Gợi ý: Cho max giá trị ban đầu, lần lượt kiểm tra max với các số
Tạm cho max = a
Nếu max < b
max = b
Nếu max < c
max = c
Nếu max < d
max = d
Nhập môn lập trình - Rẽ nhánh31
Tham khảo 3.5 – Tìm max
Nhập môn lập trình - Rẽ nhánh32
1. #include
2. int main()
3. {
4. float a, b, c, d, max;
5. // Nhập a, b, c, d
6. max = a;
7. if (max < b)
8. max = b;
9. if (max < c)
10. max = c;
11. ...
Bài tập 3.6 – Sắp xếp
Nhập vào 4 số, hãy sắp xếp giá trị của 4 số theo thứ tự tăng dần.
Ví dụ: Nhập vào 5, 9, 1, 8 xuất ra 1, 5, 8, 9.
Gợi ý:
Cần hoán vị (x, y): tam = x; x = y; y = tam;
Tìm min (a, b, c, d)
Nếu a>b: hoán vị (a, b); nếu a>c: hoán vị (a, c); nếu a>d: hoán vị (a, d)
Tìm min (b, c, d)
Nếu b>c: hoán vị (b, c); nếu b>d: hoán vị (b, d)
Tìm min (c, d)
Nếu c > d: hoán vị (c, d)
Nhập môn lập trình - Rẽ nhánh33
Tham khảo 3.6 – Sắp xếp
Nhập môn lập trình - Rẽ nhánh34
1. #include
2. int main()
3. {
4. float a, b, c, d, tam;
5. // Nhập a, b, c, d
6.
7. if (a > b){
8. tam = a; a = b; b = tam;
9. }
10. if (a > c){
11. tam = a; a = c; c = tam;
12. }
13. if (a > d){
14. tam = a; a = d; d = tam;
15. }
16. if (b > c){
17. ...
Bài tập 3.7 – Xếp loại
Viết chương trình nhập điểm trung bình và xếp loại sinh viên theo
tiêu chí sau:
9 <= ĐTB: Xuất sắc
8 <= ĐTB < 9: Giỏi
7 <= ĐTB < 8: Khá
5 <= ĐTB < 7: Trung bình
5 > ĐTB: Yếu
Gợi ý:
Kiểm tra các trường hợp dùng if else if else
Nhập môn lập trình - Rẽ nhánh35
1. if (DTB >= 9)
2. printf("Xuat sac");
3. else if (DTB >= 8)
4. printf("Gioi");
5. else if (DTB >= 7)
6. printf("Kha");
7. ...
Tham khảo 3.7 – Xếp loại
Nhập môn lập trình - Rẽ nhánh36
1. #include
2. int main()
3. {
4. float DTB;
5. // Nhập DTB
6.
7. if (DTB >=0 && DTB <=10){
8. if (DTB >= 9)
9. printf("Xuat sac");
10. else if (DTB >= 8)
11. printf("Gioi");
12. ...
13. }else
14. printf("Nhap khong dung");
15. ...
Bài tập 3.8 – Tiền taxi
Tính tiền đi taxi từ số km nhập vào. Biết:
1 km đầu giá 15000đ
Từ km thứ 2 đến km thứ 5 giá 13500đ
Từ km thứ 6 trở đi giá 11000đ
Nếu trên 120km được giảm 10% tổng tiền.
Gợi ý
Mỗi km có giá khác nhau, ví dụ số km là 3 thì số tiền gồm giá 1 km
đầu và giá của 2 km sau đó: 15000 x 1 + 13500 x 2
Tính tiền theo các công thức khác nhau cho các trường hợp số km khác
nhau
Nhập môn lập trình - Rẽ nhánh37
Bài tập 3.9 – Tam giác
Nhập vào 3 số, kiểm tra đó có phải là ba cạnh của tam giác hay
không không? Nếu là tam giác thì đó là tam giác đều, tam giác
cân, tam giác vuông hay tam giác thường?
Ví dụ: Nhập vào 3, 4, 7:
Xuất: “3, 4, 7 khong phai ba canh cua tam giac”
Nhập vào 3, 4, 5:
Xuất: “3, 4, 5 la ba canh tam giac vuong”
Gợi ý:
Điều kiện tam giác: Tổng hai cạnh bất kỳ lớn hơn cạnh còn lại
a + b > c && b + c > a && a + c > b
Kiểm tra loại tam giác theo tính chất của từng loại
Nhập môn lập trình - Rẽ nhánh38
Bài tập 3.10 – Thời gian
Nhập môn lập trình - Rẽ nhánh39
Nhập vào 3 số nguyên tương ứng với giờ phút giây của
một đồng hồ điện tử.
Kiểm tra xem 3 số có thoả mãn điều kiện giờ phút giây?
Giờ: [0..23], Phút: [0..59], Giây: [0..59]
Nếu thoả mãn điều kiện trên: Hãy cho biết sau một giây, thời
gian sẽ hiện thị như thế nào?
Gợi ý: Số giây tăng lên một, có thể xảy ra các trường hợp:
Nếu số giây tăng đến 60: giây sẽ trở về 0 và tăng phút.
Nếu số phút tăng đến 60: phút sẽ trở về 0 và tăng giờ.
Nếu số giờ tăng đến 24: giờ sẽ trở về 0 (sang ngày mới).
Bài tập 3.11 – Đọc số
Nhập môn lập trình - Rẽ nhánh40
Nhập vào một số nguyên có 3 chữ số,
Kiểm tra xem số nguyên ấy có đúng 3 chữ số hay không?
Nếu đúng 3 chữ số: Xuất ra màn hình dạng chữ.
Ví dụ:
Nhập vào số 36, xuất: “Khong phai so co ba chu so”
Nhập vào số 365, xuất: “Ba tram sau muoi lam”.
Nhập vào số 305, xuất: “Ba tram le nam”.
Gợi ý:
Tính số hàng trăm, hàng chục và hàng đơn vị, hai cách:
tram = so/100; chuc = (so/10)%10; donVi = so%10;
t = so; donVi = t%10; t/=10; chuc = t%10; t/=10; tram=t%10;
Lần lượt xuất các số hàng trăm, chục, đơn vị dùng switch
Các file đính kèm theo tài liệu này:
- bai_giang_nhap_mon_lap_trinh_ts_ngo_huu_dung_3_nhap_mon_lap_trinh_lenh_re_nhanh_4729_1985342.pdf