Tải bản đầy đủ (.pdf) (22 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (463.54 KB, 22 trang )

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

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

1


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, 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<stdio.h>
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 <stdio.h>
void main() {
int numb;

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

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 <stdio.h>
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

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
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 <stdio.h>
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.
4


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
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 <stdio.h>
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 <= greaterNumber && greaterNumber > 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 <stdio.h>
int gcd(int m1, int n1) {

int m = m1;
int n = n1;
int temp;
while (m > 0) {
if (n > m) {
temp = n;

5


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
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 <stdio.h>
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 <stdio.h>
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);

6



Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
}
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 <stdio.h>
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
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
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 <stdio.h>

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.

8


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
Giải:
#include <stdio.h>
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 <stdio.h>
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ả:
9


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

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 <stdio.h>
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
Tich
Tich
Tich
Tich
Tich
Tich
Tich
Tich

cua
cua
cua
cua
cua
cua
cua
cua
cua

a
a
a
a
a
a
a
a
a


va
va
va
va
va
va
va
va
va

b
b
b
b
b
b
b
b
b

la:
la:
la:
la:
la:
la:
la:
la:
la:


1
2
3
2
4
6
3
6
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:

10


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
#include <stdio.h>
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 <stdio.h>
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);

11


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

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 <stdio.h>
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ụ,
153 = 13 + 5 3 + 33 .
Giải 1:
#include <stdio.h>
void main() {
int num, n, d;
int sum = 0;
printf("Nhap vao mot so: ");
scanf("%d", &num);
n = num;
while (num !=
d = num %
num = num
sum = sum
}

0) {
10;
/ 10;
+ d * d * d;

if (sum == n) {
printf("So vua nhap la so armstrong.");
} else {

12



Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
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 <stdio.h>
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 <stdio.h>
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

13


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
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:
sin( x) = x −

x3 x5 x7
+

+ ...
3! 5! 7!

Giải:
#include <stdio.h>
#include <math.h>
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?
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
14


Tổng hợp ví dụ và bài tập ngôn ngữ lập trình C – Vũ Phát K58TDHB - VNUA
Giải:
#include <stdio.h>
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 <stdio.h>
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);
}


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
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 <stdio.h>
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
*
*
*
*

16

*
*
*
*

*
*
*

*

*
*
*
*

*
*
*

*
*

*


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

*
*

*

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 <stdio.h>
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
17


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
Giải:
#include <stdio.h>
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 <stdio.h>
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++)

18


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

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 <stdio.h>
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++;

19


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

Kết quả:

Nhap vao so hang:5
5
Tam giac Pascal
1
1

1

1
1
1

2
3

1
3

4

6

1
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 <stdio.h>
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
4
7
11

20

3
5
8
12

6
9
13

10
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
16
22

17
23


18
24

19
25

20
26

21
27

28

1.4.4, Câu lệnh Break
1.4.5, Câu lệnh Continue
1.5, Bài tập

21


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. MẢNG VÀ CON TRỎ

22




×