Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C - Vũ Phát

Ví dụ 2: Viết một chương trình C kiểm tra một số bất kỳ xem có phải là số armstrong hay không? Sửa lại chương trình để in ra các số Armstrong trong khoảng từ 100 đến 999? Thuật giải: Số Armstrong là số mà có giá trị bằng tổng lập phương các chữ số của nó. Ví dụ, 153 = 13 + 53 + 33.

pdf22 trang | Chia sẻ: dntpro1256 | Lượt xem: 815 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C - Vũ Phát, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 1 Bảng nội dung 1, LẬP TRÌNH SỬ DỤNG NGÔN NGỮ C ............................................................. 2 1.1, Toán hạng ....................................................................................................... 2 1.2, Thực thi điều kiện sử dụng lệnh If-Else ......................................................... 2 1.3, Switch và Break ............................................................................................. 3 1.4, Vòng lặp While, vòng lặp Do-While, vòng lặp For, vòng lặp lồng nhau, câu lệnh Break và câu lệnh Continue .......................................................................... 4 1.4.1, Vòng lặp While ....................................................................................... 4 1.4.2, Vòng lặp Do-While ............................................................................... 10 1.4.3, Vòng lặp For ......................................................................................... 11 1.4.4, Câu lệnh Break ...................................................................................... 21 1.4.5, Câu lệnh Continue ................................................................................. 21 1.5, Bài tập .......................................................................................................... 21 2. MẢNG VÀ CON TRỎ ....................................................................................... 22 Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 2 1, LẬP TRÌNH SỬ DỤNG NGÔN NGỮ C 1.1, Toán hạng Ví dụ 1: Viết một chương trình C so sánh hai cách sử dụng toán tử ++ (hoặc --)? Chú ý: Để hiểu hơn về toán hạng ++ (hoặc --) ta xét hai câu lệnh sau: cnt = count++; cnt = ++count; Ở câu lệnh đầu tiên, giá trị của biến count sẽ được gán vào cnt trước sau đó count sẽ bị tăng lên 1. Còn câu lệnh thứ hai, giá trị của biến count sẽ được tăng lên 1, sau đó giá trị này sẽ được gán vào cnt. Giải: #include void main() { int counter, precount, postcount; counter = 24; precount = ++counter; postcount = counter++; printf("\n%d %d", precount, postcount); counter = 50; postcount = counter--; precount = --counter; printf("\n%d %d", postcount, precount); } Kết quả: 25 25 50 48 1.2, Thực thi điều kiện sử dụng lệnh If-Else Ví dụ 1: Viết một chương trình C đọc một số từ bàn phím và kiểm tra xem nó có phải là số dương hay không? Giải: #include void main() { int numb; Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 3 printf("Nhap vao so can kiem tra: "); scanf("%d", &numb); if (numb >= 0) { printf("So vua nhap la so duong."); } } Kết quả: Nhap vao so can kiem tra:2912 2912 So vua nhap la so duong. Ví dụ 2: Viết một chương trình C kiểm tra năm bất kỳ xem có phải năm nhuận hay không? Thuật giải: Năm nhuận là năm chia hết cho 4 nhưng không chia hết cho 100 hoặc chia hết cho 400. Giải: #include void main() { int y; printf("Nhap vao nam can kiem tra: "); scanf("%d", &y); if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) { printf("Nam vua nhap la nam nhuan."); } else { printf("Nam vua nhap khong phai nam nhuan."); } } Kết quả: Nhap vao nam can kiem tra:2000 2000 Nam vua nhap la nam nhuan. 1.3, Switch và Break Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 4 1.4, Vòng lặp While, vòng lặp Do-While, vòng lặp For, vòng lặp lồng nhau, câu lệnh Break và câu lệnh Continue 1.4.1, Vòng lặp While Ví dụ 1: Viết một chương trình C in ra đảo ngược của một số. Giải: #include void main() { int n, k; printf("Nhap vao mot so: "); scanf("%d", &n); printf("Dao nguoc cua so la: "); while (k != 0) { int m = n % 10; k = n / 10; n = k; printf("%d", m); } } Kết quả: Nhap vao mot so:9123 9123 Dao nguoc cua so la: 3219 Ví dụ 2: Viết một chương trình tìm ước số chung lớn nhất của hai số dương? Thuật giải 1: Ước số chung lớn nhất của hai số được định nghĩa là số bị chia lớn nhất mà cả hai số cùng chia hết, ví dụ USCLN của 24 và 36 có thể hiểu: Các số chia hết của 24 là: 1, 2, 3, 4, 6, 8, 12, 24 Các số chia hết của 36 là: 1, 2, 3, 4, 6, 9, 12, 18, 36 Như vậy, số bị chia lớn nhất mà cả hai số 24 và 36 chia hết là 12. Vậy USCLN của 24 và 36 là 12. Thuật giải 2: Chúng ta sử dụng thuật toán Euclid như sau để tìm USCLN của hai số: WHILE m lớn hơn 0 DO IF n lớn hơn m THEN hoán vị m và n. Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 5 trừ đi n từ m. END Cuối cùng n là USCLN. Thuật giải 3: Một thuật toán khác để tìm USCLN của hai số như sau: 1, Đọc 2 số a và b. 2, Lặp lại bước 5 trong khi a khác 0. 3, Đặt USCLN = a 4, a = b % a 5, b = USCLN 6, In USCLN 8, Thoát Giải 1: #include void main() { int n1, n2; printf("Nhap vao hai so: "); scanf("%d %d", &n1, &n2); int greaterNumber = n2; int gcd = 1; if (n1 > n2) greaterNumber = n1; int index = 2; while (index 2) { if ((n1 % index == 0) && (n2 % index == 0)) { gcd = index; } index++; } printf("Uoc so chung lon nhat cua hai so la: %d", gcd); } Giải 2: #include int gcd(int m1, int n1) { int m = m1; int n = n1; int temp; while (m > 0) { if (n > m) { temp = n; Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 6 n = m; m = temp; } m = m - n; } return n; } void main() { int n1, n2; printf("Nhap vao hai so: "); scanf("%d %d", &n1, &n2); printf("Uoc so chung lon nhat cua hai so la: %d", gcd(n1, n2)); } Giải 3: #include void main() { int a, b, gcd; a = b = gcd = 0; printf("Nhap vao hai so: "); scanf("%d %d", &a, &b); while (a != 0) { gcd = a; a = b % a; b = gcd; } printf("Uoc so chung lon nhat cua hai so la: %d", gcd); } Kết quả: Nhap vao hai so:24 36 24 36 Uoc so chung lon nhat cua hai so la: 12 Ví dụ 3: Nhập một số từ bàn phím và tìm một dãy Fibonacci sử dụng vòng lặp while? Giải: #include void main() { int a = 0, b = 1, c = 0, size; printf("Nhap vao gioi han: "); scanf("%d", &size); while (c <= size) { c = a + b; if (c <= size) { printf("%d\n", c); Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 7 } a = b; b = c; } } Kết quả: Nhap vao gioi han:50 50 1 2 3 5 8 13 21 34 Ví dụ 4: Viết một chương trình C đọc một số từ bàn phím và tìm giai thừa của nó? Giải: #include void main() { int fact = 1, b, c; printf("Nhap vao mot so: "); scanf("%d", &b); c = b; while (c > 0) { fact = fact * c; c--; } printf("Giai thua cua so vua nhap la: %d", fact); } Kết quả: Nhap vao mot so:4 4 Giai thua cua so vua nhap la: 24 Ví dụ 5: Viết một chương trình C kiểm tra một số bất kỳ xem có phải là số nguyên tố palindrome (số xuôi ngược nguyên tố) hay không? Thuật giải: 1, Khởi tạo s = 0 2, Đọc number, num 3, Đặt b = num 4, Lặp lại bước 7 trừ khi num > 0 Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 8 5, r = num % 10 6, s = (s*10) + r 7, num = num / 10 8, Nếu b bằng s, thì in ra b là số nguyên tố palindrome, ngược lại thì không phải số nguyên tố palindrome. 9, Thoát. Giải: #include void main() { int num, b, s = 0, r; printf("Nhap vao so can kiem tra: "); scanf("%d", &num); b = num; while (num > 0) { r = num % 10; s = (s * 10) + r; num = num / 10; } if (b == s) { printf("So vua nhap la so nguyen to palindrome."); } else { printf("So vua nhap khong la so nguyen to palindrome."); } } Kết quả: Nhap vao so can kiem tra:121 121 So vua nhap la so nguyen to palindrome. Ví dụ 6: Viết một chương trình C kiểm tra một số bất kỳ xem có phải là số Armstrong hay không? Thuật giải: 1, Khởi tạo s = 0 2, Đọc number, num 3, đặt b = num 4, Lặp lại bước 7 trong khi num lớn hơn 0 5, r = num % 10 6, s = s + (r*r*r) 7, num = num / 10 8, Nếu b bằng s, thì in ra là số Armstrong, ngược lại in ra không phải là số Armstrong. 9, Thoát. Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 9 Giải: #include void main() { int num, b, s = 0, r; printf("Nhap vao so can kiem tra: "); scanf("%d", &num); b = num; while (num > 0) { r = num % 10; s = s + (r * r * r); num = num / 10; } if (b == s) { printf("So vua nhap la so armstrong."); } else { printf("So vua nhap khong la so armstrong."); } } Kết quả: Nhap vao so can kiem tra:153 153 So vua nhap la so armstrong. Ví dụ 7: Viết một chương trình C kiểm tra một số bất kỳ xem có phải là số nhị phân hay không? Giải: #include void main() { int r = 0, c = 0, num, b; printf("Nhap vao so can kiem tra: "); scanf("%d", &num); b = num; while (num > 0) { if (num % 10 == 0 || num % 10 == 1) c++; r++; num = num / 10; } if (c == r) { printf("So vua nhap la so nhi phan."); } else { printf("So vua nhap khong la so nhi phan."); } } Kết quả: Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 10 Nhap vao so can kiem tra:100110101 100110101 So vua nhap la so nhi phan. 1.4.2, Vòng lặp Do-While Ví dụ 1: Tự viết một thuật toán phát triển một bảng giá trị? Thuật giải: 1, Khởi tạo a=1 2, Khởi tạo b=1 3, In a*b 4, Tăng b lên 1 (ví dụ, b = b + 1). 5, Lặp lại bước 3 đến 5 trừ khi b <= 3 6, Tăng a lên 1 (ví dụ, a = a + 1). 7, Lặp lại bước 2 đến 7 trừ khi a <= 3 8, Thoát. Giải: #include void main() { int a, b; a = 1; do { b = 1; do { printf("\nTich cua a va b la: %d", a * b); b++; } while (b <= 3); a++; } while (a <= 3); } Kết quả: Tich cua a va b la: 1 Tich cua a va b la: 2 Tich cua a va b la: 3 Tich cua a va b la: 2 Tich cua a va b la: 4 Tich cua a va b la: 6 Tich cua a va b la: 3 Tich cua a va b la: 6 Tich cua a va b la: 9 Ví dụ 2: Viết chương trình nhập vào một số nguyên và và xác định xem số đó có bao nhiêu chữ số? Giải: Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 11 #include void main() { int num, tnum = 0; printf("Nhap vao mot so: "); scanf("%d", &num); do { num = num / 10; tnum++; } while (num != 0); printf("So vua nhap co tat ca %d chu so.", tnum); } Kết quả: Nhap vao mot so:65535 65535 So vua nhap co tat ca 5 chu so. 1.4.3, Vòng lặp For Ví dụ 1: Viết một chương trình in ra một dãy Fibonacci sử dụng vòng lặp có cấu trúc? Thuật giải: Dãy Fibonacci là một dãy số mà trong đó có hai số đầu tiên là 0 và 1. Số tiếp theo là tổng của hai số trước đó: F1 = 0 F2 = 1 F3 = F2 + F1 Tổng quát, Fn = F(n-1) + F(n-2) (n là một số dương). Chương trình sẽ có dạng như sau: #include void main() { int i, n, f1, f2, f3; n = 12; if (n <= 1) { printf("%d", n); } else { f1 = 0; f2 = 1; f3 = f1 + f2; printf("%d", f3); for (i = 2; i <= n; i++) { f3 = f1 + f2; f1 = f2; f2 = f3; printf("\t%d", f3); Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 12 } } } Giải: Ta viết lại chương trình trên sử dụng vòng lặp có cấu trúc như sau: #include void main() { int i, f0 = 0, f1 = 1, f2; printf("%d %d", f0, f1); for (i = 3; i <= 10; i++) { f2 = f1 + f0; printf(" %d", f2); f0 = f1; f1 = f2; } } Kết quả: 0 1 1 2 3 5 8 13 21 34 Ví dụ 2: Viết một chương trình C kiểm tra một số bất kỳ xem có phải là số armstrong hay không? Sửa lại chương trình để in ra các số Armstrong trong khoảng từ 100 đến 999? Thuật giải: Số Armstrong là số mà có giá trị bằng tổng lập phương các chữ số của nó. Ví dụ, 333 351153 ++= . Giải 1: #include void main() { int num, n, d; int sum = 0; printf("Nhap vao mot so: "); scanf("%d", &num); n = num; while (num != 0) { d = num % 10; num = num / 10; sum = sum + d * d * d; } if (sum == n) { printf("So vua nhap la so armstrong."); } else { Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 13 printf("So vua nhap khong la so armstrong."); } } Kết quả: Nhap vao mot so:123 123 So vua nhap khong la so armstrong. Giải 2: #include void main() { int n, a, b, c; for (int i = 100; i < 1000; i++) { a = i % 10; b = i % 100 / 10; c = i / 100; n = a * a * a + b * b * b + c * c * c; if (i == n) { printf("%d\t", i); } } } Kết quả: 153 370 371 407 Ví dụ 3: Viết chương trình C tính giai thừa của một số nguyên? Giải: #include void main() { int n; printf("Nhap vao mot so: "); scanf("%d", &n); long f = 1; for (int i = 1; i <= n; i++) { f *= i; } printf("Giai thua cua so vua nhap la: %ld", f); } Kết quả: Nhap vao mot so:3 3 Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 14 Giai thua cua so vua nhap la: 6 Ví dụ 4: Viết một chương trình C để tìm giá trị của sin(x)? Thuật giải: Giá trị của )sin(x được cho bằng dãy sau: ... !7!5!3 )sin( 753 +−+−= xxxxx Giải: #include #include void main() { int deg, n; float x, s = 0.0f, t; printf("Nhap vao so dieu kien: "); scanf("%d", &n); printf("Nhap vao gia tri goc he do: "); scanf("%d", °); x = (float) M_PI * deg / 180; s = x; t = x; for (int i = 1; i <= n; i++) { t = (-t * x * x) / ((2 * i) * (2 * i + 1)); s = s + t; } printf("Gia tri: sin(%d) = %f", deg, s); } Kết quả: Nhap vao so dieu kien:20 20 Nhap vao gia tri goc he do:90 90 Gia tri: sin(90) = 1.000000 Ví dụ 6: Viết một chương trình C in hình tam giác có dạng như sau? * * * * * * * * * * * * * * * * * * * * * * * * * * * * Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 15 Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = 0; i < row; i++) { for (j = 0; j <= i; j++) { printf(" * "); } printf("\n"); } } Kết quả: Nhap vao so hang:7 7 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Ví dụ 7: Viết một chương trình C in hình tam giác có dạng như sau? 1 01 101 0101 10101 010101 Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = 1; i < row; i++) { for (j = 0; j < i; j++) { printf("%d", (i - j) % 2); } Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 16 printf("\n"); } } Kết quả: Nhap vao so hang:7 7 1 01 101 0101 10101 010101 Ví dụ 8: Viết một chương trình C in một hình tam giác có dạng như sau? * * * * * * * * * * * * * * * * * * * * * * * * * * * * Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = row; i > 0; i--) { for (j = 0; j < i; j++) { printf(" * "); } printf("\n"); } } Giải: Nhap vao so hang:7 7 * * * * * * * * * * * * * * * * * * * * * * Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 17 * * * * * * Ví dụ 9: Viết một chương trình C in hình tam giác có dạng như sau? 1 12 123 1234 12345 123456 1234567 Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = 1; i <= row; i++) { for (j = 1; j <= i; j++) { printf("%d", j); } printf("\n"); } } Kết quả: Nhap vao so hang:7 7 1 12 123 1234 12345 123456 1234567 Ví dụ 10: Viết một chương trình C in hình tam giác có dạng như sau? 7777777 666666 55555 4444 333 22 Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 18 1 Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = row; i > 0; i--) { for (j = 0; j < i; j++) { printf("%d", i); } printf("\n"); } } Kết quả: Nhap vao so hang:7 7 7777777 666666 55555 4444 333 22 1 Ví dụ 11: Viết một chương trình C in hình tam giác có dạng như sau? * *** ***** ******* ********* *********** ************* Giải: #include void main() { int row, i, j; printf("Nhap vao so hang: "); scanf("%d", &row); for (i = 0; i <= row; i++) { for (j = 1; j <= row - i; j++) Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 19 printf(" "); for (j = 1; j <= i; j++) printf("*"); for (j = 2; j <= i; j++) printf("*"); printf("\n"); } } Kết quả: Nhap vao so hang:7 7 * *** ***** ******* ********* *********** ************* Ví dụ 11: Viết một chương trình C in tam giác Pascal có dạng như sau? 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Giải: #include void main() { int a = 1, p, q = 0, row, b; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\nTam giac Pascal\n"); while (q < row) { for (p = 30 - 3 * q; p > 0; p--) printf(" "); for (b = 0; b <= q; b++) { if (b == 0 || q == 0) { a = 1; } else { a = a * (q - b + 1) / b; } printf(" %d ", a); } printf("\n"); q++; Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 20 } } Kết quả: Nhap vao so hang:5 5 Tam giac Pascal 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Ví dụ 12: Vẽ một chương trình C in tam giác Floyd có dạng như sau? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Giải: #include void main() { int a = 1, i, j, row; printf("Nhap vao so hang: "); scanf("%d", &row); printf("\n"); for (i = 0; i < row; i++) { for (j = 0; j <= i; j++) { printf("%d\t", a); a++; } printf("\n"); } } Kết quả: Nhap vao so hang:7 7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 21 16 17 18 19 20 21 22 23 24 25 26 27 28 1.4.4, Câu lệnh Break 1.4.5, Câu lệnh Continue 1.5, Bài tập Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA 22 2. MẢNG VÀ CON TRỎ

Các file đính kèm theo tài liệu này:

  • pdfbai_tap_c_0727_2013729.pdf
Tài liệu liên quan