kỹ thuật lập trình C chuyên nghiệp phần 9 pptx

16 346 0
kỹ thuật lập trình C chuyên nghiệp phần 9 pptx

Đ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

Tậ ti Nhị hâTậ ti Nhị hâ Tậ p ti n Nhị p hâ n Tậ p ti n Nhị p hâ n CáCá hếhế độđộ ởở tậtậ titi hịhị hâhâ  Cá c Cá cc hế c hế độđộ m ở m ở tậ p tậ p ti n ti nn hị n hị phâ n phâ n::  “rb”“rb” ::mởmở chỉchỉđọcđọc  “b”“b” hihi (hi(hi đèđè lêlê tậtậ titi ũũ h ặh ặ tt ớiới ếế tậtậ  “ w b”“ w b” ::g hi g hi ( g hi( g hi đèđè lê n lê n tậ p tậ p ti n ti nc ũ c ũ h o ặ c h o ặ c t ạo t ạom ới m ới n ế un ế u tậ p tậ p tintin khôngkhông cócó trêntrên đĩa)đĩa)  “ ab ”“ ab ” :: ghighi nốinối vàovào cuốicuối tậptập tintin  abab :: ghighi nốinối vàovào cuốicuối tậptập tintin  “rb+”“rb+” :: đọc/ghiđọc/ghi TậpTập tintin phảiphảicócó trêntrên đĩađĩa  “b+”“b+” :: tạotạo mớimới tậptập tintin chocho phépphép đọcđọc ghighi  “ w b+”“ w b+” :: tạotạo mớimới tậptập tintin chocho phépphép đọcđọc ghighi  “ab+”“ab+” :: đọc,đọc, ghighi vàovào cuốicuốitậptập tintin TạoTạomớimớitậptập tintin nếunếu tậptập tintin chưachưa cócó trêntrên đĩađĩa tậptập tintin chưachưa cócó trêntrên đĩađĩa Đ hi tậ ti Nhị hâĐ hi tậ ti Nhị hâ Đ ọc g hi tậ p ti n Nhị p hâ n Đ ọc g hi tậ p ti n Nhị p hâ n  freadfread() : () : đọcđọc size_tsize_t frea d frea d ( void *( void *PtrPtr, , size_tsize_t ItemSizeItemSize, , size_tsize_t NumItemNumItem, FILE * , FILE * fpfp );); freadfread đọcđọcNumItemNumItem khốikhốidữdữ liệuliệu, , mỗimỗikhốikhốicócó kíchkích thướcthước ItemSizeItemSize t ừ t ừ f p f p vàvà chứachứavàovào vùn g vùn g nhớnhớ xácxác đ ị nhđ ị nh bởibởiPtrPtr pp gg ịị freadfread trảtrả vềvề sốsố khốikhốidữdữ liệuliệu đọcđọc đượcđược NếuNếucócó lỗilỗihoặchoặcEOF EOF thìthì giágiá trịtrị trảtrả vềvề nhỏnhỏ hơnhơnNumItemNumItem  fwritefwrite() : () : ghighi itit fitfit (tid*(tid* PtPt itit It SiIt Si s i ze_ t s i ze_ t f wr it e f wr it e ( cons t vo id *( cons t vo id * Pt r Pt r, , s i ze_ t s i ze_ t It em Si ze It em Si ze,, size_tsize_t NumItemNumItem, FILE * , FILE * fpfp );); fwritefwrite ghighi khốikhối((NumItemNumItem x x ItemSizeItemSize) ) xácxác dịnhdịnh bởibởiPtrPtr rara fp.fp.  ChépChép 33 mụcmục từtừ tậptập tintin filenamefilename vàovào vùngvùng nhớnhớ trỏtrỏ bởibởi ptrptr  ChépChép 33 mụcmục từtừ tậptập tintin filenamefilename vàovào vùngvùng nhớnhớ trỏtrỏ bởibởi ptrptr ptrptr fpfpÆÆfilenamefilename ptrptr Ctỏ FILECtỏ FILE C on t r ỏ FILEC on t r ỏ FILE MộtMột tậtậ titi khikhi ởở đđ ảả lýlý thôthô ộtột t ỏt ỏ  MộtMột tậ p tậ p ti n ti nsausau khikhi m ở m ở đ ược đ ượcqu ả nqu ả n lýlý thô ng thô ng quaqua m ột m ột concon t r ỏt r ỏ FILEFILE  KhiKhi mởmở tậptập tintin (wb,(wb, rb),rb), concon trỏtrỏ FILEFILE chỉchỉđếnđến đầuđầutậptập tintin  KhiKhi mởmở tậptập tintin (ab),(ab), concon trỏtrỏ FILEFILE chỉchỉđếnđếncuốicuốitậptập tintin  ConCon trỏtrỏ FILEFILE chỉchỉđếnđếntừngtừng bytebyte trongtrong tậptập tintin nhịnhị phânphân  SauSau mỗimỗilầnlần đọcđọctậptập tin,tin, concon trỏtrỏ FILEFILE sẽsẽ didi chuyểnchuyển điđimộtmột sốsố bytebyte bằngbằng kíchkích thướcthước (byte)(byte) củacủa khốikhối dữdữ liệuliệu đọcđọc đượcđược sốsố bytebyte bằngbằng kíchkích thướcthước (byte)(byte) củacủa khốikhối dữdữ liệuliệu đọcđọc đượcđược fseekfseek (),(), fseekfseek (), (),  CácCác hằnghằng dùngdùng trongtrong didi chuyểnchuyển con con trỏtrỏ FILEFILE #define#define SEEK SETSEEK SET 00 #define#define SEEK _ SETSEEK _ SET 00 #define #define SEEK_CURSEEK_CUR 11 #define #define SEEK_ENDSEEK_END 22  intint fseekfseek( FILE *( FILE *fpfp, long , long intint offset, offset, intint whence );whence ); fseekfseek didi chuyểnchuyển con con trỏtrỏ fpfp đếnđếnvịvị trítrí offset offset theotheo mốcmốc whence whence  offset: offset: khoảngkhoảng cáchcách (byte) (byte) cầncầndidi chuyểnchuyển tínhtính từtừ vịvị trítrí hiệnhiệntạitại. . ềề ốố ềề ầầ (offset > 0: (offset > 0: điđiv ề v ề p hía p hía cu ố icu ố itậptập tin, offset < 0: tin, offset < 0: ngượcngượcv ề v ề đ ầ uđ ầ utậptập tin)tin)  whence:whence: SEEK SET:SEEK SET: tínhtính từtừ đầuđầu tậptập tintin  whence:whence: SEEK _ SET: SEEK _ SET: tínhtính từtừ đầuđầu tậptập tintin SEEK_CUR: SEEK_CUR: tínhtính từtừ vịvị trítrí hiệnhiệnhànhhành củacủa con con trỏtrỏ SEEK_END: SEEK_END: tínhtính từtừ cuốicuốitậptập tintin  fseekfseek trảtrả vềvề: 0 : 0 nếunếu thànhthành côngcông, <>0 , <>0 nếunếudidi chuyểnchuyểncócó lỗilỗi ft llft ll ()() àà id()id() ft e llft e ll () () v à v à rew i n d() rew i n d() idid đặtđặt l il i ịị títí t ỏt ỏ ềề đầđầ tậtậ titi  rew i n d rew i n d đặtđặt l ạ il ạ i v ị v ị t r ít r í con con t r ỏt r ỏ v ề v ề đầ u đầ u tậ p tậ p ti n. ti n. void rewind ( FILE * void rewind ( FILE * fpfp );); void rewind ( FILE void rewind ( FILE fpfp );); tươngtương đươngđương vớivới fseekfseek ( ( fpfp, 0L, SEEK_SET);, 0L, SEEK_SET);  ftellftell trảtrả vềvề vịvị trítrí offset offset hiệnhiệntạitạicủacủa con con trỏtrỏ long long intint ftellftell ( FILE * ( FILE * fpfp );); NếuNếucócó lỗilỗi, , ftellftell trảtrả vềvề 1L1L Ví dVí d á đị hkí h h ớ ậ iá đị hkí h h ớ ậ i Ví d ụ: Ví d ụ: x á c đị n h kí c h t h ư ớ c t ậ p t i n.x á c đị n h kí c h t h ư ớ c t ậ p t i n. //// kh ikh i bábá biếbiế NN thậthậ  // // kh a ikh a i bá o bá o biế n biế nc N nc N n thậ n thậ n if (if ( ff ff (( Fil NFil N ““ bb ”)) N ULL )”)) N ULL ) 1.1. if ( if ( f p f p= = f open f open ( ( Fil e N ame Fil e N ame, “ , “ r b r b ” ) ) == N ULL )” ) ) == N ULL ) 2.2. fprintffprintf( ( stderrstderr, “Cannot open %s, “Cannot open %s\\n”, n”, FileN ameFileN ame );); ll 3.3. e l see l se 4.4. {{ fkfk (( ff N )N ) 5.5. f see kf see k ( ( f p f p, 0, SEEK_E N D ) ;, 0, SEEK_E N D ) ; 6.6. FileSizeFileSize = = ftellftell( ( fpfp );); 7.7. p rintf p rintf( “File size : %d bytes( “File size : %d bytes \\ n “, n “, FileSizeFileSize );); 8.8. fclosefclose( ( fpfp );); 9.9. }} V ị V ị tr í tr í con con trỏtrỏ: : f g et p osf g et p os () () vàvà ịị gpgp ()() ffssetposetpos()()  vớivới cáccác tậptập tin tin cócó kíchkích thướcthướccựccựclớnlớn fseekfseek vàvà ftellftell sẽsẽ bịbị giớigiớihạnhạnbờibờikíchkích thướcthướccủacủa offset.offset.  DùngDùng intint fgetposfgetpos ( FILE *( FILE *fpfp, , fpos_tfpos_t *position);*position); intint fsetposfsetpos ( FILE *( FILE *fpfp, const , const fpos_tfpos_t *position);*position); Xó à đổitê tậ tiXó à đổitê tậ ti Xó a v à đổi tê n tậ p ti n Xó a v à đổi tê n tậ p ti n ThTh hiệhiệ áá  Th ực Th ực hiệ n hiệ nxo á xo á intint remove(const char * filename);remove(const char * filename); intint remove(const char filename);remove(const char filename);  đổiđổi têntên tậptập tintin  đổiđổi têntên tậptập tin tin intint rename(const char *rename(const char *oldnameoldname, const char *, const char *newnamenewname);); Chú ý khi là iệ ớitậ tiChú ý khi là iệ ớitậ ti Chú ý khi là m v iệ c v ới tậ p ti n Chú ý khi là m v iệ c v ới tậ p ti n KhiKhi ởở tậtậ ti filti fil tậtậ titi àà hảihải ằằ ùù thth  KhiKhi m ở m ở tậ p tậ p ti n fil ename, ti n fil ename, tậ p tậ p ti n ti n n à yn à y phảiphải n ằ mn ằ mc ù ngc ù ng thưthư mụcmụccủacủachươngchương trìnhtrình hoặchoặc  phảiphải cungcung cấpcấp đầyđầy đủđủ đườngđường dẫndẫn đếnđếntậptập tintin vdvd: C:: C:\\baitapbaitap\\taptin.dattaptin.dat viếtviếtnhưnhư thếthế nàonào? ? fpfp = = fopenfopen( “C:( “C:\\baitapbaitap\\taptin.dat”, “taptin.dat”, “rbrb” );” ); SAI RỒISAI RỒI ìì óó kýký tt đặđặ biệtbiệt ‘‘ \\ ’’ êê iếtiết đúđú ẽẽ làlà  v ì v ì c ó c ó kýký tựtự đặ c đặ c biệtbiệt ‘‘ \\ ’ ’ n ê nn ê nv iết v iết đú ng đú ng s ẽ s ẽ làlà :: fpfp = = fopenfopen( “C:( “C:\\\\baitapbaitap\\\\taptin.dat”, “taptin.dat”, “rbrb” );” ); [...]... dòng lệnh chương trình Khi gọi chạy một chương trình, chúng ta c thể cung c p c c trình, tham số tại dòng lệnh gọi chương trình ố trình ví dụ: dir A:\* .c /w dụ: A:\ “copy”, “A:\* c và “/w” là hai tham số điều khiển chương copy “A:\* .c A:\ A: /w trình trình commandcommand-line arguments arguments C c tham số dòng lệnh đư c tham chiếu qua hai đối số khai báo trong hàm main main ( int argc, char * argv[... lần ngư c đư c để giải c c bài toán ở c p độ cao hơn cho đến khi giải xong bài toán ban đầu đầu Ví dụ: dụ: định nghĩa giai thừa: n!=n*(n-1)! với 0!=1 thừa: n!=n*(n!=1 Dãy Fibonacci: f0=1, f1=1 và fn =fn-1+fn-2 ∀n>1 Fibonacci: n>1 Danh sách liên kết kết ế Phạm Thế Bảo Mọi thuật toán đệ quy gồm 02 phần: phần: Phần c sở: sở: Là c c trường hợp không c n th c hiện lại thuật toán (không y yêu c u gọi đệ... quy - Recursion Phạm Thế Bảo Trường Đại h c Khoa h c Tự nhiên Tp.HCM Tp HCM Thuật toán đệ quy ậ ệq y Là mở rộng c bản nhất c a khái niệm thuật toán toán Tư tưởng giải bài toán bằng đệ quy là đưa bài toán hiện tại về một bài toán c ng loại, c ng tính chất (đồng dạng) nhưng ở c p độ thấp hơn, quá trình này hơn, tiếp t c cho đến khi bài toán đư c đưa về một c p độ mà tại đó c thể giải đư c Từ c p độ... toán (không y yêu c u gọi đệ quy) Nếu thuật toán đệ quy không c phần g q y) quy) q y g p này thì sẽ bị lặp vô hạn và sinh lỗi khi th c hiện Đôi l c gọi hiện là trường hợp dừng dừng Phần đệ quy: ầ quy: Là phần trong thuật toán c yêu c u gọi đệ quy, yêu c u th c hiệ thuật toán ở một c p độ thấp h h hiện h ậ á ộ ấ hấ hơn hơn Phạm Thế Bảo C c loại đệ quy ạ ệq y C 03 loại đệ quy: quy: 1 Đệ quy đ i:... argc, char * argv[ ] ) argc, g argv[ g { } argc: argc: argument count argv: argv: argument vector Th Tham số dòng lệ h – ví dụ ố dò lệnh íd 1 2 3 4 4 5 6 6 7 8 8 // addint .c addint.exe void main (int argc, char * argv [ ]) (int argc, { int res = 0; printf (“ Program %s\n “, argv[0]); ( %s\ argv[0]); for ( int i = 1; i < argc; i++ ) argc; res + atoi(argc[i]); += atoi(argc[ printf (“ %d\n”, res );... hiệ thuật toán ở một c p độ thấp h h hiện h ậ á ộ ấ hấ hơn hơn Phạm Thế Bảo C c loại đệ quy ạ ệq y C 03 loại đệ quy: quy: 1 Đệ quy đ i: đuôi đuôi: Là loại đệ quy mà trong một c p đệ quy chỉ c duy nhất một lời gọi đệ quy xuống c p thấ ột i ố ấ thấp thấp Ví dụ: dụ: i Tính giai thừa í h i i hừ giaiThua(int n){ if(n==0 if(n==0) giaiThua = 1; else giaiThua= n*giaiThua(n-1); n*giaiThua(n} Phạm Thế Bảo . ); ThamTham sốsố dòngdòng lệnhlệnh chươngchương trìnhtrình ThamTham sốsố dòngdòng lệnhlệnh chươngchương trìnhtrình  KhiKhi gọigọichạychạymộtmộtchươngchương trìnhtrình, , chúngchúng tata c c thểthể cungcung c pcấp c cc c ốố thamtham s ố s ố tạitại dòngdòng lệnhlệnh gọigọichươngchương trìnhtrình víví dụdụ:. độđộ màmà tạitại đóđó c c thểthể giảigiải đư c ư c TừTừ c pcấp độđộ nàynày tata lầnlần ngượcngư c màmà tạitại đóđó c c thểthể giảigiải đư c ư c TừTừ c pcấp độđộ nàynày tata lầnlần ngượcngư c đểđể giảigiải c cc c bàibài toántoán ởở c pcấp độđộ caocao hơnhơnchocho đếnđếnkhikhi. didi chuyểnchuyển điđimộtmột sốsố bytebyte bằngbằng kíchkích thướcthư c (byte)(byte) c acủa khốikhối dữdữ liệuliệu đ c c đư c ư c sốsố bytebyte bằngbằng kíchkích thướcthư c (byte)(byte) c acủa khốikhối dữdữ liệuliệu đ c c đư c ư c

Ngày đăng: 22/07/2014, 16:21

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan