Trong cuộc sống chúng ta rất hay gặp phải những tình huống đòi hỏi chúng ta phải đưa ra lựa chọn, hoặc là cái này hoặc là cái kia. Cấu trúc IF-ELSE cũng tương tự như vậy: là tại một thời điểm sẽ có nhiều lựa chọn có thể xảy ra nhưng chỉ chọn một trường hợp duy nhất….
Ở bài viết trước chúng ta đã làm quen với Biến-Hằng-Câu lệnh và biểu thức trong C/C++
nay chúng ta sẽ làm quen với câu lệnh rẽ nhánh IF-ELSE.
Rẽ nhánh: là tại một thời điểm sẽ có nhiều lựa chọn có thể xảy ra nhưng xảy ra một trường hợp duy nhất.
Một câu lệnh rẽ nhánh trả về giá trị đúng hoặc sai
Ví dụ: Để xác định một số là số chẵn hay số lẻ chúng ta tiến hành như sau:
- Nhập vào một số
- Chia số đó cho 2 để xác định số dư
- Nếu số dư là 0, số đó là “SỐ CHẴN”
- Ngược lại số dư không bằng 0, số đó là “SỐ LẺ”
Câu lệnh if
Điều kiện sử dụng:
Ví dụ: Sinh viên có điểm trung bình lớn hơn 8.0 được nhận học bổng.
Trường hợp khác (có điểm trung bình không lơn hơn 8.0): không có yêu cầu gì cả.
statement;
Câu lệnh if…else…
Ví dụ: Nếu sinh viên có điểm trung bình lớn hơn hoặc bằng 4.0 thì đậu, ngược lại thì rớt. Ta thấy trong ví dụ này, bất kỳ sinh viên nào cũng chỉ có thể rơi vào trường hợp “đậu” hoặc “rớt” mà thôi, không có trường hợp khác.
Ngược lại: “rớt”.
Cú pháp:
if (expression)
statement1;
else
statement2;
Chi tiết hơn
Ví dụ:
Ví dụ: Yêu cầu người thực hiện chương trình nhập vào một số thực a. In ra màn hình kết quả nghịch đảo của a khi a ≠0, khi a =0 in ra thông báo “Khong the tim duoc nghich dao cua a”
#include <stdio.h> #include <conio.h> int main () { float a; printf("Nhap a = "); scanf("%f",&a); if (a !=0 ) printf("Nghich dao cua %f la %f",a,1/a); else printf("Khong the tim duoc nghich dao cua a"); getch(); return 0; }
Giải thích:
- Nếu chúng ta nhập vào a ≠0 thì câu lệnh printf(“Nghich dao cua %f la %f”,a,1/a) được thực hiện, ngược lại câu lệnh printf(“Khong the tim duoc nghich dao cua a”) được thực hiện.
- Lệnh getch() luôn luôn được thực hiện.
- Chạy từng bước dạng Debug, có thể xem các biến a, b và biểu thức a>b
Nếu bạn chưa biết debug thì xem thêm ở đây Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012
Câu if–else–if
Nếu 8.0>dtb>=6.5 thì xếp loại khá
Nếu 6.5>dtb>=5.0 thì xếp loại trung bình
Cú pháp
statement1;
else if (expression2)
statement2;
else if (expression3)
statement3;
…
else statementn;
Vd: Chương trình hiển thị thông báo dựa vào một giá trị
#include <stdio.h> #include <conio.h> void main() { int x; x = 0; printf("Enter Choice (1 - 3) : "); scanf("%d", &x); if (x == 1) printf ("\nChoice is 1"); else if ( x == 2) printf ("\nChoice is 2"); else if ( x == 3) printf ("\nChoice is 3"); else printf ("\nInvalid Choice "); getch(); }
Một vài chú ý:
- Biểu thức điều kiện trong cấu trúc if, if…else… phải có giá trị đúng hoặc sai.
- Biểu thức điều kiện có thể chỉ gồm một biều thức đơn giản hoặc có thể là sự kết hợp của nhiều biều thức điều kiện thông qua các phép toán và (&&), hoặc (||), phủ định (!).
Lệnh if lồng nhau
Trong C, một lệnh else luôn kết hợp với một lệnh if gần nhất cùng khối lệnh nếu lệnh else đó chưa được kết hợp với một lệnh if nào khác
Theo chuẩn ANSI, một trình biên dịch hỗ trợ ít nhất là 15 mức lồng nhau
#include <stdio.h> #include <conio.h> void main () { int x, y; x = y = 0; printf ("Enter Choice (1 - 3) : "); scanf ("%d", &x); if (x == 1) { printf("\nEnter value for y (1 - 5) : "); scanf ("%d", &y); if (y <= 5) printf("\nThe value for y is : %d", y); else printf("\nThe value of y exceeds 5 "); } else printf ("\nChoice entered was not 1"); getch(); }
Hướng dẫn giải quyết một bài toán
Các bước thực hiện
- Bước 1: Phân tích bài toán, xác định input, output và các bước xử lý để từ input có thể tạo ra được output.
- Bước 2: Cài đặt chương trình.
- Bước 3: Kiểm tra và chạy thử.
Ví dụ: Nhập vào điểm trung bình môn học; Ngôn ngữ lập trình. In ra màn hình cho biết sinh viên đó đậu hay rớt biết rằng nếu điểm trung bình lớn hơn hoặc bằng 4.0 thì đậu ngược lại là rớt.
Bước 1: Phân tích bài toán
Output: Xuất ra kết quả đậu hay rớt dựa vào điểm trung bình đã nhập.
Bài toán có 2 trường hợp là đậu, rớt => sử dụng cấu trúc if…else…
Biều thức điều kiện: dtb>=4.0
Bước 2: Cài đặt chương trình
Khai báo thư viện và viết hàm main
- Khai báo và nhập dữ liệu
- Cài đặt câu lệnh rẽ nhánh
Bước 3: Kiểm tra, sửa lỗi và chạy thử
Bài tập:
- Viết chương trình nhập vào 2 số a, b. Tìm số lớn nhất giữa 2 số.
- Viết chương trình nhập vào số nguyên, kiểm tra số đã nhập là số âm hay số dương
- Viết chương trình nhập vào 2 số nguyên, so sánh 2 giá trị vừa nhập vào (“Bằng nhau, nhỏ hơn, lớn hơn”).
- Viết chương trình nhập vào 2 số a,b. Kiểm tra a có là bội số của b không.
- Viết chương trình nhập vào đơn giá 1 mặt hàng, và số lượng bán của mặt hàng. Tính tiền khách phải trả, với thông tin như sau:
- Thành tiền: đơn giá * số lượng
- Giảm giá: Nếu thành tiền > 100, thì giảm 3% thành tiền, ngược lại không giảm
- Tổng tiền phải trả: thành tiền – giảm giá.
- Viết chương trình hỗ trợ cách giải phương trình bậc 1 (ax + b = 0)
- Viết chương trình tính tiền điện sử dụng trong tháng:
Từ 1 – 100KW: 5$
Từ 101 – 150KW: 7$
Từ 151 – 200KW: 10$
Từ 201 – 300KW: 15$
Từ 300KW trở lên: 20$
8. Giải phương trình bậc 2 ax2 + bx + c=0
9. Nhập vào 3 số nguyên a, b,c. In ra màn hình số nguyên lớn nhất và nhỏ nhất
10. Nhập vào điểm thi tốt nghiệp THPT (toán, lý, hóa, văn, anh, sử) của một thí sinh. Cho biết thí sinh đó xếp loại của thí sinh đó. Biết rằng xếp loại thi tốt nghiệp được xác định như sau:
- Điểm trung bình >=8 và không có môn nào dưới 6.5: loại giỏi
- Điểm trung bình >=7.0 và không có môn nào dưới 5.0: loại khá
- Điểm trung bình >=5.0 và không có môn nào dưới 3.5: loại TB
- Còn các trường hợp còn lại xếp loại Yếu.
Xem thêm Cấu trúc switch – case