Cấu Trúc Rẽ Nhánh - Trần Lê Hùng Phi
Có thể bạn quan tâm
Giới thiệu
Trong việc thực thi chương trình, các câu lệnh được thực hiện theo tuần tự, tức là thực hiện từ câu lệnh đầu tiên, lần lượt từng câu lệnh tiếp theo cho đến câu lệnh cuối cùng. Nhưng để linh hoạt và hiệu quả trong việc giải quyết vấn đề, các ngôn ngữ lập trình bậc cao đều có các cấu trúc rẽ nhánh và cấu trúc lặp cho phép chương trình không thực hiện theo trình tự thông thường. Trong bài này, thầy sẽ giới thiệu đến các em cấu trúc rẽ nhánh trong ngôn ngữ lập trình C++.
Câu lệnh
Câu lệnh là đơn vị cơ bản của ngôn ngữ lập trình. Các câu lệnh giống như chỉ thị, hướng dẫn cho máy tính biết phải làm gì, xử lí dữ liệu thế nào.
Câu lệnh có thể là câu lệnh đơn hoặc câu lệnh phức. Sau đây, thầy sẽ giới thiệu cho các em về hai khái niệm đó.
Câu lệnh đơn
Câu lệnh đơn (câu lệnh đơn giản) chỉ gồm 1 câu lệnh chỉ thị, hay nói cách khác là 1 câu lệnh chỉ hướng dẫn máy tính thực hiện 1 thao tác.
Một số câu lệnh đơn phổ biến trong việc học như:
Câu lệnh khai báo
int a;
Câu lệnh gán
a = b + c;
Câu lệnh trả về
return 0;
Như các em có thể thấy với mỗi câu lệnh trên, chương trình chỉ thực hiện một công việc. Bên cạnh đó còn các kiểu câu lệnh đơn khác, nhưng do không phổ biến trong việc học nên thầy không giới thiệu, các em có thể tìm hiểu thêm trên mạng.
Câu lệnh phức
Câu lệnh phức (câu lệnh phức hợp) là các câu lệnh gồm nhiều lệnh chỉ thị, hay nói cách khác là một nhóm lệnh hướng dẫn máy tính thực hiện nhiều công việc.
Ở đây, thầy sẽ giới thiệu cho em khái niệm khối lệnh. Một khối lệnh có cấu trúc như sau:
{
<câu lệnh 1>;
<câu lệnh 2>;
...
<câu lệnh n>;
}
Như vậy, khối lệnh có dạng nhiều câu lệnh được để trong { và }.
Bên cạnh đó, các lệnh cấu trúc rẽ nhánh và cấu trúc lặp thầy sắp giới thiệu cũng là các câu lệnh phức.
Cấu trúc rẽ nhánh
Để dễ dàng cho các em liên tưởng, thầy sẽ cho một số ví dụ sau.
Ví dụ 1:
Nếu trời mưa, tôi sẽ ở nhà. Ngược lại, tôi sẽ đi chơi.
Ví dụ 2:
...Nếu là thỏ, Cho xem tai...
...Nếu là nai, Cho xem gạc...
...Nếu là gió, Xin mời vào...
Các em có thể thấy ở các ví dụ trên, với các điều kiện/trường hợp khác nhau thì sẽ có những hành động khác nhau được thực hiện tương ứng. Đó là những ví dụ cho cấu trúc rẽ nhánh trong thực tế.
Trong ngôn ngữ lập trình C++, ta dùng câu lệnh if và else hoặc câu lệnh switch-case để thiết lập việc đặt điều kiện, phân chia các trường hợp để cho chương trình thực hiện các câu lệnh tương ứng.
Câu lệnh if và else
Câu lệnh if và else có dạng đầy đủ như sau:
if (<điều kiện>)
<khối lệnh 1>
else
<khối lệnh 2>
Tuy nhiên cũng có trường hợp không dùng đến phần else. Trong trường hợp đó, các em không cần viết phần else, và cấu trúc sẽ trở thành như sau:
if (<điều kiện>)
<khối lệnh>
Trong đó <điều kiện> có thể là biểu thức quan hệ hoặc biểu thức logic.
Câu lệnh if và else này sẽ được thực hiện như sau:
Nếu <điều kiện> đúng, tức là có giá trị true hoặc khác 0, <khối lệnh 1> sẽ được thực hiện.
Nếu <điều kiện> sai, tức là có giá trị false hoặc bằng 0, <khối lệnh 2> sẽ được thực hiện. Trong trường hợp không có lệnh else thì điều này không xảy ra.
Sau đó câu lệnh tiếp theo sẽ được thực hiện.
Có thể các em thấy hơi khó hiểu, nên thầy sẽ lấy ví dụ với chương trình sau đây:
#include <iostream>
using namespace std;
int main(){
int a, b;
cout << "Nhap so thu nhat: ";
cin >> a;
cout << "Nhap so thu hai: ";
cin >> b;
if (a > b) //Nếu a lớn hơn b
cout << "a lon hon b" << endl; //thì xuất ra màn hình "a lon hon b"
else //ngược lại
cout << "a khong lon hon b" << endl; //thì xuất ra màn hình "a khong lon hon b"
return 0;
}
Do phần khai báo và nhập xuất thầy đã viết ở các bài trước (em nào quên thì phải coi lại nhé), nên ở đây, thầy chỉ giải thích cách hoạt của câu lệnh if và else.
Trường hợp 1: Thầy sẽ nhập vào các giá trị cho a, b lần lượt là 9 và 1.
Như các em thấy 9 lớn hơn 1, nên <điều kiện> có kết quả đúng. Trong trường hợp này, chương trình sẽ xuất ra màn hình dòng chữ:
a lon hon b
Sau đó, lệnh
return 0;
sẽ được thực hiện.
Trường hợp 2: Thầy sẽ nhập vào các giá trị cho a, b lần lượt là 5 và 5.
Như các em có thể thấy 5 không lớn hơn 5, nên <điều kiện> có kết quả sai. Trong trường hợp này, chương trình sẽ xuất ra màn hình dòng chữ:
a khong lon hon b
Sau đó, lệnh
return 0;
sẽ được thực hiện.
Các em có thể thấy rằng, trong hai trường hợp trên, câu lệnh if và else đã làm cho chương trình không thực hiện các lệnh theo tuần tự mà rẽ thành hai nhánh cho hai trường hợp. Các em cũng có thể lồng ghép nhiều lệnh if và else vào nhau, nhưng cũng cần chú ý là else chỉ đi với if gần nó nhất mà chưa có cặp thôi nhé. Ví dụ:
if (a>=b)
if (a=b)
cout << "a bang b" << endl;
else
cout << "a lon hon b" << endl;
else
cout << "a nho hon b" << endl;
Nó tương đương với:
if (a>=b)
{
if (a=b)
cout << "a bang b" << endl;
else
cout << "a lon hon b" << endl;
}
else
cout << "a nho hon b" << endl;
Câu lệnh switch
Câu lệnh if-else chỉ cho phép các em rẽ hai nhánh lệnh. Nếu muốn rẽ thêm các nhánh lệnh cho nhiều trường hợp thì các em có thể lồng ghép nhiều lệnh if-else vào nhau, như vậy sẽ gây khó khăn cho các em việc đọc và dò lỗi. Thật may mắn là bên cạnh câu lệnh if-else, các ngôn ngữ lập trình bậc cao thường có thêm câu lệnh switch cho phép chương trình chọn một trong nhiều nhánh lệnh để thực hiện.
Câu lệnh switch trong ngôn ngữ lập trình C++ có cấu trúc như sau:
switch (<biểu thức>) {
case <biểu thức hằng 1>:
<(các) câu lệnh>;
break;
case <biểu thức hằng 2>:
<(các) câu lệnh>;
break;
...
case <biểu thức hằng n>:
<(các) câu lệnh>;
break;
default:
<(các) câu lệnh>;
}
Thầy sẽ giải thích về cấu trúc trên:
<biểu thức> phải có kiểu nguyên hoặc kí tự.
Các em có thể đặt bao nhiêu case tùy thích. Theo sau case là một giá trị và dấu hai chấm (:).
Các <biểu thức hằng> phải có cùng kiểu dữ liệu với <biểu thức> ở switch và có giá trị là một hằng.
Khi giá trị của <biểu thức> ở switch bằng giá trị của <biểu thức hằng> ở một case, <(các) câu lệnh> ở case đó sẽ được thực hiện cho đến khi gặp lệnh break.
Khi gặp lệnh break, câu lệnh switch kết thúc và chương trình thực hiện câu lệnh tiếp theo, sau câu lệnh switch.
Mỗi casekhông bắt buộc phải có break. Nếu case được thực hiện không có lệnh break, chương trình sẽ thực hiện <(các) câu lệnh> ở các case tiếp theo đến khi gặp lệnh break.
Một câu lệnh switch có thể có trường hợp default, tức là trường hợp mặc định, nhưng không bắt buộc phải có. Nếu có trường hợp default, chương trình sẽ thực hiện <(các) câu lệnh> ở default nếu giá trị <biểu thức> ở switch không bằng giá trị <biểu thức hằng> ở tất cả các case. Trường default không cần break.
Dưới đây, thầy sẽ cho một chương trình ví dụ để giải quyết bài toán sau:
Nhập điểm kiểm tra (A, B, C, D hoặc F). Nếu điểm A, xuất ra màn hinh "Gioi"; nếu điểm B và C, xuất ra màn hình "Kha"; nếu điểm D, xuất ra màn hình "Trung binh"; nếu điểm F, xuất ra màn hình "Yeu"; nếu dữ liệu nhập vào không thỏa điều kiện đề bài, xuất ra màn hình "Xay ra loi".
#include <iostream>;
using namespace std;
int main(){
char diem;
cout << "Nhap diem kiem tra: ";
cin >> diem;
if (diem>='a') diem-=32; //In hoa kí tự nếu kí tự là chữ in thường
switch (diem){
case 'A':
cout << "Gioi" << endl;
break;
case 'B':
case 'C':
cout << "Kha" << endl;
break;
case 'D':
cout << "Trung binh" << endl;
break;
case 'F':
cout << "Yeu" << endl;
break;
default:
cout << "Xay ra loi" << endl;
}
return 0;
}
Thầy sẽ giải thích một số điều mới và câu lệnh switch trong ví dụ trên:
Điều mới:
Ta có thể xem một kí tự là một số tương ứng với giá trị thập phân của nó trong bảng mã ASCII.
Ngôn ngữ lập trình C++ có các phép gán phức với các toán tử như +=, -=, *=, /=,v.v.. có dạng chung là:
<tên biến> <toán tử>= <giá trị>
Có ý nghĩa là thực hiện phép toán giữa giá trị của <tên biến> và <giá trị> sau đó gán lại vào <tên biến>, ở ví dụ trên, thầy đã dùng:
diem-=32;
Với ý nghĩa là trừ giá trị của diem đi 32 đơn vị và gán giá trị đó vào diem.
Mã ASCII của kí tự in thường lớn hơn mã ASCII của kí tự in hoa 32 đơn vị.
Câu lệnh switch:
Các em có thể thấy ở case 'B': thầy để trống. Trong trường hợp giá trị của diem là 'B', chương trình sẽ đi vào nhánh case 'B': để thực hiện lệnh. Do không gặp lệnh break, chương trình thực hiện tiếp câu lệnh ở nhánh case 'C': xuất ra màn hình dòng chữ Kha và xuống hàng. Sau đó do gặp lệnh break nên câu lệnh switch kết thúc.
Trong trường hợp diem không mang giá trị 'A', 'B', 'C', 'D' hay 'F' thì chương trình sẽ thực hiện lệnh ở nhánh default: xuất ra màn hình dòng chữ Xay ra loi và xuống hàng. Sau đó câu lệnh switch kết thúc.
Người viết: Thái Dương Bảo Duy
Từ khóa » Cấu Trúc Tuần Tự Rẽ Nhánh Là Gì
-
Cấu Trúc Tuần Tự, Rẽ Nhánh Là Gì? Câu Hỏi 3874811
-
Cấu Trúc Tuần Tự, Rẽ Nhánh Là Gì? Câu Hỏi 3971278
-
Cấu Trúc Tuần Tự Cấu Trúc Rẽ Nhánh - Tài Liệu Text - 123doc
-
Cấu Trúc Tuần Tự, Rẽ Nhánh Là Gì? Hãy Nêu Sơ ...
-
[CHUẨN NHẤT] Cấu Trúc Tuần Tự Là Gì? - Toploigiai
-
Lý Thuyết Mô Tả Thuật Toán, Cấu Trúc Tuần Tự Trong ...
-
Cấu Trúc Tuần Tự Là Gì
-
Hãy Nêu Cấu Trúc Tuần Tự, Cấu Trúc Rẽ Nhánh Và Cấu Trúc Lặp - Hoc24
-
Ý Nghĩa Cấu Trúc Tuần Tự Cấu Trúc Rẽ Nhánh Và Cấu Trúc Lặp; Vẽ Sơ đồ ...
-
Cấu Trúc Tuần Tự Là Gì
-
Cấu Trúc Tuần Tự Là Gì Là Cấu Trúc Xác định Thứ Tự Dữ Liệu được Lưu Trữ
-
Lý Thuyết Tin Học Lớp 6 Bài 16: Các Cấu Trúc điều Khiển | Kết Nối Tri Thức
-
Lý Thuyết Các Cấu Trúc điều Khiển Tin Học 6 Kết Nối Tri Thức
-
Hãy Nếu Ví Dụ Trong Cuộc Sống Công Việc được Thực Hiện Theo Cấu ...