🚀 Đã có khóa mới: Học Lập Trình C++ (1 kèm 1 · 23 buổi) — bấm để vào học → Toàn Học Lập Trình C
● Người mới bắt đầu Dev-C++ 6.3 Ngôn ngữ C

Toàn Học Lập Trình C
Buổi |

Hành trình từ con số 0. Mỗi khái niệm giải thích chậm rãi, có ví dụ minh họa và code chạy thật để bạn vừa đọc vừa hiểu.

main.c — Dev-C++
Bắt đầu học ↓
BUỔI 1

Làm quen lập trình & cài đặt Dev-C++

1 Lập trình là gì?

Hãy tưởng tượng bạn viết một công thức nấu ăn cho máy tính làm theo từng bước. Đó chính là lập trình — bạn ra lệnh, máy tính thực hiện chính xác y như vậy.

📝
Mã nguồn Code do người viết
⚙️
Trình biên dịch Dịch sang ngôn ngữ máy
🚀
Chương trình Chạy được, ra kết quả
Vì sao học C? C là ngôn ngữ lâu đời, là nền tảng của C++, Java, Python… Học C giúp bạn hiểu rõ máy tính hoạt động ra sao — học xong C, các ngôn ngữ khác sẽ dễ hơn nhiều.

2 Cài đặt & làm quen Dev-C++

Chạy file cài đặt Embarcadero_Dev-Cpp_6.3_Setup.exe → bấm Next liên tục → chọn ngôn ngữ → hoàn tất. Đã có sẵn trình biên dịch TDM-GCC, không cần cài thêm gì.

📄 New 💾 Save ⚙️ Compile (F9) ▶️ Run (F10) ⚡ Compile & Run (F11)
Vùng soạn code — bạn gõ chương trình ở đây
Compile Log — nơi báo lỗi & thông báo biên dịch (luôn nhìn xuống đây!)
Lưu file đúng cách! Bấm Ctrl+S, đặt tên bai1.cnhớ gõ đuôi .c (không phải .cpp). Nên tạo thư mục riêng như D:\HocC\ để khỏi thất lạc.

3 Phím tắt cần nhớ ngay

Ctrl+NTạo file mới
Ctrl+SLưu file (.c)
F9Chỉ biên dịch
F10Chỉ chạy
F11Biên dịch & chạy ⭐
Ctrl+Shift+SLưu tên khác

💡 Dùng nhiều nhất là F11 — vừa biên dịch vừa chạy chỉ với một phím.

4 Chương trình đầu tiên: Hello World

Đây là chương trình kinh điển mà mọi lập trình viên đều bắt đầu. Bấm "Chạy thử" để xem kết quả!

📄 bai1.c

      

Giải thích từng dòng — không bỏ sót dòng nào:

Sau khi chạy, console hiện dòng Process exited... Press any key to continue — nghĩa là chương trình đã chạy xong, bấm phím bất kỳ để đóng.

5 Tập đọc & sửa lỗi

Lỗi là chuyện bình thường! Quan trọng là biết đọc thông báo lỗi để sửa. Thử bỏ dấu ; xem điều gì xảy ra:

❌ Thiếu dấu ;

        
[Error] expected ';' before 'return'
bai1.c — dòng 4
✅ Đã sửa

        
✓ Compilation successful
Quy tắc vàng: Khi gặp lỗi đỏ, đừng hoảng! Nhìn xuống khung Compile Log, đọc số dòngnội dung lỗi, rồi sửa từ lỗi đầu tiên.
🏠 Bài tập về nhà

Buổi 1 — Làm quen & Hello World

3 bài theo độ khó tăng dần. Mỗi bài có kết quả in ra mẫu — bạn làm sao cho chương trình in ra giống y như mẫu là đạt!

Bài 1🟢 Siêu dễ

Giới thiệu bản thân

In ra 4 dòng: họ tên, năm sinh, lớp và sở thích của em.

🖥️ Kết quả in ra mẫu
Ho ten: Tran Hoang Duc Anh
Nam sinh: 2010
Lop: 10A1
So thich: Choi game

💡 Gợi ý: dùng 4 lệnh printf, mỗi dòng kết thúc bằng \n.

Bài 2🟡 Vừa (phải suy nghĩ)

Vẽ tam giác sao

In ra hình tam giác bằng ký tự *, mỗi dòng nhiều hơn dòng trên 1 sao (5 dòng).

🖥️ Kết quả in ra mẫu
*
**
***
****
*****

💡 Gợi ý: chưa học vòng lặp nên cứ viết 5 lệnh printf, mỗi dòng thêm 1 dấu *.

Bài 3🔴 Khó (sáng tạo)

Vẽ cây thông của riêng em

Dùng printf vẽ một cây thông (hoặc hình tự sáng tạo) bằng ký tự. Chỉ cần dùng printf\n.

🖥️ Kết quả in ra mẫu (gợi ý)
   *
  ***
 *****
*******
   |

💡 Sáng tạo: thêm khoảng trắng đầu dòng để căn giữa. Em có thể vẽ mặt cười, ngôi nhà… tùy thích!

BUỔI 2

Biến và kiểu dữ liệu

1 Biến là gì?

Biến giống như một cái hộp có dán nhãn để chứa giá trị. Bạn có thể bỏ giá trị vào, lấy ra, hoặc thay bằng giá trị khác.

tuoi
18
int
chieuCao
1.65
float
gioiTinh
'N'
char

Mỗi biến gồm 3 thành phần: tên · kiểu dữ liệu · giá trị.

Quy tắc đặt tên biến: bắt đầu bằng chữ cái hoặc dấu _, không có khoảng trắng, không trùng từ khóa của C.

2 Các kiểu dữ liệu cơ bản

🔢
int

Số nguyên

1, 2, -5, 100
📐
float

Số thực (có phần thập phân)

3.14, -0.5
🔤
char

Một ký tự duy nhất

'A', 'b', '5'

3 Khai báo, gán giá trị & in ra

Cùng viết chương trình lưu thông tin một người rồi in ra màn hình:

📄 bai2.c

      

4 Định dạng in (rất quan trọng!)

Mỗi kiểu dữ liệu có một ký hiệu định dạng riêng khi dùng với printf:

Ký hiệuDùng choVí dụ
%dint (số nguyên)printf("%d", 18); → 18
%ffloat (số thực)printf("%f", 1.65); → 1.650000
%.2ffloat, 2 chữ số thập phânprintf("%.2f", 1.65); → 1.65
%cchar (1 ký tự)printf("%c", 'N'); → N
Lỗi thường gặp! Dùng nhầm %d cho float sẽ ra số sai be bét. Hãy luôn dùng đúng ký hiệu cho đúng kiểu.

5 Luyện tập tại lớp

Tự khai báo 5 biến với 3 kiểu khác nhau, in ra màn hình.
Đổi giá trị biến giữa chừng: gán lại biến rồi in lần 2.
🏠 Bài tập về nhà

Buổi 2 — Biến và kiểu dữ liệu

3 bài theo độ khó tăng dần. Mỗi bài có kết quả in ra mẫu — hãy chọn đúng kiểu dữ liệu và đúng ký hiệu (%d, %f, %c) để in ra giống mẫu.

Bài 1🟢 Siêu dễ

Bảng điểm 3 môn

Khai báo 3 biến float lưu điểm Toán, Văn, Anh rồi in ra mỗi môn một dòng.

🖥️ Kết quả in ra mẫu
Toan: 8.50
Van: 7.00
Anh: 9.25

💡 Gợi ý: điểm có thể lẻ nên dùng float và in bằng %.2f.

Bài 2🟡 Vừa (phải suy nghĩ)

Hồ sơ học sinh

Khai báo đủ thông tin: hạng (1 ký tự char), tuổi (int), điểm trung bình (float) rồi in ra.

🖥️ Kết quả in ra mẫu
Hang: A
Tuoi: 15
Diem trung binh: 8.75

💡 Gợi ý: mỗi kiểu một ký hiệu — %c cho hạng, %d cho tuổi, %.2f cho điểm.

Bài 3🔴 Khó (sáng tạo)

Thẻ nhân vật game

Tự sáng tạo một thẻ nhân vật: khai báo các biến (cấp độ int, máu float, hạng char…) rồi in ra dạng khung đẹp bằng printf.

🖥️ Kết quả in ra mẫu (gợi ý)
=== THE NHAN VAT ===
Ten hang: S
Cap do: 12
Mau: 100.50
====================

💡 Sáng tạo: chỉ dùng biến + printf (chưa cần nhập liệu). Tự thiết kế khung viền bằng = cho đẹp!

BUỔI 3

Nhập dữ liệu và toán tử

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

Ở Buổi 2, giá trị do ta gán sẵn. Bây giờ ta cho người dùng tự nhập bằng lệnh scanf.

📄 nhaptuoi.c

      
Nhớ dấu & trước tên biến trong scanf! Đây là lỗi rất hay quên. Tạm hiểu: & nghĩa là "địa chỉ của biến" — học kỹ sau. Cú pháp: scanf("%d", &tuoi);

2 Các toán tử số học

Toán tửÝ nghĩaVí dụ
+Cộng5 + 2 → 7
-Trừ5 - 2 → 3
*Nhân5 * 2 → 10
/Chia6 / 2 → 3
%Chia lấy dư (chỉ dùng cho int)5 % 2 → 1

3 Cái bẫy: chia hai số nguyên

Đây là lỗi rất hay gặp: 5 / 2 cho kết quả 2 chứ không phải 2.5! Vì cả hai đều là số nguyên nên C cắt bỏ phần thập phân.

📄 chia.c

      
Cách sửa: muốn ra 2.5 thì cho ít nhất một số là số thực: 5.0 / 2 → 2.5. Dấu % chỉ dùng cho số nguyên.

4 Thứ tự ưu tiên các phép tính

Giống toán học: nhân chia trước, cộng trừ sau. Dùng dấu ngoặc ( ) để ép thứ tự.

( )Ngoặc tính trước
* / %Nhân, chia, chia dư
+ -Cộng, trừ
Ví dụ: 2 + 3 * 4 = 14 (nhân trước). Còn (2 + 3) * 4 = 20 (ngoặc trước).

5 Thực hành: Máy tính mini

Nhập 2 số rồi in ra cả 4 phép tính. Bấm "Chạy thử" để xem kết quả với a = 6, b = 4.

📄 maytinh.c

      

💡 Dùng float để phép chia ra số lẻ chính xác.

🏠 Bài tập về nhà

Buổi 3 — Nhập liệu & toán tử

3 bài theo độ khó tăng dần. Làm cho chương trình in ra giống kết quả mẫu nhé!

Bài 1🟢 Siêu dễ

Tổng hai số

Nhập 2 số nguyên a, b rồi in ra tổng của chúng.

🖥️ Kết quả in ra mẫu
Nhap a: 7
Nhap b: 5
Tong = 12

💡 Gợi ý: 2 lần scanf("%d", &...), rồi in a + b bằng %d.

Bài 2🟡 Vừa (phải suy nghĩ)

Điểm trung bình

Nhập điểm Toán, Văn, Anh (số thực) rồi tính và in ra điểm trung bình.

🖥️ Kết quả in ra mẫu
Nhap diem Toan: 8
Nhap diem Van: 7
Nhap diem Anh: 9
Diem trung binh: 8.00

💡 Gợi ý: dùng float; trung bình = (t + v + a) / 3, in bằng %.2f.

Bài 3🔴 Khó (sáng tạo)

Hình tròn

Nhập bán kính r, tính chu vi (2 * 3.14 * r) và diện tích (3.14 * r * r).

🖥️ Kết quả in ra mẫu
Nhap ban kinh r: 2
Chu vi: 12.56
Dien tich: 12.56

💡 Sáng tạo: thử thêm in cả đường kính. Nhớ dùng float cho r.

BUỔI 4

Câu lệnh điều kiện if – else

1 Toán tử so sánh & logic

Toán tửÝ nghĩa
==Bằng nhau
!=Khác nhau
> <Lớn hơn / nhỏ hơn
>= <=Lớn hơn hoặc bằng / nhỏ hơn hoặc bằng
&&VÀ (cả hai điều kiện đúng)
||HOẶC (một trong hai đúng)
!PHỦ ĐỊNH (đảo đúng/sai)
Lỗi cực kỳ hay gặp: dùng = (gán) thay vì == (so sánh)!
n = 5 nghĩa là "gán 5 cho n".
n == 5 nghĩa là "n có bằng 5 không?".

2 Cấu trúc if – else

Cho chương trình "ra quyết định": nếu điều kiện đúng làm việc này, sai làm việc kia.

📄 chanle.c

      
Mẹo kiểm tra chẵn/lẻ: số chia hết cho 2 (tức n % 2 == 0) là số chẵn.

3 Nhiều nhánh: if – else if – else

Khi có nhiều hơn 2 trường hợp, dùng else if. Ví dụ xét số dương / âm / bằng 0:

📄 dauso.c

      

💡 Chương trình kiểm tra lần lượt từ trên xuống, gặp điều kiện đúng đầu tiên thì chạy nhánh đó.

4 Ví dụ thực tế: Xếp loại học lực

Nhập điểm trung bình, xếp loại theo thang điểm. Lưu ý thứ tự xét từ cao xuống thấp:

Vì sao xét từ cao xuống? Nếu điểm là 9, điều kiện diem >= 8.0 đúng ngay, chương trình in "Gioi" rồi bỏ qua các nhánh sau. Gọn và đúng!
🏠 Bài tập về nhà

Buổi 4 — Câu lệnh điều kiện

3 bài theo độ khó tăng dần. Chú ý dùng == để so sánh (không phải =) nhé!

Bài 1🟢 Siêu dễ

Chẵn hay lẻ

Nhập 1 số nguyên, kiểm tra và in ra số đó là chẵn hay lẻ.

🖥️ Kết quả in ra mẫu
Nhap so n: 7
7 la so le

💡 Gợi ý: dùng if (n % 2 == 0)else

Bài 2🟡 Vừa (phải suy nghĩ)

Số lớn hơn

Nhập 2 số, in ra số lớn hơn (nếu bằng nhau thì báo "Hai so bang nhau").

🖥️ Kết quả in ra mẫu
Nhap a: 8
Nhap b: 12
So lon hon la: 12

💡 Gợi ý: dùng if (a > b)else if (a < b)else

Bài 3🔴 Khó (sáng tạo)

Xếp loại học lực

Nhập điểm trung bình rồi xếp loại: ≥8 Gioi, ≥6.5 Kha, ≥5 Trung binh, còn lại Yeu.

🖥️ Kết quả in ra mẫu
Nhap diem trung binh: 7.5
Xep loai: Kha

💡 Sáng tạo: dùng chuỗi if – else if – else, xét từ điểm cao xuống thấp.

BUỔI 5

Vòng lặp for và while

1 Vòng lặp for

Vòng lặp giúp làm một việc lặp đi lặp lại mà không phải viết lại nhiều lần. Ví dụ in các số từ 1 đến 5:

📄 dem.c

      

Cú pháp gồm 3 phần trong ngoặc, cách nhau bởi dấu ;:

2 Vòng lặp while

Cùng kết quả như for nhưng khởi tạo nằm ngoài, bước lặp viết bên trong thân:

📄 demwhile.c

      

💡 while kiểm tra điều kiện trước mỗi lần lặp.

3 Cảnh báo: lặp vô hạn

Nếu quên tăng biến (i++) thì điều kiện luôn đúng và vòng lặp chạy mãi không dừng — console in liên tục.

❌ Lặp vô hạn (thiếu i++)
int i = 1;
while (i <= 5) {
    printf("%d ", i);
    // quên i++ !
}
✅ Đúng
int i = 1;
while (i <= 5) {
    printf("%d ", i);
    i++;
}
Nếu lỡ chạy vòng lặp vô hạn, cứ đóng cửa sổ console để dừng, rồi thêm bước tăng biến.

4 Thực hành: Tính tổng từ 1 đến N

Dùng một biến tong cộng dồn qua từng vòng lặp. Bấm "Chạy thử" với N = 5.

📄 tong.c

      
🏠 Bài tập về nhà

Buổi 5 — Vòng lặp

3 bài theo độ khó tăng dần. Làm cho chương trình in ra giống kết quả mẫu nhé!

Bài 1🟢 Siêu dễ

In từ 1 đến N

Nhập N rồi in tất cả số từ 1 đến N, mỗi số một dòng.

🖥️ Kết quả in ra mẫu
Nhap N: 5
1
2
3
4
5

💡 Gợi ý: for (int i = 1; i <= n; i++) printf("%d\n", i);

Bài 2🟡 Vừa (phải suy nghĩ)

Tổng các số chẵn

Nhập N, tính tổng các số chẵn từ 1 đến N.

🖥️ Kết quả in ra mẫu
Nhap N: 6
Tong cac so chan: 12

💡 Gợi ý: trong vòng lặp, dùng if (i % 2 == 0) tong += i;

Bài 3🔴 Khó (sáng tạo)

Bảng cửu chương

Nhập một số N (1–9), in bảng cửu chương của N (từ N×1 đến N×10).

🖥️ Kết quả in ra mẫu
Nhap N: 3
3 x 1 = 3
3 x 2 = 6
...
3 x 10 = 30

💡 Sáng tạo: dùng for chạy i từ 1→10, in N x i = (N*i).

BUỔI 6

Ôn tập tổng hợp (Buổi 1 → 5)

1 Ôn nhanh toàn bộ kiến thức

Trước khi làm bài tổng hợp, cùng điểm lại những "vũ khí" đã có:

📦
Biến

int, float, char

⌨️
Nhập/Xuất

printf, scanf, &

Toán tử

+ - * / %

🔀
Điều kiện

if - else if - else

🔁
Vòng lặp

for, while

⚠️
Lỗi hay gặp

quên ; & == i++

2 Bài tổng hợp: Tam giác sao (vòng lặp lồng)

Dùng vòng lặp lồng nhau: vòng ngoài cho từng dòng, vòng trong in số sao của dòng đó.

📄 tamgiac.c

      

💡 Dòng thứ i in đúng i dấu sao, rồi xuống dòng.

3 Bài tổng hợp: Máy tính có menu

Kết hợp printf + scanf + if/else if: in menu, đọc lựa chọn, rồi tính.

1. Cong 2. Tru 3. Nhan 4. Chia Nhap lua chon (1-4):
Lưu ý phép chia: nếu mẫu số b == 0 thì báo "Khong chia duoc" thay vì chia.
🏠 Bài tập về nhà

Buổi 6 — Ôn tập tổng hợp

3 bài theo độ khó tăng dần, vận dụng cả vòng lặp lồng và điều kiện.

Bài 1🟢 Siêu dễ

Tam giác sao

Nhập N, in tam giác sao N dòng (dòng i có i dấu sao).

🖥️ Kết quả in ra mẫu
Nhap N: 4
*
**
***
****

💡 Gợi ý: vòng lặp lồng — vòng ngoài dòng, vòng trong in sao.

Bài 2🟡 Vừa (phải suy nghĩ)

Tổng chia hết 3 hoặc 5

Nhập N, tính tổng các số chia hết cho 3 hoặc 5 từ 1 đến N.

🖥️ Kết quả in ra mẫu
Nhap N: 10
Tong = 33

💡 Gợi ý: if (i % 3 == 0 || i % 5 == 0) tong += i; (3+5+6+9+10 = 33).

Bài 3🔴 Khó (sáng tạo)

Tam giác sao ngược

Nhập N, in tam giác sao "ngược" (dòng đầu N sao, giảm dần còn 1).

🖥️ Kết quả in ra mẫu
Nhap N: 5
*****
****
***
**
*

💡 Sáng tạo: vòng ngoài cho i từ N giảm về 1; vòng trong in i dấu sao.

BUỔI 7

Mảng một chiều

1 Mảng là gì?

Đến giờ mỗi biến chỉ chứa một giá trị. Nhưng nếu cần lưu điểm của 30 học sinh thì khai báo 30 biến rất cực! Mảng giúp ta lưu nhiều giá trị cùng kiểu trong một dãy ô liền nhau.

So sánh: biến đơn = 1 cái hộp; mảng = 1 dãy hộp xếp liền nhau, mỗi hộp có số thứ tự (chỉ số).

Mảng int a[5]; gồm 5 ô, đánh số bắt đầu từ 0:

a[0]
4
a[1]
7
a[2]
2
a[3]
9
a[4]
5
Cực kỳ quan trọng: chỉ số mảng bắt đầu từ 0, không phải 1! Mảng a[5] thì ô đầu là a[0] và ô cuối là a[4] (không có a[5]).

2 Khai báo & truy cập phần tử

Thường khai báo dư (vd a[100]) rồi chỉ dùng n phần tử đầu — với n do người dùng nhập.

3 Nhập và xuất mảng

Dùng vòng lặp (đã học ở Buổi 5!) để duyệt qua từng ô. Chỉ số chạy từ 0 đến n-1.

📄 mang.c

      

💡 Để ý for (i = 0; i < n; i++) — bắt đầu từ 0 và dừng ở i < n.

4 Xử lý mảng: tổng & lớn nhất

Kết hợp vòng lặp + biến phụ để tính toán. Ví dụ tính tổng và tìm số lớn nhất:

📄 xulymang.c

      
🏠 Bài tập về nhà

Buổi 7 — Mảng một chiều

3 bài theo độ khó tăng dần. Nhớ: chỉ số chạy từ 0 đến n-1 nhé!

Bài 1🟢 Siêu dễ

Nhập & in lại mảng

Nhập N số nguyên vào mảng rồi in lại tất cả trên một dòng.

🖥️ Kết quả in ra mẫu
Nhap so phan tu: 4
a[0] = 5
a[1] = 2
a[2] = 8
a[3] = 1
Mang: 5 2 8 1

💡 Gợi ý: 1 vòng lặp để nhập, 1 vòng lặp để in.

Bài 2🟡 Vừa (phải suy nghĩ)

Tổng & trung bình

Nhập mảng N số, tính tổng và trung bình cộng các phần tử.

🖥️ Kết quả in ra mẫu
Nhap so phan tu: 4
a[0] = 4
a[1] = 6
a[2] = 8
a[3] = 2
Tong = 20
Trung binh = 5.00

💡 Gợi ý: tổng là int; trung bình dùng (float)tong / n in bằng %.2f.

Bài 3🔴 Khó (sáng tạo)

Đếm số lần xuất hiện

Nhập mảng N số và một số X, đếm xem X xuất hiện bao nhiêu lần trong mảng.

🖥️ Kết quả in ra mẫu
Nhap so phan tu: 5
a[0] = 3
a[1] = 7
a[2] = 3
a[3] = 1
a[4] = 3
Nhap X: 3
So 3 xuat hien 3 lan

💡 Sáng tạo: duyệt mảng, if (a[i] == X) dem++;

BUỔI 8

Chuỗi ký tự (String)

1 Chuỗi là gì?

Một chữ cái là char. Nhưng một từ hay một câu gồm nhiều ký tự — đó chính là chuỗi. Trong C, chuỗi là một mảng các ký tự (đã học mảng ở Buổi 7!).

Ví dụ chuỗi "Hi" được lưu thành:

s[0]
'H'
s[1]
'i'
s[2]
'\0'
Ký tự kết thúc '\0' (null): C dùng nó để biết chuỗi kết thúc ở đâu. Vì vậy khai báo char s[100]; chỉ chứa được 99 ký tự thật + 1 ô cho '\0'.

2 Nhập và xuất chuỗi

Khai báo char s[100];. In chuỗi dùng %s. Nhập thì nên dùng fgets:

📄 chao.c

      
Vì sao dùng fgets mà không dùng scanf("%s", s)?
scanf("%s", s) chỉ đọc đến khi gặp khoảng trắng → không nhập được "Nguyen Van A" (chỉ lấy được "Nguyen"). fgets đọc cả dòng nên giữ được khoảng trắng.

3 Vài hàm chuỗi cơ bản

Khai báo thêm #include <string.h> để dùng các hàm sau:

HàmCông dụng
strlen(s)Trả về độ dài chuỗi (số ký tự)
strcpy(dest, src)Sao chép chuỗi src sang dest
strcmp(s1, s2)So sánh 2 chuỗi (trả 0 nếu bằng nhau)
strcat(a, b)Nối chuỗi b vào sau chuỗi a
📄 noichuoi.c

      

4 Thực hành: Đếm chữ hoa trong chuỗi

Duyệt từng ký tự bằng vòng lặp (như duyệt mảng), kiểm tra ký tự có nằm trong khoảng 'A'..'Z':

📄 demhoa.c

      

💡 Mỗi ký tự là một char, có thể so sánh bằng >=, <= như số.

🏠 Bài tập về nhà

Buổi 8 — Chuỗi ký tự

3 bài theo độ khó tăng dần. Dùng fgets để nhập chuỗi và duyệt bằng vòng lặp nhé!

Bài 1🟢 Siêu dễ

Đếm số ký tự

Nhập một chuỗi rồi in ra độ dài (số ký tự) của chuỗi đó.

🖥️ Kết quả in ra mẫu
Nhap chuoi: Lap trinh C
Do dai: 11

💡 Gợi ý: dùng strlen(s) (nhớ #include <string.h>).

Bài 2🟡 Vừa (phải suy nghĩ)

Đếm khoảng trắng

Nhập một chuỗi, đếm xem có bao nhiêu dấu khoảng trắng.

🖥️ Kết quả in ra mẫu
Nhap chuoi: Hoc lap trinh that vui
So khoang trang: 4

💡 Gợi ý: duyệt chuỗi, if (s[i] == ' ') dem++;

Bài 3🔴 Khó (sáng tạo)

In ngược chuỗi

Nhập một chuỗi rồi in nó theo thứ tự ngược lại (ví dụ "abc" → "cba").

🖥️ Kết quả in ra mẫu
Nhap chuoi: abcde
Chuoi nguoc: edcba

💡 Sáng tạo: vòng lặp chạy từ strlen(s)-1 về 0, in từng s[i].

BUỔI 9

Hàm (Function)

1 Hàm là gì?

Hãy tưởng tượng cái máy xay sinh tố: bỏ trái cây + đường vào (tham số), nó cho ra một ly sinh tố (giá trị trả về). Hàm cũng vậy — nhận đầu vào, xử lý, trả kết quả.

🍓
Tham sốĐầu vào (a, b…)
⚙️
Thân hàmXử lý công việc
🥤
returnGiá trị trả về

Cú pháp chung:

📄 cú pháp
kieu_tra_ve ten_ham(tham_so) {
    // thân hàm
    return gia_tri;
}
Lưu ý Dev-C++: viết hàm phụ phía trên hàm main để tránh báo lỗi (khi chưa học khai báo nguyên mẫu hàm).

2 Ví dụ: hàm cộng hai số

📄 cong.c

      

3 Hàm có vòng lặp bên trong

Hàm có thể chứa cả vòng lặp, điều kiện… Ví dụ hàm tính giai thừa n!:

📄 giaithua.c

      

4 Thực hành: hàm tìm max

📄 timmax.c

      

💡 Viết hàm một lần, gọi lại bao nhiêu lần tùy ý — đó là sức mạnh của hàm!

🏠 Bài tập về nhà

Buổi 9 — Hàm

3 bài theo độ khó tăng dần. Viết hàm phía trên main rồi gọi trong main nhé!

Bài 1🟢 Siêu dễ

Hàm tổng hai số

Viết hàm tongHai(int a, int b) trả về tổng, gọi và in kết quả.

🖥️ Kết quả in ra mẫu
Tong cua 4 va 6 la: 10

💡 Gợi ý: int tongHai(int a, int b) { return a + b; }

Bài 2🟡 Vừa (phải suy nghĩ)

Hàm tổng 1 → N

Viết hàm tongTu1DenN(int n) trả về tổng các số từ 1 đến n.

🖥️ Kết quả in ra mẫu
tongTu1DenN(5) = 15

💡 Gợi ý: dùng vòng lặp cộng dồn bên trong hàm, rồi return.

Bài 3🔴 Khó (sáng tạo)

Hàm void in tam giác

Viết hàm void inTamGiacSao(int n) in ra tam giác sao n dòng.

🖥️ Kết quả in ra mẫu
inTamGiacSao(4):
*
**
***
****

💡 Sáng tạo: kiểu void (không return), dùng vòng lặp lồng để in.

BUỔI 10

Tổng kết & định hướng

1 Tổng kết toàn khóa

Chúc mừng! Bạn đã đi qua chặng đường dài. Đây là tất cả "vũ khí" bạn đã có:

🖨️
In/Nhập

printf, scanf

📦
Biến

int, float, char

Toán tử

+ - * / %

🔀
Điều kiện

if - else if

🔁
Vòng lặp

for, while

📊
Mảng

a[0]..a[n-1]

🔤
Chuỗi

char[], string.h

🧩
Hàm

tham số, return

2 Dự án lớn: "Quản lý điểm sinh viên"

Kết hợp tất cả kiến thức: mảng (lưu điểm), vòng lặp (menu), điều kiện (lựa chọn), hàm (chia nhỏ). Chương trình có menu lặp lại tới khi chọn Thoát:

📄 quanlydiem.c (khung menu)

      

Gợi ý chia thành các hàm cho gọn:

3 Học gì tiếp theo?

Khi đã vững nền tảng, hãy chinh phục các chủ đề nâng cao:

Chủ đềMô tả
Con trỏ (pointer)Nền tảng cốt lõi của C, dùng *&
Mảng 2 chiềuXử lý dữ liệu dạng bảng / ma trận
Cấu trúc (struct)Tự định nghĩa kiểu dữ liệu mới
Cấp phát độngQuản lý bộ nhớ với malloc/free
Đọc/ghi fileLàm việc với file .txt, .bin
Đệ quyHàm tự gọi chính nó
Cấu trúc dữ liệu & giải thuậtDanh sách liên kết, sắp xếp, tìm kiếm
📚 Tài liệu gợi ý: sách "The C Programming Language" (K&R) · learn-c.org · w3schools.com/c · luyện tập tại codeforces.com, hackerrank.com.
🎓 Dự án cuối khóa

Buổi 10 — Hoàn thiện "Quản lý điểm sinh viên"

Làm dần theo 3 mức. Đây cũng là nền cho phần dự án có thuyết trình + chạy chương trình.

Mức 1🟢 Siêu dễ

Menu + Nhập/In điểm

Tạo menu lặp bằng while, làm chức năng Nhập điểmIn danh sách điểm.

🖥️ Kết quả in ra mẫu
1. Nhap diem
2. In diem
0. Thoat
Chon: 2
Diem: 8.0 7.5 9.0

💡 Gợi ý: dùng mảng float a[30] và biến n số sinh viên.

Mức 2🟡 Vừa (phải suy nghĩ)

Trung bình · Max · Đếm đạt

Thêm chức năng tính điểm trung bình, tìm điểm cao nhất, đếm số SV đạt (≥ 5).

🖥️ Kết quả in ra mẫu
Diem trung binh: 8.17
Diem cao nhat: 9.0
So SV dat: 3

💡 Gợi ý: tách thành các hàm trungBinh, timMax, demDat.

Mức 3🔴 Khó (sáng tạo)

Sắp xếp & điểm thấp nhất

Thêm chức năng sắp xếp điểm từ cao xuống thấp và tìm điểm thấp nhất.

🖥️ Kết quả in ra mẫu
Sap xep: 9.0 8.0 7.5 5.0
Diem thap nhat: 5.0

💡 Sáng tạo: sắp xếp bằng 2 vòng lặp lồng (so sánh & đổi chỗ).

🏁 Sẵn sàng cho bài thi CUỐI KỲ?

Ngân hàng 1000 câu trắc nghiệm phủ toàn bộ Buổi 1 → 10. Mỗi lần làm, hệ thống chọn ngẫu nhiên 50 câu (đáp án đảo vị trí) và tự chấm điểm. Luyện nhiều lần cho thật chắc!

🏁 Làm đề cuối kỳ (50 câu ngẫu nhiên) →

🎯 Sẵn sàng cho bài kiểm tra GIỮA KỲ?

Ngân hàng 500 câu trắc nghiệm trong phạm vi Buổi 1 → 6. Mỗi lần làm, hệ thống chọn ngẫu nhiên 50 câu (đáp án đảo vị trí) và tự chấm điểm. Luyện nhiều lần để chắc kiến thức!

🎯 Làm đề giữa kỳ (50 câu ngẫu nhiên) →

🧠 Ôn tập nhanh

Mỗi buổi có một trang ôn tập riêng với bộ câu hỏi trắc nghiệm tự chấm điểm. Làm xong để biết mình nắm chắc tới đâu nhé!