Tải bản đầy đủ (.doc) (62 trang)

bài tập thực hành nhập môn lập trình

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 (339.46 KB, 62 trang )

Chương 1.
TỔNG QUAN VỀ NGÔN NGỮ C
Bài 1. Sử dụng ngôn ngữ tự nhiên; vẽ lưu đồ thuật toán tính tổng bình phương của hai số bất
kỳ A = x2 + y2
Lời giải
 Dùng ngôn ngữ tự nhiên
 Dùng lưu đồ
- Bước 1: Nhập vào 2 số x và y
- Bước 2: Tính A = x*x + y*y
- Bước 3: Xuất A
- Bước 4: Ngừng thuật toán.

Bài 2. Sử dụng ngôn ngữ tự nhiên; vẽ lưu đồ thuật toán giải phương trình bậc nhất:
ax +b =0
 Dùng ngôn ngữ tự nhiên
- Bước 1: Nhập vào 2 hệ số a và b.
- Bước 2: Xét điều kiện a = 0 ?
+ Nếu đúng là a = 0, thì đi đến bước 3.
+ Nếu không, nghĩa là a ≠ 0, thì đi đến bước 4.
- Bước 3: Xét điều kiện b = 0 ?
+ Nếu b = 0, thì báo phương trình có vô số nghiệm. Ði đến bước 5.
+ Nếu b ≠ 0, thông báo phương trình vô nghiệm. Ði đến bước 5.
- Bước 4: Thông báo phương trình có một nghiệm duy nhất là x = - b/a.
- Bước 5: Ngừng thuật toán.
 Dùng lưu đồ


Bài 3. Sử dụng ngôn ngữ tự nhiên; vẽ lưu đồ thuật toán giải phương trình bậc hai:
ax2 + bx + c = 0
 Dùng ngôn ngữ tự nhiên
- Bước 1: Nhập vào 3 hệ số a, b và c.


- Bước 2: Xét điều kiện a = 0 ?
+ Nếu đúng là a = 0, thì đi đến bước 3.
+ Nếu không, nghĩa là a ≠ 0, thì đi đến bước 4.
- Bước 3: Gọi hàm giải phương trình bậc nhất. Ði đến bước 8.
- Bước 4: Tính delta = b*b – 4*a*c
- Bước 5: Xét điều kiện delta < 0 ?
+ Nếu delta < 0, thì báo phương trình vô nghiệm. Ði đến bước 8.
+ Nếu không, nghĩa là delta ≥ 0, thì đi đến bước 6.
- Bước 6: Xét điều kiện delta = 0 ?
+ Nếu delta = 0, thì báo phương trình có nghiệm kép –b/(2*a). Ði đến bước 8.
+ Nếu không, nghĩa là delta > 0, thì đi đến bước 7.
- Bước 7: Thông báo phương trình có hai nghiệm x1 và x2 là:
(-b + sqrt(delta))/(2*a) và (-b – sqrt(delta))/(2*a)
- Bước 8: Ngừng thuật toán.
 Dùng lưu đồ


Bài 4. Sử dụng ngôn ngữ tự nhiên; vẽ lưu đồ thuật toán tính giá trị lớn nhất của ba số a, b, c.
 Dùng ngôn ngữ tự nhiên
- Bước 1: Nhập vào 3 số a, b, c.
- Bước 2: Xét điều kiện a > b ?
+ Nếu đúng là a > b, thì gán max = a. Đi đến bước 3.
+ Nếu không, nghĩa là a ≤ b, thì gán max = b. Đi đến bước 3.
- Bước 3: Xét điều kiện max < c ?
+ Nếu đúng là max < c, thì gán max = c. Ði đến bước 4.
+ Nếu không, nghĩa là max ≥ c, thì đi đến bước 4.
- Bước 4: Xuất max.
- Bước 5: Ngừng thuật toán.
 Dùng lưu đồ


Bài 5. Sử dụng ngôn ngữ tự nhiên; vẽ lưu đồ thuật toán tính tổng S = 1 + 2 + … + n.
 Dùng ngôn ngữ tự nhiên
- Bước 1: Nhập vào n.
- Bước 2: Khởi tạo i = 1; S = 0.
- Bước 3: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 4.
+ Nếu không, nghĩa là i > n, thì đi đến bước 5.
- Bước 4: Tính S = S + i.
Tăng i lên thêm 1 đơn vị
- Bước 5: Xuất tổng S
- Bước 6: Ngừng thuật toán.


 Dùng lưu đồ

BÀI TẬP YÊU CẦU
Bài 6. Vẽ lưu đồ thuật toán tính tổng S = 1 + 3 + 5 +…+ (2n-1)
Gợi ý dùng ngôn ngữ tự nhiên:
- Bước 1: Nhập vào n.
- Bước 2: Xét điều kiện n > 0 ?
+ Nếu đúng là n > 0, thì đi đến bước 3.
+ Nếu không, nghĩa là n ≤ 0, thì quay về bước 1.
- Bước 3: Khởi tạo i = 1; S = 0.
- Bước 4: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 5.
+ Nếu không, nghĩa là i > n, thì đi đến bước 6.
- Bước 5: Tính S = S + (2*i-1)
Tăng i lên thêm 1 đơn vị
- Bước 6: Xuất tổng S
- Bước 7: Ngừng thuật toán.

Bài 7. Vẽ lưu đồ thuật toán tính tống S 1 

1
1
 ... 
2
2n

Gợi ý dùng ngôn ngữ tự nhiên:
- Bước 1: Nhập vào n.
- Bước 2: Xét điều kiện n ≥ 0 ?
+ Nếu đúng là n ≥ 0, thì đi đến bước 3.
+ Nếu không, nghĩa là n < 0, thì quay về bước 1.
- Bước 3: Khởi tạo i = 1; S = 1.


- Bước 4: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 5.
+ Nếu không, nghĩa là i > n, thì đi đến bước 6.
- Bước 5: Tính S = S + 1/(2*i)
Tăng i lên thêm 1 đơn vị
- Bước 6: Xuất tổng S
- Bước 7: Ngừng thuật toán.
1
2

3
4

5

6

Bài 8. Vẽ lưu đồ thuật toán tÝnh tæng S     ... 

2n  1
, víi n ≥ 0
2n  2

Gợi ý dùng ngôn ngữ tự nhiên:
- Bước 1: Nhập vào n.
- Bước 2: Xét điều kiện n ≥ 0 ?
+ Nếu đúng là n ≥ 0, thì đi đến bước 3.
+ Nếu không, nghĩa là n < 0, thì quay về bước 1.
- Bước 3: Khởi tạo i = 0; S = 0.
- Bước 4: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 5.
+ Nếu không, nghĩa là i > n, thì đi đến bước 6.
- Bước 5: Tính S = S + (2*i+1)/(2*n+2)
Tăng i lên thêm 1 đơn vị
- Bước 6: Xuất tổng S
- Bước 7: Ngừng thuật toán.
Bài 9. Vẽ lưu đồ thuật toán tính T = 1 * 2* 3 *...* n
Gợi ý dùng ngôn ngữ tự nhiên:
- Bước 1: Nhập vào n.
- Bước 2: Khởi tạo i = 1; T = 1.
- Bước 3: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 4.
+ Nếu không, nghĩa là i > n, thì đi đến bước 5.
- Bước 4: Tính T = T * i
Tăng i lên thêm 1 đơn vị

- Bước 5: Xuất T
- Bước 6: Ngừng thuật toán.
Bài 10. Vẽ lưu đồ thuật toán tính S = 1 + 2! + ... + n!
Gợi ý:
- Giai thừa của một số nguyên dương theo sau bởi dấu chấm than (ví dụ: 5!). Giá trị của giai
thừa là tích số của tất cả các số đã cho của thừa số. 5! = 1*2*3*4*5 = 120
- Quy ước 0! = 1. Như vậy: n!=
Sử dụng ngôn ngữ tự nhiên

1

nếu n=0,

(n-1)! * n

nếu n>0.


- Bước 1: Nhập vào n.
- Bước 2: Xét điều kiện n ≥ 0 ?
+ Nếu đúng là n ≥ 0, thì đi đến bước 3.
+ Nếu không, nghĩa là n < 0, thì quay về bước 1.
- Bước 3: Xét điều kiện n = 0 ?
+ Nếu đúng là n = 0, thì đi đến bước 6
+ Nếu không, nghĩa là n ≠ 0, thì đi đến bước 4.
Khởi tạo i = 1; S = 0; T=1.
- Bước 4: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 5.
+ Nếu không, nghĩa là i > n, thì đi đến bước 7.
- Bước 5: Tính T = T * i

Tính S = S + T
Tăng i lên thêm 1 đơn vị
- Bước 6: Xuất tổng S = 1. Đi đến bước 8.
- Bước 7: Xuất tổng S
- Bước 8: Ngừng thuật toán.
Bài 11. Vẽ lưu đồ thuật toán tính S = 12 - 22 + 32 - ... + (-1)n-1 n2
Sử dụng ngôn ngữ tự nhiên
- Bước 1: Nhập vào n.
- Bước 2: Khởi tạo i = 1; S = 0.
- Bước 3: Xét điều kiện i ≤ n ?
+ Nếu đúng i ≤ n, thì đi đến bước 4.
+ Nếu không, nghĩa là i > n, thì đi đến bước 8.
- Bước 4: Xét điều kiện i chia hết 2 ?
+ Nếu đúng, i chia hết 2 thì đi đến bước 5
+ Nếu sai, i không chia hết 2 thì đi đến bước 6
- Bước 5: Tính S = S - i * i. Đi đến bước 7
- Bước 6: Tính S = S + i*i. Đi đến bước 7.
- Bước 7: Tăng i lên thêm 1 đơn vị
- Bước 8: Xuất tổng S
- Bước 9: Ngừng thuật toán.


Chương 2. NGÔN NGỮ LẬP TRÌNH C
//cấu trúc chương trình và các hàm chuẩn
Bài 1. Hãy cho biết ý nghĩa từng dòng lệnh, mục đích của chương trình C sau:
1.
2.
3.
4.
5.

6.

/* Chuong trinh C dau tien */
#include <stdio.h>
main()
{
printf(“Xin chao cac ban!”);
}

Lời giải
Ý nghĩa từng dòng lệnh
1. Chú thích
2. Chỉ thị tiền xử lý #include
3. Hàm chuẩn tên main
4. Bắt đầu hàm main
5. Hiển thị lên màn hình dòng chữ: “Xin chao cac ban!
6. Kết thúc hàm main

Mục đích chương trình
Chương trình in ra câu thông báo: Xin chao cac ban!
Bài 2. Hãy cho biết chương trình C sau có lỗi hay không (nếu có hãy sửa lại), mục đích của
đoạn chương trình là gì?
1. main()
2. {
3.

float chieu_cao, chieu_rong, chu_vi;

4.


printf(“nhap chieu cao hinh chu nhat: “);

5.

scanf(“%f”,&chieu_cao)

6.

printf(“nhap chieu rong hinh chu nhat: “);

7.

scanf(“%d”,&chieu_rong);

8.

chu_vi:=(chieu_cao+chieu_rong)*2;

9.

printf(“chu vi hinh chu nhat: %f”, chu_vi);

10. }

Các dòng lệnh bị lỗi
Dòng 5: Thiếu dấu ;
Dòng 7: Sai định dạng xuất ra, phải là %f
Dòng 8: Sai dấu lệnh gán, phải là =

Mục đích chương trình

Chương trình tính và in ra màn hình chu vi hình chữ nhật từ chiều rộng và chiều cao
được nhập vào từ bàn phím.
Bài 3. Hãy cho biết kết quả chương trình dưới đây và giải thích
#include <stdio.h>
#include <conio.h>
int main()
{
int a=3;


printf("%d %d %d",a,a++,++a);
printf("\n%d %d %d",a,--a,a--);
printf("\n%d %d %d",a++,a++,a);
getch();
}

Kết quả
5 4 4
3 3 5
4 3 3
Giải thích:
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
// lệnh rẽ nhánh
Bài 4. Viết chương trình nhập vào 3 số a , b, c và in ra giá trị lớn nhất trong 3 số. Lấy ví dụ
với a=1, b=2, c=3

Lời giải
#include<stdio.h>
#include<conio.h>
main()
{
int a,b,c,max;
printf(" Nhap a,b,c :");scanf("%d%d%d",&a,&b,&c);
max=a;
if (b>max) max=b; // max=(maxif (c>max) max=c; // max=(maxprintf("\n gia tri lon nhat la %d :",max);
getch();
}

Ví dụ với: a=1, b=2, c=3
-

B1: gán max=a. (tức là max =1).
B2: so sánh xem b có lớn hơn max hay không.(ở đây là 2>1) điều này đúng cho nên gán
max=b.
B3: so sánh c với max. ở đây là 3> 2 đúng! vì ở trên đã đã gán max =2. suy ra max =3.
Cuối cùng xuất max ra màn hình.

In ra giá trị lớn nhất trong 3 số: a=1, b=3, c=2
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Yêu cầu: Viết chương trình nhập vào từ bàn phím bốn số a, b, c, d. Tìm giá trị nhỏ nhất và

giá trị lớn nhất trong bốn số đó, in kết quả ra màn hình?
..................................................................................................................................................


..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 5. Viết chương trình giải phương trình bậc hai: ax2 + bx + c = 0
Lưu ý:
- Xét trường hợp a=0
- Xét trường hợp b=0
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 6. Nhập một ký tự bất kỳ từ bàn phím sau đó xuất ra:
- Nếu là số thì xuất ra đó là một chữ số.
- Nếu là chữ cái thì xuất ra đó là một chữ cái.
- Các trường hợp khác xuất ra không phải là số, chữ cái.
Lời giải tham khảo
#include<stdio.h>

#include<conio.h>
main()
{
char c;
printf("Nhap ky tu vao:"); scanf("%c",&c);
if ((c>='A' && c<='Z') ||(c>='a' && c<='z'))
//c>=65 && c<=90 hoac c>=97 && c<=122
printf("Ky tu vua nhap la mot chu cai - chu: %c",c);
else if (c>='0' && c<='9') //hoac c>=48 && c<=57
printf("Ban dang nhap chu so - so: %c",c);
else
printf("Ban dang nhap ky tu dac biet - ky tu: %c",c);
}

Bài 7. Viết chương trình nhập một tháng và cho biết tháng đó có bao nhiêu ngày.
Gợi ý
- Khi nhập vào tháng t và năm n thì xảy ra các trường hợp sau:
+ Nếu t = 4, 6, 9, 11 thì tháng t có 30 ngày đối với tất cả các năm n.
+ Nếu t = 1, 3, 5, 7, 8, 10, 12 thì tháng t có 31 ngày đối với tất cả các năm n.


+ Nếu t = 2 thì tháng t có thể 28 ngày hoặc 29 ngày (đối với năm nhuận). Phải xác
định năm n nhập vào có phải là năm nhuận hay không ? Cách tính năm nhuận:
 Năm chia hết cho 4 và không chia hết cho 100
 Hoặc năm chia hết cho 100 và chia hết cho 400
 Cách tính này áp dụng cho những năm sau công nguyên (n>=1)
Lời giải
#include <stdio.h>
main()
{

int t,n,k;
printf("\n Nhap vao thang t va nam n: ");
scanf("%d%d",&t,&n);
if((t<1)||(t>12)||(n<1))
printf("Khong co Thang hoac nam nay\n");
else
{
if(t==2)
{
if(((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))
printf("Thang 2 nam %d co 29 ngay (nam nhuan)\n",n);
else printf ("Thang 2 nam %d co 28 ngay\n",n);
}
if((t==4)||(t==6)||(t==9)||(t==11))
printf(" => Thang %d nam %d co 30 ngay\n",t,n);
if((t==1)||(t==3)||(t==5)||(t==7)||(t==8)||(t==10)||(t==12))
printf("Thang %d nam %d co 31 ngay\n",t,n);
}
printf("\nBan muon tiep tuc? 1 de tiep tuc, 0 de dung: ");
scanf("%d", &k);
if(k) return main();
}
Bài 8. Viết chương trình tính tiền được lĩnh của một nhân viên khi biết số ngày công, lương
tháng và quy định như sau:
- Nếu ngày công là 26: hưởng đúng lương tháng
- Nếu ngày công lớn hơn 26: mỗi ngày thêm có đơn giá 50.000 đồng
- Nếu ngày công bé hơn 26: mỗi ngày nghỉ bị trừ 30.000 đồng
Gợi ý
Sử dụng hàm if, khai báo 2 biến ngay_cong (số nguyên), tien_luong
..................................................................................................................................................

..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................


Bài 8.1. Lập trình đọc từ bàn phím một số nguyên n (1  n  10) rồi đưa ra từ tiếng Anh của
số đó. Ví dụ: nếu gõ vào 7 thì đưa ra 7  seven
Gợi ý trả lời
- Nhập n thỏa điều kiện (1  n  10): sử dụng nhãn để lặp lại việc nhập khi điều kiện
còn sai.
- Sử dụng cấu trúc switch…case
#include<stdio.h>
#include<conio.h>
main()
{
int a;
ll: printf("Nhap a =");
scanf("%d", &a);
if (a>=10)
goto ll; //sử dụng nhãn và lệnh nhảy goto
if (a<=0)
goto ll;
switch (a)
{
case 1: printf("One"); break;
case 2: printf("Two"); break;

case 3: printf("Three"); break;
case 4: printf("Four"); break;
case 5: printf("Five"); break;
case 6: printf("Six"); break;
case 7: printf("Seven"); break;
case 8: printf("Eight"); break;
case 9: printf("Nine"); break;
case 10: printf("Ten"); break;
default: printf("Ban phai nhap so tu 1 den 10");
}
getch();
}

Bài 8.2. Nhập vào tháng của một năm. Cho biết tháng thuộc quý mấy trong năm.
Gợi ý trả lời
- Sử dụng nhãn để lặp điều kiện nhập tháng thỏa mãn điều kiện (0- 1 năm có 4 quý:
+ Quý 1 từ tháng 1 đến tháng 3
+ Quý 2 từ tháng 4 đến tháng 6
+ Quý 3 từ tháng 7 đến tháng 9
+ Quý 4 từ tháng 10 đến tháng 12
- Sử dụng cấu trúc switch…case
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................


Bài 9. Viết chương trình nhập vào 2 số nguyên rồi đưa ra tổng, hiệu, tích, thương của hai

số đó? (Viết dưới dạng menu)
Gợi ý
- Đối với phép tính Thương của 2 số nguyên thì phải ép kiểu dữ liệu. Ví dụ tính Thương 2
số a, b: Thuong = (float)a/b với ý nghĩa là lấy giá trị có kiểu số thực của phép chia trên. Nếu chỉ
viết Thuong = a/b thì giá trị tính được sẽ là phần nguyên của phép chia đó.
Lời giải
#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b,kt,Tong, Hieu, Tich,t;
float Thuong;
printf("Nhap a ="); scanf("%d", &a);
printf("Nhap b ="); scanf("%d", &b);
Tong=a+b;
Hieu=a-b;
Tich=a*b;
Thuong=(float)a/b; //ep kieu
do{
int kt;
printf("\nLua chon phep tinh:\n");
printf("1. Tinh Tong\n");
printf("2. Tinh Hieu\n");
printf("3. Tinh Tich\n");
printf("4. Tinh Thuong\n");
printf("5. Thoat\n");
ll: scanf("%d",&kt);
while(kt<1 || kt>5)
{
printf("Chuc nang khong hop le, nhap lai: ");

goto ll;
//scanf("%d", &kt);
}
switch (kt)
{
case 1: printf("Tong 2 so: %d",Tong); break;
case 2: printf("Hieu 2 so: %d",Hieu); break;
case 3: printf("Tich 2 so: %d",Tich); break;
case 4: printf("Thuong 2 so: %.2f",Thuong); break;
case 5: exit(0); // ham exit trong thu vien stdlib.h
}
printf("\nBan muon tiep tuc? 1 de tiep tuc, 0 de dung: ");
scanf("%d", &t);
} while (t==1);
}


//lệnh lặp
Bài 10. Viết chương trình tính tổng S = 1 + 2 + … + n
Lời giải
#include<stdio.h>
#include<conio.h>
main()
{
int i,tong,n,kq;
kq=0;
printf("Nhap n= ");
scanf("%d", &n);
for (i=1; i<=n; i++) kq+=i;
printf("Tong tu 1 den %d = %d", n,kq);

getch();
}

Bài 11. Nhập vào số n và kiểm tra xem n có phải là số nguyên tố hay không
Gợi ý
Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có ước là 1 và chính nó.
Lời giải
#include<stdio.h>
#include<math.h>
int main()
{
int n, i;
int SNT =0;
printf("\nNhap vao N: ");
scanf("%d",&n);
if (n > 1)
{
for (i = 2; i <= n/2; i++)
if(n % i == 0)
{
SNT = 1;
break;
}
}
if (SNT == 0)
printf("%d la so nguyen to!",n);
else
printf("%d khong la so nguyen to.",n);
}


Bài 12. Viết chương trình tính tổng S = 1 + 3 + 5 +…+ (2n-1)
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................


Bài 13. Viết chương trình in ra màn hình bảng cửu chương
Gợi ý
Sử dụng 2 vòng lặp for lồng nhau
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 14. Nhập vào số n và in ra các số nguyên tố nhỏ hơn n.
Gợi ý
Cách 1
Cách 2: sử dụng biến đếm
#include <stdio.h>
...................................................................................
int main()
...................................................................................
{
...................................................................................
int n,i,j;
...................................................................................
printf("Nhap n= ");
...................................................................................

scanf("%d",&n);
...................................................................................
printf("\nCac so ngto nho hon ...................................................................................
...................................................................................
%d la: ",n);
...................................................................................
for(i=2;i...................................................................................
{
...................................................................................
for(j=2;i%j!=0;j++);
...................................................................................
if(j==i)printf("%d ",i);
...................................................................................
}
...................................................................................
printf("\n");
...................................................................................
}
...................................................................................

Bài 15. Viết chương trình nhập vào n sau đó tính tổng các số có giá trị lẻ, các số có giá trị
chẵn từ 1 đến n.
Gợi ý
- Bước 1: Nhập vào số n.
- Bước 2: Xét điều kiện n ≥ 1 ?
+ Nếu đúng là n ≥ 1, thì đi đến bước 3.
+ Nếu không, nghĩa là n < 1, thì quay về bước 1.
- Bước 3: Khởi tạo i = 1; Sl = 0, Sc=0.
- Bước 4: Xét điều kiện i ≤ n ?

+ Nếu đúng i ≤ n, thì đi đến bước 5.
+ Nếu không, nghĩa là i > n, thì đi đến bước 6.
- Bước 5: Xét điều kiện i chia hết cho 2 ?
+ Nếu đúng, i/2==0, thì Sc+=i
+ Nếu sai, i/2≠0, thì Sl+=i
Tăng i lên thêm 1 đơn vị
- Bước 6: Xuất tổng Sl, Sc
- Bước 7: Ngừng thuật toán.


Bài 16. Viết chương trình kiểm tra xem 1 số nhập vào từ bàn phím có đối xứng hay không.
Gợi ý
#include <stdio.h>
#include <conio.h>
main()
{
int n, m,k;
printf("nhap phan tu n:");
scanf("%d",&n);
k = n;
m = 0;

while(k > 0)
{
m = 10*m + k%10;
k = k/10;
}
if(n == m)
printf(" %d la so doi xung ",n);
else

printf(" %d khong la so doi xung ",n);
getch();
}

//chương trình con
Bài 17. Viết chương trình sử dụng hàm tính giai thừa của một số n
Lời giải
#include <conio.h>
#include <stdio.h>
long int giaithua(int n)
{
int i;
long int gt=1;
for(i=2; i<=n;i++) gt=gt*i;
return gt;
}
int main()
{
int a;
long int kq;
printf("a="); scanf("%d",&a);
kq=giaithua(a);
printf("%d ! = %ld",a,kq);
getch();
}

Hàm đệ quy tính giai thừa của một số n
#include <conio.h>
#include <stdio.h>
long int giaithua(int n)

{
if (n==0) return 1;


else
return n*giaithua(n-1);
}
int main()
{
int a;
printf("\nNhap vao so n can tinh giai thua: ");
scanf("%d",&n);
printf("\nGoi ham de quy: %d! = %u",n,giaithua(n));
getch();
}

Bài 18. Viết hàm tìm UCLN của hai số a và b. Áp dụng: nhập vào tử và mẫu số của một
phân số, kiểm tra xem phân số đó đã tối giản hay chưa.
Gợi ý
// kiểm tra xem phân số đã tối giản chưa
int KiemTra(int a, int b) // a/b
{
for(int i=2; i<=a && i<=b; i++)
if(a%i==0 && b%i==0)
return 0; // khong toi gian
return 1; // toi gian
}
main()
{
int x,y;

printf("Nhap x= "); scanf("%d",&x);
printf("Nhap y= "); scanf("%d",&y);
if(KiemTra(x,y)==1) printf("Phan so toi gian");
else
printf("Phan so chua toi gian");
getch();
}

..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 19. Viết chương trình in dãy Fibonacci bằng phương pháp dùng một hàm Fibonacci F
có tính đệ quy.
Gợi ý:
long Fibo(int n)
{
if(n==0||n==1)
return 1;
else
return Fibo(n-1)+Fibo(n-2);
}
int main()
{
int i,n;
do{


printf("Nhap n= "); scanf("%d",&n);

}while (n<0);
for (i=0;i<=n;i++)
printf("%ld",Fibo(i));
//printf("So hang thu %d trong day Fibocacci la: %ld",n,Fibo(n));
getch();
}

19.1. Tính 1+1/2+1/3+...+1/n, sử dụng hàm đệ quy
Gợi ý
float thuong(float n)
{
if(n==1)
return 1;
return 1/n+thuong(n-1);
}

19.2. Tính 1/2+2/3+3/4+...+n/(n+1), sử dụng hàm đệ quy
Gợi ý
float thuong(float n)
{
if(n==1)
return 0.5;
return thuong(n-1)+n/(n+1);
}

19.3. Tính 1/2+3/4+5/6+...+(2n+1)/(2n+2), sử dụng hàm đệ quy
Gợi ý
float thuong(float n)
{
if(n==1)

return 0.5;
return thuong(n-1)+(2*n+1)/(2*n+2);
}

19.4. Tính xn, sử dụng hàm đệ quy
Gợi ý

int mu(int x,int n)
{
if(n==1) return x;
if(n<0) return mu(x,n+1)*1/x;
return mu(x,n-1)*x;
}

19.5. Tính 1+1*2+(1*2*3)+(1*2*3*4)+...+(1*2*3*...*n), sử dụng hàm đệ quy
Gợi ý
int tich(int n)
{
if(n==1) return 1;
return tich(n-1)*n;
}
int tong(int n)


{
if(n==1) return 1;
return tong(n-1)+tich(n-1)*n;
}

19.6. Tính x+x2+x3+...+xn, sử dụng hàm đệ quy

Gợi ý
int mu(int x,int n)
{
if(n==0) return 1;
return mu(x,n-1)*x;
}
int tong(int x,int n)
{
if(n==0) return x;
return tong(x,n-1)+mu(x,n-1)*x;
}

19.7. Tính x+(x2)/2!+(x3)/3!+...+(xn)/n!, sử dụng hàm đệ quy
Gợi ý

float giaithua(float n)
{
if(n==1) return (float)1;
return giaithua(n-1)*n;
}
float mu(float x,float n)
{
if(n==1) return x;
return mu(x,n-1)*x;
}
float thuong(float x,float n)
{
if(n==1) return x;
return thuong(x,n-1)+(mu(x,n-1)*n)/(giaithua(n-1)*n);
}


Bài tập yêu cầu. Xây dựng một thư viện gồm các hàm:
- Tìm max của 3 số.
- Tìm min của 3 số.
- Kiểm tra một số có là nguyên tố hay không.
- Kiểm tra một số chính phương.
Lưu trữ các hàm trên vào file: ***.h và viết chương trình sử dụng các hàm trong thư viện
này?
Gợi ý
Để tạo thư viện, các hàm trong thư viện, thực hiện các bước sau:
Bước 1: Viết ra các hàm muốn đưa vào thư viện, cần khai báo prototype (nguyên mẫu)
Bước 2: Lưu file vừa tạo với phần mở rộng dạng *.h
Bước 3: Copy file *.h vừa tạo vào thư mục include trong Dev-Cpp (thường là theo
đường dẫn: 'C:\Program Files (Dev-Cpp\MinGW32\include')
#include <stdio.h>
int Max3so(int a,int b,int c);
int Min3so(int a,int b,int c);
int NguyenTo(int a);


int ChinhPhuong(int a);
int Max3so(int a,int b,int c)
{ int max;
max=a;
if(max<=b)max=b;
if(max<=c)max=c;
return (max);
}
int Min3so(int a,int b,int c)
{ int min;

min=a;
if(min>=b)min=b;
if(min>=c)min=c;
return (min);
}
int NguyenTo(int a)
{ int i,b=0;
if(a>=2)
{
for(i=2;a%i!=0;i++);
if(i==a)b=1;
}
return (b);
}
int ChinhPhuong(int a)
{ int i,b=0;
if(a>=0)
{
for(i=0;i<=a;i++)
if(i*i==a)b=1;
}
return (b);
}

Áp dụng:
Viết chương trình yêu cầu thực hiện một trong các công việc sau dựa vào tùy chọn
được nhập từ bàn phím: Tìm max của 3 số, tìm min của 3 số, kiểm tra tính nguyên tố của
các số nhập vào.
Gợi ý
Sử dụng menu để thực hiện các chức năng.

#include <stdio.h>
#include <conio.h>
#include "giangle.h"
void menu()
{
printf("\n Nhap vao lua chon: \n");
printf("\n1: Tim Max trong 3 so");
printf("\n2: Tim Min trong 3 so");
printf("\n3: Kiem tra so nguyen to");
printf("\n0: Thoat");
}
main()
{


int a,b,c,d,k;
printf(" Nhap vao 3so a, b, c: ");scanf("%d%d%d",&a,&b,&c);
menu();
int lua_chon;
do
{
printf("\nBan chon: "); scanf("%d",&lua_chon);
switch (lua_chon)
{
case 1:
printf("\nGtri Max trong 3 so la: %d\n",Max3so(a,b,c)); break;
case 2:
printf("\nGtri Min trong 3 so la: %d\n",Min3so(a,b,c)); break;
case 3:
{

printf("\nTinh ngto cua so n la: %d\n",NguyenTo(a));
printf("\nTinh ngto cua so n la: %d\n",NguyenTo(b));
printf("\nTinh ngto cua so n la: %d\n",NguyenTo(c));
break;
}
case 0: break;
}
}while(lua_chon !=0);
}

//dữ liệu kiểu mảng
Bài 20. Viết chương trình nhập vào 1 dãy gồm n số nguyên, đếm:
a. Các số chẵn
b. Các số chia hết cho 3 và bé hơn 16.
c. Các số lớn hơn 12.
d. Số lượng số nguyên tố có trong mảng.
Gợi ý
a. Đếm các số chẵn
#include<stdio.h>
#include<conio.h>
#define MAX 100
//hàm nhập mảng
void NhapMang(int a[], int *n)
{
int i;
printf("Nhap so luong phan tu n= ");
scanf("%d", n);
for (i = 0; i < *n; i++)
{
printf("Nhap a[%d]: ", i);

scanf("%d", &a[i]);
}
}
//hàm xuất mảng
void XuatMang(int a[], int n)
{
int i;
for (i = 0; i < n; i++)


printf("%d ", a[i]);
printf("\n");
}
//đếm có bao nhiêu số chẵn trong mảng
int Demsochan(int a[], int n)
{
int dem = 0,i;
for (i = 0; i < n; i++)
if (a[i]%2==0)
dem=dem+1;
return dem;
}
int main()
{
int A[MAX],k;
NhapMang(A,&k);
printf("Noi dung cua mang la: "); XuatMang(A,k);
printf("Tong so phan tu co gia tri chan: %d", Demsochan(A,k));
getch();
}


Yêu cầu viết hàm đếm các phần tử có giá trị lẻ trong mảng
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
b. Gợi ý hàm đếm các số chia hết cho 3 và bé hơn 16.
int Demdieukien(int a[], int n)
{
int dem = 0;
for (int i = 0; i < n; i++)
if (a[i]%3==0 && a[i]<16)
dem=dem+1;
return dem;
}

c.
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
d. Gợi ý hàm đếm số lượng các số nguyên tố có trong mảng
//Định nghĩa hàm kiểm tra nguyên tố
int ktnt(int k)
{
int i,dem=0;
for(i=1;i<=k;i++)
if (k%i==0)
dem++;

if (dem==2)


return 1;
return 0;
}
//Định nghĩa hàm đếm số nguyên tố
int DemNguyenTo(int a[], int n)
{
int i,dem=0;
for(i=0;iif (ktnt(a[i]==1)
dem++;
return dem;
}

Bài 21. Viết chương trình nhập vào 1 dãy gồm k số nguyên, tìm:
a. Giá trị lớn nhất trong k số đã cho.
b. Giá trị nhỏ nhất trong k số đã cho.
Gợi ý:
a. Tìm giá trị lớn nhất trong mảng
Sử dụng hàm:
#include<stdio.h>
#include<conio.h>
#define MAX 100
//ham nhap mang
void NhapMang(int a[], int *n)
{
int i;
printf("Nhap so luong phan tu n= ");

scanf("%d", n);
for (i = 0; i < *n; i++)
{
printf("Nhap a[%d]: ", i);
scanf("%d", &a[i]);
}
}
//ham xuat mang
void XuatMang(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);

printf("\n");
}
//định nghĩa hàm tìm giá trị lớn nhất trong mảng
int LonNhat(int a[], int n)
{
int i, lc =a[0];
for (i = 0; i < n; i++)
if (a[i]>lc)
lc=a[i];
return lc;
}


int main()
{
int A[MAX],k;

NhapMang(A,&k);
printf("Noi dung cua mang la: "); XuatMang(A,k);
printf("Gia tri lon nhat trong mang: %d", LonNhat(A,k));
getch();
}

b. Tương tự viết hàm tìm giá trị nhỏ nhất trong mảng
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 22. Viết chương trình nhập vào mảng 1 chiều các số thực, tìm:
a. Vị trí mà giá trị tại đó là giá trị nhỏ nhất trong mảng.
b. Vị trí mà giá trị tại đó là giá trị lớn nhất trong mảng.
Gợi ý:
a. Vị trí mà giá trị tại đó là giá trị nhỏ nhất trong mảng.
#include<stdio.h>
#include<conio.h>
#define MAX 100
//ham nhap mang
void NhapMang(float a[], int *n)
{
int i;
printf("Nhap so luong phan tu n= ");
scanf("%d", n);
for (i = 0; i < *n; i++)
{
printf("Nhap a[%d]: ", i);
scanf("%f", &a[i]);
}

}
//ham xuat mang
void XuatMang(float a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%.2f ", a[i]);
printf("\n");
}
int ViTriNhoNhat(float a[], int n)
{
int i,lc = 0;
for (i = 0; i < n; i++)
if (a[i]lc=i;
return lc;
}
int main()


{
float A[MAX];
int k;
NhapMang(A,&k);
printf("Noi dung cua mang la: "); XuatMang(A,k);
printf("Vi tri co gia tri Min: %d", ViTriNhoNhat(A,k));
getch();
}

b. Tương tự cho tìm vị trí mà giá trị tại đó là giá trị nhỏ nhất trong mảng.

..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 23. Viết chương trình nhập vào mảng 1 chiều các số thực, kiểm tra:
a. Trong mảng có tồn tại giá trị dương hay không.
b. Trong mảng có tồn tại giá trị âm hay không.
Gợi ý:
a. Định nghĩa hàm kiểm tra trong mảng có tồn tại giá trị dương hay không
int TonTaiDuong(float a[], int n)
{
int i,flag = 0;
for (i = 0; i < n; i++)
if (a[i]>0)
flag=1;
return flag;
}

b. Tương tự hàm kiểm tra trong mảng có tồn tại giá trị âm hay không
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
Bài 24. Nhập vào 1 dãy gồm n số nguyên (0in ra màn hình dãy trước khi sắp xếp và sau khi sắp xếp.
Lời giải
#include<stdio.h>
#include<conio.h>
#include<math.h>

main()
{
int a[100];
int tam,i,n;
float tong;
do{
printf("Nhap so phan tu cua mang: "); scanf("%d",&n);
} while (n<0 ||n>100);
for (i=0;i{
printf("\na[%d]=",i);


scanf("%d",&a[i]);
}
printf("Mang truoc khi sap xep ");
for (i=0;iprintf("\t%d", a[i]);
//Sap xep
for (i=0;ifor (int j=0; jif (a[i]{
tam =a[i];
a[i]=a[j];
a[j]=tam;
}
printf("\nMang sau khi sap xep: ");
for (i=0;iprintf("\t%d", a[i]);

getch();
}

24.1. Yêu cầu sắp xếp từng bước với mảng a[]={2, 1, 5, 3, 7}
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
..................................................................................................................................................
24.2. Yêu cầu viết chương trình trên sử dụng hàm:
Gợi ý
#include<stdio.h>
#include<conio.h>
#define MAX 100
//hàm nhập mảng
void NhapMang(int a[], int *n)
{
int i;
do{
printf("Nhap so luong phan tu n= ");
scanf("%d", n);
}while (*n<0 ||*n>100);
for (i = 0; i < *n; i++)
{
printf("Nhap a[%d]: ", i);
scanf("%d", &a[i]);
}
}

//hàm xuất mảng
void XuatMang(int a[], int n)
{
int i;


×