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.
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.
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.
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.
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ì.
bai1.c —
nhớ 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.
💡 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.
Đâ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ả!
#include <stdio.h> — khai báo dùng thư viện nhập/xuất chuẩn.int main() — nơi chương trình bắt đầu chạy.{ } — dấu ngoặc nhọn bao quanh thân hàm.printf(...) — lệnh in chữ ra màn hình.\n — ký tự xuống dòng.return 0; — báo chương trình kết thúc thành công.; — dấu chấm phẩy: cuối mỗi câu lệnh BẮT BUỘC phải có!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.
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:
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!
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.
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.
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).
* ** *** **** *****
💡 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 *.
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 và \n.
* *** ***** ******* |
💡 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!
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.
Mỗi biến gồm 3 thành phần: tên · kiểu dữ liệu · giá trị.
_,
không có khoảng trắng, không trùng từ khóa của C.
Số nguyên
1, 2, -5, 100Số thực (có phần thập phân)
3.14, -0.5Một ký tự duy nhất
'A', 'b', '5'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:
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ệu | Dùng cho | Ví dụ |
|---|---|---|
%d | int (số nguyên) | printf("%d", 18); → 18 |
%f | float (số thực) | printf("%f", 1.65); → 1.650000 |
%.2f | float, 2 chữ số thập phân | printf("%.2f", 1.65); → 1.65 |
%c | char (1 ký tự) | printf("%c", 'N'); → N |
%d cho float sẽ ra số sai be bét.
Hãy luôn dùng đúng ký hiệu cho đúng kiể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ả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.
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.
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.
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.
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.
=== 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!
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.
& 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);
%d (int), %f (float), %c (char).| Toán tử | Ý nghĩa | Ví dụ |
|---|---|---|
+ | Cộng | 5 + 2 → 7 |
- | Trừ | 5 - 2 → 3 |
* | Nhân | 5 * 2 → 10 |
/ | Chia | 6 / 2 → 3 |
% | Chia lấy dư (chỉ dùng cho int) | 5 % 2 → 1 |
Đâ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.
5.0 / 2 → 2.5. Dấu % chỉ dùng cho số nguyên.
Giống toán học: nhân chia trước, cộng trừ sau. Dùng dấu ngoặc ( ) để ép thứ tự.
2 + 3 * 4 = 14 (nhân trước). Còn (2 + 3) * 4 = 20 (ngoặc trước).
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.
💡 Dùng float để phép chia ra số lẻ chính xác.
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é!
Tổng hai số
Nhập 2 số nguyên a, b rồi in ra tổng của chúng.
Nhap a: 7 Nhap b: 5 Tong = 12
💡 Gợi ý: 2 lần scanf("%d", &...), rồi in a + b bằng %d.
Đ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.
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.
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).
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.
| 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) |
= (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?".
if – elseCho 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.
n % 2 == 0) là số chẵn.
if – else if – elseKhi 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:
💡 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 đó.
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:
diem >= 8.0 đúng ngay,
chương trình in "Gioi" rồi bỏ qua các nhánh sau. Gọn và đúng!
3 bài theo độ khó tăng dần. Chú ý dùng == để so sánh (không phải =) nhé!
Chẵn hay lẻ
Nhập 1 số nguyên, kiểm tra và in ra số đó là chẵn hay lẻ.
Nhap so n: 7 7 la so le
💡 Gợi ý: dùng if (n % 2 == 0) … else …
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").
Nhap a: 8 Nhap b: 12 So lon hon la: 12
💡 Gợi ý: dùng if (a > b) … else if (a < b) … else …
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.
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.
forVò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:
Cú pháp gồm 3 phần trong ngoặc, cách nhau bởi dấu ;:
int i = 1 — chạy 1 lần lúc đầu.i <= 5 — còn đúng thì còn lặp.i++ — chạy sau mỗi vòng (i++ nghĩa là i = i + 1).whileCù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:
💡 while kiểm tra điều kiện trước mỗi lần lặp.
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.
int i = 1;
while (i <= 5) {
printf("%d ", i);
// quên i++ !
}
int i = 1;
while (i <= 5) {
printf("%d ", i);
i++;
}
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.
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é!
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.
Nhap N: 5 1 2 3 4 5
💡 Gợi ý: for (int i = 1; i <= n; i++) printf("%d\n", i);
Tổng các số chẵn
Nhập N, tính tổng các số chẵn từ 1 đến N.
Nhap N: 6 Tong cac so chan: 12
💡 Gợi ý: trong vòng lặp, dùng if (i % 2 == 0) tong += i;
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).
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).
Trước khi làm bài tổng hợp, cùng điểm lại những "vũ khí" đã có:
int, float, char
printf, scanf, &
+ - * / %
if - else if - else
for, while
quên ; & == i++
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 đó.
💡 Dòng thứ i in đúng i dấu sao, rồi xuống dòng.
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.
Tam giác sao
Nhập N, in tam giác sao N dòng (dòng i có i dấu sao).
Nhap N: 4 * ** *** ****
💡 Gợi ý: vòng lặp lồng — vòng ngoài dòng, vòng trong in sao.
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.
Nhap N: 10 Tong = 33
💡 Gợi ý: if (i % 3 == 0 || i % 5 == 0) tong += i; (3+5+6+9+10 = 33).
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).
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.
Đế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.
Mảng int a[5]; gồm 5 ô, đánh số bắt đầu từ 0:
a[5] thì ô đầu là a[0] và ô cuối là a[4] (không có a[5]).
int a[100]; — tạo mảng tối đa 100 số nguyên.a[0] = 4; đặt 4 vào ô đầu tiên.printf("%d", a[2]); in giá trị ô thứ 3.int a[5] = {4, 7, 2, 9, 5};a[100]) rồi chỉ dùng n phần tử đầu — với n do người dùng nhập.
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.
💡 Để ý for (i = 0; i < n; i++) — bắt đầu từ 0 và dừng ở i < n.
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:
tong = 0, cộng dồn tong = tong + a[i].max = a[0], gặp phần tử lớn hơn thì cập nhật.if (a[i] % 2 == 0) dem++; để đếm số chẵn.3 bài theo độ khó tăng dần. Nhớ: chỉ số chạy từ 0 đến n-1 nhé!
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.
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.
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ử.
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.
Đế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.
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++;
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:
'\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'.
Khai báo char s[100];. In chuỗi dùng %s. Nhập thì nên dùng fgets:
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.
Khai báo thêm #include <string.h> để dùng các hàm sau:
| Hàm | Cô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 |
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':
💡 Mỗi ký tự là một char, có thể so sánh bằng >=, <= như số.
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é!
Đếm số ký tự
Nhập một chuỗi rồi in ra độ dài (số ký tự) của chuỗi đó.
Nhap chuoi: Lap trinh C Do dai: 11
💡 Gợi ý: dùng strlen(s) (nhớ #include <string.h>).
Đếm khoảng trắng
Nhập một chuỗi, đếm xem có bao nhiêu dấu khoảng trắng.
Nhap chuoi: Hoc lap trinh that vui So khoang trang: 4
💡 Gợi ý: duyệt chuỗi, if (s[i] == ' ') dem++;
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").
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].
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ả.
Cú pháp chung:
kieu_tra_ve ten_ham(tham_so) {
// thân hàm
return gia_tri;
}
main để tránh báo lỗi
(khi chưa học khai báo nguyên mẫu hàm).
int cong(int a, int b) — hàm tên cong, nhận 2 tham số, trả về int.return a + b; — trả kết quả về nơi gọi.int x = cong(3, 5); — gọi hàm, kết quả (8) gán cho x.void.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!:
💡 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!
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é!
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ả.
Tong cua 4 va 6 la: 10
💡 Gợi ý: int tongHai(int a, int b) { return a + b; }
Hàm tổng 1 → N
Viết hàm tongTu1DenN(int n) trả về tổng các số từ 1 đến n.
tongTu1DenN(5) = 15
💡 Gợi ý: dùng vòng lặp cộng dồn bên trong hàm, rồi return.
Hàm void in tam giác
Viết hàm void inTamGiacSao(int n) in ra tam giác sao n dòng.
inTamGiacSao(4): * ** *** ****
💡 Sáng tạo: kiểu void (không return), dùng vòng lặp lồng để in.
Chúc mừng! Bạn đã đi qua chặng đường dài. Đây là tất cả "vũ khí" bạn đã có:
printf, scanf
int, float, char
+ - * / %
if - else if
for, while
a[0]..a[n-1]
char[], string.h
tham số, return
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:
Gợi ý chia thành các hàm cho gọn:
void nhapDiem(float a[], int *n) — nhập mảng điểm.void inDiem(float a[], int n) — in danh sách.float trungBinh(float a[], int n) — tính điểm trung bình cả lớp.float timMax(float a[], int n) — tìm điểm cao nhất.int demDat(float a[], int n) — đếm số sinh viên đạt (điểm ≥ 5).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 * và & |
| Mảng 2 chiều | Xử 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 động | Quản lý bộ nhớ với malloc/free |
| Đọc/ghi file | Làm việc với file .txt, .bin |
| Đệ quy | Hàm tự gọi chính nó |
| Cấu trúc dữ liệu & giải thuật | Danh sách liên kết, sắp xếp, tìm kiếm |
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.
Menu + Nhập/In điểm
Tạo menu lặp bằng while, làm chức năng Nhập điểm và In danh sách điểm.
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.
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).
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.
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.
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ỗ).
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) →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) →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é!