Giáo trình Lập trình C++ - Lê Phú Hiếu

Tóm tắt Giáo trình Lập trình C++ - Lê Phú Hiếu: ...u thức Mục tiêu • Làm quen với môi trường Visual Studio 6.0 • Sử dụng phép toán và biểu thức để giải một số bài toán đơn giản. Yêu cầu • Biết cách tạo mới chương trình, mở chương trình đã có trên đĩa, lưu trữ chương trình, • Hiểu được cấu trúc của một chương trình C/C++ đơn giản. ...đối lớn, phức tạp, ta thường có khuynh hướng phân chia vấn đề ban đầu thành những vấn đề con nhỏ hơn. Và từ những vấn đề con này, ta lại tiếp tục phân rã thành những vấn đề con nhỏ hơn nữa (nếu được) ... cho đến khi gặp vấn đề con sơ cấp có thể thấy ngay cách giải quyết. Cách tiếp cận này áp...], với 0<x<y. 140 void InitArray(int a[], int n, int x, int y) { srand(time(0)); a[0] = rand()%(b-a+1) + a; for (int i=1; i<n; i++) a[i] = a[i-1]+ rand()%10; } 5.2. Xuất giá trị các phần tử mảng (ra màn hình). Hàm xuất giá trị cho các phần tử mảng 1 chiều ra màn hình...

pdf194 trang | Chia sẻ: havih72 | Lượt xem: 304 | Lượt tải: 1download
Nội dung tài liệu Giáo trình Lập trình C++ - Lê Phú Hiếu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
2. 
2) Viết chương trình C++ thực hiện từng bước các yêu cầu 
sau: 
− Khai báo biến con trỏ kiểu char có tên là charPtr. 
3) Cấp phát một vùng nhớ nặc danh và cho charPtr trỏ đến đó. 
4) Nhập một ký tự và chứa nó vào vùng nhớ nặc danh. 
5) Hiển thị nội dung trong vùng nhớ nặc danh. 
6) Nếu nội dung của vùng nhớ nặc danh là ký tự hoa thì 
chuyển thành ký tự thường và hiển thị kết quả ra màn hình. 
 170
7) Viết chương trình C++ thực hiện từng bước các yêu cầu 
sau: 
− Khai báo biến con trỏ kiểu double có tên là doublePtr. 
− Cấp phát vùng nhớ nặc danh cho một mảng có n (nhập từ 
bàn phím) phần tử kiểu double và chứa địa chỉ của nó vào 
doublePtr. 
− Nhập giá trị cho tất cả các phần tử trong mảng. 
− Tính và hiển thị trung bình cộng các giá trị trong mảng. 
− Giải phóng vùng nhớ đã cấp phát cho mảng. 
− Hiển thị địa chỉ và giá trị của 3 phần tử đầu tiên trong 
mảng có vùng nhớ vừa được giải phóng. 
8) Viết chương trình khởi tạo một con trỏ trỏ đến mảng 
unsigned int có 20 phần tử. Sau đó gán giá trị cho các phần 
tử trong mảng là những số chẵn bắt đầu từ 2, hiển thị các 
giá trị này ra màn hình theo nhiều cách khác nhau (nếu có 
thể) thành 4 dòng, mỗi dòng có 5 phần tử. 
9) Viết chương trình có tên là binary để khi thực hiện tại dấu 
nhắc lệnh 
10) C:\>binary DecimalValue↵ 
11) chương trình sẽ tính và hiển thị giá trị nhị phân ứng với giá 
trị thập phân đã nhập. Trong đó, DecimalValue là giá trị 
thập phân 2 byte (–32768 đến 32767). 
12) Giá trị trung bình của một dãy có n số là một số thực và 
được định nghĩa là giá trị mà nó có n/2 giá trị lớn hơn nó, 
và n/2 giá trị nhỏ hơn nó. Viết chương trình có tên là 
median để khi thực hiện tại dấu nhắc lệnh 
13) C:\>median FileName↵ 
 171
14) chương trình sẽ tính và hiển thị giá trị trung bình của các 
giá trị trong tập tin FileName, nhưng nếu gõ lệnh 
15) C:\>median↵ 
16) chương trình sẽ tính và hiển thị giá trị trung bình của n (2 ≤ 
n ≤ 10) giá trị được nhập từ bàn phím. 
17) Viết chương trình để thực hiện sao chép tập tin File1 thành 
tập tin File2: 
18) C:\>copy File1 File2↵ 
19) Viết chương trình để khi thực hiện lệnh 
20) C:\>page File↵ 
21) thì nội dung tập tin được chỉ định sẽ hiển thị lên màn hình 
theo từng trang (23 dòng), người sử dụng có thể ấn phím 
bất kỳ để xem trang kế tiếp. 
22) Viết chương trình xử lý chuỗi kí tự bao gồm các chức năng 
sau: (Chú ý: dùng con trỏ để cài đặt và không được dùng 
hàm thư viện) 
− Tính chiều dài của chuỗi nhập. 
− Sao chép 2 chuỗi với nhau. 
− So sánh 2 chuỗi với nhau. 
− Tìm một kí tự trong chuỗi nhập. 
− Tìm chuỗi con trong chuỗi nhập. 
− Thêm chuỗi con vào trong chuỗi nhập tại vị trí k. 
− Xoá chuỗi con trong chuỗi nhập. 
− Loại bỏ các khoảng trắng thừa (kí tự Space, Tab) trong 
chuỗi nhập. 
− Chuẩn hóa chuỗi nhập. 
− Đảo ngược chuỗi nhập. 
 172
− Kiểm tra 2 chuỗi nhập có gồm cùng các kí tự hay không ? 
− Kiểm tra chuỗi nhập có đối xứng hay không ? 
− Kiểm tra chuỗi nhập có tuần hoàn hay không ? 
− Đếm tần số xuất hiện của các kí tự trong chuỗi nhập. 
− Đếm số từ trong chuỗi nhập. 
− Đếm số kí tự, số từ và số dòng trong chuỗi nhập. 
− Chuyển từ cuối cùng thành từ đầu tiên trong chuỗi nhập. 
23) Viết chương trình khai báo chuỗi có tên là last_first có nội 
dung là “Smith, Bill”, sau đó tách tên và họ của chuỗi này 
rồi kết hợp chúng lại để thành “Bill Smith” và gán cho 
chuỗi first_last. Hiển thị hai chuỗi ra màn hình. 
24) Định nghĩa một hàm có ba tham số, mỗi tham số là một 
chuỗi ký tự gồm: tên, tên lót, và họ. Hàm này trả về một 
chuỗi chứa ba tham số trên theo thứ tự họ, tên, và ký tự đầu 
của tên lót. Ví dụ, nếu ba tham số lần lượt có nội dung là 
“John”, “Quincy”, và “Doe” thì hàm trả về chuỗi “Doe, 
John Q.”. Viết chương trình áp dụng. 
25) Tương tự như câu 2, nhưng định nghĩa hàm chỉ có một 
tham số. Ví dụ, nếu tham số có nội dung là “John Quincy 
Doe” thì hàm trả về chuỗi “Doe, John Q.”. 
26) Định nghĩa một hàm nhận vào số thứ tự của một tháng và 
trả về tên của tháng đó. Viết chương trình áp dụng. 
27) Định nghĩa một hàm nhận vào tên của một tháng và trả về 
số thứ tự của tháng đó. Viết chương trình áp dụng. 
28) Định nghĩa hai hàm: hàm thứ nhất chuyển chuỗi ký tự bất 
kỳ thành chuỗi ký tự thường, hàm thứ hai chuyển thành 
chuỗi ký tự hoa. Viết chương trình áp dụng. 
 173
29) Viết chương trình có định nghĩa một hàm với tên là 
replace_all, biểu thức replace_all(str, substring, 
newSubstring) trả về một chuỗi mà tất cả những xuất hiện 
của substring trong str được thay thế bằng newSubstring. 
30) Một chuỗi được gọi là đối xứng (palindrome) nếu nó không 
thay đổi khi thứ tự của các ký tự được đảo ngược. Ví dụ: 
madam, 463364, ABLE WAS I ERE I SAW ELBA là các 
chuỗi đối xứng. Viết hàm nhận vào một chuỗi và cho biết 
chuỗi này có đối xứng không. Viết chương trình áp dụng. 
31) Viết chương trình có định nghĩa một hàm nhận vào hai 
chuỗi và cho biết chuỗi thứ nhất có phải là một hoán vị của 
các ký tự trong chuỗi thứ hai hay không. Ví dụ chuỗi 
“dear“ là một hoán vị của chuỗi “read“ hay “dare”. 
32) Không sử dụng các hàm thư viện xử lý chuỗi của C++. Giả 
sử chiều dài chuỗi không lớn hơn 80 ký tự và chuỗi được 
nhập từ bàn phím. Hãy viết chương trình có định nghĩa các 
hàm cho mỗi yêu cầu sau: 
− Sao chép chuỗi s1 sang chuỗi s2. Hiển thị hai chuỗi lên 
màn hình. 
− Lấy n (giá trị nhập) ký tự đầu tiên của chuỗi nguồn, hiển 
thị chuỗi nguồn và chuỗi kết quả ra màn hình. 
− Lấy n (giá trị nhập) ký tự cuối cùng của chuỗi nguồn, 
hiển thị chuỗi nguồn và chuỗi kết quả ra màn hình. 
− Chèn một chuỗi vào chuỗi khác tại vị trí được chỉ định 
(nếu vị trí chỉ định không hợp lệ thì chương trình sẽ 
không thực hiện thao tác này). Hiển thị chuỗi kết quả ra 
màn hình. 
 174
− Xoá một số ký tự trong một chuỗi tại vị trí bắt đầu và số 
ký tự cần xoá được chỉ định (cần kiểm tra tính hợp lệ của 
hai tham số này). Hiển thị chuỗi còn lại ra màn hình. 
33) Viết chương trình đọc vào một chuỗi tối đa 80 ký tự và 
định nghĩa các hàm thực hiện các yêu cầu sau: 
− Hiển thị số lần mà ký tự đó xuất hiện trong chuỗi. Các ký 
tự được sắp theo thứ tự alphabet. Ví dụ nhập Le Van B, 
thì hiển thị ký tự 'a' có một lần, 'b' có một lần, 'c' không 
có, ... 
− Hiển thị số lần mà các từ một ký tự, hai ký tự, ba ký tự, ... 
xuất hiện trong chuỗi. Giả sử chiều dài tối đa của một từ 
là 10 ký tự. 
 175
CHƯƠNG 7. KIỂU STRUCT 
1. Khái niệm 
Khác với kiểu mảng, struct là kiểu dữ liệu có cấu trúc bao gồm 
nhiều thành phần có thể thuộc nhiều kiểu dữ liệu khác nhau. 
Kiểu struct cho phép lưu trữ thông tin về một đối tượng với đầy đủ 
các thuộc tính của nó trong một biến. Mỗi thuộc tính là một biến thành 
phần. Kiểu dữ liệu của các biến này có thể là kiểu cơ sở hay kiểu 
mảng, thậm chí một kiểu struct khác. 
2. Khai báo và truy xuất biến struct trong ‘C’ 
Cách 1: 
 struct { 
 ; 
 }; 
 struct ; 
Cách 2: 
 struct { 
 ; 
 176
 } ; 
Cách 3: 
 struct { 
 ; 
 } ; 
Mỗi khai báo struct là sự mô tả một kiểu dữ liệu mới, và chỉ là sự 
mô tả cấu trúc khung chung cho mọi biến thể hiện của nó. Mỗi biến 
kiểu struct sau khi đã khai báo đều bao gồm bên trong nó các thành 
phần thuộc tính được mô tả trong phần khai báo kiểu struct. Các thành 
phần thuộc tính của mỗi biến thể hiện có thể được truy xuất nhờ vào 
toán tử dấu chấm ‘.’ như sau: 
 . 
Dấu chấm ‘.’ được gọi là toán tử truy nhập thành phần cấu trúc. 
Nếu bản thân thành phần cấu trúc cũng lại là một kiểu struct khác thì 
vẫn áp dụng toán tử này để xác định thành phân sâu hơn trong các cấu 
trúc thành phần. 
 .. 
 177
3. Lệnh typedef 
Cho phép đặt tên mới cho một kiểu dữ liệu đã khai báo và định 
nghĩa trước: 
 typedef ; 
Ví dụ: 
typedef unsigned char byte; 
Sau câu lệnh này, byte là tên gọi khác của kiểu unsigned char. 
Khi đó, 2 khai báo sau đây là tương đương nhau: 
 byte c; 
và 
 unsigned char c; 
Lệnh typedef thường được sử dụng để định nghĩa các kiểu dữ liệu 
phức hợp thành một tên duy nhất. Ví dụ: lệnh 
 typedef int * PTR_INT; 
định nghĩa kiểu dữ liệu con trỏ nguyên. Sau này khi cần khai báo 
một con trỏ nguyên, ta chỉ cần viết: 
 PTR_INT px; // tương đương với khai báo int * px; 
 178
Ta có thể đơn giản cách viết khai báo biến cấu trúc bằng cách sử 
dụng lệnh typedef như sau: 
 typedef struct{ 
 ; 
 } ; 
Ví dụ: ta định nghĩa phân số như là kiểu cấu trúc 
 typedef struct{ 
 int tuso, mauso; 
 }PHANSO; 
Sau đó, ta định nghĩa các biến kiểu PHANSO 
 PHANSO ps1, ps2; 
4. Kiểu enum 
• Cho phép dùng danh hiệu để đặt tên các giá trị nguyên một 
cách gợi nhớ. Các trị nguyên trong enum được bắt đầu từ trị 
0, trừ khi xác định rõ trị khác. Các trị nguyên kế tiếp có giá 
trị bằng trị nguyên trước đó cộng thêm một. 
Khai báo 
 179
enum {Danh sách các trị nguyên}; 
Ví dụ: 
enum Weekdays{Sunday, Monday, Tuesday, Wedneday, 
Thirsday, Friday, Satyurday}; 
Khi đó: Sunday có trị = 0, Monday có trị = 1, Tuesday có trị = 2, 
5. Mảng các struct 
 const MAX = 20; 
 const MONHOC = 3; 
 typedef struct{ 
 int d, m, y; 
 }NGAYSINH; 
 typedef struct{ 
 char * ho; 
 char * ten; 
 NGAYSINH ngsinh; 
 float diem[MONHOC]; 
 // . . . . 
 }SINHVIEN; 
 180
 SINHVIEN sv[MAX]; 
6. Con trỏ trỏ đến biến kiểu struct 
 typedef struct{ 
 ; 
 } ; 
 * ; 
Ví dụ: 
 typedef struct{ 
 int tuso, mauso; 
 }PHANSO; 
 PHANSO *pps; 
Ta truy xuất các biến thành phần của pps như sau: 
 (*pps).tuso 
 (*pps).mauso 
hay 
 181
 pps->tuso 
 pps->mauso 
7. Truyền tham số kiểu struct cho hàm 
Truyền bằng tham trị: chương trình sẽ chậm đi do phải tốn thời 
gian sao chép giá trị của biến cấu trúc dùng làm tham số thực cho 
tham số hình thức. 
Truyền bằng tham biến hay tham trỏ: dù kích thước của biến cấu 
trúc có lớn thì địa chỉ của biến vẫn chỉ là kích thước của địa chỉ vùng 
nhớ. 
8. Kiểu union 
Một biến kiểu union cũng bao gồm nhiều thành phần giống như 
một biến cấu trúc, nhưng khác nhau ở chỗ: các trường thuộc tính trong 
biến cấu trúc được cấp phát các vùng nhớ khác nhau, còn các trường 
của biến union được cấp phát chung vùng nhớ. Độ dài của biến union 
bằng độ dài của thành phần dài nhất trong biến. 
Khai báo biến union giống như khai báo biến struct 
Ví dụ: 
typedef union 
{ 
 unsigned int n; 
 unsigned char ch[2]; 
 182
}VAL; 
VAL x; 
x.n=0x1B1A; 
khi đó: 
ch[0] = 1A và ch[1]=1B 
9. Bài tập 
1) Cho trước một thời điểm giờ, phút, giây. Viết chương trình 
tính thời điểm 1 giây sau, 1 giây trước. 
2) Viết chương trình tính khoảng cách (số giây) giữa 2 thời 
điểm cho trước. 
3) Cho trước một bộ ngày, tháng, năm. Viết chương trình tính 
ngày hôm sau, ngày hôm trước. 
4) Viết chương trình tính khoảng cách (số ngày) giữa 2 bộ 
ngày, tháng, năm cho trước. 
5) Viết chương trình thực hiện các phép tính (+, -, *, /) trên 
phân số. 
6) Viết chương trình thực hiện các phép tính (+, -, *, /) trên số 
phức. 
7) Viết chương trình thực hiện phép cộng, và phép nhân 2 ma 
trận. 
 183
CHƯƠNG 8. File 
1. Giới thiệu chung 
File là cơ chế cho phép lưu trữ dữ liệu một cách lâu dài, với số 
lượng lớn (về mặt lý thuyết là không hạn chế). 
C++ xem File chỉ đơn thuần là một dãy các byte. File được đánh 
dấu kết thúc bằng kí hiệu đặc biệt (CTRL+Z cho DOS và CTRL+D 
cho UNIX, . . .) 
Để có thể làm việc với File đĩa, trước hết ta phải liên kết file với 
dòng (stream) nhập/xuất bằng cách tạo ra đối tượng File thuộc lớp: 
fstream (dùng cho việc Vào/Ra File), ofstream(dùng cho Ghi ra File), 
ifstream (dùng cho Đọc File). Các lớp này được khai báo trong tập tin 
tiêu đề . 
Có 2 loại Vào/Ra file đĩa cơ bản trong C++: Vào/Ra file định 
dạng (formatted file I/O), và Vào/Ra file nhị phân (binary file I/O) 
Quy trình thao tác file: mở file – kiểm tra – xử lý file – đóng file 
2. Thao tác trên kiểu file 
2.1. Mở File ( liên kết kênh nhập/xuất với file đĩa ) 
Dùng hàm thiết lập: filevar( ); 
Hoặc dùng hàm thành phần open của đối tượng luồng nhập/xuất: 
 filevar; 
filevar.open( , ); 
Các chế độ mở file: 
 184
Chế độ Mô tả 
ios::in Mở để đọc ( mặc định cho 
ifstream ) 
ios::out Mở để ghi ( mặc định cho 
ofstream ) 
ios::ate Bắt đầu đọc/ghi ở cuối file 
ios::app Bắt đầu ghi ở cuối file 
ios::trunc Cắt bỏ file (TRUNCate) 
ios::nocreate Lỗi nếu file không tồn tại 
ios::noreplace Lỗi khi mở để ghi ra nếu file đã 
tồn tại, trừ khi ate hoặc app 
được thiết lập 
ios::binary Mở file trong chế độ nhị phân ( 
mặc định là văn bản) 
2.2. Xử lý File 
Trước khi đọc/ghi file, cần kiểm tra file đã được mở thành công 
hay không: if (!file)  else  
Trong quá trình làm việc với file, cần dùng hàm kiểm tra kết thúc 
tập tin trong vòng lặp: while(!file.eof())  
Vào/Ra kí tự: hàm get() và put() làm các hàm thành phần của 
ofstream và ifstream cho phép đọc kí tự từ file, và ghi kí tự ra file. 
Vào/Ra file nhị phân: hàm read() và write() cho phép thực hiện 
việc đọc/ghi một số lượng lớn các byte dữ liệu từ bộ đệm sang file. 
Các tham số cho hàm read() và write() là địa chỉ của bộ đệm dữ liệu 
và kích thước của chúng. Địa chỉ phải ép thành kiểu char và kích 
thước được tính bằng byte. 
 185
Vào/Ra đối tượng (objects I/O): dùng chế độ mở file nhị phân, và 
các hàm read(), write(). 
Con trỏ file: mỗi đối tượng file kết hợp với nó 2 giá trị nguyên 
gọi là get pointer ( con trỏ đọc ) và put pointer ( con trỏ ghi ). Hai giá 
trị này cho biết vị trí đọc và vị trí ghi hiện tại của con trỏ trong quá 
trình làm việc với file. Để điều khiển con trỏ file phục vụ cho việc 
đọc/ghi file tại vị trí tùy ý, ta dùng hàm seekg(), seekp() (để di chuyển 
con trỏ file đến vị trí mong muốn), tellg(), tellp() (để đọc vị trí hiện 
hành của con trỏ file). Hàm seekg() và tellg() cho phép thiết lập và 
kiểm tra con trỏ đọc, còn các hàm seekp() và tellp() thực hiện tương tự 
đối với con trỏ ghi. Hàm seekg() và seekp() có 2 tham số: tham số thứ 
1 biểu diễn độ lệch (offset), tính từ vị trí cụ thể xác định bởi tham số 
thứ 2 (ios::beg, ios::cur, ios:end) 
2.3. Đóng File 
Dùng hàm close() của đối tượng file. 
2.4. Ví dụ Vào/Ra File định dạng 
Hàm ghi file số nguyên 
void WriteIntFile() { 
 ofstream outf( “test.dat”, ios::out ); 
 if ( ! outf ) { 
 cerr << “Cannot open file test.dat . . .\n”; 
 exit( 1 ); 
 186
 } 
 for ( int i = 0; i < 100; i++ ) 
 outf << i + 1 << ‘ ‘; 
 outf.close(); 
} 
Hàm đọc file số nguyên 
void ReadIntFile() { 
 ifstream inf( “test.dat”, ios::in ); 
 if ( ! inf ) { 
 cerr << “Cannot open file test.dat . . .\n”; 
 exit( 1 ); 
 } 
 int i; 
 while ( ! inf.eof() ) { 
 inf >> i; 
 cout << setw( 4 ) << i; 
 } 
 inf.close(); 
 187
} 
Hàm đọc/ghi file số nguyên 
void IntFile() { 
 fstream file; 
 file.open( “test.dat”, ios::out | ios::in ); 
 if ( ! file ) { 
 cerr << “Cannot open file test.dat . . .\n”; 
 exit( 1 ); 
 } 
 for ( int i = 0; i < 100; i++ ) 
 outf << i + 1 << ‘ ‘; 
 file.seekg( 0, ios::beg ); // ve dau file 
 while ( ! file.eof() ) { 
 inf >> i; 
 cout << setw( 4 ) << i; 
 } 
 file.close(); 
} 
 188
2.5. Ví dụ Vào/Ra kí tự 
Hàm ghi kí tự ra file 
void ReadCharFile() { 
 ofstream outf( “test.txt”, ios::out ); 
 if ( ! outf ) { 
 cerr << “Cannot open file test.txt \n”; 
 exit( 1 ); 
 } 
 char str[] = “KHOA TIN HOC”; 
 int i = 0; 
 while ( s[ i ] ) { 
 outf.put( s[ i ] ); // outf << s[ i ] 
 i++; 
 } 
 outf.close(); 
} 
Hàm đọc kí tự từ file 
void ReadCharFile() { 
 189
 ifstream inf( “test.txt”, ios::in ); 
 if ( ! inf ) { 
 cerr << “Cannot open file test.txt . . .\n”; 
 exit( 1 ); 
 } 
 char ch; 
 while ( ! inf.eof() ) { 
 inf.get( ch ); 
 cout << ch; 
 } 
 inf.close(); 
} 
2.6. Ví dụ Vào/Ra File nhị phân 
#include 
#include 
const int MAX = 100; 
void main() { 
 int buffer[ MAX ] = { 0 }; 
 190
 for ( int i = 0; i < MAX; i++ ) 
 buffer[ i ] = i; 
 ofstream outf( “test.dat”, ios::binary ); 
 if ( ! outf ) { 
 cout << “Cannot open file test.dat . . .\n”; 
 exit( 1 ); 
 } 
 outf.write( ( char* ) buffer, MAX * sizeof( int ) ); 
 for ( i = 0; i < MAX; i++ ) 
 buffer[ i ] = 0; 
 ifstream inf( “test.dat”, ios::binary ); 
 if ( ! inf ) { 
 cout << “Cannot open file test.dat . . .\n”; 
 exit( 1 ); 
 } 
 inf.read( ( char* ) buffer, MAX * sizeof( int ) ); 
 for ( i = 0; i < MAX; i++ ) 
 if ( buffer[ i ] = i ) { 
 191
 cerr << “Du lieu khong dung . . .\n”; 
 return; 
 } 
 cout << “Du lieu dung . . .\n”; 
} 
3. Bài tập 
1) Viết chương trình nối hai tập tin văn bản, tập tin thứ hai 
được nối vào cuối tập tin thứ nhất. Hiển thị nội dung của 
tập tin sau khi nối ra màn hình. Tên hai tập tin được nhập 
từ bàn phím. 
2) Viết chương trình đọc một tập tin văn bản, tên tập tin được 
nhập từ bàn phím. Sau đó đếm số từ trong tập tin và hiển 
thị ra màn hình. 
3) Viết chương trình đọc một tập tin văn bản, đếm số lần xuất 
hiện của một chuỗi (nếu có) trong tập tin và hiển thị ra màn 
hình. Tên tập tin và chuỗi cần tìm được nhập từ bàn phím. 
4) Viết chương trình sao chép một tập tin văn bản thành một 
tập tin văn bản khác và mỗi dòng trong tập tin đích phải 
được đánh số thứ tự phía bên trái. Tên hai tập tin được 
nhập từ bàn phím. 
5) Viết chương trình đọc một tập tin văn bản có tên được nhập 
từ bàn phím, đếm số ký tự trên mỗi dòng. Chương trình 
phải hiển thị số dòng, chiều dài của dòng ngắn nhất, dài 
nhất, và giá trị trung bình của các ký tự trên mỗi dòng. 
 192
6) Viết chương trình chuẩn hoá một tập tin văn bản thành tập 
tin khác, tên hai tập tin được nhập từ bàn phím. Chương 
trình sẽ bỏ những dòng trống và khoảng trắng dư thừa với 
qui ước như sau: Chỉ giữ lại một khoảng trắng sau dấu 
phẩy hay dấu chấm và có 5 khoảng trắng cho mỗi đầu 
dòng. Giả sử tập tin chỉ chứa các ký tự chữ cái, khoảng 
trắng, dấu phẩy, và dấu chấm. 
7) Viết chương trình đọc tập tin văn bản, đếm số ký tự khác 
trằng, số dòng khác trống, số từ, và số câu. Sau đó tính 
trung bình số ký tự trên mỗi từ và số từ trên mỗi câu. Giả 
sử tập tin chỉ chứa các ký tự chữ cái, khoảng trắng, dấu 
phẩy, dấu chấm, dấu chấm phẩy, và dấu hai chấm. Một từ 
là một dãy các ký tự chữ cái liên tiếp nhau, một câu là một 
dãy các từ được phân cách bằng khoảng trắng, dấu phẩy, 
dấu chấm phẩy, hay dấu hai chấm và kết thúc bằng dấu 
chấm. 
8) Viết chương trình đọc tập tin văn bản và hiển thị nội dung 
của nó trong một khối có tối đa 20 dòng. Nếu sau khi hiển 
thị mà nội dung tập tin vẫn chưa được đọc hết thì cần thông 
báo cho người sử dụng biết có muốn hiển thị khối kế tiếp 
không. Ngược lại, kết thúc chương trình. 
9) Giả sử mỗi dòng trong tập tin văn bản chứa thông tin về 
một sinh viên, bao gồm: Số thứ tự (từ 1 đến 100), họ tên, 
và điểm (số thực). Viết chương trình để nhập một số thứ tự 
từ bàn phím và hiển thị thông tin về sinh viên có số thứ tự 
tương ứng. 
 193
TÀI LIỆU THAM KHẢO 
1. Nguyễn xuân Huy, Thuật toán, Nhà xuất bản Khoa Học và Kỹ 
Thuật. 
2. Hoàng Kiếm, Giải một bài toán trên máy tính như thế nào, Nhà 
xuất bản Giáo dục. 
3. Nguyễn Thanh Thủy (chủ biên), Nhập môn lập trình Ngôn 
ngữ C, Nhà xuất bản Khoa học và Kỹ thuật. 
4. Trần Văn Lăng, Lập trình hướng đối tượng sử dụng C++, Nhà 
xuất bản Thống Kê. 
5. GS. Phạm Văn Ất, C++ và lập trình hướng đối tượng, Nhà 
xuất bản Khoa học và Kỹ thuật. 
6. Nguyễn Thanh Thủy, Lập trình hướng đối tượng, Nhà xuất 
bản Khoa học và Kỹ thuật. 
7. Tô Oai Hùng, Giáo trình Cơ sở lập trình sử dụng ngôn ngữ 
C++, Tài liệu lưu hành nội bộ (Trường Đại Học Mở TP. HCM) 
8. Joel Adams & Larry Nyhoff, C++ An Introduction to 
Computing, Prentice Hall 2002, Third Edition. 
9. H.M. Deiteil & P.J. Deitel, C++ How to Program, Prentice 
Hall, New Jersey, 2003, Fourth Edition. 
10. Bjarne Stroustrup, The C++ Programming Language, 
Addition Wesley Longman, 1997, Third Edition. 
 194
Biên soạn LÊ PHÚ HIẾU 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_c_le_phu_hieu.pdf