Bài viết này đi sâu vào các thành phần cốt lõi của lập trình C: biến (variables), các kiểu dữ liệu (data types), toán tử (operators), và hằng số (constants). Nắm vững những khái niệm này là bước đầu tiên để xây dựng các chương trình C hiệu quả.
Ngôn ngữ lập trình C là một trong những ngôn ngữ lập trình phổ biến và mạnh mẽ nhất, được sử dụng rộng rãi trong phát triển hệ thống, lập trình nhúng và nhiều ứng dụng khác. Được phát triển bởi Dennis Ritchie tại Bell Labs vào năm 1972, C là một ngôn ngữ cấp trung, kết hợp các tính năng của ngôn ngữ cấp cao và khả năng kiểm soát phần cứng của ngôn ngữ cấp thấp.
#include <stdio.h>: Một chỉ thị tiền xử lý, dùng để nạp thư viện stdio.h (Standard Input/Output) vào chương trình. Thư viện này cung cấp các hàm thiết yếu như printf() để in ra màn hình.
int main(): Hàm chính nơi quá trình thực thi chương trình bắt đầu.
return 0;: Câu lệnh kết thúc hàm main, trả về giá trị 0 để báo cho hệ điều hành rằng chương trình đã chạy xong mà không gặp lỗi.
Biến là tên gọi đại diện cho một vùng nhớ trong máy tính, dùng để lưu trữ dữ liệu. Mỗi biến trong C phải có một kiểu dữ liệu cụ thể, quyết định loại giá trị mà nó có thể chứa và dung lượng bộ nhớ mà nó chiếm dụng.
Để sử dụng một biến, trước tiên nó phải được khai báo. Bạn cũng có thể gán cho nó một giá trị ban đầu ngay khi khai báo.
Khai báo và khởi tạo biến
// Khai báo biến 'age' kiểu số nguyên và gán giá trị 25int age = 25;// Khai báo biến 'height' kiểu số thực và gán giá trị 1.75float height = 1.75;// Khai báo biến 'grade' kiểu ký tự và gán giá trị 'A'char grade = 'A';// Khai báo biến 'salary' kiểu số thực có độ chính xác caodouble salary = 50000.50;
Sử dụng scanf("%s", name) rất nguy hiểm vì nó không giới hạn số lượng ký tự đọc vào. Nếu người dùng nhập một chuỗi dài hơn kích thước của mảng name, lỗi tràn bộ đệm (buffer overflow) sẽ xảy ra. Nên sử dụng các hàm an toàn hơn như fgets() để đọc chuỗi.
Hằng số là các giá trị không thể thay đổi trong suốt quá trình thực thi chương trình.
Định nghĩa hằng số
// Sử dụng chỉ thị #define#define PI 3.14159#define MAX_SIZE 100// Sử dụng từ khóa 'const'const int MAX_STUDENTS = 50;
`#define` vs `const`
#define là một chỉ thị tiền xử lý, nó chỉ đơn giản là thay thế văn bản trước khi biên dịch. Trong khi đó, const tạo ra một biến thực sự có kiểu dữ liệu và chỉ có thể đọc, giúp trình biên dịch kiểm tra kiểu tốt hơn và an toàn hơn.
#include <stdio.h>int main() { int number, digit1, digit2, digit3, sum; printf("Nhap so co 3 chu so: "); scanf("%d", &number); // Tách các chữ số digit1 = number / 100; // Chữ số hàng trăm digit2 = (number / 10) % 10; // Chữ số hàng chục digit3 = number % 10; // Chữ số hàng đơn vị // Tính tổng sum = digit1 + digit2 + digit3; printf("So vua nhap: %d\n", number); printf("Chu so hang tram: %d\n", digit1); printf("Chu so hang chuc: %d\n", digit2); printf("Chu so hang don vi: %d\n", digit3); printf("Tong cac chu so: %d\n", sum); return 0;}
#include <stdio.h>int main() { int a, b, temp; printf("Nhap so thu nhat: "); scanf("%d", &a); printf("Nhap so thu hai: "); scanf("%d", &b); printf("Truoc khi hoan vi: a = %d, b = %d\n", a, b); // Hoán vị sử dụng biến tạm temp = a; a = b; b = temp; printf("Sau khi hoan vi: a = %d, b = %d\n", a, b); return 0;}