IF ... Else - Câu lệnh điều kiện
Làm thế nào để máy tính đưa ra những quyết định khác nhau tùy theo điều kiện hay dữ liệu chúng ta nhập vào ?
1. Lệnh điều kiện là gì ?
Là câu lệnh dùng để đặt điều kiện cho máy tính thực hiện hành động nào đó. Máy tính sẽ kiểm tra tính đúng sai của biểu thức trước khi thực hiện hành động kế tiếp. Có 2 câu lệnh căn bản trong C để kiểm tra điều kiện và thực hiện lệnh là : if và switch
2. Lệnh IF
Câu lệnh căn bản nhất dùng để kiểm tra điều kiện cho hành động của chương trình. Lệnh if có dạng như sau:
if ( biểu thức ) { hành động}
Trên đây là flowchart kiểm tra số a
có chia hết cho b hay không
. Hình thoi thể hiện phép kiểm tra.
Đường Y sẽ tương đương với hành động
của lệnh if sau khi kiểm tra biểu thức.
Trong câu lệnh if, biểu thức được kiểm tra trước khi hành động được thực hiện. Biểu thức trong câu lệnh này được kiểm tra tính Đúng hoặc Sai. Nếu biểu thức đúng, hành động sẽ được thực hiện. Nếu biểu thức sai, sẽ không có gì xảy ra và chương trình sẽ tiếp tục chạy sang phần tiếp theo.
Comment: 1 lệnh if hoàn toàn có thể kiểm tra nhiều biểu thức con liên tục để thực hiện hành động tiếp theo. Ví dụ như :
if ( a == 3 || a == 2 ){
printf (" %d la so nguyen to",a); }
Trong câu lệnh trên, mình sử dụng 2 dấu gạch sổ để kiểm tra biểu thức con a = 3 HOẶC biểu thức con a = 2. Nếu muốn kiểm tra cả 2 biểu thức cùng đúng ( biểu thức 1 đúng VÀ biểu thức 2 đúng ) thì ta sử dụng "&&".
Lưu ý: Nếu biểu thức được đưa vào lệnh if không thể so sánh được ví dụ:
if (2){hành động}
thì mặc định hành động của lệnh if sẽ được thực hiện.
3. Mở rộng các trường hợp cho lệnh IF
3.1 IF ... ELSE
Đây là câu lệnh để chúng ta đặt hành động cho chương trình ngay cả khi biểu thức bị sai. Với câu lệnh này, chương trình sẽ luôn thực hiện một trong 2 hành động được đặt ra theo 2 đường Đúng và Sai, bao quát được tất cả các trường hợp xảy ra.
if ( biểu thức ){ hành động 1}
else { hành động 2 }
Đường N thể hiện hành động của lệnh else khi điều kiện kiểm tra không thỏa mãn. Khi đó sẽ có 1 kết quả khác được in ra màn hình.
3.2 IF ... ELSE IF ...
Khi chúng ta cần nhiều hơn là 2 hành động đi liền với nhiều biểu thức khác nhau, chúng ta sẽ sử dụng thêm else if để tăng số lượng hành động chương trình có thể thực hiện.
if ( biểu thức 1 ) { hành động 1 }
else if ( biểu thức 2 ) { hành động 2 }
...
else if ( biểu thức n ) { hành động n }

Khi chúng ta cần in 1 trong nhiều kết quả khác nhau, cần dùng đến else if.
Chương trình sẽ kiểm tra lần lượt từng biểu thức từ trên xuống dưới. Nếu bất cứ biểu thức nào đúng, hành động tương ứng sẽ được thực hiện và dừng việc kiểm tra các biểu thức còn lại. Nếu không, sẽ không có hành động nào được thực hiện trừ khi viết thêm lệnh else.
3.3 Nested IF - Cấu trúc IF nằm trong IF / ELSE
Cấu trúc này hiểu đơn giản là : 1 lệnh if khác được đặt trong hành động của if / else nằm đằng trước nó. Cấu trúc này dùng để kiểm tra nhiều biểu thức không liên tục trước khi đưa ra hành động.
if ( biểu thức 1){
if ( biểu thức 2){ ...}
...}
Cấu trúc tương tự else if
So với cấu trúc else if kiểm tra nhiều biểu thức liên tục, cấu trúc này có lợi cho máy tính khi có biểu thức con trùng nhau, vì chương trình không phải kiểm tra lại biểu thức đã được kiểm tra từ trước, qua đó tăng hiệu suất xử lý theo thời gian.
Comment: Cái này rất dễ nhầm do có nhiều bậc kiểm tra không liên tục, nên sử dụng cùng với Flowchart để không bị rối và nhầm lẫn khi code. ( thường là lỗi ngoặc nhọn )
4. Lệnh Switch
Với lệnh
if, ta kiểm tra giá trị đúng / sai của biểu thức. Còn với lệnh
switch, ta so sánh bằng nhau kết quả của biểu thức. Giá trị được so sánh với kết quả của biểu thức chỉ có thể là
hằng số nguyên hoặc là
hằng ký tự.
switch ( biểu thức ){
case hằng 1:
hành động 1; break;
case hằng 2:

hành động 2; break;
....
case hằng n:
hành động n; break;
default:
hành động;
}
switch dùng với nhiều trường hợp
so sánh với giá trị nguyên/ ký tự
Nhìn cấu trúc trên, ta có thể thấy chương trình sẽ so sánh lần lượt từ 1 đến n. Nếu bất cứ giá trị nào bằng với kết quả của biểu thức, hành động tương ứng sẽ diễn ra, sau đó thoát khỏi lệnh
switch thông qua lệnh
break. Nếu không có lệnh
break, quá trình so sánh và ( có thể ) thực hiện hành động tương ứng sẽ diễn ra cho đến khi kiểm tra hết các hằng giá trị hằng đã đưa ra.
default có thể hiểu tương ứng với
else khi không còn giá trị để so sánh, chương trình sẽ thực hiện hành động tương ứng với
default. Thường
default được đặt cuối cùng nên không cần thêm lệnh
break để thoát khỏi
switch.
Comment: Chúng ta có thể đặt nhiều trường hợp ( case ) có chung một hành động bằng cách viết như sau:
Ví dụ:
case hằng 1:
case hằng 2:
case hằng 3:
printf("hi"); break;
Khi đó, nếu kết quả của biểu thức trùng với 1 trong 3 hằng giá trị trên, câu lệnh printf() sẽ được thực hiện.
5. Kết luận
Tùy vào nhu cầu sử dụng, ta có thể lựa chọn cấu trúc lệnh khác nhau cho phù hợp với hoàn cảnh.
if hay
if else dùng cho số lượng biểu thức con và trường hợp ít, nhiều hơn chút là
if else-if. Còn Nested
if thì dùng cho số lượng biểu thức cần kiểm tra lớn hơn, dễ bị trùng lặp.
switch dùng cho việc so sánh với hằng số hay hằng ký tự, biến thể của
if để đơn giản hóa việc code.
Sử dụng lệnh rẽ nhánh để viết thuật toán kiểm tra 1 số nguyên dương bất kỳ là số nguyên tố hay không.