1
Trường Cao đẳng Công ngh Thông tin Tp. H Chí Minh
Khoa Công ngh Thông tin
BÀI TP THC HÀNH
Môn: Lp trình C nâng cao
Thi lượng: 60 tiết
Môi trường cài đặt: VC++ 6.0 hoc VC++2005 (Win32 Console Application)
Lch trình thc hành
Tun
(5 tiết/tun) Ni dung thc hành Ghi chú
01 Lp trình bng đệ qui
Sinh viên vng mt quá 2 bui s
không được d kim tra (đim thc
hành là 0)
02 Lp trình bng đệ qui
03 Mng mt chiu
04 Chui ký t
05 Chui ký t
06 Kiu d liu có cu trúc
07 Kiu d liu có cu trúc
08 Ma trn
09 Ma trn
10 File
11 File
12 Kim tra và chm đim
I. LP TRÌNH BNG ĐỆ QUI
1. Tìm ch s có giá tr ln nht ca s nguyên dương n.
2. Tính giá tr nguyên ca log2n (n nguyên).
3. Đổi sang h nh phân ca s nguyên dương n.
4. Tìm ước s chung ln nht ca hai s nguyên dương a và b.
5. Tìm ch s đầu tiên ca s nguyên dương n.
6. Tính )12(5.3.1)( += nnP K, vi 0n
7. Tính )12(531)( +×+
+
++= nnS L, vi 0n
8. Tính nnS n1
)1(4321)( +
+++= L, vi 0>n
9. Tính nnS KL 3.2.13.2.12.11)( ++++= , vi 0>n
10. Tính 2222 321)( nnS ++++= L, vi 0>n
11. Tính n
nS 1
3
1
2
1
1)( ++++= L, vi 0>n
12. Tính n
nS ++++
++
++
+
+
+=
L
L
321
1
321
1
21
1
1)(
, vi 0>n
13. Tính y
xyxP =),( .
14. Tính )321()321()21(1)( nnS
+
+
+
+
+
++++++= LL , vi 0>n
15. Hãy xây dng mt dãy gm N s có giá tr t 1 đến K cho trước, sau cho không có hai dãy
con liên tiếp đứng k nhau.
Ví d: N = 6
K = 3
2
Kết qu: 121312
16. Tìm dãy nh phân dài nht sao cho trên dãy này không có hai b k bt k trùng nhau. B k
là dãy con có k s liên tiếp nhau trên dãy tìm được.
Ví d: k = 3
Kết qu: 000 101 110 0
17. Cho k s nguyên dương: a1, a2, a3, … ak (0<k<50) và mt s nguyên dương N.
Đin phép toán cng (+) hoc tr (-) thích hp vào du (?) cho biu thc sau (nếu có li
gii): a1 ? a2 ? a3 ? a4 ? … ? ak = N
II. BÀI TP MNG 1 CHIU
18. Viết hàm sp xếp các phn t l tăng dn.
19. Viết hàm sp xếp các phn t chn gim dn.
20. Viết hàm xoá phn t ti v trí l trong mng.
21. Viết hàm xoá phn t có giá tr ln nht trong mng.
22. Nhp vào giá tr X. Viết hàm xoá tt c các phn t có giá tr nh hơn X.
23. Nhp vào giá tr X. Viết hàm xoá phn t có giá tr gn X nht.
24. Nhp vào giá tr X. Viết hàm loi b tt c các phn t có giá tr trùng nhau (ch gi li
mt phn t trong s các phn t trùng)
25. Viết hàm chèn phn t có giá tr X vào v trí đầu tiên ca mng.
26. Viết hàm chèn phn t có giá tr X vào phía sau phn t có giá tr ln nht trong mng.
27. Viết hàm chèn phn t có giá tr X vào trước phn t có giá tr là s nguyên t đầu tiên
trong mng.
III. BÀI TP CHUI KÝ T
28. Đếm có bao nhiêu khong trng trong chui.
29. Nhp vào mt chui, hãy loi b nhng khong trng tha trong chui.
30. Nhp vào hai chui s1 và s2, ni chui s2 vào s1. Xut chui s1 ra màn hình.
31. Đổi tt c các ký t có trong chui thành ch thường (không dùng hàm strlwr).
32. Đổi tt c các ký t trong chui sang ch in hoa (không dùng hàm struppr).
33. Viết chương trình đổi nhng ký t đầu tiên ca mi t thành ch in hoa.
34. Viết chương trình đổi ch xen k 1 ch hoa và 1 ch thường.
Ví d: nhp ABCDEfgh đổi thành AbCdEfGh
35. Viết chương trình đảo ngược các ký t trong chui.
Ví d: nhp ABCDE, xut ra màn hình là:EDCBA
36. Viết chương trình tìm kiếm 1 ký t xem có trong chui hay không, nếu có xut ra v trí ca
t đó.
37. Viết 1 chương trình đếm mt ký t xut hin bao nhiêu ln trong chui.
38. Nhp vào chui s1 và s2, cho biết v trí xut hin ca chui s2 trong s1.
39. Viết chương trình tìm kiếm tên trong chui h tên. Nếu có thì xut ra là tên này đã nhp
đúng, ngược li thông báo là đã nhp sai.
40. Viết chương đảo v trí ca t đầu và t cui.
Ví d: nhp “bo an co” xuat ra “co an bo”
41. Viết hàm ct chui h tên thành chui h lót và chui tên.
Ví d: chui h tên là:”Nguyn Văn A” ct ra 2 chui là chui h lót:”Nguyn
Văn”,chui tên là:”A”
42. Nhp mt chui bt k, sau đó hi người dùng cn tách bt đầu t đâu trong chui tr v
sau.
Ví d: Nhp chui S1:”Trường Đại Hc Tôn Đức Thng”. Người nhp mun tách bt đầu
t ch “Tôn” thì s xut ra chui “Tôn Đức Thng” ra màn hình.
43. Viết hàm kim tra xem chui có đối xng hay không?.
44. Viết hàm kim tra xem chui có tun hoàn hay không?
3
45. Viết hàm tra xem trong chui có ký t s hay không nếu có tách ra thành mt mng s
riêng.
46. Nhp mt chui bt kì, yêu cu nhp 1 ký t mun xóa. Thc hin xóa tt c nhng ký t
đó trong chui.
47. Viết chương trình tìm kiếm xem ký t nào xut nhin nhiu nht trong chui.
48. Viết 1 chương trình xoá mt t nào đó trong chui.
Ví d: Chui ban đầu: “Cau truc du lieu va giai thuat”
Nhp: “va”, và kết qu xut ra:”Cau truc du lieu giai thuat”
49. Đổi các t đầu câu sang ch hoa và nhng t không phi đầu câu sang ch thường.
Ví d: nGuYen vAN a đổi thành: Nguyen Van A
50. Viết chương trình đảo ngược th t các t có trong chui
Ví d: Nhp: lap trinh bang ngon ngu c
Xut ra màn hình là: c ngu ngon bang trinh lap
51. Nhp 1 chui bt kì, lit kê xem mi ký t xut hin my ln.
52. Viết hàm kim tra xem trong 2 chui có bao nhiêu ký t ging nhau.
53. Cho chui str, nhp vào v trí vt và s ký t cn xóa n, hãy xóa n ký t tính t v trí vt
trong chui str.
54. Nhp vào chui str, chui cn chèn strInsert và v trí cn chèn vt. Hãy chèn chui strInsert
vào chui str ti v trí vt.
IV. BÀI TP KIU D LIU CÓ CU TRÚC
Khai báo và cài đặt kiu d liu có cu trúc
Ví d: Viết chương trình nhp vào to độ hai đim trong mt phng và tính tng hai to
độ này
//File Khaibao.h
#include <iostream.h>
typedef struct DIEM //khai bao mot kieu du lieu DIEM gom toa do x va y
{
int x;
int y;
};
//File caidat.cpp
#include "khaibao.h"
void Nhap (DIEM &d)
{
cout<<“\nNhap vao toa do diem\n”;
cout<<“Tung do : “;
cin>>d. x;
cout“Hoanh do : ”;
cin>>d.y;
}
void Xuat (DIEM d)
{
cout<<“\nToa do diem : (“ <<d.x<< “,”<<d.y<<”)”;
}
4
DIEM Tong (DIEM d1,DIEM d2)
{
DIEM temp;
temp.x = d1.x + d2.x ;
temp.y = d1.y + d2.y ;
return Temp;
}
//File main.cpp
#include”khaibao.h”
void main ()
{
DIEM A , B, AB; //khai bao 3 diem A, B, AB;
Nhap ( A );
Xuat ( A );
Nhap ( B );
Xuat ( B );
cout<<“\n Tong cua hai diem vua nhap la : ”;
AB = Tong ( A, B);
Xuat ( AB );
}
55. Viết chương trình s dng kiu d liu cu trúc để hin th gi, phút, giây ra màn hình.
Tính khong cách gia 2 mc thi gian và so sánh 2 mc thi gian và cho biết kết qu.
56. Viết chương trình s dng kiu d liu cu trúc th hin ngày, tháng, năm ra màn hình.
Tính khong cách gia 2 ngày và so sánh 2 ngày và cho biết kết qu.
57. Viết chương trình khai báo kiu d liu để biu din mt phân s. Hãy viết hàm thc hin
nhng công vic sau:
Tính tng, hiu, tích, thương hai phân s.
Rút gn phân s.
Qui đồng hai phân s.
So sánh hai phân s.
58. Viết chương trình khai báo kiu d liu để biu din mt hn s. Hãy viết hàm thc hin
nhng công vic sau :
Đổi hn s sang phân s
Tính tng, tích hai hn s
59. Viết chương trình khai báo kiu d liu để biu din mt đim trong h ta độ 0xy . Hãy
viết hàm thc hin các công vic sau:
Tìm nhng đim đối xng ca nó qua tung độ, hoành độ, to độ tâm.
Hãy tính tng, hiu, tích ca hai đim trong mt phng to độ 0xy.
Tính khong cách gia hai đim.
60. Cho mt hình tr có các thông tin sau: BanKinh (bán kính hình tr kiu s thc),
ChieuCao (chiu cao hình tr kiu s thc). Hãy thc hin các công vic sau.
Nhp d liu cho hình tr trên.
Tính din tích xung quanh, din tích toàn phn, th tích hình tr.
5
Mng có cu trúc
Do kiu d liu có cu trúc thường cha rt nhiu thành phn nên khi viết chương trình loi này
ta cn lưu ý:
Xây dng hàm x lý cho mt kiu cu trúc.
Mun x lý cho mng cu trúc, ta gi li hàm x lý cho mt kiu cu trúc đã được xây dng
bng cách dùng vòng lp.
Ví d: Cho mt mng các phân s (PHANSO) gm n phn t (n
50). Hãy viết chương
trình nhp và xut danh sách các phân s sau đó tìm phân s có giá tr ln nht, tng và
tích các phân s và nghch đảo giá tr các phân s trong mng.
Cách làm:
- Trước hết ta phi xây dng hàm nhp và xut cho 1 phân s.
- Xây dng hàm tính tng, hiu, tích, thương, rút gn, so sánh và nghch đảo cho 2
phân s.
- Sau đó mi xây dng hàm nhp, xut, tính tng, tích cho mng các phân s.
//File khaibao.h
#include<iostream.h>
#define MAX 100
typedef struct PHANSO
{
int tu, mau;
};
void NhapPS(PHANSO &ps);
void XuatPS(PHANSO ps);
void NhapMangPS(PHANSO dsps[], int &n);
void XuatMangPS(PHANSO dsps[], int n);
PHANSO TimMax(PHANSO dsps[], int n);
bool KiemTra(PHANSO ps);
//Tra ve true: Neu hop le
int USCLN(int a, int b);
PHANSO RutGon(PHANSO ps);
PHANSO NghichDao(PHANSO ps);
PHANSO Nhan(PHANSO ps1, PHANSO ps2);
PHANSO Chia(PHANSO ps1, PHANSO ps2);
PHANSO Tru(PHANSO ps1, PHANSO ps2);
PHANSO Cong(PHANSO ps1, PHANSO ps2);
int SoSanh(PHANSO ps1, PHANSO ps2);
//Tra ve 0: ps1=ps2
//Tra ve 1: ps1>ps2
//Tra ve -1: ps1<ps2
PHANSO TongCacPS(PHANSO dsps[], int n);
PHANSO TichCacPS(PHANSO dsps[], int n);
void NghichDaoCacPS(PHANSO dsps[], int n);
//File main.cpp
#include”khaibao.h”
void main()