1. Trang chủ
  2. » Giáo án - Bài giảng

MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT KHOA CÔNG NGHỆ THÔNG TIN

27 661 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 609,65 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

bài giảng môn Cấu trúc dữ liệu và giải thuật

Trang 1

Ch ươ ng 1

T NG QUAN V C U TRÚC D LI U VÀ GI I THU T Ổ Ề Ấ Ữ Ệ Ả Ậ

I-GI I THI U Ớ Ệ :

• Vi c vi t m t chệ ế ộ ương trình đ đi u khi n máy tính th c hi n các công vi c qu n lýể ề ể ự ệ ệ ả

c a ngủ ườ ử ụi s d ng, đáp ng các yêu c u tính toán , tìm ki m , th ng kê , l u tr v…ứ ầ ế ố ư ữv… là m t v n đ không ph i đ n gi n ộ ấ ề ả ơ ả

• Vi c đ u tiên ngệ ầ ườ ử ụi s d ng ph i d a trên yêu c u th c t , thông qua các thông tinả ự ầ ự ế

c a đ i t ng và các nghi p v chuyên môn x lý trong h th ng c n qu n lý, đ đápủ ố ượ ệ ụ ử ệ ố ầ ả ể

ng yêu c u l u tr , tính toán và x lý tìm ki m thông kê v…v…Thông tin c a h th ng

s đẽ ượ ổ ức t ch c thành các c u trúc d li u phù h p, các gi i thu t t i u , sau đó v nấ ữ ệ ợ ả ậ ố ư ậ

d ng các k thu t , k năng đ chuy n hóa các yêu c u trên thành các chụ ỹ ậ ỹ ể ể ầ ương trìnhthông qua m t s ngôn ng l p trình, đ có th x lý độ ố ữ ậ ể ể ử ược trên máy tính đáp ng đứ ượ ccác yêu c u qu n lý thông tin c a ngầ ả ủ ườ ử ụi s d ng

II-C U TRÚC D LI U Ấ Ữ Ệ :

• C u trúc d li u là mô hình thông tin d li u bi u di n thông tin các đ iấ ữ ệ ữ ệ ể ễ ố

tượng d liêu trong h th ng th c t Tùy theo tính ch t x lý, thu c tính mô t c a m iữ ệ ố ự ế ấ ử ộ ả ủ ỗ

đ i tố ượng, mà c u trúc d li u có th đấ ữ ệ ể ượ ổ ức t ch c khác nhau

• C u trúc d li u đấ ữ ệ ượ ổ ức t ch c tuân th theo các qui t c v ki u d li u , kíchủ ắ ề ể ữ ệ

thước và ràng bu c d li u, đ có th t ch c l u tr và x lý trên máy tính m t cáchộ ữ ệ ể ể ổ ứ ư ữ ử ộ

d ng các c u trúc d li u thích h p nh t, sao cho v a có th ph n nh đ y đ thông tin v aự ấ ữ ệ ợ ấ ừ ể ả ả ầ ủ ừ

có th d dàng x lý tính toán trên máy tính.ể ễ ử

• Xây d ng các thao tác x lý d li u (gi i thu t):ự ử ữ ệ ả ậ

T các yêu c u x lý th c t , c n tìm ra các gi i thu t từ ầ ử ự ế ầ ả ậ ươ ứng ng đ xác đ nh trình t cácể ị ựthao tác máy tính ph i thi hành đ cho k t qu mong mu n.ả ể ế ả ố

• Vi c xây d ng c u trúc d li u và gi i thu t là 2 công vi c quan tr ng quan h và bệ ự ấ ữ ệ ả ậ ệ ọ ệ ổ sung cho nhau C u trúc d li u t ch c đ y đ , chính xác thì vi c xây d ng gi i thu t trấ ữ ệ ổ ứ ầ ủ ệ ự ả ậ ở nên d dàng ễ

• V i m t c u trúc d li u đã ch n s có nh ng gi i thu t tớ ộ ấ ữ ệ ọ ẽ ữ ả ậ ương ng phù h p, khi c uứ ợ ấ trúc có s thay đ i thự ổ ường thì gi i thu t ph i thay đ i theo ả ậ ả ổ

Trang 2

• M t c u trúc d li u t t s giúp cho gi i thu t x lý trên nó có th phát huy tác d ng t tộ ấ ữ ệ ố ẽ ả ậ ử ể ụ ố

h n, có th đáp ng nhanh, gi i thu t r ràng đ n gi n và d hi u ơ ể ứ ả ậ ỏ ơ ả ễ ể

• S thành công c a m t chự ủ ộ ương trình tin h c chính là s k t h p ch t ch gi a c u trúcọ ự ế ợ ặ ẽ ữ ấ

d li u và gi i thu t Th hi n qua công th c sau :ữ ệ ả ậ ể ệ ứ

C u trúc d li u + Gi i thu t = Ch ấ ữ ệ ả ậ ươ ng trình

• Ph n ánh đúng th c t : Đây là tiêu chu n quan tr ng nh t, quy t đ nh tính đúng đ nả ự ế ẩ ọ ấ ế ị ắ

c a toàn b bài toán C n xem xét k lủ ộ ầ ỹ ưỡng cũng nh d trù các tr ng thái bi n đ i c aư ự ạ ế ổ ủ

d li u trong chu trình s ng đ có th ch n c u trúc d li u l u tr th hi n chính xácữ ệ ố ể ể ọ ấ ữ ệ ư ữ ể ệ

đ i tố ượng th c t ự ế

Ch ng h n c n l u ý vi c ch n ki u d li u cho các bi n : Ví d bi u di n thông tinẳ ạ ầ ư ệ ọ ể ữ ệ ế ụ ể ễNHAN VIEN có thành ph n TUOI nên ch n ki u unsign char thay vì ch n char ho c int ,ầ ọ ể ọ ặthành ph n LUONG chon ki u unsign long thay vì ch n int , long ho c float.ầ ể ọ ặ

Có nhi u bi n d li u có th phù h p trong hi n t i, nh ng khi m r ng chề ế ữ ệ ể ợ ệ ạ ư ở ộ ương trình đễ đáp ng cho yêu c u phát tri n c a h th ng các bi n này tr nên không phù h p.ứ ầ ể ủ ệ ố ế ở ợ

• Phù h p v i các thao tác trên đó : Tiêu chu n này giúp tăng tính hi u qu c a bài toán,ợ ớ ẩ ệ ả ủ

vi c xây d ng và phát tri n các gi i thu t đ n gi n, t nhi n h n, chệ ự ể ả ậ ơ ả ự ệ ơ ương trình đ t hi uạ ệ

qu cao h n v t c đ x lý ả ơ ề ố ộ ử

Ch ng h n chẳ ạ ương trình qu n lý nhân viên có liên quan đ n l u tr ( ki u file) , các thao tácả ế ư ữ ể

c a chủ ương trình là các vi c thệ ương xuyên là : Thêm, Xóa , S a , Tìm , Duy t danh sách …ử ệ

Do đó n u t ch c c u trúc d li u x lý tr c ti p các công vi c trên ki u FILE thì gi iế ổ ứ ấ ữ ệ ử ự ế ệ ể ả thu t s ph c t p, t c đ x lý ch m vì luôn ph i làm vi c trên b nh ngoài Trongậ ẽ ứ ạ ố ộ ử ậ ả ệ ộ ớ

trường h p này k t h p v i t ch c d li u là danh sách (dãy c u trúc , danh sách liên k t )ợ ế ợ ớ ổ ứ ữ ệ ấ ế

s d ng b nh trong , vi c x lí s nhanh h n , danh sách s nh n thông tin b t đ uử ụ ộ ớ ệ ử ẽ ơ ẽ ậ ắ ầ

chương trình t danh sách FILE và x lý cho đ n khi k t thúc chừ ử ế ế ương trình danh sách sẽ

đượ ổ ứ ư ạc t ch c l u l i trên file trước khi k t thúc.ế

• Ti t ki m tài nguyên h th ng : Khi xây d ng c u trúc d li u ch nên s d ng tàiế ệ ệ ố ự ấ ữ ệ ỉ ử ụnguyên h th ng v a đ đ m nhi m đệ ố ừ ủ ả ệ ược ch c năng c a nó Thông thứ ủ ường có 2 lo i tàiạnguyên thường đượ ưc l u tâm đó là CPU và b nh Tùy theo yêu c u x lý, n u y u tộ ớ ầ ử ế ế ố

x lý c n nhanh ti t ki m th i gian thì tài nguyên b nh c n s d ng t i u và ngử ầ ế ệ ờ ộ ớ ầ ử ụ ố ư ượ c

• Ki u d li u để ữ ệ ược xác đ nh là m t b <V,O> v i : V là t p các giá tr h pị ộ ộ ớ ậ ị ợ

l mà đ i t ng có th l u tr và O là t p các thao tác x lý có th th c thi trên đ iệ ố ượ ể ư ữ ậ ử ể ự ố

tượng

Ví d : Ki u s nguyên int : Trong đó s g m m t t p các giá tr nguyên có giá tr t -32768ụ ể ố ẽ ồ ộ ậ ị ị ừcho đ n +32767 và t p này cho phép th c hi n đế ậ ự ệ ược các phép tóan s h c + - * / %, cácố ọphép tóan quan h < <= > >= != == Trong khi đó ki u chu i không cho phép s d ng cácệ ể ỗ ử ụphép tóan s h c này… ố ọ

• Trong các ngôn ng l p trình ki u d li u đữ ậ ể ữ ệ ược phân làm các lo i sau :ạ

 Ki u d li u c b n : Là các ki u d li u mà các ngôn ng l pể ữ ệ ơ ả ể ữ ệ ữ ậ trình đã đ nh nghĩa s n Ch ng h n nh : Ki u s nguyên , s th c, kí t , lu n lý …ị ẵ ẳ ạ ư ể ố ố ự ự ậ

Trang 3

 Ki u có c u trúc :Là ki u d li u do ngể ấ ể ữ ệ ườ ử ụi s d ng đ nh nghĩaị

ki u khi dùng, tùy theo mô t thông tin c a đ i tể ả ủ ố ượng có các ki u đ nh nghĩa khácể ịnhau G m các ki u nh : Chu i, dãy, c u trúc , union, t p tin…ồ ể ư ỗ ấ ậ

 Ngoài ra còn có ki u qu n lí đ a ch ô nh : Ki u con tr (pointer).ể ả ị ỉ ớ ể ỏ

• Ví d : unsign int diem;ụ

Int tong,tich; float luong; char hoten[30],diachi[50]; Int day[30];

• Là các lo i d li u đ n gi n , không có c u trúc Chúng thạ ữ ệ ơ ả ấ ường là các giá tr vôị

hương nh s nguyên, s th c, kí t , các giá tr logic ….Do tính thông d ng và đ n gi nư ố ố ự ự ị ụ ơ ả

mà các lo i d li u này trong các ngôn ng l p trình đã đạ ữ ệ ữ ậ ược xây d ng s n nh cácự ẵ ưthành ph n c a ngôn ng đ gi m nh công vi c cho ngầ ủ ữ ể ả ẹ ệ ườ ậi l p trình

• V i các ki u c b n trong nhi u trớ ể ơ ả ề ường h p không th bi u di n đ y đ thông tin b nợ ể ể ễ ầ ủ ả

ch t s v t c a đ i tấ ự ậ ủ ố ượng th c t , do đó yêu c u ph i có ki u mà sao cho khi s d ngự ế ầ ả ể ử ụ

ngườ ử ụi s d ng có th t đ nh các ki u phù h p d a trên ki u c b n Đa s các ngôn ngể ự ị ể ợ ự ể ơ ả ố ữ

l p trình đ u cài đ t s n m t s ki u có c u trúc c b n và cung c p c ch cho ngậ ề ặ ẵ ộ ố ể ấ ơ ả ấ ơ ế ườ ậ i l ptrình viên có th t đ nh nghĩa ki u d li u m i.ể ự ị ể ữ ệ ớ

• Ki u d li u do ngể ữ ệ ườ ử ụi s d ng đ nh nghĩa ki u khi dùng, tùy theo mô t thông tin c aị ể ả ủ

đ i tố ượng có các ki u đ nh nghĩa khác nhau G m các ki u nh : Chu i, dãy, c u trúc ,ể ị ồ ể ư ỗ ấunion, t p tin…ậ

Trang 4

• Gi i thu t là các bả ậ ướ ể ảc đ gi i quy t v n đ bài toán M t v n đ có th có nhi uế ấ ề ộ ấ ề ể ề

phương pháp gi i quy t, tuy nhiên tùy thuôc vào t ng yêu c u có th l a ch n phả ế ừ ầ ể ự ọ ương phápphù h p.ợ

• Trong các chương trình x lý trên máy tính, tùy thu c vào yêu c u c n t i u b nhử ộ ầ ầ ố ư ộ ớ

ho c t i u v th i gian x lý mà m t v n đ có th đặ ố ư ề ờ ử ộ ấ ề ể ược gi i quy t b ng nhi u gi i thu tả ế ằ ề ả ậ khác nhau

• Đ vi t m t chể ế ộ ương trình ng d ng hi u qu vi c xác đ nh c u trúc d li u và gi iứ ụ ệ ả ệ ị ấ ữ ệ ả thu t t i u là v n đ quan tr ng Gi i thu t có th ph thu c vào c u trúc d li u t ch c,ậ ố ư ấ ề ọ ả ậ ể ụ ộ ấ ữ ệ ổ ứ tuy nhiên vi c l a ch n gi i thu t phù h p tùy theo yêu c u th c t ệ ự ọ ả ậ ợ ầ ự ế

• Trong vi c phân tích và thi t k h th ng , qua vi c kh o sát phân tích các gi i thu t cóệ ế ế ệ ố ệ ả ả ậ

th để ược bi u di n b ng các l u đ đ l u l i k t qu phân tích, đ ng th i làm n n t ngể ễ ằ ư ồ ể ư ạ ế ả ồ ờ ề ả cho vi c xây d ng chệ ự ương trình

2 Các b ướ c phân tích gi i thu t:: ả ậ

• Xác đ nh các đ c tr ng d li u s đị ặ ư ữ ệ ẽ ược làm d li u nh p xu t tính toán ữ ệ ậ ấ

• Xác đ nh các thao tác c n x lý , các thao tác tr u t ng có th đ tách bi t vi cị ầ ử ừ ượ ể ể ệ ệ phân tích v i vi c cài đ t.ớ ệ ặ

• Phân tích toán h c các gi i thu t nh m tìm ra các giá tr trung bình v th i gian vàọ ả ậ ằ ị ề ờ

trường h p x u nh t cho các đ i lợ ấ ấ ạ ượng c b n Nghĩa là th i gian x u nh t và t i u nh tơ ả ờ ấ ấ ố ư ấ trong các trường h p.ợ

Trang 5

Ch ươ ng 2 CÁC KI U D LI U CÓ C U TRÚC Ể Ữ Ệ Ấ

I KI U M NG Ể Ả :

1 Khái ni m ệ :

 M ng là m t ki u d li u bao g m nhi u ph n t có cùng ki u , khi l u tr m ngả ộ ể ữ ệ ồ ề ầ ử ể ư ữ ả

đượ ưc l u trên m t dãy các ô nh k ti p nhau , do đó thông qua v trí ô nh (ch s ) ta có thộ ớ ế ế ị ớ ỉ ố ể truy xu t 1 ph n t c a dãy ấ ầ ử ủ

 Cú pháp khai báo : Khai báo tr c ti p ( không có tên ki u ):ự ế ể

<Tên ki u c s > <tên bi n m ng> [ đ l n ] ể ơ ở ế ả ộ ớ ;

Khai báo gián ti p : ế typedef <tên ki u c s > <tên bi n m ng> [ đ l n ] ; ể ơ ở ế ả ộ ớ

 Truy xu t giá tr bi n m ng s d ng cú pháp ấ ị ế ả ử ụ <Tên bi n>(ch s ) ế ỉ ố

 Ví d ụ : typedef int day[50] ;

int a[5] ; day h ; Float b[10] ;

printf("Day phan tu da nhap : ");

for (i=1;i<=n;i++) printf("%4d",a[i]);

tongchan=tongchan + a[i];

} printf("\n");

printf("Tong cac so chan: %d

tongle=tongle + a[i];

} printf("\n");

printf("Tong cac so le: %d \n",tongle);

getch();

}

Ch ươ ng 3

Trang 6

II KI U C U TRÚC (RECORD) Ể Ấ

1 Khái ni m ệ :

 Trong th c t thông tin qu n lý không ch là m t giá tr , m t thành ph n (bi n ki u cự ế ả ỉ ộ ị ộ ầ ế ể ơ

b n) ho c nhi u giá tr nh ng m t ki u (bi n dãy), mà đây đ i tả ặ ề ị ư ộ ể ế ở ố ượng có th bao g m nhi uể ồ ề thông tin thành ph n và m i thành ph n có th thu c các ki u khác nhau Ch ng h n c u trúcầ ỗ ầ ể ộ ể ẳ ạ ấ

l u tr thông tin sinh viên g m các thành ph n : masv , tên sinh viên , tu i , phái , đ a ch , h cư ữ ồ ầ ổ ị ỉ ọ

b ng Trong trổ ường h p này C cho phép khai báo s d ng ki u c u trúc.ợ ử ụ ể ấ

 Ki u d li u c u trúc là ki u d li u mà d li u bao g m nhi u thành ph n , m iể ữ ệ ấ ể ữ ệ ữ ệ ồ ề ầ ỗ thành ph n có th thu c các ki u d li u khác nhau ầ ể ộ ể ữ ệ

Khai báo : struct <Tên ki u c u trúc> ể ấ

{ <Tên ki u1 > <bi n 1,bi n 2 > ; ể ế ế <Tên ki u2> <bi n 1,bi n2 > ể ế ế ; …………

• Ki u dãy là ki u d li u mà m t bi n bao g m nhi u ph n t cùng ki u , ki u c u trúc làể ể ữ ệ ộ ế ồ ề ầ ử ể ể ấ

ki u mà bi n là m t ph n t g m nhi u thành ph n thu c các ki u khác nhau Trong th c t m tể ế ộ ầ ử ồ ề ầ ộ ể ự ế ộ danh sách bao g m nhi u đ i tồ ề ố ượng , thông tin m i đ i t ng g m nhi u thành ph n là công vi cỗ ố ượ ồ ề ầ ệ

• Chú ý : Khi nh p d li u cho dãy c u trúc , đ i v i các thành ph n thu c ki u nguyên vàậ ữ ệ ấ ố ớ ầ ộ ể

th c, ta không th nh p tr c ti p thông qua &<tên bi n c u trúc>.<tên bi n tp> , mà ph iự ể ậ ự ế ế ấ ế ả

nh p thông qua bi n trung gian trung gian, sau đó gán l i ậ ế ạ

Trang 7

c a thành ph n mà có kích thủ ầ ướ ớc l n nh t Chính v y trong h p các thành ph n dùng chungấ ậ ợ ầ

m t vùng nh c a thành ph n có kích thộ ớ ủ ầ ướ ớc l n nh t hay nói cách khác cùng m t vùng nhấ ộ ớ

có th truy xu t dể ấ ưới các d ng khác nhau ạ

Khai báo : union <Tên ki u c u trúc> ể ấ

{ <Tên ki u1 > <bi n 1,bi n 2 > ; ể ế ế <Tên ki u2> <bi n 1,bi n2 > ể ế ế ; …………

 Vi c dùng ki u union r t thu n l i khi c n s d ng các c u trúc d li u mà n i dung c aệ ể ấ ậ ợ ầ ử ụ ấ ữ ệ ộ ủ

nó thay đ i tùy theo tr ng thái Ví d đ khai thông tin v m t con ngổ ạ ụ ể ề ộ ười ta có th khai báoể

m t ki u d li u nh sau:ộ ể ữ ệ ư

Struct hoso

{

Char hoten[30]; Int namsinh; Char noisinh[50];

Char gioitinh; //0 :N , 1 :Namữ

Char ttgd; //0 :Không có gia đình, 1 :Có gia đình

Nh v y tùy theo ngư ậ ười mà ta xét là nam hay n mà ta s truy xu t thông tin qua thành ph nữ ẽ ấ ầ

có tên là tenvo hay tenchong

Trang 9

IV KI U T P TIN Ể Ậ

1. KHÁI NI M: Ệ

• Ki u t p tin là ki u d li u mà d li u là m t t p các ph n t cùng ki u , để ậ ể ữ ệ ữ ệ ộ ậ ầ ử ể ượ ổ ứ c t ch c

l u tr b nh ngoài (thi t b l u tr : Đĩa t , quang … ) ư ữ ở ộ ớ ế ị ư ữ ừ

• Khai báo : Có th khai báo tr c ti p ho c gián ti p ể ự ế ặ ế

- Tr c ti p : ự ế FILE *<Bi n t p tin> ; ế ậ

- Gián ti p : ế typedef FILE *<ki u t p tin> ; ể ậ <ki u t p tin> <bi n t p tin> ; ể ậ ế ậ

Ví d : FILE *f1,*f2 ; /* Khai báo 2 bi n file f1,f2 */ụ ế

typedef FILE *taptin ; /* Khai báo ki u file taptin */ể

taptin f1,f2; /* Khai báo 2 bi n file f1,f2 */ế

• Ki u t p tin g m 2 lo i : file văn b n và file nh phân (c u trúc)ể ậ ồ ạ ả ị ấ

• Ki u file văn b n là lo i ki u file mà d li u là m t văn b n g m nhi u dòng m i dòngể ả ạ ể ữ ệ ộ ả ồ ề ỗ

là m t chu i kí t Độ ỗ ự ượ ưc l u tr dữ ướ ại d ng mã Ascii do đó có th truy xu t để ấ ượ ằc b ng b t kìấ

ph n m m văn b n nào.ầ ề ả

• Ki u file nh phân (còn g i là file có c u trúc ) là ki u file mà d li u bao g m nhi uể ị ọ ấ ể ữ ệ ồ ề

ph n t cùng ki u , đầ ử ể ượ ưc l u tr dữ ướ ại d ng mã nh phân Do đó ch có th truy xu t b ng cácị ỉ ể ấ ằhàm file

2. CÁC B ƯỚ C X LÍ KI U FILE Ử Ể :

Đ x lý file b t bu c ph i tuân th các thao tác nh sau :ể ử ắ ộ ả ủ ư

• M file (ở fopen)

• X lí file g m các thao tác nh đ c (ử ồ ư ọ fread , fgetc), ghi (fwrite , fputc) ,ki m tra (feof , ferror

) , di chuy n con tr file (ể ỏ rewind , fseek , ftell) , làm s ch vùng đ m ( ạ ệ fflush ,fflushall) , xóa file (unlink ).

Đóng file (fclose , fcloseall)

3. CÁC HÀM X LÍ FILE Ử :

a) Hàm m file ở :

<bi n file > =fopen ( <tên file> , <h ng ki u file > ) ế ằ ể

M file và gán tên file cho bi n file , thông qua bi n file đáp ng các ch c năng truy xu t trênở ế ế ứ ứ ấfile

<tên file > : G m đồ ường d n đĩa th m c và tên t p tin x lí ẫ ổ ư ụ ậ ủ

<h ng ki u file > ằ ể : G m các giá tr sau :ồ ị

 “rt” : M t p tin ki u văn b n đ đ c , n u t p tin ch a có s có l i ở ậ ể ả ể ọ ế ậ ư ẽ ỗ

 “wt” : M t p tin ki u văn b n m i đ ghi , n u t p tin đã t n t i s xóa cũ đở ậ ể ả ớ ể ế ậ ồ ạ ẽ ể ghi n i dung m i ộ ớ

 “at” : M t p tin ki u văn b n đã có đ ghi thêm n i dung vào , n u t p tinở ậ ể ả ể ộ ế ậ

ch a t n t i s t o t p tin m i đ ghi n i dung ư ồ ạ ẽ ạ ậ ớ ể ộ

 “rb” : M t p tin ki u nh phân đ đ c , n u t p tin ch a t n t i s báo l i ở ậ ể ị ể ọ ế ậ ư ồ ạ ẽ ỗ

 “wb” : M t p tin ki u nh phân m i đ ghi , n u t p tin đã t n t i s xóa cũở ậ ể ị ớ ể ế ậ ồ ạ ẽ

đ ghi n i dung m i ể ộ ớ

 “ab” : M t p tin ki u nh phân đã có đ ghi thêm n i dung vào , n u t p tinở ậ ể ị ể ộ ế ậ

ch a t n t i s t o t p tin m i đ ghi n i dung ư ồ ạ ẽ ạ ậ ớ ể ộ

 “r+t” : M t p tin ki u văn b n đ đ c/ghi n i dung , n u t p tin ch a t n t iở ậ ể ả ể ọ ộ ế ậ ư ồ ạ

s có l i ẽ ỗ

Trang 10

 “w+t” : M t p tin ki u văn b n đ đ c/ghi n i dung , n u t p tin đã t n t i sở ậ ể ả ể ọ ộ ế ậ ồ ạ ẽ

Ví d : FILE *f1,*f2 ; char tenfile1[30],tenfile2[30];ụ

Printf(“nhap ten file van ban : “); gets(tenfile1) ;f1=fopen(tenfile1,”rt”) ;

Printf(“nhap ten file sinh vien : “); gets(tenfile2) ;f1=fopen(tenfile2,”rb”) ;

b) Hàm ghi n i dung lên file ộ :

• Ghi n i dung lên file văn b n : ộ ả

fputc( <bi n kí t > , <bi n file>) ế ự ế

Ví d : FILE *f ; char c; ụ

f=fopen(“c:\vanban.txt”,”wt”) ; c=getchar(); fput(c,f );

• Ghi n i dung lên file nh phân :ộ ị

fwrite(&<bi n>, <kich thuoc bien> , <n> , <bi n file>) ế ế

&<bi n> : Là bi n tr ch đ n vùng nh ch a n i dung ghi vào file ế ế ỏ ỉ ế ớ ứ ộ

<kich thuoc bien> : Là kích thước bi n ghi file ế

<n> : S c u trúc c n ghi ố ấ ầ

 Hàm s tr v giá tr b ng s c u trúc th c s ghi đẽ ả ề ị ằ ố ấ ự ự ược

Ví d : fwrite(&nv,sizeof(nv),1,f ) ; ụ

c) Hàm đ c n i dung vào file ọ ộ :

• Đ c n i dung t file văn b n ra bi n kí t : ọ ộ ừ ả ế ự

<bi n kí t > = fgetc( <bi n file>) ế ự ế

Ví d : FILE *f ; char c; ụ

f=fopen(“c:\vanban.txt”,”rt”) ; c=fgetc(f );

• Đ c n i dung t file nh phân ra bi n :ọ ộ ừ ị ế

fread(&<bi n>, <kich thuoc bien> , <n> , <bi n file>) ế ế

&<bi n> : Là bi n tr ch đ n vùng nh ch a n i dung đ c t file ế ế ỏ ỉ ế ớ ứ ộ ọ ừ

<kich thuoc bien> : Là kích thước bi n ế

f) Hàm ki m tra l i file ể ỗ : ferror(<bi n file>) ; ế

Hàm ki m tra l i khi thao tác trên t p tin Tr v giá tr 0 n u không có l i , ngể ỗ ậ ả ề ị ế ỗ ượ ạc l i hàm tr giáả

tr khác 0 ị

g) Hàm ki m tra cu i file ể ố : feof(<bi n file>) ; ế

Trang 11

Hàm ki m tra con tr file cu i file ch a Tr v giá tr khác 0 n u cu i file , ngể ỏ ở ố ư ả ề ị ế ố ượ ạc l i hàm trả giá tr b ng 0 ị ằ

h) Hàm chuy n v trí tr file ể ị ỏ :

• Chuy n con tr v đ u fileể ỏ ề ầ : rewind (<bi n file>) ; ế

• Tr v v trí hi n t i c a con tr file :ả ề ị ệ ạ ủ ỏ ftell (<bi n file>) ; ế

• Chuy n con tr file đ n v trí c n thi t :ể ỏ ế ị ầ ế

fseek(<bi n file>,<so byte>,<vi tri xuat phat>) ế

- <so byte> : Ch đ nh s byte c n di chuy n ỉ ị ố ầ ể

- <vi tri xuat phat> : Xác đ nh v trí mà vi c d ch chuy n b t đ u Có các giá trị ị ệ ị ể ắ ầ ị sau : SEEK_SET ( ho c 0) :Xu t phát di chy n xu ng t đ u file –ặ ấ ể ố ừ ầSEEK_CUR (ho c 1) :Xu t phát t v trí hi n t i c a con tr , đi xu ng cu iặ ấ ừ ị ệ ạ ủ ỏ ố ố file n u <so byte> dế ương , ngượ ạ ầc l i đ u file n u <so byte> âm - SEEK_ENDế(ho c 2) :Xu t phát t cu i file ặ ấ ừ ố

i) Hàm đóng t p tin ậ :

1 Hàm đóng t p tin đang m :ậ ở fclose (<bi n file>) ; ế

2 Hàm đóng t t c các t p tin đang m :ấ ả ậ ở fcloseall () ;

j) Hàm xóa t p tin ậ : unlink(<tên file>) ;

Bài t p ậ :

Vi t ch ng trình qu n lí h s và l ng c a nhân viên ế ươ ả ồ ơ ươ ủ

Thông tin yêu c u g m : ầ ồ

Lý l ch nhân viên : ị

Mã nhân viên (8 ký t ) – Tên nhân viên (30 kí t ) – Tình tr ng gia đình ( 1 kí t D:đã ự ự ạ ự

có gia đình, C:ch a có gia đình ) – S con ( nguyên <=20) – Trình đ văn hóa ( 2 kí t : ư ố ộ ự C1:c p 1, C2:c p 2, C3:c p 3, DH:đ i h c, CH:cao h c) – L ng c b n (nguyên ấ ấ ấ ạ ọ ọ ươ ơ ả

<=1000000)

B ng ch m công_l ả ấ ươ ng:

Tháng (nguyên <20) – Năm ( nguyên <10000) – S ngày nghĩ có phép ( nguyên ố

<28) – S ngày nghĩ không phép (nguyên <28) – S ngày làm thêm (nguyên <28) – ố ố

K t qu công vi c (2 kí t : T:T t, TB:Đ t , K:Kém) – L ng th c lãnh trong tháng ế ả ệ ự ố ạ ươ ự (th c ) ự

Quy t c tính l ng nh sau: ắ ươ ư

L ng th c lãnh=L ươ ự ươ ng căn b n + Ph tr i ả ụ ộ

Trong đó n u: ế

- S con >2 Ph tr i=+5% l ng c b n ố ụ ộ ươ ơ ả

- Trình đ văn hóa =DH (CH) Ph tr i=+5%(10%) l ng c b n ộ ụ ộ ươ ơ ả

- Làm thêm Ph tr i=+4% l ng c b n / ngày ụ ộ ươ ơ ả

- Nghĩ không phép Ph tr i=-5% l ng c b n / ngày ụ ộ ươ ơ ả

- S con >2 Ph tr i=5% l ng c b n ố ụ ộ ươ ơ ả

Trang 12

• Thông qua bi n con tr có th ti p c n đế ỏ ể ế ậ ược các giá tr c a bi n ị ủ ế

Khai báo : <Ki u t p tin> * <Tên bi n con tr > ể ậ ế ỏ ;

Ví d : int *xcontro ; /* Khai báo bi n xcontro đ tr đ n m t bi n nguyên */ụ ế ể ỏ ế ộ ế

float *ycontro ; /* Khai báo bi n ycontro đ tr đ n m t bi n th c */ế ể ỏ ế ộ ế ự

char *ccontro ; /* Khai báo bi n ccontro đ tr đ n kí t */ế ể ỏ ế ự

II. TRUY XU T V I BI N CON TR Ấ Ớ Ế Ỏ :

• Đ truy xu t giá tr c a m t bi n con tr ta s d ng phép toán m t ngôi * : ể ấ ị ủ ộ ế ỏ ử ụ ộ *<tên

bi n tr > ế ỏ

Ví d : *xcontro , *ycontro …ụ

• Đ xác đ nh đ a ch c a m t bi n ta s d ng phép toán m t ngôi & : ể ị ị ỉ ủ ộ ế ử ụ ộ &<tên bi n> ế

Ví d : int x,y ; &x , &y , &xcontro , &ycontro …ụ

Ví d : int x, y ; int *px ;ụ

Phép gán : px=&x ; y=*px k t qu s gán giá tr c a bi n x cho bi n y ế ả ẽ ị ủ ế ế

Tương đương v i phép gán : y=x ;ớ

L nh px=&x ; y=*px +1 tệ ương đương v i y=x+1;ớ

L nh px=&x ; *px=0 tệ ương đương l nh gán x=0 ;ệLênh *px+=1 ho c *px++ t ng đặ ươ ương x=x+1 ho c x++ặ

printf("chuong trinh minh hoa truy cap gia tri kieu con tro\n");

printf("nhap so nguyen a :"); scanf("%d",&a);

printf("nhap so nguyen b :"); scanf("%d",&b);

printf("nhap so thuc c :"); scanf("%f",&c);

printf("gia tri bien a=%d , dia chi bien a=%d \n",a,&a);

pa=&a;

printf("gia tri bien a=%d , dia chi bien a=%d \n",*pa,pa);

pb=&b;

Trang 13

printf("gia tri bien b=%d , dia chi bien b=%d \n",*pb,pb);

printf("gia tri moi bien c=%f , dia chi bien c=%d \n",*pc,&c);

printf("gia tri moi bien c=%f \n",c);

Ví d :ụ float a[20] ;  phép toán &a[12] s cho đ a ch c a ph n t a[12] trong m ng.ẽ ị ỉ ủ ầ ử ả

• Khi khai báo m ng , trong chả ương trình tên m ng đả ược xem là m t h ng đ a ch ộ ằ ị ỉ

Ví d : khi khai báo float a[10] ; thì a s là h ng đ a ch ụ ẽ ằ ị ỉ

Trong C cú pháp : a t ươ ng đ ươ ng v i &a[0] ớ

a + i t ươ ng đ ươ ng v i &a[i] ớ *(a + i) t ươ ng đ ươ ng v i a[i] ớ

• Khai báo : float a[20] , *tro ;

- Phép gán : tro=&a[k] ; thì tro +i s tr đ n ph n t th a[k+i]ẽ ỏ ế ầ ử ứ

- khi gán : tro=a thì các cách vi t sau có giá tr nh nhau : ế ị ư

a[i] <-> *(a +i) <-> p[i] <-> *(p+i)

• Ví d : S d ng ki u con tr nh p vào m t dãy – in dãy và tính t ng các ph n t ụ ử ụ ể ỏ ậ ộ ổ ầ ử

printf("nhap so phan tu day :");scanf("%d",&n);

for (i=1 ;i<=n;i++)

{printf("nhap phan tu a[%d]=",i);

scanf("%f",&tro[i]); } /* co the viet scanf(“%f”,tro + i ) ; */

printf("Day da nhap :");

for (i=1 ;i<=n;i++)

printf("%6.2f",tro[i]); /* co the viet printf(“%6.2f”,*(tro + i )); */

printf("\n");

tong=0;

for (i=1 ;i<=n;i++)

tong=tong+tro[i]; /* co the viet tong=tong + *(tro + i ) ; */

printf("tong cac phan tu Day da nhap :%6.2f",tong);

getch();

}

Ngày đăng: 20/05/2014, 12:03

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w