Bài giảng kỹ thuật lập trình c chương 6 ths trần quang hải bằng - Pdf 32

KỸ THUẬT LẬP TRÌNH C
Chương 6: Các kiểu dữ liệu nâng cao



04/2010

Các kiểu dữ liệu nâng cao





Kiểu con trỏ
Kiểu mảng
Kiểu Cấu trúc (struct) và hợp (union)
Kiểu File – Và truy xuất file



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

2


04/2010

Kiểu con trỏ (pointer)
• Địa chỉ (address)
– Với mỗi biến có các khái niệm:
• Tên biến, kiểu biến, giá trị biến

kiểu_dữ_liệu *tên_con_trỏ;

– Ví dụ
int i, j, *pi, *pj;
pi = &i; /* pi là con trỏ chứa ñịa chỉ biến i */
pj = &j;
/* pj là con trỏ chứa ñịa chỉ biến j */



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

4


04/2010

Kiểu con trỏ (pointer)
• Giả sử có
– px là con trỏ ñến biến x, thì các cánh viết x và *px là
tương đương nhau

• Ví dụ
int x, y, *px, *py;
px = &x;
py = &y;
x = 3; /* tương đương với *px = 3 */
y = 5; /* tương đương với *py = 5 */
/* Các câu lệnh dưới đây là tương ñương: */
x = 10*y;


04/2010

Kiểu mảng



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

7

04/2010

Kiểu mảng – Bài tập
1.

Viết chương trình kiểm tra xem ma trận Anxn có
phải là ma trận tam giác không ?

2.

Viết chương trình tìm trung bình cộng của các
phần tử âm thuộc ma trận Amxn

3.

Cho 1 số nguyên N (lẻ và ≥ 3). Hãy điền vào ma
n2 sao cho trận đó thỏa
trận Anxn các giá trị từ 1
mãn điều kiện. Tổng mỗi hàng = Tổng mỗi cột =

Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

9

04/2010

Kiểu cấu trúc (struct)
• Ví dụ: dùng kiểu cấu trúc mô tả dữ liệu là ñịa chỉ
– Địa chỉ gồm các thông tin: số nhà, tên đường, tên thành
phố
struct dia_chi{
int so_nha;
char duong[40];
char thanh_pho[30];
} ong_A, ba_B;

• Hoặc có thể khai báo các biến cấu trúc trực tiếp
không cần khai báo tên cấu trúc
struct {
int so_nha;
char duong[40];
char thanh_pho[30];
}ong_A, ba_B;


Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

10



nhan_su p;



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

12


04/2010

Kiểu cấu trúc (struct)
• Truy cập phần tử của cấu trúc
tên_biến_cấu_trúc.tên_trường

• Ví dụ
p.ho_ten
p.o_tai.so_nha
p.o_tai.duong
p.o_tai.thanh_pho
p.gioi_tinh
puts(p.ho_ten);



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

13

04/2010

– Sử dụng

for (i = 0; i < 100; i++)
puts(mang_nhan_su[i].ho_ten);



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

15

04/2010

Kiểu cấu trúc (struct)
• Hàm có tham số kiểu cấu trúc



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

16


04/2010

Kiểu hợp (union)
• Kiểu hợp (union) cho phép chia sẽ cùng một vùng
bộ nhớ cho các biến khác nhau
• Nhằm tiết kiệm bộ nhớ
• Sử dụng từ khóa union ñể ñịnh nghĩa kiểu hợp




Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

18


04/2010

Kiểu File (tệp)
• Các thao tác trên file
– Mở file, Đóng file, ðọc dữ liệu file, Ghi dữ liệu, …

• Ngôn ngữ C ñịnh nghĩa (trong stdio.h)
– Cấu trúc kiểu tệp FILE
– Mã kết thúc tệp EOF (-1)
– Các hàm thao tác trên file

• Khai báo con trỏ file
FILE *pf;


Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

19

04/2010

Kiểu File (tệp)

tệp tin trên đĩa
– Làm giảm việc chương trình truy cập trực tiếp thiết bị phần cứng



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

21

04/2010

Kiểu File (tệp) – Mở file
• Muốn thao tác trên tệp trước hết phải mở tệp
• Mở tệp với hàm fopen
FILE *fopen(const char *name,
const char *mode)

– Hàm trả về con trỏ ñến cấu trúc file hoặc dòng chảy
tương ứng, nếu không thành công trả về NULL
• name: tên file cần mở
• mode: Chế ñộ mở
“w”: mở ñể ghi
“r”: mở ñể ñọc
“a”: mở ñể ghi vào cuối tệp


Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

22



04/2010

Kiểu File (tệp)
• Báo lỗi hệ thống
– Dùng hàm perror

void perror(const char *str)
– Ví dụ:



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

25

04/2010

Kiểu File (tệp)
• Đọc ký tự file
– C cung cấp hai hàm getc và fgetc
int getc(FILE *fp)
int fgetc(FILE *fp)
– Hai hàm có chức năng như nhau, đọc ký tự từ file ứng với dòng chảy
fp, trả về mã ASCII của ký tự ñọc được nếu thành công, ngược lại trả
về EOF

• Ghi ký tự vào file
– C cung cấp hai hàm putc và fputc
int putc(int ch, FILE *fp)

nếu thành công, ngược lại trả về NULL

– Ghi chuỗi ký tự fputs
int fputs(const char *s, FILE *fp)
– Ghi chuỗi ky tự s lên file ñược trỏ bởi fp
– Nếu thành công trả về mã ký tự cuối cùng được ghi, ngược lại
trả về EOF


Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

28


04/2010

Ví dụ copy file (2)



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

29

04/2010

Kiểu File (tệp)
• Đọc dữ liệu trên file theo ñịnh dạng
– Đọc dữ liệu theo định dạng fscanf
int fscanf(FILE *fp,

04/2010

Kiểu File (tệp)
• Ngoài các hàm được trình bày ở trên, C còn
cung cấp nhiều hàm khác
– Tự tìm hiểu các hàm:








fcloseall,
ferror,
feof,
unlink,
remove,
fseek,




Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

32


04/2010

Kiểu File (tệp)
• Vấn đề với mã kết thúc file
– Mã kết thúc file đối với kiểu văn bản là 26 (Ctrl+Z)
– Khi đọc các ký tự của file trong kiểu văn bản, nếu
gặp file tự này thì giá trị EOF ñược trả về và kết thúc
việc đọc
– Kiểu file nhị phân không không coi mã kết thúc file là
26
– Để ñọc tất cả các file tự của tệp, nên đọc trong kiểu
nhị phân



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

35

04/2010

Kiểu File (tệp)
• Vấn đề với mã chuyển dòng (newline)
– Đối với kiểu văn bản
• Khi ghi vào file mã chuyển dòng ‘\n’, thì hai ký tự
được ghi vào file là ‘\r’ và ‘\n’ (ký tự ‘\r’ chuyển về
cột đầu tiên và ‘\n’ chuyển sang dòng mới)
• Khi đọc hai ký tự ‘\r’ và ‘\n’ thì ñược nhận biết là ký
tự ‘\n’

– Đối với kiểu nhị phân
• Khi ghi vào file ‘\n’, thì chỉ ký tự ‘\n’ ñược ghi vào


Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

37

04/2010

Kiểu File (tệp)
• Các hàm chỉ đọc/ghi theo kiểu nhị phân
Hàm

Ý nghĩa

int putw(int n, FILE *fp)

Ghi một số nguyên (2 bytes) lên file

int getw(FILE *fp)

Đọc một số nguyên (2 bytes) từ file

int fwrite(void *ptr, int
size, int n, FILE *fp)

Ghi n mẫu tin kích thước size từ vùng
nhớ trỏ bởi ptr lên file fp, hàm trả về
số mẫu tin thực sự ghi

int fread(void *ptr, int
size, int n, FILE *fp)




Đọc các giá trị có trong file input.dat vào ma trận số nguyên
AMxN
Tính và in ra màn hình giá trị lớn nhất (max) của mỗi cột trong
ma trận trên.



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

39

04/2010



Kỹ thuật lập trình C - Kiểu Dữ liệu nâng cao

40




Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status