Cấu trúc rẽ nhánh if, else là gìTrong cuộc sống có nhiều lúc chúng ta phải ra quyết định khi có 2 hoặc nhiều hướng khác nhau. Lúc đấy chúng ta tường sử dụng câu Nếu … Thì … Show VD: Nếu bạn đọc Blog của mình thì bạn sẽ học được nhiều thứ. Nếu crush thích mình thì mình sẽ tỏ tình với bạn ấy Nếu hôm nay trời nắng thì mình sẽ đi chơi hoặc nếu không nắng thì mình ở nhà Khi đó những thứ sau từ Nếu chính là điều kiện và sau từ Thì chính là lệnh thực thi. Tương tự trong máy tính chúng ta có if (điều kiện) thì thực thi gì đó, hoặc nếu không else (điều kiện) thì thực thi một cái gì đó. Cú pháp như sau: if(bieu_thuc_boolean) { /* cac lenh se duoc thuc thi neu bieu thuc boolean la true */ } else { /* cac lenh se duoc thuc thi neu bieu thuc boolean la false */ }Nếu biểu thức logic được ước lượng làtrue, thì khi đókhối ifsẽ được thực thi, nếu không thìkhối elsesẽ được thực thi. Lập trình C: Bài 5 – if else, switch case trong CTháng Một 19, 2018 nguyenvanquan7826 TUT C cơ bản 29 responses Trong cuộc sống có rất nhiêu điều chúng ta phải lựa chọn, ví như lựa chọn giữa người ta yêu và người yêu ta, chọn nghe theo con tim hay là lý trí,… Nếu hôm nay được nghỉ thì sẽ ở nhà học hay là đi chơi, nếu có người yêu thì ngồi code hay đi mua kem cùng ăn ngoài cổng trường, vân vân và mây mây. Và lập trình là đi từ cuộc sống, phục vụ cuộc sống nên nó cũng phải có những thứ như vậy. Bài này chúng ta sẽ tìm hiểu về các lệnh để phục vụ những lựa chọn như vậy, các lệnh này gọi là lệnh rẽ nhánh. Nội dung
Trước khi tìm hiểu về cấu trúc các lệnh rẽ nhánh, chúng ta nên tìm hiểu một chút về lệnh đơn và khối lệnh. 2.3 switch case statementsXin chào các bạn học viên đang theo dõi khóa học lập trình trực tuyến ngôn ngữ C++.Trong bài học này, chúng ta cùng nhau tìm hiểu câu lệnh được xây dựng sẵn trong ngôn ngữ lập trình C++ cũng được đưa vào dạng cấu trúc rẽ nhánh có điều kiện. Đó là câu lệnh được tạo nên bởi từ khóa switch và case, còn gọi là switch case statement. switch case statement thường được dùng để thay thế cho if statement trong trường hợp số lượng trường hợp cần so sánh quá dài. Mặc dù chúng ta có thể sử dụng kỹ thuật chaining if statement để nối các trường hợp cần kiểm tra lại với nhau, nhưng nó khiến chương trình khó đọc. Ví dụ: int main() { cout << "1: BLACK\n2: BLUE\n3: GREEN\n4: YELLOW\n5: WHITE" << endl; cout << "Enter your favorite color: "; int color; cin >> color; if (color == 1) cout << "You like BLACK color" << endl; else if (color == 2) cout << "You like BLUE color" << endl; else if (color == 3) cout << "You like GREEN color" << endl; else if (color == 4) cout << "You like YELLOW color" << endl; else if (color == 5) cout << "You like WHITE color" << endl; else cout << "Unknown" << endl; system("pause"); return 0; }Cũng với ví dụ mẫu này, mình sẽ chuyển nó về cấu trúc switch ... case để các bạn có cái nhìn đầu tiên về switch case statement: int main() { cout << "1: BLACK\n2: BLUE\n3: GREEN\n4: YELLOW\n5: WHITE" << endl; cout << "Enter your favorite color: "; int color; cin >> color; switch (color) { case 1: cout << "You like BLACK color" << endl; break; case 2: cout << "You like BLUE color" << endl; break; case 3: cout << "You like GREEN color" << endl; break; case 4: cout << "You like YELLOW color" << endl; break; case 5: cout << "You like WHITE color" << endl; break; default: cout << "Unknown" << endl; break; } system("pause"); return 0; }Các bạn có thể hiểu cấu trúc rẽ nhánh với switch case statement như sau: switch nhận vào 1 biến hoặc 1 biểu thức có giá trị kiểu số nguyên, mỗi nhãn case sẽ gắn kèm với 1 số nguyên cụ thể và chúng sẽ được lần lượt so sánh bằng (equality) với giá trị của biến (hoặc biểu thức) trong switch. Nếu nhãn case nào có giá trị tương xứng với biến hoặc biểu thức trong switch, những câu lệnh đứng sau nhãn đó sẽ được thực thi. Nếu không có nhãn nào có giá trị tương xứng, các câu lệnh đứng sau nhãn default sẽ được thực thi. Như vậy, chúng ta có thể đưa ra khuôn dạng của switch case statement như sau: switch ( <variable> ) { case this-value: //Code to execute if <variable> == this-value break; case that-value: Code to execute if <variable> == that-value break; //....................... default: //Code to execute if <variable> does not equal the value following any of the cases break; }
Khai báo và khởi tạo biến trong case statementChúng ta có thể khai báo biến bên trong mỗi case statement, nhưng chúng ta không thể khởi tạo giá trị cho chúng. switch (x) { case 1: int y; // declaration is allowed y = 4; // this is an assignment break; case 2: y = 5; // y was declared above, so we can use it here too break; case 3: int z = 4; // illegal, you can't initialize new variables in the case statements break; default: std::cout << "default case" << std::endl; break; }Nhưng chúng ta nên tránh khai báo biến bên trong case statement, nó sẽ khiến chương trình chúng ta khó đọc hơn. Chúng ta có nhiều giải pháp thay thế dễ hiểu hơn, nếu có dịp mình sẽ hướng dẫn cho các bạn. Tổng kếtVậy là chúng ta đã làm quen thêm một dạng cấu trúc rẽ nhánh có điều kiện khác. If statement được sử dụng khi muốn kiểm tra tính đúng sai của một hoặc một số mệnh đề. Switch case statement được sử dụng khi muốn kiểm tra một giá trị số nguyên. Đối với trường hợp số lượng biểu thức điều kiện cần so sánh là quá nhiều, chúng ta ưu tiên sử dụng switch case statement hơn vì cú pháp rõ ràng hơn. Chúng ta có thể biểu diễn cấu trúc của switch case statement dưới dạng sơ đồ khối như sau: Bài tập cơ bảnViết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày. Gợi ý: Nhập vào tháng
Lợi dụng trường hợp fall-through để tổ chức chương trình ngắn gọn hơn. P/s: Hẹn gặp lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ hướng thực hành. Mọi ý kiến đóng góp hoặc thắc mắc có thể đặt câu hỏi trực tiếp tại diễn đàn www.daynhauhoc.com Link Videos khóa họchttps://www.udemy.com/c-co-ban-danh-cho-nguoi-moi-hoc-lap-trinh/learn/v4/overview 1. Mô tả cấu trúc rẽ nhánh switch - case.Cấu trúc rẽ nhánh switch - case cho phép bạn lựa chọn một trong nhiều phương án có khả năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else mà tôi đã trình bày trong bài cấu trúc điều khiển if - else trong Java. Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánhswitch - case thay thế chocấu trúc điều khiển if - else if - else? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch - case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.
Cú pháp.
switch (biểu_thức) {
case giá_trị_1:
Lệnh 1;
break;
case giá_trị_2:
Lệnh 2;
break;
...
case giá_trị_n:
Lệnh n;
break;
[default: Lệnh 0;]
}
Cách thức hoạt động của switch - case như sau: Đầu tiên, chương trình sẽ so sánh giá trịcủa biểu_thức với các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n. Nếu trong các giá trị từgiá_trị_1, giá_trị_2,..., giá_trị_ncó giá trị nào bằng với giá trị của biểu_thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trongcase củagiá trị đócho đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case (trường hợp)còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này. Nếu giá trị của biểu_thức không bằng với bất kỳ giá trị nào trong danh sách giá_trị_1, giá_trị_2... giá_trị_nthì Lệnh 0 sẽ được thực hiện nếu có thành phần default. Lưu đồ hoạt động:
Dạng 1 là cấu trúc switch có sử dụng từ khóa default, còn dạng 2 là cấu trúc switch không sử dụng từ khóa default. Lưu ý:
4. Cấu trúc điều kiện if-elseCâu lệnh ifCâu lệnh if được sử dụng để xem xét việc thực thi một thao tác nào đó dựa trên điều kiện hiện tại. Cú pháp: 1. if (biểu_thức_điều_kiện) { 2. khối mã được thực thi nếu điều kiện là đúng 3. }Câu lệnh if bao gồm một biểu thức điều kiện và một khối lệnh ở trong phần thân của nó. Tại thời điểm thực thi, nếu biểu thức điều kiện trả về kết quả true thì khối lệnh trong phần thân sẽ được thực thi, còn nếu biểu thức điều kiện trả về false thì khối lệnh trong phần thân sẽ được bỏ qua. Ví dụ: 1. if(score > 9) { 2. classification = "Xuất sắc"; 3. }Trong đoạn mã này biểu thức điều kiện là score > 9, còn phần thân là classification = “Xuất sắc”. Khi thực thi chương trình nếu biến score có giá trị lớn hơn 9 thì biến classification sẽ được gán giá trị là “Xuất sắc”, còn nếu biến score có giá trị bằng hoặc nhỏ hơn 9 thì biến classification sẽ không được gán giá trị mới. Lưu ý: Nếu phần thân chỉ có một câu lệnh duy nhất thì chúng ta có thể không cần viết dấu mở và đóng ngoặc, còn nếu trong trường hợp phần thân có nhiều hơn 1 câu lệnh thì chúng ta bắt buộc phải mở và đóng ngoặc. Câu lệnh if-elseCâu lệnh if-else là dạng đầy đủ của câu lệnh if. Cú pháp: 1. if (biểu_thức_điều_kiện) { 2. khối mã được thực thi nếu điều kiện là đúng 3. } else { 4. khối mã được thực thi nếu điều kiện trên là sai 5. }Câu lệnh if-else cũng bao gồm một biểu thức điều kiện, nhưng lại có hai phần thân khác nhau. Một phần thân gắn với phần if và một phần thân gắn với phần else. Nếu biểu thức điều kiện trả về true thì phần thân gắn với if được thực thi, còn nếu biểu thức điều kiện trả về false thì phần thân gắn với phần else được thực thi. Luồng thực thi của câu lệnh if-else có thể được mô tả như lưu đồ dưới đây: Hình: Luồng thực thi của câu lệnh if-else Ví dụ 1: 1. if(hour < 18){ 2. greeting = "Good day"; 3. }else{ 4. greeting = "Good evening"; 5. }Trong đoạn mã trên, biểu thức điều kiện là hour < 18, còn phần thân của if là greeting = “Good day” và phần thân của else là greeting = “Good evening”. Khi thực thi, nếu biến hour có giá trị nhỏ hơn 18 thì biến greeting sẽ được gán giá trị là “Good day”, còn nếu biến hour có giá trị lớn hơn hoặc bằng 18 thì biến greeting sẽ được gán giá trị là “Good evening”. Ví dụ 2: 1. if(number % 2 == 0){ 2. alert(number + " is even."); 3. }else{ 4. alert(number + " is odd.") 5. }Trong ví dụ trên, chúng ta đánh giá một số nguyên và phân loại số đó là số chẵn hay là số lẻ. Trong trường hợp này, biểu thức điều kiện là để đánh giá xem số hiện tại có chia hết cho 2 hay không, còn hai phần thân là hiển thị thông báo tương ứng. Việc đánh giá chia hết cho 2 hay không được thực hiện thông qua phép chia lấy phần dư và sau đó so sánh với giá trị 0. Nếu phần dư bằng không thì chứng tỏ đây là số chẵn, còn nếu phần dư khác 0 thì số đó là số lẻ. Chẳng hạn, nếu number có giá trị là 4 thì kết quả phép chia cho 2 lấy phần dư là 0, do vậy biểu thức điều kiện sẽ trả về đúng, và phần thân của if được thực thi. Nếu number có giá trị là 5 thì kết quả phép chia cho 2 lấy phần dư là 1, do vậy biểu thức điều kiện trả về sai, phần thân của else được thực thi. if-else với một dòng lệnh bên trongTrong trường hợp chỉ có một dòng lệnh bên trong if hoặc else thì có thể bỏ dấu ngoặc. Ví dụ: 1. if(number % 2 == 0) 2. alert(number + " is even."); 3. else 4. alert(number + " is odd.") |