Bài tập C/C++ cho người mới

Kiểm tra năm nhuận trong C, C++

Trong bài học này, bạn sẽ kiểm tra một năm có phải là năm nhuận hay không theo quy tắc của lịch Gregory.

Giới thiệu

Theo lịch Gregory, năm nhuận là năm chia hết cho 4, trừ các năm tròn thế kỷ (chia hết cho 100) mà không chia hết cho 400. Vì vậy 2000 là năm nhuận, còn 1900 thì không. Đây là bài tập tốt để luyện cách kết hợp nhiều điều kiện logic.

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.

Code ví dụ bằng C và C++

C
Chạy code →
main.c
#include <stdio.h>
int main(void) {
    int year = 2024;
    // Apply the Gregorian calendar rules in one expression.
    int leap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    printf("%d is %sa leap year\n", year, leap ? "" : "not ");
}
Kết quả khi chạy
2024 is a leap year
C++
Chạy code →
main.cpp
#include <iostream>
int main() {
    int year = 2024;
    // Apply the Gregorian calendar rules in one expression.
    bool leap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    std::cout << year << " is " << (leap ? "" : "not ") << "a leap year\n";
}
Kết quả khi chạy
2024 is a leap year

So sánh C và C++

Biểu thức year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) mô tả đầy đủ quy tắc trên chỉ trong một dòng. Phần đầu xử lý các năm chia hết cho 400, phần sau xử lý các năm chia hết cho 4 nhưng không phải năm tròn thế kỷ. Năm 2024 thỏa mãn phần sau nên là năm nhuận.

C

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++

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.

Tất cả thử thách