Bài tập lập trình c từ a đến z năm 2024

Bài này cung cấp cho bạn danh sách các bài tập C có lời giải ở các cấp độ khác nhau để bạn thực hành khi học ngôn ngữ lập trình C:

  1. Bài tập C kinh điển.
  2. Bài tập C cơ bản.
  3. Bài tập vòng lặp trong C.
  4. Bài tập C về mảng một chiều và mảng 2 chiều (ma trận).
  5. Bài tập C về chuỗi trong C.
  6. Bài tập C về đệ quy.
  7. Bài tập C về con trỏ.
  8. Bài tập C về các thuật toán sắp xếp.
  9. Bài tập C về Struct (Cấu trúc).
  10. Bài tập C về danh sách liên kết (Linked List).
  11. Bài tập C về đọc ghi file.

1. Bài tập C kinh điển

  1. Dãy số Fibonacci
  2. Check Số nguyên tố
  3. Tính giai thừa
  4. Chuyển đổi hệ cơ số

Bài 01: Viết một chương trình C in ra dãy số Fibonacci

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: In dãy số Fibonacci trong C không sử dụng đệ quy.

/

  • Tinh day so Fibonacci KHONG dung phuong phap de quy
  • @author viettuts.vn /

    include<stdio.h>

    /*
  • Tinh so Fibonacci thu n
  • @param n: chi so cua so Fibonacci tinh tu 0
  • vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2
  • @return So Fibonacci thu n / int fibonacci(int n) { int f0 = 0; int f1 = 1; int fn = 1; int i; if (n < 0) { return -1; } else if (n == 0 || n == 1) { return n; } else { for (i = 2; i < n; i++) { f0 = f1; f1 = fn; fn = f0 + f1; } } return fn; } /*
  • Ham main */ int main() { int i; printf("10 so dau tien cua day so Fibonacci: \n"); for (i = 0; i < 10; i++) { printf("%d ", fibonacci(i)); } } Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34

Bài 02: Viết một chương tình C kiểm tra số nguyên tố.

Code mẫu:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } Kết quả:

Cac so nguyen to nho hon 100 la: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Bài 03: Viết một chương trình C tính giai thừa của một số bằng cách không sử dụng đệ quy và có sử dụng đệ quy.

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: Tính giai thừa trong C không sử dụng đệ quy.

/

  • Tinh giai thua KHONG dung phuong phap de quy
  • @author viettuts.vn */

include<stdio.h>

/

  • tinh giai thua
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return giai thua cua so n / long tinhGiaithua(int n) { int i; long giai_thua = 1; if (n == 0 || n == 1) { return giai_thua; } else { for (i = 2; i <= n; i++) { giai_thua = i; } return giai_thua; } } /
  • Ham main */ int main() { int a = 5; int b = 0; int c = 10; printf("Giai thua cua %d la: %d \n", a, tinhGiaithua(a)); printf("Giai thua cua %d la: %d \n", b, tinhGiaithua(b)); printf("Giai thua cua %d la: %d", c, tinhGiaithua(c)); } Kết quả:

Giai thua cua 5 la: 120 Giai thua cua 0 la: 1 Giai thua cua 10 la: 3628800

Bài 04: Viết một chương trình C để chuyển đổi số nguyên N sang hệ cơ số B (2 <= B <= 32) bất kỳ.

Code mẫu: Chuyển đối hệ cơ số 10 sang hệ cơ số B

/

  • Chuong trinh chuyen doi he co so trong C
  • Bai tap nay su dung bang ASCII de chuyen doi so nguyen thanh kieu ky tu
  • Link tham khao: //vi.wikipedia.org/wiki/ASCII
  • @author viettuts.vn */

include<stdio.h>

const char CHAR_55 = 55; const char CHAR_48 = 48; /

  • chuyen doi so nguyen n sang he co so b
  • @author viettuts.vn
  • @param n: so nguyen
  • @param b: he co so / int convertNumber(int n, int b) { if (n < 0 || b < 2 || b > 16 ) { printf("He co so hoac gia tri chuyen doi khong hop le!"); return 0; } int i; char arr[20]; int count = 0; int m; int remainder = n; while (remainder > 0) { if (b > 10) { m = remainder % b; if (m >= 10) { arr[count] = (char) (m + CHAR_55); count++; } else { arr[count] = (char) (m + CHAR_48); count++; } } else { arr[count] = (char) ((remainder % b) + CHAR_48); count++; } remainder = remainder / b; } // hien thi he co so for (i = count - 1; i >= 0; i--) { printf("%c", arr[i]); } return 1; } /*
  • Ham main */ int main() { int n = 12; printf("So %d trong he co so 2 = ", n); convertNumber(n, 2); printf("\nSo %d trong he co so 16 = ", n); convertNumber(n, 16); return 1; } Kết quả:

So 12 trong he co so 2 = 1100 So 12 trong he co so 16 = C

2. Bài tập C cơ bản

Danh sách bài tập:

  1. Viết chương trình C giải phương trình bậc 2: ax2 + bx + c = 0.
  2. Viết chương trình C tìm ước số chung lớn nhất (UCLN) và bội số chung nhỏ nhất (BCNN) của hai số a và b.
  3. Viết chương trình C liệt kê tất cả các số nguyên tố nhỏ hơn n.
  4. Viết chương trình C liệt kê n số nguyên tố đầu tiên.
  5. Viết chương trình C liệt kê tất cả các số nguyên tố có 5 chữ số.
  6. Viết chương trình C phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 12 = 2 x 2 x 3.
  7. Viết chương trình C tính tổng các chữ số của một số nguyên n. Ví dụ: 1234 = 1 + 2 + 3 + 4 = 10.
  8. Viết chương trình C tìm các số thuận nghịch có 6 chữ số. Một số được gọi là số thuận nghịch nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Ví dụ 123321 là một số thuận nghịch.
  9. Nhập số tự nhiên n. Hãy liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố.
  10. Dãy số Fibonacci được định nghĩa như sau: F0 = 0, F1 = 1, F2 = 1, Fn = F(n-1) + F(n-2) với n >= 2. Ví dụ: 0, 1, 1, 2, 3, 5, 8, ... Hãy viết chương trình tìm số Fibonacci thứ n.

Bài 01: Viết chương trình C giải phương trình bậc 2: ax2 + bx + c = 0.

Code mẫu:

include <stdio.h>

/

  • giai phuong trinh bac 2: ax2 + bx + c = 0
  • @param a: he so bac 2
  • @param b: he so bac 1
  • @param c: so hang tu do / void giaiPTBac2(float a, float b, float c) { // kiem tra cac he so if (a == 0) { if (b == 0) { printf("Phuong trinh vo nghiem!"); } else { printf("Phuong trinh co mot nghiem: x = %f", (-c / b)); } return; } // tinh delta float delta = b*b - 4*a*c; float x1; float x2; // tinh nghiem if (delta > 0) { x1 = (float) ((-b + sqrt(delta)) / (2*a)); x2 = (float) ((-b - sqrt(delta)) / (2*a)); printf("Phuong trinh co 2 nghiem la: x1 = %f va x2 = %f", x1, x2); } else if (delta == 0) { x1 = (-b / (2 a)); printf("Phong trinh co nghiem kep: x1 = x2 = %f", x1); } else { printf("Phuong trinh vo nghiem!"); } } /
  • ham main */ int main() { float a, b, c; printf("Nhap he so bac 2, a = "); scanf("%f", &a); printf("Nhap he so bac 1, b = "); scanf("%f", &b); printf("Nhap so hang tu do, c = "); scanf("%f", &c); giaiPTBac2(a, b, c); return 1; } Kết quả:

Nhap he so bac 2, a = 2 Nhap he so bac 1, b = 3 Nhap so hang tu do, c = 1 Phuong trinh co 2 nghiem la: x1 = -0.500000 va x2 = -1.000000

Bài 02: Viết chương trình C tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của hai số a và b.

Gợi ý:

  • Sử dụng giải thuật Euclid

Code mẫu:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 0

Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 1

Bài 03: Viết chương trình C liệt kê tất cả các số nguyên tố nhỏ hơn n.

Code mẫu:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 2

Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 3

Bài 04: Viết chương trình C liệt kê n số nguyên tố đầu tiên.

Code mẫu:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 4

Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 5

Bài 05: Viết chương trình C liệt kê tất cả các số nguyên tố có 5 chữ số.

Code mẫu:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 6

Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 7

Bài 06: Viết chương trình C phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 12 = 2 x 2 x 3.

Code mẫu:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 8

Kết quả:

10 so dau tien cua day so Fibonacci: 0 1 1 2 3 5 8 13 21 34 9

Bài 07: Viết chương trình C tính tổng các chữ số của một số nguyên n. Ví dụ: 1234 = 1 + 2 + 3 + 4 = 10.

Code mẫu:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 0

Kết quả:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 1

Bài 08: Viết chương trình C tìm các số thuận nghịch có 6 chữ số. Một số được gọi là số thuận nghịch nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Ví dụ 123321 là một số thuận nghịch.

Code mẫu:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 2

Kết quả:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 3

Bài 09: Nhập số tự nhiên n. Hãy liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố.

Code mẫu:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 4

Kết quả:

include<stdio.h>

/

  • check so nguyen to trong C
  • @author viettuts.vn
  • @param n: so nguyen duong
  • @return 1 la so nguyen so,
  • 0 khong la so nguyen to / int isPrimeNumber(int n) { // so nguyen n < 2 khong phai la so nguyen to if (n < 2) { return 0; } // check so nguyen to khi n >= 2 int squareRoot = (int) sqrt(n); int i; for (i = 2; i <= squareRoot; i++) { if (n % i == 0) { return 0; } } return 1; } /*
  • Ham main */ int main() { int i; printf("Cac so nguyen to nho hon 100 la: \n"); for (i = 0; i < 100; i++) { if (isPrimeNumber(i)) { printf("%d ", i); } } } 5

3. Bài tập vòng lặp trong C

Bài này tổng hợp các bài tập vòng lặp trong C giúp bạn làm quen cú pháp và cách sử dụng của các vòng lặp C cơ bản: vòng lặp for , vòng lặp while, vòng lặp do-while và vòng lặp lồng nhau.

  • Bài tập vòng lặp trong C
  • Vẽ tam giác đều trong C
  • Vẽ tam giác vuông cân trong C
  • Vẽ tam giác Floyd trong C
  • Vẽ tam giác Pascal trong C

4. Bài tập mảng trong C

Mảng là một tập hợp dữ liệu có cùng kiểu. Mảng trong C là một cấu trúc dữ liệu cơ bản và quan trọng.

Trong chương này, chúng ta sẽ tìm hiểu các bài tập và các chương trình C liên quan tới mảng, từ chương trình đơn giản nhất để in mảng, tính tổng giá trị các phần tử trong mảng, v,v. cho đến các bài tập liên quan đến nhiều mảng trong C.

  • Bài tập C - In mảng trong C
  • Bài tập C - Nhập mảng từ bàn phím trong C
  • Bài tập C - Tính tổng giá trị của một mảng trong C
  • Bài tập C - Tính giá trị trung bình của một mảng trong C
  • Bài tập C - Sao chép mảng trong C
  • Bài tập C - Chia một mảng thành hai mảng trong C
  • Bài tập C - Trộn hai mảng thành một mảng trong C

5. Bài tập mảng 2 chiều trong C

Dưới đây là các bài tập C giúp bạn hiểu kiến thức cơ bản về Mảng 2 chiều trong C

  • Bài tập C - Nhập ma trận từ bàn phím trong C
  • Bài tập C - Trừ hai ma trận trong C
  • Bài tập C - Cộng hai ma trận trong C
  • Bài tập C - Tính tổng tất cả các phần tử của ma trận trong C

5. Bài tập chuỗi trong C

Chuỗi (String) trong C là một mảng ký tự được kết thúc bởi \0 (ký tự null).

Dưới đây là các bài tập C sử dụng hàm và không sử dụng hàm giúp bạn hiểu kiến thức cơ bản nhất về chuỗi. Các chương trình này xử lý các chuỗi dưới dạng như là một mảng các ký tự.

  • Nhập chuỗi từ bàn phím trong C
  • Bài tập C - In chuỗi trong C
  • Tìm độ dài chuỗi trong C
  • Tìm số lần xuất hiện của một ký tự trong một chuỗi trong C
  • Sắp xếp các ký tự của chuỗi theo thứ tự bảng chữ cái trong C
  • Sao chép chuỗi trong C
  • Đảo ngược chuỗi trong C
  • Tìm kiếm chuỗi trong C
  • So sánh hai chuỗi trong C
  • Nối chuỗi trong C
  • Đảo ngược các ký tự của từng từ của một chuỗi trong C
  • Đảo ngược thứ tự từ của một chuỗi trong C
  • Sắp xếp các chuỗi theo thứ tự chữ cái trong C
  • Chuyển đổi chuỗi thành số nguyên trong C
  • Biến đổi chuỗi thành chữ hoa trong C
  • Biến đổi chuỗi thành chữ thường trong C

6. Bài tập Đệ quy trong C

Dưới đây là tổng hợp một số bài tập Đệ quy trong C:

  • Tổng hợp một số bài tập về Đệ quy trong C

7. Bài tập về con trỏ (Pointer) trong C

Trước khi bắt đầu, bạn có thể xem lại một số khái niệm cơ bản về Con trỏ (Pointer) trong bài Con trỏ trong C

Con trỏ (Pointer) trong C là một biến, nó còn được gọi là locator hoặc indicator chỉ ra một địa chỉ của một giá trị.

Dưới đây là tổng hợp một số bài tập con trỏ trong C:

  • Cộng hai số bởi sử dụng con trỏ trong C
  • Tráo đổi giá trị bởi sử dụng con trỏ trong C
  • Tính tổng các phần tử mảng bởi sử dụng con trỏ trong C
  • Tìm độ dài chuỗi bởi sử dụng con trỏ trong C
  • Duyệt và in mảng bởi sử dụng con trỏ trong C

8. Bài tập về các thuật toán sắp xếp trong C

Bạn có thể xem các giải thuật sắp xếp trong phần cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp

Dưới đây là tổng hợp một số bài tập thuật toán sắp xếp trong C:

  • Sắp xếp nổi bọt (Bubble Sort) trong C
  • Sắp xếp chọn (Selection Sort) trong C
  • Sắp xếp chèn (Insertion Sort) trong C
  • Sắp xếp nhanh (Quick Sort) trong C
  • Sắp xếp trộn (Merge Sort) trong C
  • Sắp xếp Shell Sort trong C

9. Bài tập về Struct trong C

Bạn có thể xem lại một số khái niệm cơ bản về Struct tại: Struct trong C

Dưới đây là tổng hợp một số bài tập về Struct trong C:

  • Nhập và hiển thị sinh viên bởi sử dụng Struct trong C
  • Sắp xếp mảng Struct trong C
  • Tính kích cỡ của Struct trong C

10. Bài tập về danh sách liên kết (linked-list) trong C

Đang cập nhật...

11. Bài tập về File I/O trong C

Bạn có thể xem lại một số chế độ được sử dụng khi mở một file trong C:

ModeMô tả rmở file văn bản ở chế độ đọc wmở file văn bản ở chế độ ghi amở file văn bản ở chế độ nối thêm nội dung vào nội dung sẵn có trong file. r+mở file văn bản ở chế độ đọc và ghi w+mở file văn bản ở chế độ đọc và ghi a+mở file văn bản ở chế độ đọc và ghi rbmở file văn bản ở chế độ đọc và ghi wbmở file nhị phân ở chế độ đọc abmở file nhị phân ở chế độ nối thêm nội dung vào nội dung sẵn có trong file. rb+mở file nhị phân ở chế độ đọc và ghi wb+mở file nhị phân ở chế độ đọc và ghi ab+mở file nhị phân ở chế độ đọc và ghi

EOF trong C là gì?

Ký tự EOF, là viết tắt của End of File, xác định vị trí cuối cùng của file. Kiểm tra nếu gặp ký tự này thì tiến trình ghi dữ liệu vào file của chúng ta sẽ kết thúc.

Chủ đề