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

Bài tập lập trình C có lời giải

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 (652.37 KB, 46 trang )

BÀI 1: CÁC KHÁI NIỆM CƠ BẢN
- Hằng, biến và các kiểu dữ liệu
- Toán tử và biểu thức
- Nhập - xuất
1. Bài tập hướng dẫn
1.1. Bài toán 1
Tính tổng s=max+min+ch+n+k+d và hiển thị kết quả. Với max là hằng số nguyên 100, min
là hằng số thực 1.5, ch là một ký tự, n là một số nguyên dương nhỏ hơn 1000, k là một số nguyên
lớn hơn 50000 và d là một số thực.
Bảng mô tả mô hình dữ liệu (hằng, biến).
Tên
Mô tả
Kiểu dữ liệu
Nguồn
Dữ liệu vào
max
Hằng số nguyên giá trị 100
int
Định nghĩa hằng
min
Hằng số thực giá trị 1.5
float
Định nghĩa hằng
ch
Ký tự
char
Bàn phím
n
Số nguyên
int
Bàn phím


k
Số nguyên
long
Bàn phím
d
Số thực
float
Bàn phím
Dữ liệu ra
s
Số thực
float
Tính toán
Các bước thực hiện
- Định nghĩa các hằng min, max.
- Khai báo các biến ch (kiểu char), n (kiểu int), k (kiểu long), d (kiểu float).
- Tính giá trị biểu thức gán cho biến s.
- Hiển thị giá trị biểu thức.
Chương trình
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#define max 100
const float min=1.5;
void main()
{
char ch;
int n;
long k;
float d,s;

cout<<"Nhap ky tu ch: "; cin>>ch;
cout<<"Nhap so nguyen duong n<1000: "; cin>>n;
cout<<"Nhap so nguyen k>50000: "; cin>>k;
cout<<"Nhap so thuc d: "; cin>>d;
s=max+min+ch+n+k+d;
cout<<"Ket qua s="<getch();
}
Kết quả chạy chương trình

1.2. Bài toán 2


Tính chu vi và diện tích của đa giác đều n cạnh nội tiếp đường tròn bán kính R với:
- Cạnh của đa giác đều tính theo công thức:
- Chu vi = na
- Diện tích đa giác đều dùng công thức:
Bảng mô tả mô hình dữ liệu (hằng, biến) của ứng dụng.
Tên
Mô tả
Kiểu dữ liệu
Nguồn
Dữ liệu vào
n
Số cạnh của đa giác đều
int
Bàn phím
R
Bán kính đường tròn nội tiếp đa giác
float

Bàn phím
double
math.h

Hằng số 
Dữ liệu trung gian
a
Độ dài cạnh đa giác
double
Tính toán
Dữ liệu ra
cv
Chu vi đa giác
double
Tính toán
s
Diện tích đa giác
double
Tính toán
Các bước thực hiện
- Khai báo các biến n (kiểu int), R (kiểu float), a, s, cv (kiểu double).
- Tính các giá trị a, cv, s.
- Hiển thị các giá trị cv, s.
Chương trình
#include <conio.h>
#include <math.h>
#include <iostream.h>
void main()
{
int n;

float R;
double a,cv,s;
cout<<"Nhap so canh da giac n: "; cin>>n;
cout<<"Nhap BK duong tron R: "; cin>>R;
a=2*R*sin(M_PI/n);
cv=n*a;
s=n/2.0*R*R*sin(2*M_PI/n);
cout<<"Chu vi da giac: "<cout<<"Dien tich da giac: "<getch();
}
1.3. Bài toán 3
Nhập vào số nguyên dương n có 5 chữ số, tính và in ra màn hình các chữ số của n và tổng
của các chữ số đó.
Bảng mô tả mô hình dữ liệu (hằng, biến) của ứng dụng.
Tên
Mô tả
Kiểu dữ liệu
Nguồn
Dữ liệu vào
n
Số nguyên dương có 6 chữ số
unsigned long
Bàn phím
Dữ liệu ra
a
Chữ số hàng trăm nghìn
unsigned
Tính toán
b

Chữ số hàng vạn
unsigned
Tính toán
c
Chữ số hàng nghìn
unsigned
Tính toán
d
Chữ số hàng trăm
unsigned
Tính toán
e
Chữ số hàng chục
unsigned
Tính toán
f
Chữ số hàng đơn vị
unsigned
Tính toán


t
Tổng các chữ số
unsigned
Tính toán
Chương trình: Sử dụng các toán tử / và %
#include <conio.h>
#include <iostream.h>
void main()
{

unsigned long n;
unsigned a,b,c,d,e,f,t;
cout<<"Nhap so nguyen duong n 6 chu so: "; cin>>n;
a=n/100000;
b=n/10000%10;
c=n/1000%10;
d=n/100%10;
e=n/10%10;
f=n%10;
t=a+b+c+d+e+f;
cout<<"Chu so hang tram nghin: "<cout<<"Chu so hang van: "<cout<<"Chu so hang nghin: "<cout<<"Chu so hang tram: "<cout<<"Chu so hang chuc: "<cout<<"Chu so hang don vi: "<cout<<"Tong cac chu so: "<getch();
}
Kết quả chạy chương trình

1.4. Bài toán 4
Nhập vào 3 giá trị số thực tìm và in ra màn hình giá trị lớn nhất.
Bảng mô tả mô hình dữ liệu (hằng, biến) của ứng dụng.
Tên
Mô tả
Kiểu dữ liệu
Nguồn
Dữ liệu vào
a

Số thực
float
Bàn phím
b
Số thực
float
Bàn phím
c
Số thực
float
Bàn phím
Dữ liệu ra
max
Số thực
float
Tính toán
Chương trình: Sử dụng biểu thức điều kiện
#include <conio.h>
#include <iostream.h>
void main()
{
float a,b,c,max;
cout<<"Nhap 3 so thuc a,b,c: ";
cin>>a>>b>>c;


max=(a>b)?a:b;
max=(max>c)?max:c;
cout<<"Gia tri lon nhat: "<getch();

}
Kết quả chạy chương trình

1.5. Bài toán 5
Nhập số thực x tính và in ra màn hình giá trị biểu thức:
Bảng mô tả mô hình dữ liệu (hằng, biến) của ứng dụng.
Tên
Mô tả
Kiểu dữ liệu
Nguồn
Dữ liệu vào
x
Số thực
float
Bàn phím
Dữ liệu ra
y
Số thực
float
Tính toán
Chương trình: Sử dụng các hàm toán học trong thư viện math.h
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void main()
{
float x,y;
cout<<"Nhap so thuc x: "; cin>>x;
y=(sin(M_PI*x*x)+sqrt(x*x+1))/(exp(2*x)+cos(M_PI_4*x));

cout<<"Gia tri bieu thuc y = ";
cout<getch();
}
Kết quả chạy chương trình

2. Bài tập tự làm
Bài 1: Viết chương trình nhập vào 4 giá trị nguyên. Tính tổng, tích, trung bình cộng, giá trị nhỏ
nhất. Hiển thị các kết quả ra màn hình.
Bài 2: Viết chương trình nhập vào độ dài cạnh của một hình lập phương, tính và in ra màn hình
diện tích xung quanh, thể tích và đường chéo của hình lập phương theo công thức.
- Diện tích xung quanh
- Thể tích
- Đường chéo
Bài 3: Viết chương trình tính khoảng cách giữa hai điểm A(x1, y1) và B(x2, y2).
Bài 4: Cho độ dài cạnh huyền và một cạnh góc vuông của một tam giác vuông là a và b. Viết
chương trình nhập a, b. Tính và hiển thị ra màn hình bán kính đường tròn nội tiếp tam
giác theo công thức:.
Bài 5: Viết chương trình đọc từ bàn phím độ dài ba cạnh của tam giác ABC rồi tính bán kính
đường tròn ngoại tiếp tam giác ABC theo công thức với s là diện tích tam giác. Hiển thị
các kết quả ra màn hình.
Bài 6: Viết chương trình nhập vào toạ độ ba điểm A, B, C trên mặt phẳng. Tính độ dài các đoạn
thẳng AB, BC, CA, chu vi và diện tích tam giác ABC. Hiển thị các kết quả ra màn hình.


Bài 7: Viết chương trình tính tổng cấp số cộng có n phần tử. Biết rằng phần tử thứ nhất là a và
công sai là d.


BÀI 2: CẤU TRÚC RẼ NHÁNH

- Cấu trúc rẽ nhánh if…
- Cấu trúc lựa chọn switch…
1. Bài tập hướng dẫn
1.1. Bài toán 1
Tính tiền thưởng cho nhân viên bán hàng (bằng 5% doanh số) nếu doanh số bán hàng
trong tháng của họ đạt từ 20000000 trở lên.
Phương pháp: Sử dụng cấu trúc if…
Chương trình
#include <iostream.h>
#include <conio.h>
void main()
{
float doanhso, thuong;
cout<<"Nhap doanh so ban cua nhan vien: "; cin>>doanhso;
if (doanhso>=20000000)
{
thuong = 5*doanhso/100;
cout<<"Nhan vien duoc thuong "<}
getch();
}
1.2. Bài toán 2
Nhập vào 2 số nguyên a, b, kiểm tra xem số a có chia hết cho số b hay không.
Phương pháp: Sử dụng cấu trúc if…else… lồng nhau.
Chương trình
#include <iostream.h>
#include <conio.h>
void main()
{
int a, b, r;

cout<<"Nhap 2 so nguyen a, b: "; cin>>a>>b;
r = a%b;
if (r==0)
cout<else
cout<getch();
}
1.3. Bài toán 3
Giải phương trình bậc 2 ax2+bx+c=0 (a0), với các hệ số a, b, c nhập vào từ bàn phím.
Phương pháp: Sử dụng cấu trúc if...else… và if..else… lồng nhau.
Chương trình
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
float a,b,c,delta,x1,x2;
cout<<"Nhap he so a: "; cin>>a;
cout<<"Nhap he so b: "; cin>>b;
cout<<"Nhap he so c: "; cin>>c;


if (a!=0)
{
delta=b*b-4*a*c;
if (delta>0)
{
x1=(-b+sqrt(delta))/2/a;
x2=(-b-sqrt(delta))/2/a;

cout<<"PT co hai nghiem phan biet\n";
cout<<"x1="<}
else if (delta==0)
{
x1=x2=-b/2/a;
cout<<"PT co nghiem kep x1=x2="<}
else
cout<<"Phuong trinh vo nghiem";
}
else
cout<<"Khong thoa phuong trinh bac hai";
getch();
}
1.4. Bài toán 4
Nhập vào một tháng dương lịch trong một năm, in ra màn hình số ngày trong tháng đó.
Phương pháp: Sử dụng cấu trúc switch…
Chương trình
#include <iostream.h>
#include <conio.h>
void main()
{
int thang, nam;
cout<<"Nhap vao nam: "; cin>>nam;
cout<<"Nhap vao thang trong nam: "; cin>>thang;
switch(thang)
{
case 1:
case 3:

case 5:
case 7:
case 8:
case 10:
case 12:
cout<<"Thang "<break;
case 4:
case 6:
case 9:
case 11:
cout<<"Thang "<break;
case 2:
if (nam%4==0)
cout<<"Thang 2 co 29 ngay";


else
cout<<"Thang 2 co 28 ngay";
break;
default:
cout<<"Khong phai thang trong nam";
}
getch();
}
2. Bài tập tự làm
1. Viết chương trình nhập vào 2 số nguyên m và n. Kiểm tra xem m có phải là ước của n hay
không?
2. Viết chương trình giải và biện luận phương trình bậc nhất theo hai hệ số a, b nhập từ bàn

phím.
3. Viết chương trình giải và biện luận phương trình bậc hai với các hệ số a, b, c nhập từ bàn
phím.
4. Viết chương trình nhập vào số tiền phải trả của khách hàng. In ra số tiền khuyến mãi với quy
định: nếu số tiền phải trả thuộc [200.000, 300.000) thì khuyến mãi 20%. Nếu số tiền phải trả
từ 300.000 trở lên thì khuyến mãi 30%. Còn lại thì không khuyến mãi.
5. Viết chương trình nhập vào điểm số (d) của một sinh viên tính và in ra điểm chữ (c) của sinh
viên đó với quy định:
- Nếu d8.5 thì c=’A’.
- Nếu 7.0d<8.5 thì c=’B’.
- Nếu 5.5d<7.0 thì c=’C’.
- Nếu 4.0d<5.5 thì c=’D’.
- Còn lại c=’F’.
Lưu ý: Điểm số phải được làm tròn đến 1 chữ số thập phân trước khi tính điểm chữ, chẳng hạn
người dùng nhập 5.46 thì phải làm tròn thành 5.5.
6. Viết chương trình cho phép người sử dụng lựa chọn 1 trong số các yêu cầu sau để thực hiện:
- Chọn 1 để tính chu vi và diện tích hình chữ nhật.
- Chọn 2 để tính chu vi và diện tích tam giác.
- Chọn 3 để tính diện tích hình thang.
- Chọn 4 để tính chu vi và diện tích hình tròn.
- Chọn 5 để thoát khỏi chương trình.
- Lưu ý: gọi hàm exit(1) – thư viện stdlib.h để thoát khỏi chương trình.
7. Viết chương trình nhập vào một tháng dương lịch bất kỳ, sau đó in ra số ngày có trong tháng
(quy định tháng 2 có 28 ngày).


BÀI 3: CẤU TRÚC LẶP
- Cấu trúc for…
- Cấu trúc while…
- Cấu trúc do…while…

1. Bài tập hướng dẫn
1.1. Bài toán 1
Viết chương trình in ra màn hình bảng cửu chương (từ bảng 2 đến bảng 9).
Phương pháp: Sử dụng cấu trúc for… lồng nhau.
Chương trình
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
void main()
{
int j,i;
cout<<"Bang cuu chuong 2-10\n";
for (i=1; i<=10; i++)
{
for (j=2; j<=10; j++)
{
cout<cout<<"="<}
cout<}
getch();
}
1.2. Bài toán 2
Chương trình kiểm tra một số nguyên nhập vào có là số nguyên tố hay không?
Phương pháp:
Số nguyên tố là một số nguyên dương lớn 1, chỉ có 2 ước là 1 và chính nó.
Để kiểm tra một số n có là số nguyên tố hay không làm theo 1 trong 2 cách:
Cách 1: Đếm xem trong số các số từ 2 đến [] có bao nhiêu số là ước của n. Nếu không có
ước nào thì n là số nguyên tố.

Cách 2: Kiểm tra xem trong số các số từ 2 đến [] có ước nào của n không.
Chương trình
a. Cách 1: Sử dụng cấu trúc lặp for…
#include<conio.h>
#include<iostream.h>
#include<math.h>
void main()
{
int i,dem;
long n;
do{
cout<<"Nhap so nguyen duong n>1: ";
cin>>n;
}while (n<=1);
dem=0;
int m=(int)sqrt(n);
for (i=2; i<=m; i++)
if (n%i==0)
dem++;


if (dem==0)
cout<else
cout<getch();
}
b. Cách 2: Sử dụng cấu trúc lặp while.
#include<conio.h>
#include<iostream.h>

#include<math.h>
void main()
{
int i;
long n;
bool stop;
do{
cout<<"Nhap so nguyen duong n>1: ";
cin>>n;
}while (n<=1);
stop=true;
int m=(int)sqrt(n);
i=2;
while (i<=m && stop==true)
{
if (n%i==0)
stop=false;
i++;
}
if (stop==true)
cout<else
cout<getch();
}
So sánh việc sử dụng for và while
Với bài toán này việc sử dụng while chương trình sẽ chạy nhanh hơn khi số n nhập vào là
hợp số. Chẳng hạn với n=10000.
Vòng lặp while sẽ dừng lại ngay sau lần lặp đầu tiên vì 10000%2=0 nên stop=false.
Vòng lặp for vẫn thực hiện đủ 100 lần để đếm ước.

1.3. Bài toán 3
Chương trình tính tiền điện tiêu thụ của các hộ gia đình trong một tháng. Với công thức tính
tiền như sau:
- Từ kwh thứ nhất đến kwh thứ 100 là 1000 đồng/1kwh
- Từ kwh thứ 101 đến kwh thứ 200 là 1500 đồng/1kwh.
- Từ kwh thứ 201 trở đi là 3000 đồng/1kwh.
Chương trình cho phép người dùng lặp lại công việc nhiều lần dựa vào một câu trả lời.
Phương pháp: Sử dụng cấu trúc lặp do…while…
Chương trình
#include<conio.h>
#include<iostream.h>
#include<ctype.h>
void main()
{


int chisodau, chisocuoi, sokwh;
long tientra;
char traloi;
do{
cout<<"\nNhap chi so dien dau thang: ";
cin>>chisodau;
cout<<"Nhap chi so dien cuoi thang: ";
cin>>chisocuoi;
if (chisocuoi>chisodau && chisodau>=0)
{
sokwh=chisocuoi-chisodau;
if (sokwh<=100)
tientra=sokwh*1000L; //hang kieu long
else if (sokwh<=200)

tientra=100*1000L + (sokwh-100)*1500L;
else
tientra=100*1000L+100*1500L+
(sokwh-200)*3000L;
cout<<"So tien phai tra: "<}
else
cout<<"Du lieu khong hop le";
cout<<"\nBan co tiep tuc voi gia dinh khac khong?(C/K):";
traloi=getche();
}while (toupper(traloi)=='C');
getch();
}
2. Bài tập tự làm
1. Viết chương trình tính n!
2. Nhập vào một số nguyên, kiểm tra xem một số vừa nhập có phải là số nguyên tố không, in
kết luận ra màn hình.
3. Viết chương trình nhập vào một số nguyên n, sau đó tính giá trị biểu thức:
S=
4. Viết chương trình nhập vào một số nguyên n, sau đó tính giá trị biểu thức:
F=
5. Viết chương trình nhập vào một số thực x và số nguyên n, sau đó tính giá trị biểu thức:
S=
6. Viết chương trình nhập vào một số nguyên n trong khoảng [10, 20] (nếu số nhập vào không
thuộc khoảng đó thì yêu cầu nhập lại tới khi thoả mãn). Sau đó tính tổng các số liên tiếp từ 1
tới n.
7. Viết chương trình nhập vào một số nguyên dương n, sau đó tính tổng các giá trị chẵn, lẻ
thuộc đoạn [1, n].
8. Viết chương trình nhập vào các số nguyên dương n, m, sau đó in ra:
- Tổng các số chẵn dương trong khoảng [- n, m].

- Tổng các số chẵn âm trong khoảng [- n, m].
- Tổng các số lẻ dương trong khoảng [- n, m].
- Tổng các số lẻ âm trong khoảng [- n, m].
9. Viết chương trình nhập vào một số nguyên dương n, sau đó tính tổng các số nguyên tố thuộc
đoạn [2..n]. Cho biết có bao nhiêu số nguyên tố thuộc đoạn đó.
10. Viết chương trình nhập vào số nguyên dương n, phân tích số n thành các thừa số nguyên tố
nếu n không phải là số nguyên tố. In kết quả ra màn hình. (Ví dụ: 18=2x3x3).


11. Dùng while (sau đó viết lại, dùng do/ while) để viết chương trình tìm và in ra số a nhỏ nhất
sao cho a2 > 1000.
12. Viết chương trình tìm số nguyên dương n nhỏ nhất thoả mãn: 1 + 2 + 3 + … + n > 1000.
13. Để tính căn bậc hai của một số dương a, ta sử dụng công thức lặp sau:
x(0) = a;
x(n+1) = [x(n) * x(n) + a]/[2* x(n)] với n >0.
Quá trình lặp kết thúc khi |(x(n+1) – x(n))/x(n)| < .
và khi đó x(n+1) được xem là giá trị gần đúng của .
Viết chương trình nhập số thực dương a, tính căn bậc hai của a với độ chính xác  =
0.00001.
14. Viết chương trình tính gần đúng sin(x) với độ chính xác  = 0.00001 theo công thức :
sin(x) = x – x3/3! + x5/ 5! + …+ (-1)nx(2n+1)/ (2n+1)!
15. Viết chương trình tính gần đúng cos(x) với độ chính xác  = 0.00001 theo công thức :
cos(x) = 1 – x2/2! + x4/ 4! - …+ (-1)nx2n/ (2n)!
16. Viết chương trình tính gần đúng ex với độ chính xác  = 0.00001 theo công thức :
ex = 1+x/1! + x2/2! + x3/3! + …+ xn/n!
17. Lập trình để tính tổ hợp chập m của n theo công thức:
C(m, n) = (n(n-1)…(n-m+1))/ m!.


BÀI 4: HÀM

- Cấu trúc của một hàm
- Định nghĩa hàm trong chương trình
- Các bước xây dựng một hàm
- Sử dụng hàm trong chương trình
- Truyền tham số: truyền tham trị, truyền tham chiếu.
1. Bài tập hướng dẫn
1.1. Bài toán 1
Viết chương trình nhập vào 3 số a, b, c là độ dài 3 cạnh của một tam giác, tính và in ra màn
hình chu vi và diện tích tam giác nếu a, b, c thỏa mãn là 3 cạnh của tam giác.
Bố cục chương trình:
- Hàm kiểm tra 3 số thỏa mãn là 3 cạnh tam giác.
- Hàm tính chu vi tam giác.
- Hàm tính diện tích tam giác.
- Hàm main()
Chương trình:
#include<conio.h>
#include<math.h>
#include<iostream.h>
bool latamgiac(float a, float b, float c);
float chuvi(float a, float b, float c);
float dientich(float a, float b, float c);
void main()
{
float a,b,c;
cout<<"Nhap do dai 3 canh tam giac: ";
cin>>a>>b>>c;
if (latamgiac(a,b,c))
{
float cv=chuvi(a,b,c);
float s=dientich(a,b,c);

cout<<"Chu vi tam giac la "<cout<<"Dien tich tam giac la "<}
else
cout<<"3 so khong thoa man 3 canh tam giac";
getch();
}
bool latamgiac(float a, float b, float c)
{
if (a>0&&b>0&&c>0&&a+b>c&&b+c>a&&c+a>b)
return true;
else
return false;
}
float chuvi(float a, float b, float c)
{
return a+b+c;
}
float dientich(float a, float b, float c)
{
float p=chuvi(a,b,c)/2;


return sqrt(p*(p-a)*(p-b)*(p-c));
}
1.2. Bài toán 2
Viết chương trình nhập vào số nguyên dương k<100, in ra màn hình k số nguyên tố đầu tiên,
và tổng của chúng.
Bố cục chương trình
- Hàm nhập số nguyên dương.

- Hàm kiểm tra một số nguyên dương là số nguyên tố hay không.
- Hàm in ra màn hình dãy k số nguyên tố và trả về tổng của k số nguyên tố.
- Hàm main().
Chương trình
#include<conio.h>
#include<math.h>
#include<iostream.h>
int nhap();
bool languyento(int n);
long daynguyento(int k);
void main()
{
int k=nhap();
long t=daynguyento(k);
cout<<"Tong "<getch();
}
int nhap()
{
int a;
do{
cout<<"Nhap so nguyen duong k: ";
cin>>a;
}while (a<1);
return a;
}
bool languyento(int n)
{
int i=2;
bool kt=true;

int m=(int)sqrt(n);
while (i<=m && kt==true)
{
if (n%i==0)
kt=false;
i++;
}
return kt;
}
long daynguyento(int k)
{
int i=2, dem=0;
long t=0;
cout<<"Day "<while (dem

{
if (languyento(i))
{
cout<dem++;
t = t+i;
}
i++;
}
cout<return t;
}
1.3. Bài toán 3

Viết chương trình nhập vào số nguyên dương n, tính và in ra màn hình tổng của các số chẵn
và tổng của các số lẻ trong đoạn [1,n].
Bố cục chương trình
- Hàm nhập số nguyên dương.
- Hàm tính tổng các số chẵn và tổng các số lẻ.
- Hàm main().
Lưu ý: Cách sử dụng hàm truyền tham chiếu.
#include<conio.h>
#include<math.h>
#include<iostream.h>
int nhap();
void tong(int n, int &t1, int &t2);
void main()
{
int n=nhap();
int tc, tl;
tong(n,tc,tl);
cout<<"Tong cac so chan la "<cout<<"Tong cac so le la "<getch();
}
int nhap()
{
int a;
do{
cout<<"Nhap so nguyen duong k: ";
cin>>a;
}while (a<1);
return a;
}

void tong(int n, int &t1, int &t2)
{
t1=t2=0;
for (int i=1; i<=n; i++)
if (i%2==0)
t1 += i;
else
t2 += i;
}
2. Bài tập tự làm


1. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào một số nguyên dương, nếu không thỏa mãn yêu cầu nhập lại.
- Hàm tính k! với k nguyên dương bất kỳ.
- Hàm tính tổ hợp chập k của n theo công thức: (sử dụng hàm tính k!)
- Hàm main() sử dụng các hàm trên để nhập vào 2 số nguyên dương n và k, tính và in ra
màn hình tổ hợp chập k của n.
2. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vàosố thực x và số thực <=0.001, nếu  không thỏa mãn yêu cầu nhập lại.
- Hàm tính k! với k nguyên dương bất kỳ.
- Hàm tính xn với x thực và n nguyên dương bất kỳ.
- Hàm tính gần đúng ex với sai số  bất kỳ theo công thức
- Hàm main() sử dụng các hàm trên để nhập vào số thực x và số thực , tính và in ra màn
hình ex với sai số .
- Chương trình cho phép tính toán với nhiều giá trị x và  khác nhau theo yêu cầu của
người dùng.
3. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào 2 số nguyên dương a và b, nếu a, b không thỏa mãn yêu cầu nhập lại.
- Hàm tìm ước số chung lớn nhất của nguyên dương bất kỳ theo thuật toán sau:

Bước 1: Nếu aBước 2: Tính r=a%b.
Bước 3: Kiểm tra r!=0.
Nếu là true sang bước 4.
Nếu là false sang bước 5.
Bước 4:
a=b;
b=r;
r=a%b;
Quay lại bước 3.
Bước 5: Trả về b là ước chung lớn nhất, kết thúc.
- Hàm main() sử dụng các hàm trên nhập vào 2 số nguyên dương a, b tìm và in ra màn
hình ước chung lớn nhất của a và b.
4. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào 2 số nguyên dương n, nếu n không thỏa mãn yêu cầu nhập lại.
- Hàm tìm in ra màn hình số các chữ số của số nguyên dương n bất kỳ theo một trong hai
cách:
Cách 1: Dùng kỹ thuật lặp.
Cách 2: Dùng kỹ thuật đệ quy.
- Hàm main() sử dụng các hàm trên nhập vào số nguyên dương n, tìm và in ra màn hình số
chữ số của n.
5. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào chỉ số điện đầu tháng (dt) và cuối tháng (ct) của một hộ gia đình thỏa
mãn 0- Hàm tính tiền điện của hộ gia đình theo đơn giá như sau:
100 kwh đầu tiên 1000 đồng/1kwh.
100 kwh tiếp theo 1700 đồng/1kwh.
Còn lại là 3500 đồng/1kwh.
- Hàm main() nhập vào chỉ số điện đầu tháng và cuối tháng của một hộ gia đình, và in ra
màn hình số kwh điện tiêu thụ và tiền phải trả của gia đình.

- Chương trình cho phép người sử dụng tính toán với nhiều hộ gia đình theo ý muốn.
6. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:


- Hàm nhập vào số nguyên dương n>1, nếu không thỏa mãn yêu cầu nhập lại.
- Hàm tính số Fibonaci thứ n (n>1) theo định nghĩa:
bằng một trong 2 cách:
Cách 1: Sử dụng kỹ thuật lặp.
Cách 2: Sử dụng kỹ thuật đệ quy.
- Hàm in ra màn hình dãy k số Fibonaci đầu tiên, k nguyên dương bất kỳ.
- Hàm main() sử dụng các hàm trên nhập vào số nguyên dương n>1, tìm và in ra màn hình
dãy n số Fibonaci đầu tiên.
7. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào bán kính của một hình tròn là một số thực dương, nếu không thỏa mãn
yêu cầu nhập lại.
- Hàm tính chu vi và diện tích hình tròn (gợi ý: sử dụng cách truyền tham chiếu).
- Hàm main() sử dụng các hàm trên nhập vào bán kính của một hình tròn, tính và in ra
màn hình chu vi và diện tích hình tròn.
- Chương trình cho phép người dùng tính toán với nhiều hình tròn theo ý muốn.
8. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm nhập vào một số nguyên dương n>10, nếu không thỏa mãn yêu cầu nhập lại.
- Hàm phân tích số nguyên dương n bất kỳ thành các thừa số nguyên tố.
- Hàm main() sử dụng các hàm trên nhập vào số nguyên dương n>10, phân tích n thành
các thừa số nguyên tố, in kết quả ra màn hình.
9. Viết chương trình gồm các hàm thực hiện các yêu cầu sau:
- Hàm hàm kiểm tra một ký tự là chữ cái in hay chữ cái thường trong bảng chữ cái latin
hay không phải là chữ cái.
- Hàm chuyển một chữ cái in thành một chữ cái thường.
- Hàm chuyển một chữ cái thường thành một chữ cái in.
- Hàm main() nhập vào một ký tự, sử dụng các hàm trên cho biết ký tự đó là chữ cái in hay

chữ cái thường, hay không phải chữ cái. Nếu là chữ cái in thì đổi thành chữ cái thường
và ngược lại, in kết quả ra màn hình.
10. Một người đưa thư cần giao n bức thư đến các gia đình, biết mỗi ngày người đưa thư giao hết
một nửa số bức thư mà mình đang giữ. Hãy viết chương trình cho biết phải mất bao nhiêu
ngày người đưa thư giao hết n bức thư bằng một trong hai cách.
Cách 1: Sử dụng kỹ thuật lặp.
Cách 2: Sử dụng kỹ thuật đệ quy.
11. Viết chương trình in ra màn hình mã nhị phân của một số nguyên dương n bằng một trong hai
cách.
Cách 1: Sử dụng kỹ thuật lặp.
Cách 2: Sử dụng kỹ thuật đệ quy.


BÀI 5: MẢNG 1 CHIỀU
- Khai báo mảng
- Nhập xuất mảng
- Các thao tác xử lý mảng
1.1. Bài toán 1: Nhập xuất mảng
Viết chương trình thực hiện các yêu cầu sau.
- Nhập số nguyên dương n thỏa mãn 1≤n≤20.
- Nhập mảng có n số thực.
- Hiển thị mảng vừa nhập ra màn hình.
- Tìm và hiển thị ra màn hình số có giá trị tuyệt đối lớn nhất trong mảng.
Chương trình
#include <iostream.h>
#include <conio.h>
#include <math.h>
void nhapmang(float a[20], int n)
{
for (int i=0; i

{
cout<<"a["<cin>>a[i];
}
}
void hienmang(float a[20], int n)
{
for (int i=0; icout<cout<}
float maxabs(float a[20], int n)
{
float m=a[0];
for (int i=1; iif (fabs(m)m=a[i];
return m;
}
void main()
{
float a[20],max;
int n;
do{
cout<<"Nhap so phan tu (1<=n<=20): ";
cin>>n;
}while(n<1||n>20);
cout<<"Nhap mang "<nhapmang(a,n);
cout<<"Mang vua nhap: ";

hienmang(a,n);
max=maxabs(a,n);
cout<<"So co tri tuyet doi lon nhat la "<getch();
}
1.2. Bài toán 2: Tính toán và thống kê


Viết chương trình thực hiện các yêu cầu sau.
- Nhập số nguyên dương n thỏa mãn 1≤n≤20.
- Nhập mảng có n số thực.
- Hiển thị mảng vừa nhập ra màn hình.
- Thống kê và hiển thị ra màn hình các số có giá trị âm trong mảng và giá trị trung bình
cộng của các số đó.
Chương trình
#include <iostream.h>
#include <conio.h>
void nhapmang(float a[20], int n)
{
for (int i=0; i{
cout<<"a["<cin>>a[i];
}
}
void hienmang(float a[20], int n)
{
for (int i=0; icout<cout<

}
void thongke(float a[20], int n)
{
float t=0;
int dem=0;
cout<<"Cac so am trong mang: ";
for (int i=0; iif (a[i]<0)
{
cout<t +=a[i];
dem++;
}
if (dem==0)
cout<<"Khong co so am";
else{
float tb=t/dem;
cout<<"\nTBC cac so am la "<}
}
void main()
{
float a[20],max;
int n;
do{
cout<<"Nhap so phan tu (1<=n<=20): ";
cin>>n;
}while(n<1||n>20);
cout<<"Nhap mang "<nhapmang(a,n);

cout<<"Mang vua nhap: ";


hienmang(a,n);
thongke(a,n);
getch();
}
1.3. Bài toán 3: Chèn dữ liệu vào mảng
Viết chương trình thực hiện các yêu cầu sau.
- Nhập số nguyên dương n thỏa mãn 1≤n≤20.
- Nhập mảng có n số thực.
- Hiển thị mảng vừa nhập ra màn hình.
- Nhập vào số thực x và số nguyên k thỏa mãn 1≤k. Chèn số thực x vào vị trí thứ k trong
mảng nếu k≤n, ngược lại chèn x vào vị trí thứ n+1.
Chương trình
#include <iostream.h>
#include <conio.h>
void nhapmang(float a[20], int n)
{
for (int i=0; i{
cout<<"a["<cin>>a[i];
}
}
void hienmang(float a[20], int n)
{
for (int i=0; icout<cout<

}
void chen(float a[20], int &n)
{
float x;
int k;
cout<<"Nhap so can chen x="; cin>>x;
do{
cout<<"Nhap vi tri chen k>=1: ";
cin>>k;
}while(k<1);
if (k>n)
a[n]=x;
else{
for (int i=n-1; i>=k; i--)
a[i]=a[i-1];
a[k-1]=x;
}
n++;
cout<<"Mang sau khi chen: ";
hienmang(a,n);
}
void main()
{
float a[20];
int n;
do{


cout<<"Nhap so phan tu (1<=n<=20): ";
cin>>n;

}while(n<1||n>20);
cout<<"Nhap mang "<nhapmang(a,n);
cout<<"Mang vua nhap: ";
hienmang(a,n);
chen(a,n);
getch();
}
2. Bài tập tự làm
1. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Tạo một mảng a có n số nguyên sao cho a[0]=1, a[1]=1, a[i]=a[i-1]+a[i-2] khi i≥2.
- Hiển thị mảng a ra màn hình.
- Tính và hiển thị ra màn hình tổng tất cả các phần tử dữ liệu của mảng a.
2. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số nguyên.
- Chỉ bằng một lần duyệt mảng hãy cho biết mảng a thỏa mãn tính chất nào dưới đây:
o Mảng tăng thực sự (a[i]o Mảng tăng dần (a[i]≤a[i+1], 0≤i≤n-2).
o Mảng giảm thực sự (a[i]>a[i+1], 0≤i≤n-2).
o Mảng giảm dần (a[i]≥a[i+1], 0≤i≤n-2).
o Mảng không có trật tự nào.
3. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số nguyên.
- Hiển thị ra màn hình các số chẵn chia hết cho 3 và vị trí của chúng.
- Sắp xếp mảng a sao cho các số chẵn ở đầu mảng theo thứ tự giảm dần, các số lẻ ở cuối
mảng theo thứ tự giảm dần.
- Hiển thị mảng sau khi sắp xếp.

4. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số thực.
- Tìm và in ra màn hình các số âm có trị tuyệt đối lớn hơn 5 và giá trị trung bình cộng của
chúng.
- Nhập số nguyên k bất kỳ, xóa phần tử thứ k trong mảng a nếu k thỏa mãn, hiển thị lại
mảng sau khi xóa, hoặc thông báo k không thỏa mãn.
5. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số thực.
- Hiển thị mảng a theo chiều ngược lại với thứ tự nhập.
- Sắp xếp mảng a theo thứ tự giảm dần, hiển thị mảng sau khi sắp xếp.
- Nhập số thực x, chèn x vào mảng a sao cho trật tự của mảng a không bị thay đổi.
6. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập hai mảng a và b đều có n số thực.
- Tạo mảng c từ hai mảng a và b sao cho trong mảng c không tồn tại các phần tử có giá trị
bằng nhau.


- Hiển thị mảng c ra màn hình.
7. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số thực.
- Tách mảng a thành 2 mảng b và c sao cho mảng b gồm các phần tử dương, mảng c gồm
các phần tử âm.
- Hiển thị hai mảng b và c ra màn hình.
8. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số nguyên.

- Hiển thị ra màn hình các phần tử mảng là số nguyên tố, số phần tử và tổng của chúng.
9. Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤30.
- Nhập một mảng có n số nguyên.
- Tạo ra mảng b chứa các phần tử của mảng a theo chiều ngược lại, hiển thị mảng b.
10. Viết chương trình thực hiện các yêu cầu sau:
- Nhập một mảng a chứa các số nguyên, việc nhập kết thúc khi gặp giá trị nhập vào là -1 (-1
không là giá trị phần tử mảng) hoặc đã nhập được 100 phần tử.
- Cho biết đã có bao nhiêu phần tử dữ liệu được nhập.
- Hiển thị mảng a sau khi nhập.
- Sắp xếp mảng a theo chiều giảm dần, hiển thị mảng sau khi sắp xếp.
11. Viết chương trình thực hiện các yêu cầu sau:
- Nhập một mảng a chứa các số thực, việc nhập kết thúc khi gặp giá trị nhập vào là -1 (-1
không là giá trị phần tử mảng) hoặc đã nhập được 100 phần tử.
- Cho biết đã có bao nhiêu phần tử dữ liệu được nhập.
- Hiển thị mảng a sau khi nhập.
- Nhập vào số thực x, cho biết x xuất hiện bao nhiêu lần trong mảng a và các vị trí xuất hiện
x trong mảng a.


BÀI 6: MẢNG 2 CHIỀU
1.1. Bài tập hướng dẫn
1.1. Bài toán 1: Quản lý thành tích của các vận động viên cử tạ
Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương m là số lượng vận động viên tham gia thi đấu môn cử tạ
(1≤m≤10).
- Nhập số nguyên dương n là số lần cử tạ của mỗi vận động viên (1≤n<=5).
- Nhập bảng thành tích cử tạ của các vận động viên (tính bằng kg).
- Hiển thị bảng thành tích.
- Cho biết thành tích cử tạ cao nhất là bao nhiêu kg.

- Cho biết vận động viên nào có tổng thành tích cử tạ cao nhất và thành tích đó là bao
nhiêu kg.
Chương trình
#include <iostream.h>
#include <conio.h>
#define M 10
#define N 5
void nhapbang(int b[M][N], int m, int n)
{
for (int i=0; i{
cout<<"Thanh tich cua VDV thu "<<(i+1)<for (int j=0; j{
cout<<"\tLan "<<(j+1)<<": ";
cin>>b[i][j];
}
}
}
void hienbang(int b[M][N], int m, int n)
{
int i,j;
cout<<"\t";
for (i=1; i<=n; i++)
cout<<"Lan "<cout<for (i=0; i{
cout<<"VDV "<<(i+1)<<"\t";
for (j=0; j

cout<cout<}
}
int max_tt(int b[M][N], int m, int n)
{
int mt=b[0][0];
for (int i=0; ifor (int j=0; jif (mtmt=b[i][j];
return mt;


}
void max_vdv(int b[M][N], int m, int n)
{
int mv=0, tmax=0;
for (int i=0; i{
int t=0;
for (int j=0; jt += b[i][j];
if (tmax{
tmax=t;
mv=i;
}
}
cout<<"VDV thu "<<(mv+1);

cout<<" co tong thanh tich cu ta ";
cout<<"cao nhat la "<}
void main()
{
int b[M][N], m,n;
do{
cout<<"Cho biet so VDV (1<=m<=10): ";
cin>>m;
}while (m<1||m>10);
do{
cout<<"Cho biet so lan cu ta (1<=n<=5): ";
cin>>n;
}while (n<1||n>10);
nhapbang(b,m,n);
cout<<"Bang thanh tich\n";
hienbang(b,m,n);
cout<<"Thanh tich cao nhat la ";
cout<max_vdv(b,m,n);
getch();
}
1.2. Bài toán 2: Xử lý ma trận
Viết chương trình thực hiện các yêu cầu sau:
- Nhập số nguyên dương n thỏa mãn 1≤n≤10.
- Nhập ma trận vuông cấp n với các phần tử là số thực.
- Hiển thị ma trận ra màn hình.
- Tính và hiển thị ra màn hình tổng các phần tử trên đường chéo chính của ma trận.
- Tính và hiển thị ra màn hình tổng của các phần tử trên dòng có chỉ số chẵn, trên cột có
chỉ số lẻ của ma trận.

Chương trình
#include <iostream.h>
#include <conio.h>
#define N 10
void nhapmatran(float M[N][N], int n)
{
for (int i=0; i

for (int j=0; j{
cout<<"M["<cin>>M[i][j];
}
}
void hienmatran(float M[N][N], int n)
{
int i,j;
for (i=0; i{
for (j=0; jcout<cout<}
}
float tong_cc(float M[N][N], int n)
{
float t=0;
for (int i=0; it += M[i][i];

return t;
}
float tong_dc(float M[N][N], int n)
{
float t=0;
for (int i=0; ifor (int j=0; jif (i%2==0 && j%2!=0)
t += M[i][j];
return t;
}
void main()
{
float M[N][N];
int n;
do{
cout<<"Nhap cap cua ma tran (1<=n<=10): ";
cin>>n;
}while (n<1||n>10);
cout<<"Nhap ma tran vuong cap "<nhapmatran(M,n);
cout<<"Ma tran vua nhap\n";
hienmatran(M,n);
cout<<"Tong cac phan tu tren DCC la ";
cout<cout<<"Tong cac PT tren dong chan cot le la ";
cout<getch();
}
2. Bài tập tự làm

1. Viết chương trình thực hiện các yêu cầu sau:
- Nhập vào số dòng m (3≤m≤15) và số cột n (1≤n≤15) của một ma trận.