Một số bài tập C++ từ căn bản đến nâng cao cho newbie nhé ^^

1. 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:(*): ................................................................................................................................. 6
Bài tập 18: (*): ................................................................................................................................ 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: (*)........................................................................................................................... 10
Bài tập 42: ** ............................................................................ Error! Bookmark not defined.
Bài tập 43: *** .......................................................................... Error! Bookmark not defined.
Bài tập 44: **** ........................................................................ Error! Bookmark not defined.
Bài tập lập trình C++ 2/18 GV: Lương Trần Hy Hiến
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: (*)............................................................................ Error! Bookmark not defined.
CHƯƠNG 6. 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
2. BÀI TẬP
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 oday
  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++  4/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
)1 cos(
3
+
=
t
e y .
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  ) )( )( ( c p b p a p p S − − − = 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++  5/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.
•  Trung điểm I của đoạn AB là:
2
,
2
B A
I
B A
I
y y
y
x x
x
+
=
+
=

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.
•  Trọng tâm I là:
3
,
3
C B A
I
C B A
I
y y y
y
x x x
x
+ +
=
+ +
=

Bài tập 11:
Xét tam thức bậc 2 có dạng ax
2
+ 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++  6/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++  7/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++  8/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:
•  n S + + + + = ... 3 2 1

)1 2( ... 7 5 3 1 + + + + + + = n S

! n S =

)1 .(
1
.......
5.4
1
4.3
1
3.2
1
+
+ + + + =
n n
S

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++  9/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).
Ví dụ: nhập 10 8 11 10 7 9999 ⇒  2.9
5
7 10 11 8 10
=
+ + + +
= gttb

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,  tancủa các góc từ  0..180dã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++  10/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ỉ:
( ) ( )
( ) !1 2
1 .....
!5 !3
sin
12 5 3
+
− + + + − =
+
n
x x x
x x
n
n
với độchính xác 0.00001. Tức là tính cho tới n
sao cho:  00001 .0
!
<
n
x
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++  11/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 tongLetrong C++ với mẫu khai báo:
long tongLe(int N);
Hàm này trảvểtổng của tất cảsốlẻtừ1 đến N (gồm cảsố1 và sốN nếu N lẻ, và ta phải giảsửN
≥1). Ví dụkhi gọi tongLe(7), kết quảtrảvềsẽlà 16; hoặc khi gọi tongLe(12)thì kết quảlà 36.
Viết chương trình cho phép đọc giá trịsốnguyên N từbàn phím, gọi hàm đểtính tổng các sốlẻ
trong khoảng từ1 đến N, hãy in ra giá trịtổng đó.

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  ktNgTovà 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  ktNgTovà 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  nhoHonMvà
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:  ( ) 3 3 5 ,2 ,1
2 1 2 1
≥ + = = =
− −
n F F F F F
n n n
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++  12/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:
0 1
1
1
.... )( a xa x a xa x F
n
n
n
n
+ + + + =


, hàm có 3 tham sốlà
mảng sốthực các hệsốa
i
, 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ều cao h.
Ví dụh= 4:
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++  13/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++  14/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++  15/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ết đơn:
•  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,
•  Tìm kiếm phần tửx trên danh sách theo các tiêu chí sau:
o  Một sốx cho trước,
o  Sốlớn nhất,
o  Sốbé nhất,
o  Sốnguyên tốdầu tiên,
o  Sốchính phương đầu tiên,
o  Sốnguyên tốlớn nhất,
o  Sốnguyên 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ập vào số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
k bằng cách dự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ỳ2
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++  16/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 a
0
+ a1
x + a
2
x
2
+ … + an
x
n
được lưu trong tập tin văn bản theo quy ước sau đây:
•  Dòng 1: Lưu giá trịn
•  Dòng 2: Lưu lần lượt các hệsố: a
0
, a
1
, a
2
, ..., a
n
Viết chương trình nhập vào tên một tập tin văn bản lưu đa thức, sau đó cho phép người
nhập vào giá trịx, chương trình tính và in ra giá trịcủa đa thức tại x. Quá trình nhập x và
tính giá trị đa thức kết thúc khi người dùng nhập giá trịx = 0.

Bài tập 71:
Nhập ma trận n x n từtập tin văn bản INPUT.TXT có nội dung nhưsau:
•  Dòng đầu tiên chứa chỉsốn
•  Mỗi dòng kếtiếp chứa n sốtương ứng với mỗi dòng của ma trận.
Ví dụ: Nội dung trong tập tin văn bản INPUT.TXT:
3
45  1  3
2  66  67
1  2  3
Thực hiện:
•  Kiểm tra hợp lệcủa dữliệu.
•  Viết hàm kiểm tra tổ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ện các yêu cầu sau:
•  Đọc từng dòng, kiểm tra xem chuỗi ký tựchứa ởdòng đó có phải là một sốnguyên
dương không? In ra màn hình tổng sốdòng thỏa mãn.
•  Ghi ra file “output.txt” tất cảcác sốchia hết cho 2 tìm thấy trong file “input.txt”.

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
•  Bậc lương
Yêu cầu:
•  Xây dựng tập tin LUONG.DAT đểlưu trữthông tin cố định vềlương của trường.
•  Sửdụng thông tin trong tập tin LUONG.DAT đểtính lương cho từng nhân viên khi biết
bậc lương và sốngày công (nhập vào từbàn phím). Biết rằng lương = (bậc lương * số
ngày công) / 26. Ghi lại các kết quảthu được vào tập tin đểlưu trữ.

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++  17/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ửdụng 1 vector chứa danh sách từ, và 1 vector chứa danh sách nghĩa tương ứng. Dữliệu
nhập theo qui ước: từtrên 1 dòng, nghĩa trên 1 dòng, … và tiếp tục nhưthế, kết thúc bằng kí tự
kết thúc file (^Z)
-  Tìm vịtrí của từcần tra trong vector từ.
-  Xuất nghĩa ởvịtrí tương ứng trong vector nghĩa.
-  Xuất các từ ởcác vịtrí tiếp theo mà có các kí tựbắt đầu giống từcần tra.
-  Cho lặp lại việc tra từ. Nế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ảvềtrue
MayBe(“apart”, “aple”); // trảvềfalse
3.  Viết 2 hàm tìm vịtrí
typedef vector<string>::size_type vec_sz;
vec_sz Find(const vector<string>& wordlist, string word);
vec_sz FindR(const vector<string>& wordlist, stringword);
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ảvề-1 nếu không tìm thấy.
Bài tập lập trình C++  18/18  GV: Lương Trần Hy Hiến
Hàm FindR trảvềvịtrí của từx cuối cùng trong vector wordlist mà MayBe(word, x) cho giá trịtrue.
Hàm trảvề-1 nếu không tìm thấy.
4.  Viết chương trình nhập vào 1 từvà xuất từvừa nhập ra màn hình, và tiếp tục nhưthế. Nếu
nhập vào kí tựkết thúc file thì 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ố ỏ đầu dòng phải được ghi thẳng cột.
Sửa lại chương trình trên để đánh số ởcuối dòng nhưng vẫn thẳng cột.
Loading...