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.
22 trang |
Chia sẻ: dntpro1256 | Lượt xem: 963 | Lượt tải: 0
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:
- bai_tap_c_0727_2013729.pdf