Ngôn ngữ C cơ bản: viết chương trình đầu tiên và hiểu cấu trúc

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

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ó.

Chương trình đầu tiê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.
  • Mỗi câu lệnh kết thúc bằng dấu chấm phẩy ;.

Biên dịch và chạy

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.exe

Nế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.

Kiểu dữ liệu và biến

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
intSố nguyên%d
float, doubleSố thực%f
charMộ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;
}

Nhập dữ liệu với scanf

#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ỏ.

Điều kiện, vòng lặp, hàm

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 và chuỗi trong C

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ố.

Vì sao vẫn nên học C?

  • Hiểu bộ nhớ, con trỏ, cách chương trình chạy ở mức thấp.
  • Là nền tảng để học C++ và đọc hiểu mã hệ thống.
  • Rất nhiều lập trình viên cho rằng sau khi quen C, các ngôn ngữ bậc cao trở nên dễ hiểu hơn.

Đổ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.

Lỗi thường gặp khi mới học C

  1. Quên dấu chấm phẩy hoặc ngoặc nhọn. Trình biên dịch thường báo lỗi ở dòng sau chỗ thiếu, nên hãy nhìn cả dòng phía trên.
  2. Dùng sai định dạng printf. In double bằng %d cho kết quả sai. Hãy đọc cảnh báo của trình biên dịch.
  3. Quên dấu & trong scanf cho biến số.
  4. Dùng biến chưa khởi tạo. Giá trị rác ngẫu nhiên có thể khiến chương trình chạy đúng lần này, sai lần khác.
  5. Chia hai số nguyên tưởng ra số thực: 5 / 2 là 2. Hãy ép kiểu (double)5 / 2.
  6. So sánh chuỗi bằng ==. Phải dùng 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.

Kết luận

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.

author_photo
Nguyễn Đình Cường

0 comment