Bài tập Lập trình C++ - Lương Trần Hy Hiến
Bài tập C++
Lưu hành nội bộ
MỤC LỤC
CHƯƠNG 1.
Bài tập mở đầu............................................................................................................. 3
Bài tập 1:.......................................................................................................................................... 3
Bài tập 2:.......................................................................................................................................... 3
Bài tập 3:.......................................................................................................................................... 3
Bài tập 4:.......................................................................................................................................... 3
Bài tập 5:.......................................................................................................................................... 4
Bài tập 6:.......................................................................................................................................... 4
Bài tập 7:.......................................................................................................................................... 4
Bài tập 8:.......................................................................................................................................... 4
Bài tập 9:.......................................................................................................................................... 4
Bài tập 10:........................................................................................................................................ 5
Bài tập 11:........................................................................................................................................ 5
Bài tập 12:........................................................................................................................................ 5
CHƯƠNG 2.
Cấu trúc điều khiển – Cấu trúc lặp .............................................................................. 5
2.1. Bài tập liên quan đến cấu trúc điều khiển:............................................................................... 5
Bài tập 13:........................................................................................................................................ 5
Bài tập 14:........................................................................................................................................ 5
Bài tập 15:
(*):............................................................................................................................ 5
Bài tập 16:........................................................................................................................................ 6
Bài tập 17:
Bài tập 18:
(*):............................................................................................................................. 6
(*):............................................................................................................................ 6
Bài tập 19:........................................................................................................................................ 6
Bài tập 20:........................................................................................................................................ 6
Bài tập 21:........................................................................................................................................ 7
Bài tập 22:........................................................................................................................................ 7
Bài tập 23:........................................................................................................................................ 7
Bài tập 24:........................................................................................................................................ 7
Bài tập 25:........................................................................................................................................ 7
Bài tập 26:........................................................................................................................................ 7
Bài tập 27:........................................................................................................................................ 7
Bài tập 28:........................................................................................................................................ 7
2.2. Bài tập liên quan đến cấu trúc lặp:........................................................................................... 8
Bài tập 29:........................................................................................................................................ 8
Bài tập 30:........................................................................................................................................ 8
Bài tập 31:........................................................................................................................................ 8
Bài tập 32:........................................................................................................................................ 8
Bài tập 33:........................................................................................................................................ 9
Bài tập 34:........................................................................................................................................ 9
Bài tập 35:........................................................................................................................................ 9
Bài tập 36:........................................................................................................................................ 9
Bài tập 37:........................................................................................................................................ 9
Bài tập 38:........................................................................................................................................ 9
Bài tập 39:........................................................................................................................................ 9
Bài tập 40:...................................................................................................................................... 10
Bài tập 41:
Bài tập 42:
Bài tập 43:
Bài tập 44:
(*)........................................................................................................................... 10
** ............................................................................Error! Bookmark not defined.
*** ..........................................................................Error! Bookmark not defined.
**** ........................................................................Error! Bookmark not defined.
CHƯƠNG 3.
Hàm............................................................................................................................ 10
Bài tập 45:...................................................................................................................................... 10
Bài tập 46:...................................................................................................................................... 11
Bài tập 47:...................................................................................................................................... 11
Bài tập 48:...................................................................................................................................... 11
Bài tập 49:...................................................................................................................................... 11
Bài tập 50:...................................................................................................................................... 12
Bài tập 51:...................................................................................................................................... 12
Bài tập 52:...................................................................................................................................... 12
CHƯƠNG 4.
Mảng.......................................................................................................................... 12
4.1. Mảng 1 chiều ......................................................................................................................... 12
Bài tập 53:...................................................................................................................................... 12
Bài tập 54:...................................................................................................................................... 13
4.2. Mảng 2 chiều ......................................................................................................................... 13
Bài tập 55:...................................................................................................................................... 13
CHƯƠNG 5.
Kiểu dữ liệu có cấu trúc............................................................................................. 14
Bài tập 56:...................................................................................................................................... 14
Bài tập 57:...................................................................................................................................... 14
Bài tập 58:...................................................................................................................................... 14
Bài tập 59:...................................................................................................................................... 14
Bài tập 60:...................................................................................................................................... 14
Bài tập 61:...................................................................................................................................... 14
Bài tập 62:
CHƯƠNG 6.
(*)............................................................................Error! Bookmark not defined.
Các kỹ thuật nâng cao................................................................................................ 15
6.1. Con trỏ ................................................................................................................................... 15
Bài tập 63:...................................................................................................................................... 15
Bài tập 64:...................................................................................................................................... 15
6.2. Kỹ thuật đệ quy...................................................................................................................... 15
Bài tập 65:...................................................................................................................................... 15
Bài tập 66:...................................................................................................................................... 15
Bài tập 67:...................................................................................................................................... 15
Bài tập 68:...................................................................................................................................... 15
Bài tập 69:...................................................................................................................................... 15
6.3. Làm việc với tập tin............................................................................................................... 16
Bài tập 70:...................................................................................................................................... 16
Bài tập 71:...................................................................................................................................... 16
Bài tập 72:...................................................................................................................................... 16
Bài tập 73:...................................................................................................................................... 16
CHƯƠNG 7.
Bài tập Project............................................................................................................ 16
7.1. Chương trình dò từ điển......................................................................................................... 16
Mô tả:............................................................................................................................................. 16
Hướng dẫn: .................................................................................................................................... 17
GỢI Ý TỪ ĐIỂN ........................................................................................................................... 17
7.2. Chương trình sắp xếp dòng.................................................................................................... 18
Mô tả:............................................................................................................................................. 18
Bài tập lập trình C++
2/18
GV: Lương Trần Hy Hiến
CHƯƠNG 1. Bài tập mở đầu
Bài tập 1:
Viết chương trình hiện ra màn hình dòng chữ: “CHAO MUNG CAC BAN DEN VOI
MON HOC C++”.
HD:
#include <iostream>
using namespace std;
int main()
{
cout<<” CHAO MUNG CAC BAN DEN VOI MON HOC C++”;
return 0 ;
}
Bài tập 2:
Viết chương trình xuất ra màn hình hình vuông đặc kí tự ‘*’ có cạnh bằng a (với a nhập từ
bàn phím).
HD:
// chuong trinh ve chu nhat dac
#include<iostream>
using namespace std;
int main()
{
int a, i, j;
cout<<”Ban hay nhap do dai canh: “;
cin>>a;
for (i = 1; i<= a; i++)
{
for (j =1; j<= a; j++)
cout<<”* “; //luu y,co mot khoang trong o day
cout<<”\n”;
}
return 0 ;
}
Bài tập 3:
• Viết chương trình nhập vào bán kính của hình tròn; xuất ra diện tích và chu vi của
hình tròn đó.
• Diện tích của hình tròn biết trước bằng cách nhập vào từ bàn phím, tính và in ra bán
kính của hình tròn đó.
Bài tập 4:
Viết chương trình nhập vào đáy lớn, đáy nhỏ, chiều cao của hình thang; xuất ra diện tích
của hình thang đó.
Bài tập lập trình C++
3/18
GV: Lương Trần Hy Hiến
Bài tập 5:
Chương trình tính giá trị biểu thức y = 3ecos(t+1)
.
HD: Hàm tính là exp(x), hàm tính cos(x) trong tập tin thư viện <cmath>
// Chuong trinh tinh bieu thuc y= 3e^cos(t+1)
#include<iostream>
using namespace std;
#include<cmath>
int main()
{
double t, y;
cout<<”Moi ban nhap 1 so thuc t: ”;
cin>>t;
y= 3*exp(cos(t+1));
cout<<”Gia tri cua bieu thuc can tinh la: ”<< y;
return 0;
}
Bài tập 6:
Viết chương trình nhập vào 2 số nguyên và các phép toán +, -, *, /, %, >,<. In ra kết quả
phép toán đó.
// Chuong trinh tinh + - * /
#include<iostream>
using namespace std;
int main()
{
int a, b;
cout<<"Ban hay nhap 2 so nguyen: “;
cin>>a>>b;
cout<<”Tong cua 2 so vua nhap la: ”<<a+b<<”\n”;
cout<<”Hieu cua 2 so vua nhap la: ”<<a-b<<”\n”;
cout<<”Tich cua 2 so vua nhap la: ”<<a*b<<”\n”;
if (b!=0)
cout<<”Thuong cua 2 so vua nhap la: ”<<a/b;
return 0;
}
Bài tập 7:
Viết chương trình nhập vào thông tin của một sinh viên bao gồm: mã số sinh viên, họ tên,
quê quán, năm sinh, điểm trung bình các năm học; xuất ra thông tin của sinh viên vừa
nhập.
Bài tập 8:
Viết chương trình nhập vào ba cạnh của một tam giác, tính và xuất ra diện tích của tam
giác đó.
HD: Độ dài 3 cạnh a, b, c kiểu số thực. Diện tích S = p(p − a)(p − b)(p − c) với p là nữa
chu vi.
Bài tập 9:
Một đoạn thẳng được biểu diễn bởi hai điểm trong mặt phẳng. Viết chương trình nhập vào
hai điểm của một đoạn thẳng và xuất ra trung điểm của đoạn thẳng đó.
Bài tập lập trình C++
4/18
GV: Lương Trần Hy Hiến
HD:
• Ta cần 4 biến xA, yA, xB, yB để lưu tọa độ 2 điểm A, B trong mặt phẳng.
xA + x
yA + yB
• Trung điểm I của đoạn AB là: xI =
B , yI =
2
2
Bài tập 10:
Viết chương trình nhập vào ba đỉnh của một tam giác. Xuất ra trọng tâm của tam giác đó.
HD:
• Ta cần 6 biến xA, yA, xB, yB, xC, yC để lưu tọa độ 3 đỉnh A, B, C của tam giác.
xA + xB + xC
yA + yB + yC
• Trọng tâm I là: xI =
, yI =
3
3
Bài t
ậ
p 11:
Xét tam thức bậc 2 có dạng ax2 + bx + c. Viết chương trình nhập vào các hệ số của một
tam thức bậc 2 và giá trị của biến số x; xuất ra giá trị của tam thức bậc 2 đó.
HD:
f = a * x * x + b * x + c
Bài t p 12:
ậ
Hãy tìm các biểu thức đúng trong các biểu thức dưới đây:
(i=j)++
i+j++
++(i+j)
++i+++j
Vào máy để kiểm tra các dự đoán của bạn.
CHƯƠNG 2. Cấu trúc điều khiển – Cấu trúc lặp
2.1.
Bài tập liên quan đến cấu trúc điều khiển:
Bài t p 13:
ậ
Viết chương trình nhập vào một số. Xuất ra màn hình chuỗi “số chẵn” nếu số đó là số chẵn.
Xuất ra màn hình chuỗi “số lẻ” nếu số đó là số lẻ.
HD:
if ( N % 2 == 0) cout<<”So chan”;
else cout<<”So le”;
Bài t p 14:
ậ
Viết chương trình nhập vào 2 số nguyên, tìm số lớn nhất của 2 số.
Bài t p 15: (*):
ậ
Viết chương trình thể hiện trò chơi oẳn tù tì với qui ước: Búa = ‘B’; Bao = ‘O’; Kéo =‘K’.
Nhập vào hai kí tự đại diện cho hai người chơi. Xuất ra màn hình câu thông báo người chơi
nào thắng hoặc hòa.
Bài tập lập trình C++
5/18
GV: Lương Trần Hy Hiến
Bài t p 16:
ậ
Viết chương trình tính lương của nhân viên dựa theo thâm niên công tác (TNCT) như sau:
Lương = hệ số * lương căn bản, trong đó lương căn bản là 650000 đồng.
• Nếu TNCT < 12 tháng: hệ số = 1.92
• Nếu 12 <= TNCT < 36 tháng: hệ số = 2.34
• Nếu 36 <= TNCT < 60 tháng: hệ số = 3
• Nếu TNCT >= 60 tháng: hệ số = 4.5
HD:
const int luongcb = 650;
int tnct;
double heso, luong;
if (tnct < 12) heso = 1.92;
else if (tnct < 36) heso = 2.34;
else if (tnct < 60) heso = 3;
else heso = 4.5;
luong = luongcb * heso;
(*)
Bài tập 17:
:
Một điểm KARAOKE tính tiền khách hàng theo công thức sau:
• Mỗi giờ trong 3 giờ đầu tiên tính 30 000 đồng/giờ,
• Mỗi giờ tiếp theo có đơn giá giảm 30% so với đơn giá trong 3 giờ đầu tiên.
Ngoài ra nếu thời gian thuê phòng từ 8 – 17 giờ thì được giảm giá 10%. Viết chương trình
nhập vào giờ bắt đầu, giờ kết thúc và in ra số tiền khách hàng phải trả biết rằng 8 ≤ giờ bắt
đầu < giờ kết thúc ≤ 24.
HD:
int giobd, giokt, thoigian, tien;
//Nhập giobd, giokt và kiểm tra điều kiện giobd >= 8 và giokt <= 24 sử dụng do...while
thoigian = giokt – giobd;
if (thoigian > 3)
tien = 3 * 30000 + (thoigian – 3) * 30000 * 0.7;
else tien = thoigian * 30000;
if (giokt <= 17) //tìm cách tính tổng quát hơn
tien *= 0.9; //Giảm 10%
Bài t p 18: (*):
ậ
Nhập vào ngày, tháng của một năm hiện tại. Bạn hãy viết chương trình:
• Kiểm tra tính hợp lệ của ngày, tháng nhập;
• Cho biết tháng này thuộc quý mấy trong năm;
• Cho biết tháng nhập có bao nhiêu ngày;
• Cho biết ngày hôm sau của ngày đã nhập là ngày nào;
• Cho biết ngày hôm trước của ngày đã nhập là ngày nào.
Bài tập 19:
Viết chương trình nhập vào 3 số, tìm số lớn nhất, nhỏ nhất của 3 số đó.
Bài t p 20:
ậ
Viết chương trình nhập vào 4 số, tìm số lớn nhất, nhỏ nhất của 4 số đó.
Bài tập lập trình C++ 6/18 GV: Lương Trần Hy Hiến
Bài t p 21:
ậ
Viết chương trình xếp loại thi đua cho học sinh. (Tự phân tích ngữ cảnh và lập trình)
Bài t p 22:
ậ
Viết chương trình giải bất phương trình:
ax + b > 0
HD:
double a, b;
cin>>a>>b;//Kiểm tra a <> 0
if(a > 0)
cout<<”Nghiem : x > “<<-b/a;
else
cout<<” Nghiem : x < “<<-b/a;
Bài t p 23:
ậ
Viết chương trình nhập vào 2 phân số, xuất ra tổng hiệu tích thương của hai phân số đó.
Lưu ý kiểm tra điều kiện nhập mẫu khác 0 (dùng do …while).
Bài t p 24:
ậ
Viết chương trình nhập vào một kí tự. Hãy xét xem đây là có phải là kí tự chữ in? là kí tự
chữ thường? là kí tự số? hay là kí tự khác những loại kí tự trên?
Bài t p 25:
ậ
Chương trình cho phép nhập vào một số nguyên dương, là lượng điện tiêu thụ (kWh) trong
tháng của nhà bạn. Chương trình tính và in số tiền nhà bạn phải trả cho tháng đó được tính
theo giá định mức như bảng sau:
100 kwh đầu tiên 50 kwh tiếp 50 kwh tiếp 100 kwh tiếp Từ 300 kwh trở lên
550 VND
900 VND
1250 VND
1450 VND
1700 VND
và phải đóng thuế giá trị gia tăng 10%.
Bài t p 26:
ậ
Một công ty trả lương cho nhân viên (theo tuần) như sau:
o Nhà quản lí (mã số 1) nhận một khoản lương cố định X (theo tuần).
o Công nhân làm theo giờ (mã số 2) nhận một khoản lương cơ bản Y đồng trong 40
giờ đầu trong tuần và 1.5 lần lương cơ bản cho mỗi giờ vượt mức qui định đó.
o Lương công nhân theo lợi nhuận (mã số 3) được nhận 500,000đ cộng thêm 7% trị
giá doanh số Z mà công nhân ấy bán hàng ra trong tuần.
o Lương công nhân theo sản phẩm (mã số 4) nhận tiền dựa vào số N sản phẩm mà
người đó đã làm ra trong tuần, với mỗi sản phẩm thì người này nhận được S đồng
(mỗi người chỉ làm ra một loại sản phẩm nhất định).
Viết chương trình cho nhập vào mã số, tùy theo loại công nhân mà cho phép nhập vào
những thông tin cần thiết cho công nhân đó để tính lương. Sau đó tính lương mà công ty phải
trả cho nhân viên ấy trong tuần.
Bài t p 27:
ậ
Nhập vào một số nguyên có 2 chữ số, hãy in ra cách đọc của nó.
Bài t p 28:
ậ
Nhập vào một số nguyên có 3 chữ số, hãy in ra cách đọc của nó.
HD:
Bài tập lập trình C++
7/18
GV: Lương Trần Hy Hiến
int N; //Số có 3 chữ số cần đọc
int tram, chuc, donvi;
tram = N / 100;
donvi = N % 10;
chuc = (N – tram * 100) / 10;
string chuoi = “”; //Khai báo lớp string trong thư viện STL
switch(tram){
case 1: chuoi += “Một trăm”; break;
case 2: chuoi += “Hai trăm”; break;
….
}
//Tương tự cho chuc, donvi
2.2.
Bài tập liên quan đến cấu trúc lặp:
Bài t p 29:
ậ
Viết chương trình tính n!! với n!! = 1.3.5…n nếu n lẻ, n!! = 2.4.6…n nếu n chẵn.
HD:
Ta cần xác định i chạy từ 1 hay 2 phụ thuộc vào n chẵn hay lẻ?
for(int i = (n % 2)? 1 : 2; i <= n; i += 2) gt *= i;
Bài t p 30:
ậ
Viết chương trình nhập vào số nguyên n. Tính và in ra các tổng sau:
•
S =1+ 2 + 3+...+ n
S =1+ 3 + 5 + 7 + ... + (2n +1)
•
•
S = n!
1
1
1
1
S =
+
+
+ ....... +
2.3 3.4 4.5
n.(n +1)
•
Bài tập 31:
Viết chương trình đếm và in ra số lượng các số nguyên chia hết cho 3 hoặc 7 nằm trong
đoạn 1 đến 100.
HD:
int Dem = 0;
for (int i = 1; i <= 100; i++)
if( (i % 3 ==0) || (i % 7 == 0))
{
Dem++;
}
Bài t p 32:
ậ
Viết chương trình nhập vào một số nguyên dương, kiểm tra đó có phải là số nguyên tố hay
không?
Bài tập lập trình C++
8/18
GV: Lương Trần Hy Hiến
Bài t p 33:
ậ
Viết chương trình nhập vào một số nguyên dương, xuất ra dạng phân tích thừa số nguyên
tố của số đó.
HD:
int n;
cout<<”Nhap n: “;
cin>>n;
cout<<n<<" = ";
int i= 2;
while(i <= n)
{
if(n % i == 0){
cout<<i;
n /= i;
if(n != 1) cout<<"*";
}
else i++;
}
Bài t p 34:
ậ
Viết chương trình nhập vào điểm trung bình của một số sinh viên cho trước. In ra điểm
trung bình của tất cả các sinh viên.
Bài t p 35:
ậ
Viết chương trình tính và in ra trung bình cộng của một dãy số được nhập vào từ bàn phím
(không hạn chế số lượng số nhập vào). Qui ước số nhập có giá trị là 9999 là “số cầm canh”
(nghĩa là nhập đến khi nhập số 9999 thì dừng việc nhập).
10 + 8 +11+10 + 7
Ví dụ: nhập 10 8 11 10 7 9999 ⇒ gttb=
=9.2
5
Bài t p 36:
ậ
Viết chương trình in ra bảng cửu chương.
HD:
for(int i = 1; i < 10; i++)
{
for(int j = 2; j < 6; j++)
cout<<j<<" x "<<i<<" = "<<setw(2)<<j*i<<" ";
cout<<endl;
}
Bài t p 37:
ậ
Viết chương trình in ra bảng lượng giác sin, cos, tan của các góc từ 0..180 dãn cách 5 độ.
Sử dụng hàm sin, cos, tan trong cmath.
Bài t p 38:
ậ
Viết chương trình tìm ước chung lớn nhất, bội chung nhỏ nhất của 2 số nguyên M, N nhập
từ bàn phím.
Bài t p 39:
ậ
Viết chương trình hiện lên màn hình các kí tự có mã ASCII từ 33 đến 255.
Bài t
ập l
ập trình C++
9/18
GV: Lương Trần Hy Hiến
Bài t p 40:
ậ
Viết chương trình đổi tiền với các yêu cầu sau:
• Nhập vào số N là giá trị tiền cần đổi, in ra chi tiết số tờ tiền đổi cho khách hàng.
• Các loại tiền đổi là (đơn vị ngàn đồng): 500, 200, 100, 50, 20, 10, 5, 2, 1.
• Ưu tiên đổi từ tờ có giá trị cao nhất đến tờ có giá trị thấp nhất.
Bài t p 41: (*)
ậ
Trò chơi đoán số được mô tả như sau:
• Có hai người chơi.
• Người chơi thứ nhất nghĩ ra một số x ngẫu nhiên từ 1..100 và yêu cầu người thứ
hai đoán trúng số mình đã nghĩ. Người thứ hai được quyền đoán nhiều lần nhưng
không vượt quá n lần (n xác định trước).
• Mỗi lần người thứ hai đoán sai, người thứ nhất sẽ thông báo cho người thứ hai
biết là số x lớn hơn hay nhỏ hơn số người thứ hai đã đoán.
• Trò chơi kết thúc khi người thứ hai đoán trúng số x hoặc người thứ hai không
đoán trúng số x sau n lần đoán.
a) Viết chương trình thể hiện trò chơi đoán số giữa người và máy. Với máy đóng
vai trò là người thứ hai (người đoán).
b) Viết chương trình thể hiện trò chơi đoán số giữa người và máy. Với máy đóng
vai trò là người thứ nhất (người nghĩ ra số).
Bài tập 42: (*)
Vi
ết chương trình nh
ận 1 giá tr
ị
nguyên dài và cho hi
ển th
ị
ra màn hình số đó d
ạ
ng: h 10,
ệ
h
ệ
16, h 8, h 2.
ệ
ệ
Bài tập 43: (*)
Vi
ết chương trình gi
ải phương trình b
ậ
c 2 v
ớ
i các h
ệ
s
ố
nh
ậ
p t bàn phím (xét đầy đủ các
ừ
trường hợp).
Bài tập 44: (*)
Vi
ế
t chương trình tính sin(x) theo công th
ứ
c x
ấ
p x
ỉ
:
x3 x5
x2n+1
sin
(
x
)
= x−
+
+.....+
(
−1 n
)
v
ớ
i
độ chính xác 0.00001. T
ứ
c là tính cho t i n
ớ
3! 5!
(
2n +1!
)
xn
sao cho:
< 0.00001.
n!
CHƯƠNG 3. Hàm
Bài tập 45:
Viết chương trình nhập họ tên, điểm Toán, điểm Văn của một học sinh. Tính điểm trung
bình và xuất ra kết quả. (Yêu cầu: Viết hàm nhập, xuất, tính trung bình).
HD:
void Nhap(char HT[50], double &T, double &V)
{
cout<<”Ho ten: “; cin>>HT;
Bài tập khó
Bài t
ập l
ập trình C++
10/18
GV: Lương Trần Hy Hiến
cout<<”Toan: “; cin>>T;
cout<<”Van: “; cin>>V;
}
void Xuat(char HT[50], double T, double V, double DTB)
{
cout<<”Sinh vien: “<<HT<<endl;
cout<<”Toan: “<<T<<”, Van: “<<V<<” ==> DTB : “<<DTB<<endl;
}
void TinhTB(T, double V, double &DTB)
{
DTB = (T + V) / 2;
}
Bài t p 46:
ậ
Vi
ết
định ngh
ĩa cho hàm tongLe trong C++ v
ớ
i m u khai báo:
ẫ
long tongLe(int N);
Hàm này tr
ả
v
ể
t
ọ
ổ
ng c
tongLe(7), k
t chương trình cho phép đọc giá tr
ng t đến N, hãy in ra giá tr
ủ
a t
ấ
t c
ả
s
ố
l
ẻ
t
ừ
1
tr
đến N (g
ồ
m c
là 16; ho
nguyên N t bàn phím, g
ng ó.
ả
s
ặ
ố
1 và s
c khi gọi tongLe(12) thì k
i hàm để tính t ng các s
ố
N n
ế
u N l
ẻ
, và ta ph
ả
i gi
ả
sử N
≥
1). Ví d
ụ
khi g
i
ết qu
ả
ả
v
ề
s
ẽ
ết qu
ả
là 36.
Vi
ế
ị
s
ố
ừ
ọ
ổ
ố lẻ
trong kho
ả
ừ
1
ị
t
ổ
đ
Bài t p 47:
ậ
Viết các định nghĩa cho hàm:
(a) ktNgTo, với mẫu khai báo: bool ktNgTo(int N);
Hàm thực hiện việc kiểm tra xem một số nguyên có phải là số nguyên tố hay không,
nếu đúng là số nguyên tố thì trả về giá trị true, nếu không phải thì trả về giá trị false.
(b) Hàm nhoHonM với mẫu khai báo: void nhoHonM(int M);
Hàm này thực hiện việc gọi hàm ktNgTo và in ra tất cả các số nguyên tố nhỏ hơn
hoặc bằng M. Ví dụ gọi nhoHonM(8) thì sẽ in ra các số nguyên tố: 2, 3, 5, 7.
(c) Viết định nghĩa cho hàm MsoNgTo với mẫu khai báo: void MsoNgTo(int M);
Hàm này thực hiện việc gọi hàm ktNgTo và in ra M số nguyên tố đầu tiên. Ví dụ
gọi MsoNgTo(8) thì sẽ in ra 8 số nguyên tố đầu tiên là: 2, 3, 5, 7, 11, 13, 17, 19.
Viết chương trình cho đọc vào giá trị 1 số nguyên dương, gọi các hàm nhoHonM và
MsoNgTo để in lần lượt các số nguyên tố lên màn hình.
Bài t p 48:
ậ
Chương trình tính lương của nhân viên
• Viết hàm nhập họ tên, quê quán, thâm niên công tác của một nhân viên.
• Viết hàm tính lương dựa vào thâm niên công tác
• Viết hàm xuất họ tên, quê quán, thâm niên công tác và lương của nhân viên.
• Viết chương trình nhập thông tin của nhân viên, tính lương và xuất thông tin của
nhân viên (kể cả lương) ra màn hình bằng cách sử dụng 3 hàm trên.
Bài t p 49:
ậ
Viết hàm in ra phần tử thứ n của dãy Fn sau: F = 1, F2 = 2, Fn = 5Fn−1 + 3Fn−2
n ≥ 3
1
int Fn(int n)//n >= 3
{
int F1 = 1, F2 = 2, Temp;
for(int i=3; i <= n; i++)
Bài t
ập l
ập trình C++
11/18
GV: Lương Trần Hy Hiến
{
}
Temp = F1;
F1 = F2;
F2 = 5 * F1 + 3 * Temp;
return F2;
}
Bài t
ậ
p 50:
Viết hàm tính giá trị đa thức bậc n: F(x) = an xn + an−1xn−1 +....+ a1x + a0 , hàm có 3 tham số là
mảng số thực các hệ số ai, giá trị n, x. (Không được sử dụng hàm lũy thừa sẵn có)
double tinhGiaTriDT(double a[100], int n, double x)
{
double kq = 0;
for(int i = 0; i <= n; i++)
{
kq = kq * x + a[n-i];
}
return kq;
}
Bài t p 51:
ậ
Viết các hàm sau:
• Hàm kiểm tra 3 số thực có phải là 3 cạnh của tam giác hay không?
bool isTriangle(double a, double b, double c)
• Hàm tính diện tích tam giác khi bit độ dài 3 cạnh:
double area(double a, double b, double c)
Sau đó sử dụng 3 hàm này vào các công việc sau:
• Nhập từ bàn phím 3 số thực.
• Kiểm tra 3 số thực đó có phải là độ dài của 3 cạnh tam giác hay không? Nếu có
thi in ra diện tích, chu vi của tam giác ra màn hình, nếu không xuất thông báo
“Đây không phải là 3 cạnh của tam giác”.
Bài t p 52:
ậ
Vi
ết
định ngh
ĩa hàm v
ẽ
tam giác Pascal có chi
Ví d h= 4:
ều cao h.
ụ
1
1 1
1 2 1
1 3 3 1
Vi
ết hàm main cho nh
ập vào 1 s
ố
nguyên dương, th
ực hi
ệ
n g i hàm in ra màn hình tam giác
ọ
Pascal có chi
ề
u cao tương ng.
ứ
CHƯƠNG 4. Mảng
4.1.
Mảng 1 chiều
Bài tập 53:
Viết chương trình: (dạng hàm)
Nhập vào một mảng (n phần tử, n nhập từ bàn phím)
•
Bài t
ập l
ập trình C++ 12/18
GV: Lương Trần Hy Hiến
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Khởi tạo mảng ngẫu nhiên
Xuất mảng đó ra màn hình
Tìm phần tử lớn nhất, nhỏ nhất của mảng
Tìm và in ra phần tử âm đầu tiên tận cùng bằng 6
Tìm và in ra vị trí phần tử dương nhỏ nhất
Tính tổng của mảng
Tính trung bình cộng của mảng
Tìm kiếm một phần tử x cho trước (x nhập từ bàn phím)
Sắp xếp mảng theo thứ tự tăng dần, giảm dần
Xuất dãy đảo ngược của dãy ban đầu
Thêm một phần tử x vào vị trí k (x, k nhập từ bàn phím)
Hủy một phần tử ở vị trí thứ k
Đếm số phần tử dương và in ra tổng các phần tử dương của mảng
Kiểm tra mảng có đối xứng hay không?
Kiểm tra mảng có sắp thứ tự tăng hay không?
Bài tập 54:
Cho mảng một chiều các số thực hãy tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị
trong mảng (a,b: số nguyên).
4.2.
Mảng 2 chiều
Bài t p 55:
ậ
Viết chương trình:
•
•
•
•
•
•
•
•
•
Nhập vào mảng 2 chiều (kích thước m,n: nhập từ bàn phím)
Xuất mảng 2 chiều
Tìm phần tử Min, Max
Sắp xếp theo thứ tự zigzag
Sắp xếp theo thứ tự trộn ốc xoáy vào trong
Thêm một dòng v vào ma trận ở cuối ma trận
Thêm một dòng v vào ma trận ở dòng thứ k
Xóa dòng thứ k khỏi ma trận
Tìm vị trí của phần tử vừa là phần tử lớn nhất trên dòng của nó đồng thời nhỏ
nhất trên cột của nó.
•
•
•
•
•
•
Tính tổng, tích 2 ma trận
Tính tổng theo một điều kiện nào đó.
Đếm số lượng các phần tử dương nằm ở ma trận tam giác trên.
Tính trung bình cộng trên một cột trong ma trận các số thực.
Tính tổng các phần tử nằm trên biên của ma trận.
Đếm số lượng phần tử "yên ngựa" của ma trận, biết phần tử yên ngựa là phần tử
lớn nhất trên dòng và nhỏ nhất trên cột tại vị trí đang xét.
Đếm số lượng phần tử "hoàng hậu" của ma trận, biết phần tử hoàng hậu là phần
tử lớn nhất trên dòng, trên cột và hai đường chéo đi qua nó.
•
Bài t
ập l
ập trình C++
13/18
GV: Lương Trần Hy Hiến
CHƯƠNG 5. Kiểu dữ liệu có cấu trúc
Bài t p 56:
ậ
Chương trình thao tác trên phân số:
• Viết hàm nhập vào một phân số.
• Viết hàm xuất một phân số.
• Viết hàm cộng (trừ, nhân, chia) hai phân số, kết quả trả về một phân số là tổng
(hiệu, tích, thương) của hai phân số đó.
• Viết hàm kiểm tra phân số là dương hay âm? Trả về: 1: dương, -1: âm.
• Viết hàm so sánh 2 phân số (hàm trả về một trong 3 giá trị: -1, 0, 1).
• Viết hàm qui đồng mẫu số của hai phân số.
• Sử dụng các hàm trên viết một chương trình thao tác trên các phân số.
Bài t p 57:
ậ
Hãy khai báo kiểu dữ liệu biểu diễn hỗn số trong toán học và định nghĩa hàm nhập, xuất
cho kiểu dữ liệu này.
• Viết hàm rút gọn hỗn số.
• Viết hàm tính tổng, hiệu, tích, thương 2 hỗn số.
Bài t p 58:
ậ
Hãy khai báo kiểu dữ liệu biểu diễn đa thức một biến trong toán học và định nghĩa hàm
nhập, xuất cho kiểu dữ liệu này.
• Hãy nhập vào đa thức và giá trị biến, tính và in ra kết quả của đa thức đó.
• (*)Tính tổng/hiệu 2 đa thức.
• (*)Tính tích/thương 2 đa thức.
• (*)Tính đạo hàm cấp k = 1 của đa thức.
• (*)Tính đa thức dư của phép chia đa thức thứ nhất cho đa thức thứ hai.
Bài t p 59:
ậ
Viết chương trình nhập vào tọa độ tâm và bán kính của một đường tròn trong mặt phẳng
Oxy. Tính diện tích và chu vi của nó và in ra kết quả lên màn hình. (HD: Định nghĩa cấu
trúc DIEM, DUONGTRON; viết hàm Nhap(), Xuat(), TinhDienTich(), TinhChuVi()).
Bài t p 60:
ậ
Viết chương trình nhập vào tọa độ 3 đỉnh của một tam giác trong mặt phẳng Oxy. Tính
diện tích, chu vi và tọa độ trọng tâm tam giác và in ra kết quả lên màn hình. (HD: Định
nghĩa cấu trúc DIEM, TAMGIAC; viết hàm Nhap(), Xuat(), TinhDienTich(), TinhChuVi(),
TimTrongTam()). Cho biết dạng của tam giác?
Bài t p 61:
ậ
Định nghĩa cấu trúc dữ liệu số phức. Hãy viết các hàm nhập/xuất, tính tổng, hiệu, tích,
thương, lũy thừa trên số phức.
Bài t p 62: (*)
ậ
Xét chương trình dò vé số.
Kết quả dò số bao gồm 8 giải. Mỗi giải là một con số. Giải 7 là một số có 2 chữ số.
Giải 6 là một số có 3 chữ số. Giải 5 là một số có 4 chữ số. Giải 4, 3, 2, 1, đặc biệt mỗi giải
là một số có 5 chữ số.
Bài t
ập l
ập trình C++
14/18
GV: Lương Trần Hy Hiến
Một tờ vé số được đặc trưng bởi một con số có 6 chữ số.
Một tờ vé số được gọi là trúng giải k có m chữ số nếu m chữ số cuối của vé số giống
hoàn toàn với số đại diện cho giải k.
Viết chương trình nhập vào kết quả dò số, và một tờ vé số. Xuất ra màn hình thông
báo kết quả dò số: không trúng hoặc trúng giải mấy.
Lưu ý: không xét ngày phát hành, tỉnh thành phát hành, loại vé, giải khuyến khích
và một giải có thể có nhiều lần quay (nhiều số).
CHƯƠNG 6. Các kỹ thuật nâng cao
6.1.
Con trỏ
Bài tập 63:
Vi
ết hàm hoán v
ị
trong
đ
ó tham s
ố
truy
ề
n vào là con tr .
ỏ
Bài tập 64:
Minh h
ọ
a các thao tác trên danh sách liên k
Kh i t o danh sách,
Thêm 01 ph n t vào danh sách,
Xóa 01 ph n t x ra kh i danh sách,
m ph x trên danh sách theo các tiêu chí sau:
t s
n nh
bé nh
nguyên t
chính phương đầu tiên,
ế
t đơn:
•
•
•
•
ở ạ
ầ
ử
ầ
ử
ỏ
Tìm ki
ế
ầ
n t
ử
o
o
o
o
o
o
o
M
ộ
ố
x cho trước,
t,
t,
S
S
S
S
S
S
ố
l
ớ
ấ
ố
ố
ố
ố
ố
ấ
ố
dầu tiên,
nguyên t
nguyên t
ố
l
ớ
n nh
ấ
t,
ố
bé nh
ất.
•
S
ắ
p x p trên danh sách.
ế
6.2.
Kỹ thuật đệ quy
Bài tập 65:
Cài đặt bài toán tìm ph
ần t
ử
thứ n trong dãy Fibonaci theo 2 cách: Đệ quy và không để quy.
Bài tập 66:
Cài đặt bài toán tháp Hà N
ội. Nh
ập vào số đĩa, in ra k
ết qu
ả
chuyển
đĩa t
ừng bước v
ớ
i s
ố
cột là 3.
Bài t p 67:
ậ
Cài đặt hàm tính l
ũ
y th
ừ
a nhanh. Ví d : x14 = (x7)2, x11 = x6.x5=x.(x5)2,...
ụ
Bài t p 68:
ậ
Nh
k b
ậ
p vào s
ng cách d
ố
nguyên dương n và s
ố
nguyên k (0 <= k <= n) và in ra giá tr
ị
C(n,k) c
ủ
a t
ổ
h
ợ
p n l
ấ
y
2
ằ
ự
a vào công th c: C(n, k) = C(n-1, k) + C(n-1, k-1)
ứ
Bài t p 69:
ậ
Bài toán 8 con h
ậu: S
ắp x
ếp n = 8 con h
ậu trên bàn c
ờ
vua 8 x 8 (n x n) sao cho không có b
ất k
ỳ
con h u nào có thể ăn l
ậ
ẫn nhau theo lu
ật cờ
vua.
Bài t
ập l
ập trình C++
15/18
GV: Lương Trần Hy Hiến
6.3.
Làm việc với tập tin
Bài t
ậ
p 70:
M
ỗ
i
đa th
ứ
c a0 + a1x + a2x2 + … + anxn được l
ưu trong t
ập tin v
ăn b
ả
n theo quy ước sau ây:
đ
•
•
Vi
nh
Dòng 1: L
ư
u giá tr
u l n lượt các h
p vào tên m
x, chương trình tính và in ra giá tr
c k t thúc khi người dùng nh
ị
n
Dòng 2: L
ư
ầ
ệ
s
ố
: a0, a1, a2, ..., an
ế
t chương trình nh
p vào giá tr
ậ
ộ
t t p tin v n b n l
ậ
ă
ả
ư
u
đa th
ức, sau
đ
ó cho phép ngườ
i
ậ
ị
ị
của
đa th
ứ
c t i x. Quá trình nh
ạ
ập x và
tính giá trị đa th
ứ
ế
ập giá tr
ị
x = 0.
Bài t p 71:
ậ
Nh
ậ
p ma tr
ậ
n n x n t
Dòng đầu tiên ch
i dòng k tiếp ch
i dung trong t p tin v
ừ
t
ậ
p tin v
a ch
a n s
n b
ă
n b
ỉ
ả
n INPUT.TXT có n
ố
ộ
i dung nh
ư
sau:
•
•
ứ
s n
M
ỗ
ế
ứ
ố
t
ương
ứng v
ớ
i m
ỗ
i dòng c
ủ
a ma tr
ận.
Ví d
ụ: N
ộ
ậ
ă
ản INPUT.TXT:
3
45
2
1
1
66
2
3
67
3
Th
ự
c hi n:
ệ
•
•
Ki
Vi
ể
m tra h
ợ
p l
m tra t
ệ
c
ủ
a d
ữ
li
ệ
u.
ết hàm ki
ể
ổng các ph
ần t
ử
trên t
ừ
ng hàng và c
ộ
t có b ng nhau không?
ằ
Bài t p 72:
ậ
Vi
ế
t chương trình đọc vào m
ộ
t file “input.txt” và th
ự
c hi
ch
dòng th
chia h t cho 2 tìm th
ệ
n các yêu c
dòng ó có ph
a mãn.
ầ
u sau:
•
•
Đọc t
ương không? In ra màn hình t
Ghi ra file “output.txt” t t c
ừ
ng dòng, ki
ể
m tra xem chu
ỗi ký t
ự
ứ
a
ỏ
ở
đ
ải là m
ột s
ố
nguyên
txt”.
d
ổng s
ố
ấ
ả
các s
ố
ế
ấ
y trong file “input
.
Bài tập 73:
Cho bi
ết thông tin cố định v
ề
l
ương của m
ỗi cán b
ộ
trong trường
Đ
HSP TpHCM g
ồ
m nh ng thông
ữ
tin sau:
•
•
•
H
ọ
và tên
Mã s nhân viên
c lương
ố
Bậ
Yêu c u:
ầ
•
•
Xây d
ng thông tin trong t
c lương và s ngày công (nh
ngày công) / 26. Ghi l i các k t qu
ự
ng t
ậ
p tin LUONG.DAT để
p tin LUONG.DAT để tính lương cho t
p vào t bàn phím). Bi t r ng lương = (b
thu được vào t p tin để u tr
l
ư
u tr
ữ
thông tin cố định v
ề
l
ương c
ng nhân viên khi bi
c lương * s
ủ
a trường.
S
ử
d
ụ
ậ
ừ
ết
b
ậ
ố
ậ
ừ
ế
ằ
ậ
ố
ạ
ế
ả
ậ
l
ư
ữ.
CHƯƠNG 7. Bài tập Project
7.1.
Chương trình dò từ điển
Mô t :
ả
Ví d
ụ
giao di
ện ho
ạt
động c
ủ
a chương trình như sau:
Bài t
ập l
ập trình C++
16/18
GV: Lương Trần Hy Hiến
Tra tu: a
Nghia: Mot
Cac tu tiep theo:
an
and
angel
angle
apace
apache
apart
ape
are
area
Tra tu: ap
Nghia: Khong tim thay
Cac tu tiep theo:
apace
apache
apart
ape
Tra tu: appp
Nghia: Khong tim thay
Cac tu tiep theo:
Tra tu: ^Z
Ket thuc chuong trinh. Hen gap lai lan sau!
H
ướng d n:
ẫ
-
S
nh
ử
d
ụ
ng 1 vector ch
p theo qui ước: t
t thúc file (^Z)
Tìm v trí c a t
t ngh
t các từ ở các v
p l i vi c tra t
ứ
a danh sách t
trên 1 dòng, ngh
ừ
, và 1 vector ch
ứ
a danh sách ngh
ĩ
a tương
ứ
ng. D
ữ
li
ệ
u
ậ
ừ
ĩa trên 1 dòng, … và ti p t c nh
ế
ụ
ư
thế, k
ết thúc b
ằng kí t
ự
k
ế
-
-
-
-
ị
ủ
ừ
cầ
n tra trong vector t
trí tương
trí ti
. N
ừ.
Xu
Xu
Cho l
ấ
ĩ
a
ở
v
ị
ứng trong vector ngh
ĩa.
ấ
ị
ếp theo mà có các kí t
ự
b
ắt
đầu gi
ống t
ừ
cần tra.
ặ
ạ
ệ
ừ
ếu nh
ập vào kí t
ự
k
ết thúc file thì k
ết thúc chương trình.
GỢ
I Ý TỪ ĐIỂN
1. Vi
ết hàm nh
ập 1 vector các t
ừ.
2. Vi
ết hàm ki
ểm tra xem 1 t
ừ
có là b
ắt
đầu c
ủ
a 1 t khác không:
ừ
bool MayBe(string a, string b);
Ví d : MayBe(“apart”, “apartment”); // tr
MayBe(“apart”, “aple”); // tr false
3. Vi t 2 hàm tìm v trí
ụ
ả
về true
ả về
ế
ị
typedef vector<string>::size_type vec_sz;
vec_sz Find(const vector<string>& wordlist, string word);
vec_sz FindR(const vector<string>& wordlist, string word);
Hàm Find tr
ả
v
ề
v
ị
trí c
ủ
a t
ừ
x
đầu tiên trong vector wordlist mà MayBe(word, x) cho giá tr true. Hàm
ị
tr -1 n u không tìm th
ả
v
ề
ế
ấ
y.
Bài t
ập l
ập trình C++
17/18
GV: Lương Trần Hy Hiến
Hàm FindR tr
ả
v
ế
ề
v
ị
trí c
u không tìm th
t chương trình nh p vào 1 t
p vào kí t t thúc file thì k
ủ
a t
ừ
x cu
ố
i cùng trong vector wordlist mà MayBe(word, x) cho giá tr true.
ị
Hàm tr
ả
v
ề
-1 n
ấ
y.
4. Vi
ế
ậ
ừ
và xu
ất t
ừ
v
ừa nh
ập ra màn hình, và ti
ếp t
ụ
c nh
ư
th
ế
. N u
ế
nh
ậ
ự
k
ế
ết thúc chương trình.
5. S
ử
d
ụng các ph
ần trên để vi
ế
t chương trình từ đi n.
ể
7.2.
Chương trình sắp xếp dòng
Mô t :
ả
Vi
ết chương trình s
ắp x
ếp các dòng ở đầu vào, lo
ạ
i b
ỏ
các dòng gi
ống nhau và
đ
ánh s các dòng, sau
ố
đó in ra màn hình. V
ớ
i ví dụ đầu vào là:
hey Jude!
don’t make it bad
take a sad song
and make it beter
take a sad song
and make it beter
take a sad song
and make it beter
thì s in ra là:
ẽ
1 and make it beter
2 don’t make it bad
3 hey Jude!
4 take a sad song
S
S
ố ỏ đầu dòng ph
ả
i
được ghi th
ẳ
ng c
ộ
t.
ử
a l i chương trình trên để đánh số ở cu
ạ
ối dòng nh
ưng v
ẫn th
ẳ
ng c t.
ộ
Bài t
ập l
ập trình C++
18/18
GV: Lương Trần Hy Hiến
Bạn đang xem tài liệu "Bài tập Lập trình C++ - Lương Trần Hy Hiến", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_tap_lap_trinh_c_luong_tran_hy_hien.pdf