Câu lệnh điều kiện, vòng lặp và switch trong C, C++
Trong bài học này, bạn sẽ kết hợp vòng lặp và câu lệnh switch trong một chương trình nhỏ để tính điểm trung bình và xếp loại.
Giới thiệu
Câu lệnh if chọn nhánh dựa trên một điều kiện đúng hoặc sai, switch xử lý các trường hợp có giá trị rời rạc, còn vòng lặp lặp lại một khối lệnh cho đến khi gặp điều kiện dừng. Cú pháp của các câu lệnh này gần như giống hệt nhau trong C và C++.
Những điểm quan trọng
- Luôn bật cảnh báo của trình biên dịch (compiler warning) và sửa hết các cảnh báo.
- Hiểu rõ kiểu dữ liệu và thời gian tồn tại (lifetime) của từng giá trị.
- Luôn kiểm tra dữ liệu đầu vào và giới hạn chỉ số của mảng.
Xem cách hoạt động
Kéo thanh trượt để đổi điểm. Lưu đồ sáng lên theo nhánh chương trình đi qua, và dòng code tương ứng được tô sáng.
Code ví dụ bằng C và C++
#include <stdio.h>
int main(void) {
int scores[] = {92, 71, 84};
int total = 0;
for (int i = 0; i < 3; ++i) total += scores[i];
int average = total / 3;
switch (average / 10) {
case 10: case 9: puts("Grade A"); break;
case 8: puts("Grade B"); break;
default: puts("Keep practicing");
}
return 0;
}
Grade B
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{92, 71, 84};
int total = 0;
for (int score : scores) total += score;
switch ((total / static_cast<int>(scores.size())) / 10) {
case 10: case 9: std::cout << "Grade A\n"; break;
case 8: std::cout << "Grade B\n"; break;
default: std::cout << "Keep practicing\n";
}
}
Grade B
So sánh C và C++
Vòng lặp for cộng ba điểm số lại để tính điểm trung bình, sau đó switch dựa vào average / 10 để chọn xếp loại. Bạn nên luôn dùng cặp ngoặc nhọn kể cả khi khối lệnh chỉ có một dòng, và nhớ đặt break ở cuối mỗi case để tránh chương trình chạy tiếp sang case sau ngoài ý muốn. Chỉ số của mảng cũng phải luôn nằm trong giới hạn.
C dùng các hàm thủ tục gọn nhẹ và thể hiện rõ cách dữ liệu được biểu diễn trong bộ nhớ.
C++ vẫn cho phép làm việc ở mức thấp nhưng bổ sung các kiểu dữ liệu thư viện và công cụ trừu tượng an toàn hơn.
Bài tập mở rộng
Hãy chạy cả hai phiên bản, sau đó thử thay đổi code để quan sát sự khác biệt về mức độ an toàn mà mỗi ngôn ngữ mang lại.
- Thử nhập dữ liệu sai và các giá trị ở biên.
- Biên dịch với các cờ -Wall -Wextra -Wpedantic để bật thêm cảnh báo.
- Tách phần khai báo dùng chung ra file header và phần cài đặt ra file riêng.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Xếp Loại Chữ Chuyển điểm kiểm tra thành xếp loại chữ. Dễ
- Fizz Buzz Tạo một dãy số dựa trên tính chia hết cho 3 và 5. Dễ
- Triangle Classification Classify three side lengths as invalid, equilateral, isosceles, or scalene. Dễ