Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
C ra đời từ những năm 1970 nhưng đến nay vẫn được dùng để viết hệ điều hành, trình điều khiển và phần mềm nhúng. Học C giúp bạn thấy rõ máy tính làm việc thế nào, và nhiều ngôn ngữ khác (C++, C#, Java, JavaScript) mượn cú pháp của nó.
#include <stdio.h>
int main(void) {
printf("Xin chao, the gioi!\n");
return 0;
}Giải thích từng phần:
#include <stdio.h>: nạp thư viện nhập xuất chuẩn để dùng printf.int main(void): hàm main là điểm bắt đầu của mọi chương trình C, trả về một số nguyên.printf(...): in ra màn hình; \n là xuống dòng.return 0;: báo cho hệ điều hành rằng chương trình kết thúc bình thường.;.C là ngôn ngữ biên dịch: bạn viết mã nguồn, trình biên dịch dịch thành file chạy được. Với trình biên dịch GCC, bạn gõ:
gcc hello.c -o hello
./hello # trên Windows: hello.exeNếu có lỗi cú pháp, trình biên dịch báo ngay kèm số dòng, và chương trình sẽ không được tạo ra cho đến khi bạn sửa xong.
C là ngôn ngữ kiểu tĩnh: phải khai báo kiểu cho mọi biến.
| Kiểu | Ý nghĩa | Định dạng printf |
|---|---|---|
| int | Số nguyên | %d |
| float, double | Số thực | %f |
| char | Một ký tự | %c |
#include <stdio.h>
int main(void) {
int tuoi = 20;
double diem = 8.5;
char xep_loai = 'A';
printf("Tuoi: %d, diem: %.1f, loai: %c\n", tuoi, diem, xep_loai);
return 0;
}#include <stdio.h>
int main(void) {
int a, b;
printf("Nhap hai so: ");
scanf("%d %d", &a, &b);
printf("Tong = %d\n", a + b);
return 0;
}Chú ý dấu & trước tên biến: scanf cần địa chỉ của biến để ghi giá trị vào đó. Quên dấu này là lỗi kinh điển. Đây cũng là cánh cửa dẫn tới khái niệm con trỏ.
Cú pháp quen thuộc với dùng ngoặc nhọn để gom khối lệnh:
#include <stdio.h>
int binh_phuong(int x) {
return x * x;
}
int main(void) {
for (int i = 1; i <= 5; i++) {
if (i % 2 == 0) {
printf("%d la so chan, binh phuong = %d\n", i, binh_phuong(i));
}
}
return 0;
}Mảng có kích thước cố định. Chuỗi là mảng ký tự kết thúc bằng ký tự đặc biệt '\0':
int diem[3] = {8, 7, 9};
char ten[] = "Lan"; // 4 phần tử: L, a, n và '\0'C không tự kiểm tra việc truy cập ngoài phạm vi mảng. Ghi vượt biên có thể gây hành vi không xác định, thậm chí lỗ hổng bảo mật; vì vậy phải luôn cẩn thận với chỉ số.
Đổi lại, C đòi hỏi bạn tự quản lý nhiều thứ nên dễ sai hơn Python hay JavaScript. Hãy bật cảnh báo của trình biên dịch (-Wall) và đọc kỹ chúng.
double bằng %d cho kết quả sai. Hãy đọc cảnh báo của trình biên dịch.5 / 2 là 2. Hãy ép kiểu (double)5 / 2.strcmp trong string.h.#include <stdio.h>
#include <string.h>
int main(void) {
char a[] = "abc";
char b[] = "abc";
if (strcmp(a, b) == 0) {
printf("Hai chuoi giong nhau
");
}
printf("%.1f
", (double)5 / 2); // 2.5
return 0;
}Hãy luôn biên dịch với cờ cảnh báo, ví dụ gcc -Wall -Wextra hello.c -o hello. Nhiều lỗi tiềm ẩn sẽ được chỉ ra trước khi bạn chạy.
Với chương trình đầu tiên, kiểu dữ liệu, nhập xuất, vòng lặp và hàm, bạn đã nắm bộ khung của C. Bước tiếp theo nên là con trỏ và cấp phát bộ nhớ. Hãy viết lại vài bài tập Python quen thuộc bằng C để cảm nhận sự khác biệt.
Khi đã sẵn sàng đi sâu hơn, bạn có thể tham khảo lộ trình học trong các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment