Giáo trình Phương pháp lập trình

int main()

ðịnh nghĩa hàm main(). Hàm main() là ñiểm mà tất cả các chương

trình C/C++ bắt ñầu thực hiện. Nó không phụ thuộc vào vị trí của

hàm, nội dung của nó luôn ñược thực hiện ñầu tiên khi chương

trình thực thi. Một chương trình C/C++ ñều phải tồntại một hàm

main(). Hàm main() có thể có hoặc không có tham số. Nội dung

của hàm main() tiếp ngay sau phần khai báo chính thức ñược ñặt

trong cặp dấu ngoặc { }.

cout << "Hello World!";

ðây là một lệnh nằm trong phần thân của hàm main. cout là một

dòng (stream) xuất chuẩn trong C/C++ ñược ñịnh nghĩa trong thư

viện iostream.h. Khi dòng lệnh này ñược thực thi, kết quả là chuổi

"Hello World!" ñược xuất ra màn hình. Dòng lệnh ñược kết thúc

bằng dấu chấm phẩy (;).

pdf124 trang | Chuyên mục: Lập Trình Mạng | Chia sẻ: dkS00TYs | Lượt xem: 6100 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình Phương pháp lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ñóng file thành công, hàm trả về giá trị zero. Nếu một lỗi xảy 
ra khi ñóng file, hàm trả về EOF. 
3.5. Viết một ký tự ñến một file 
Có hai hàm xuất ký tự ñến file là putc() và fputc(). Hai hàm này là 
tương ñương nhau. Hàm putc() viết một ký tự ñến một file ñã ñược 
mở bởi hàm fopen(). Nguyên mẫu của hàm như sau: 
int putc(int ch, FILE *fp); 
fp là con trỏ file trả về bởi hàm fopen() và ch là ký tự ñược viết 
ñến file. 
Nếu hoạt ñộng putc() thành công, nó trả về ký tự ñược viết vào 
file. Ngược lại, nó trả về EOF. 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
117/124 
3.6. ðọc một ký tự từ một file 
Có hai hàm tương ñương ñể ñọc một ký tự từ file là getc() và 
fgetc(). Hàm getc() ñọc mỗi lần một ký tự từ file ñược mở bởi hàm 
fopen() ở chế ñộ ñọc (read). Nguyên mẫu của fopen là: 
int getc(FILE *fp); 
fp là con trỏ file kiểu FILE trả về bởi hàm fopen(). Hàm getc() trả 
về một số nguyên là giá trị của ký tự ñược ñọc. Hàm getc() trả về 
EOF nếu một lỗi xảy ra. 
3.7. Ví dụ minh họa fopen(), getc(), putc(), và fclose() 
Ví dụ 1: Minh họa việc ñọc từ bàn phím và ghi chúng vào một tập 
tin cho ñến khi người dùng nhấn nhập ký tự $. 
#include 
#include 
void main() 
{ 
FILE *fp; 
char ch; 
if((fp=fopen(“test.txt”, "w")==NULL) 
{ cout << "Cannot open file.\n"; 
exit(1); 
} 
do { 
ch = getchar(); 
putc(ch, fp); 
}while (ch != '$'); 
fclose(fp); 
} 
Ví dụ 2: Minh họa việc ñọc từ một file văn bản và xuất chúng ra 
màn hình. 
#include 
#include 
void main() 
{ 
FILE *fp; 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
118/124 
char ch; 
if((fp=”test.txt”, "r")==NULL) 
{ 
cout << "Cannot open file.\n"; 
exit(1); 
} 
ch = getc(fp); // read one character 
while (ch!=EOF) 
{ 
putchar(ch); // print on screen 
ch = getc(fp); 
} 
fclose(fp); 
} 
3.8. ðọc và viết chuổi trên file 
C/C++ hỗ trợ hai hàm fgets() và fputs() ñể ñọc và viết chuổi ký tự 
trên file. Những hàm này tương tự như getc() và putc() nhưng thay 
vì ñọc hay viết từng ký tự, chúng ñọc hay viết một chuổi. 
Nguyên mẫu của các hàm trên như sau: 
int fputs(const char *str, FILE *fp); 
char *fgets(char *str, int length, FILE *fp); 
Hàm fputs() viết một chuổi trỏ ñến bởi str ñến stream trỏ ñến bởi 
con trỏ file fp. Hàm trả về EOF nếu một lỗi xảy ra. 
Hàm fgets() ñọc một chuổi từ stream tương ứng cho ñến khi gặp ký 
tự newline hay ñã ñọc ñược length-1 ký tự. Hàm trả về str nếu ñọc 
thành công và một con trỏ null nếu không. 
Chương trình sau minh họa hàm fputs(). Nó ñọc các chuổi từ bàn 
phím và viết chúng ñến file tên teststr.txt. ðể kết thúc chương 
trình, nhập một dòng trống 
#include 
#include 
#include 
void main(void) 
{ 
char str[80]; 
FILE *fp; 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
119/124 
if((fp = fopen("teststr.txt", "w"))==NULL) 
{ 
cout << "Cannot open file.\n"; 
exit(1); 
} 
do 
{ 
cout << "Enter a string (CR to quit):\n"; 
gets(str); 
strcat(str, "\n"); /* add a newline */ 
fputs(str, fp); 
} while(*str!='\n'); 
} 
3.9. Hàm fread() và fwrite() 
ðể ñọc và viết các kiểu dữ liệu có kích thước lớn hơn 1 byte, 
C/C++ cung cấp hai hàm fread() và fwrite(). Những hàm này cho 
phép ñọc và viết một khối của bất kỳ dữ liệu nào. Nguyên mẫu của 
các hàm này như sau: 
size_t fread(void *buffer, size_t numbytes, size_t count, FILE *fp); 
size_t fwrite(const void *buffer, size_t numbytes, size_t count, FILE *fp); 
ðối với fread(), buffer là một con trỏ ñến một vùng bộ nhớ mà sẽ 
nhận dữ liệu ñọc từ file. ðối với fwrite(), buffer là một con trỏ ñến 
thông tin mà sẽ viết ñến file. Giá trị của count cho biết bao nhiêu 
phần tử ñược ñọc hay viết với mỗi phần tử có ñộ dài num_bytes. fp 
là con trỏ ñến file ñã ñược mở bởi fopen(). 
/* Write some non-character data to a disk file and read it back. */ 
#include 
#include 
void main(void) 
{ 
FILE *fp; 
double d = 12.23; 
int i = 101; 
long l = 123023L; 
if((fp=fopen("testNchar.txt", "wb+"))==NULL) 
{ 
cout << "Cannot open file.\n"; 
exit(1); 
} 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
120/124 
fwrite(&d, sizeof(double), 1, fp); 
fwrite(&i, sizeof(int), 1, fp); 
fwrite(&l, sizeof(long), 1, fp); 
rewind(fp); 
fread(&d, sizeof(double), 1, fp); 
fread(&i, sizeof(int), 1, fp); 
fread(&l, sizeof(long), 1, fp); 
cout << “double= ” << d << endl; 
cout << “integer= ” << i << endl; 
cout << “long= ” << l; 
fclose(fp); 
} 
Một trong những ứng dụng hữu dụng của fread() và fwrite() là ñọc 
và viết kiểu dữ liệu người dùng ñịnh nghĩa như các cấu trúc. 
Ví dụ 1: Nhập các mẫu tin nhân viên vào tập tin employee.dat 
#include 
void main() 
{ 
FILE *fp; 
struct employee 
{ 
 char name[30]; 
 int age; 
}; 
struct employee e; 
char more = 'Y'; 
fp = fopen("employee.dat", "wb"); 
if(fp == NULL) 
{ cout << "Cannot open file"); 
 exit(1); 
} 
while(more == 'Y'|| more == ‘y’) 
{ 
 cout << "\nEnter name and age: "; 
 cin >> e.name >> e.age; 
 fwrite(&e, sizeof(e), 1, fp); 
 cout << "Input more (y/n)?: "; 
 fflush(stdin); 
 more = getche(); 
} 
fclose(fp); 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
121/124 
} 
Ví dụ 2: Xuất các mẫu tin nhân viên có trong tập tin employee.dat 
#include 
void main() 
{ 
FILE *fp; 
struct employee 
{ 
 char name[30]; 
 int age; 
}; 
struct employee e; 
fp = fopen("employee.dat", "rb"); 
if(fp == NULL) 
{ cout << "Cannot open file"); 
 exit(1); 
} 
while(fread(&e, sizeof(e), 1, fp) == 1) 
{ 
 cout << "\nName= " << e.name; 
 cout << "\tAge= " << e.age; 
} 
fclose(fp); 
} 
Hàm rewind() 
Hàm rewind() di chuyển indicator ñến ñiểm bắt ñầu của file. Hàm 
có prototype như sau: 
void rewind(FILE *fp); 
Hàm ferror() 
Hàm ferror() cho biết một hoạt ñộng trên file ñã gây ra lỗi. Nguyên 
mẫu của hàm như sau: 
int ferror(FILE *fp); 
Hàm trả về true nếu một lỗi ñã xảy ra với hoạt ñộng trên file trước 
khi gọi hàm ferror(), ngược lại trả về false. 
Xóa file 
Hàm remove() dùng ñể xóa tập tin. Nguyên mẫu như sau: 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
122/124 
int remove(const char *filename); 
Hàm trả về zero nếu xóa thành công, ngược lại trả về nonzero 
Flushing a stream 
Hàm fflush() dùng ñể xuất tất cả nội dung còn lại trong buffer của 
stream. Hàm có nguyên mẫu sau: 
int fflush(FILE *fp); 
Hàm viết nội dung còn trong buffer ñến file liên ñới với fp. Nếu ta 
gọi hàm fflush() không có ñối số thì tất cả flush tất cả file ñang mở. 
Hàm trả về 0 nếu thành công, ngược lại trả về EOF 
Truy xuất file ngẫu nhiên 
ðể ñọc hay viết từ hay ñến một vị trí bất kỳ trong file ta cần sự 
giúp ñỡ của hàm fseek(). Hàm này dùng ñể di chuyển chỉ báo file. 
Hàm có nguyên mẫu sau: 
int fseek(FILE *fp, long numbytes, int origin); 
fp là con trỏ trả về bởi hàm fopen() 
origin là một trong các giá trị sau: SEEK_SET (từ ñầu file), 
SEEK_CUR (từ vị trí hiện hành), và SEEK_END (từ cuối file). 
numbytes: số byte mà indicator di chuyển tùy thuộc origin cung 
cấp. 
Các stream chuẩn 
Khi một chương trình thực thi, ba stream ñược mở tự ñộng. ðó là 
stdin (standard input), stdout (standard output), và stderr (standard 
error). stdin dùng ñể ñọc từ bàn phím, stdout và stderr dùng ñể viết 
ñến màn hình. 
Bởi vì standard streams là các con trỏ file nên có thể dùng các hàm 
nhập xuất trên chúng. 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
123/124 
BÀI TẬP CHƯƠNG 10 
Viết hàm tạo một tập chứa 10000 số nguyên ngẫu nhiên khác nhau 
ñôi một trong phạm vi từ 1 ñến 32767 ñặt tên là 
“SONGUYEN.INP” 
1) Viết hàm ñọc tập “SONGUYEN.INP”, sau ñó sắp xếp theo 
thứ tự tăng dần và lưu kết quả vào tập “SONGUYEN.OUT” 
2) Viết hàm tạo tập văn bản có tên là “INPUT.TXT” có cấu 
trúc như sau 
- Dòng ñầu tiên ghi N (N là số nguyên dương nhập từ 
bàn phím) 
- Trong các dòng tiếp theo ghi N số nguyên ngẫu nhiên 
trong phạm vi từ 0 ñến 100, mỗi dòng 10 số (các số 
cách nhau ít nhất một dấu cách) 
- Hãy ñọc dữ liệu của file “INPUT.TXT” và lưu vào 
mảng một chiều A 
Hãy thực hiện các công việc sau : 
a) Tìm giá trị lớn lớn nhất của mảng A 
b) ðếm số lượng số chẳn, số lượng số lẽ của mảng A 
c) Hãy sắp xếp các phần tử theo thứ tự tăng dần 
Hãy ghi các kết quả trên vào filetext có tên là 
“OUTPUT.TXT” theo mẫu sau: 
4) Viết hàm tạo tập văn bản có tên là “INPUT.TXT” có cấu 
trúc như sau 
- Dòng ñầu tiên ghi hai số M và N (M,N là các số nguyên dương 
nhập từ bàn phím) 
OUTPUT.TXT 
Cau a: 99 
cau b: 9 9 
cau c: 1 4 4 19 20 29 34 38 39 40 
43 58 65 78 87 89 98 99 
INPUT.TXT 
18 
87 39 78 19 89 4 40 98 29 65 
20 43 1 99 38 34 58 4 
Giáo trình PP lập trình TT.Công Nghệ Thông Tin 
124/124 
- Trong M dòng tiếp theo mỗi dòng ghi N số nguyên ngẫu nhiên 
trong phạm vi từ 0 ñến 50 (các số cách nhau ít nhất một dấu 
cách) 
Hãy ñọc dữ liệu của tập “INPUT.TXT” và lưu vào mảng hai 
chiều A. Hãy thực hiện các công việc sau: 
a) Tìm giá trị lớn lớn nhất của mảng A 
b) ðếm số lượng số chẳn, số lượng số lẽ của mảng A 
c) Hãy tính tổng các phần tử trên mỗi dòng của mảng A 
Hãy ghi các kết quả trên vào tập tin văn bản có tên là 
“OUTPUT.TXT” theo như mẫu trong ví dụ sau 
 INPUT.TXT 
 OUTPUT.TXT 
5) Viết hàm ñọc một file “SONGUYEN.INP” ñược tạo ở bài 
tập 1. Sau ñó ghi các số chẵn vào file SOCHAN.OUT và 
các số lẻ vào file SOLE.OUT. 
6) Viết một hàm gộp nội dung của hai tập tin có sẵn vào một 
tập tin thứ ba. Tên các tập tin ñược nhập vào từ bàn phím. 
7) Viết một hàm tìm kiếm trên tập nhị phân có cấu trúc 
employee gồm tên và tuổi. Hiển thị kết quả là tất cả các 
thông tin về các nhân viên ñược tìm thấy khi cho biết : 
a) Tên nhân viên 
b) Có tuổi cao hơn một giá trị X nào ñó. 
6 6
 41 17 33 23 12 1 
 44 24 23 49 5 24 
 33 20 17 25 33 19 
 0 48 45 48 41 32 
 10 24 36 19 19 24 
 30 4 23 26 27 36 
Cau a: 49 
Cau b: 17 19 
Cau c: 127 169 147 214 132 146 

File đính kèm:

  • pdfFinal_KTLT_print16x235.pdf