Nói chung việc thực hiện chương trình là hoạt
động tuần tự, tức thực hiện từng lệnh một từ câu lệnh bắt đầu của chương trình
cho đến câu lệnh cuối cùng. Tuy nhiên, để việc lập trình hiệu quả hơn hầu hết
các NNLT bậc cao đều có các câu lệnh rẽ nhánh và các câu lệnh lặp cho phép thực
hiện các câu lệnh của chương trình không theo trình tự tuần tự như trong văn
bản. Phần này chúng tôi sẽ trình bày các câu lệnh cho
phép rẽ nhánh như vậy.
1. Câu lệnh điều kiện if
a. Ý nghĩa
Một câu lệnh if
cho phép chương trình có thể thực hiện khối lệnh này hay khối lệnh khác phụ
thuộc vào một điều kiện được viết trong câu lệnh là đúng hay sai. Nói cách khác
câu lệnh if cho phép chương trình rẽ nhánh (chỉ thực hiện 1 trong 2
nhánh).
b. Cú pháp
if (điều
kiện) { khối lệnh 1; } else { khối lệnh 2; }
hoặc
if (điều
kiện) { khối lệnh 1; }
Trong cú pháp trên
câu lệnh if có hai dạng: có else và không có else. điều
kiện là một biểu thức lôgic tức
nó có giá trị đúng (khác 0) hoặc sai (bằng 0).
Khi chương trình
thực hiện câu lệnh if nó sẽ tính biểu thức điều kiện. Nếu điều kiện đúng chương
trình sẽ tiếp tục thực hiện các lệnh trong khối lệnh 1, ngược lại nếu điều kiện
sai chương trình sẽ thực hiện khối lệnh 2 (nếu có else) hoặc không làm gì (nếu
không có else).
c. Đặc điểm
-
Đặc điểm chung của các câu lệnh có cấu trúc là
bản thân nó chứa các câu lệnh khác. Điều này cho phép các câu lệnh if có thể
lồng nhau.
-
Nếu nhiều câu lệnh if (có else và không else)
lồng nhau việc hiểu if và else nào đi với nhau cần phải chú ý. Qui tắc là else
sẽ đi với if gần nó nhất mà chưa được ghép cặp với else khác. Ví dụ câu lệnh:
if (n>0) if (a>b) c = a;
else c = b;
là tương đương với
if (n>0) { if (a>b) c = a;
else c = b;}
d. Ví dụ (click để xem)
Ví dụ 1: Kiểm tra năm nhuận.
Ví dụ 2: Giải phương trình bậc hai.
Chú ý: do C++ quan niệm "đúng" là một
giá trị khác 0 bất kỳ và "sai" là giá trị 0 nên thay vì viết if (x !=
0) hoặc if (x == 0) ta có thể viết gọn thành if (x) hoặc if (!x) vì nếu (x !=
0) đúng thì ta có x ¹ 0 và vì x ¹ 0 nên (x) cũng đúng. Ngược lại nếu (x) đúng
thì x ¹ 0, từ đó (x != 0) cũng đúng. Tương tự ta dễ
dàng thấy được (x == 0) là tương đương với (!x).
2. Câu lệnh lựa chọn switch
a. Ý nghĩa
Câu lệnh if cho ta
khả năng được lựa chọn một trong hai nhánh để thực hiện, do đó nếu sử dụng
nhiều lệnh if lồng nhau sẽ cung cấp khả năng được rẽ theo nhiều nhánh. Tuy
nhiên trong trường hợp như vậy chương trình sẽ rất khó đọc, do vậy C++ còn cung
cấp một câu lệnh cấu trúc khác cho phép chương trình có thể chọn một trong
nhiều nhánh để thực hiện, đó là câu lệnh switch.
b. 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.
c. Cách thực hiện
Để thực hiện câu
lệnh switch đầu tiên chương trình tính giá trị của biểu thức điều khiển
(btđk), sau đó so sánh kết quả của btđk
với giá trị của các biểu_thức_i bên dưới lần lượt từ biểu thức đầu tiên (thứ
nhất) cho đến biểu thức cuối cùng (thứ n), nếu giá trị của btđk bằng giá trị
của biểu thức thứ i đầu tiên nào đó thì chương trình sẽ thực hiện dãy lệnh thứ
i và tiếp tục thực hiện tất cả dãy lệnh còn lại (từ dãy lệnh thứ i+1) cho đến
hết (gặp dấu ngoặc đóng } của lệnh switch). Nếu quá trình so sánh không gặp
biểu thức (nhánh case) nào bằng với giá trị của btđk thì chương trình thực hiện
dãy lệnh trong default và tiếp tục cho đến hết (sau default có thể còn những
nhánh case khác). Trường hợp câu lệnh switch không có nhánh default và btđk
không khớp với bất cứ nhánh case nào thì chương trình không làm gì, coi như đã
thực hiện xong lệnh switch.
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ỳ.
d. Ví dụ minh họa (click để xem)
-----------------------------------------------------------------------------
Tham khảo Bài giảng NGÔN
NGỮ LẬP TRÌNH C/C++ của ĐHQGHN 2003
Sign up here with your email
ConversionConversion EmoticonEmoticon