2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第13章 文件操作,C語言程序設計,本章學習內(nèi)容,? 二進制文件和文本文件? 文件的打開和關閉? 文件的順序讀寫與隨機讀寫? 標準輸入輸出及其重定向,Von J. Neumann Architecture,大腦,記憶裝置(Memory),眼睛和耳朵(I/O devices),,Where to put data in computer?,How to input or output data?,I/O設備,輸入設備鍵盤、

2、鼠標軟盤、硬盤、光驅(以文件的形式)掃描儀、視頻采集卡、電視卡、游戲桿、話筒……輸出設備顯示器、打印機軟盤、硬盤、 CD/DVD-RW (以文件的形式)音箱……單純的輸入設備或者單純的輸出設備越來越少,標準輸入/輸出,字符界面的操作系統(tǒng)一般都提供標準輸入與輸出設備DOS、Linux、UNIX…一般情況,標準輸入就是鍵盤,標準輸出就是終端顯示器操作系統(tǒng)有能力重定向標準輸入與輸出,比如讓文件作為標準輸入(標準輸出)

3、這種重定向程序本身是感覺不到的,DOS下的標準輸入/輸出重定向,程序prog如下main(){ char c; while ((c=getchar()) != '\n') putchar(++c);}輸入重定向prog outfile.txt,流(Stream),計算機中的流的概念一般稱為數(shù)據(jù)流,也叫做字節(jié)流、比特流File stream(文件流), Video strea

4、m(視頻流) and Audio stream(音頻流)in specific field. 可以倒流的數(shù)據(jù)流如果你想重新讀已經(jīng)讀過的數(shù)據(jù),或者要修改已經(jīng)寫入的數(shù)據(jù),可以發(fā)出流控(Flow Control)命令不會倒流的數(shù)據(jù)流也很多網(wǎng)絡上的數(shù)據(jù)流。網(wǎng)絡和數(shù)據(jù)線等介質只有很小的數(shù)據(jù)緩沖區(qū),沒有大量存儲的能力流的載體?磁盤文件、終端顯示器或打印機、存儲器等,外存,內(nèi)存容易健忘,所以數(shù)據(jù)必須保存在“不健忘”的外存上磁盤(Magn

5、etic Disks)光盤(CD、DVD)U盤(Flash Memory)......容量大、斷電后數(shù)據(jù)不丟失,可重復使用,永久保存一般都以文件的形式給用戶及應用程序使用,文件(File),文件一般指存儲在外部介質上有名字的一組相關數(shù)據(jù)的集合用文件可長期保存數(shù)據(jù),實現(xiàn)數(shù)據(jù)共享在C語言中,文件可泛指磁盤文件、終端顯示器或打印機……程序中的文件在程序運行時由程序在磁盤上建立一個文件,通過寫操作將數(shù)據(jù)存入該文件由程序打開磁

6、盤上的某個已有文件,并通過讀操作將文件中的數(shù)據(jù)讀入內(nèi)存供程序使用,文件(Files)與流 (Streams),程序通過文件打開操作把流與設備聯(lián)系起來,文件打開后,可在程序和文件之間交換數(shù)據(jù)程序通過文件關閉操作斷開流與文件的聯(lián)系所有流的性質都一樣因為流與設備無關,所以能寫入磁盤文件的同一函數(shù)也能寫入另一設備,如控制臺終端等文件的能力則不同如磁盤文件支持隨機存取,而鍵盤則不能,文件的存放(Storage),可以建立若干文件目錄(d

7、irectory\folder文件夾)在目錄里保存文件同一級目錄里保存的文件不能同名對使用者而言,只要知道文件的路徑(path, 全目錄)和文件名,就能使用該文件C:\home\Sunner\main.c 這都是托OS的福,13.1二進制文件和文本文件,文件的類型(Type of Files)?二進制文件是一種字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲形式(二進制)存儲到文件如整數(shù)123,在內(nèi)存占2個字節(jié),在文件中也

8、占2個字節(jié)文本文件/ASCII碼文件是一種字符序列,文件中存儲每個字符的ASCII碼如整數(shù)123在文件中占3個字節(jié),分別存放這3個字符的ASCII碼,如果存1234呢?,文件的格式(Format of Files),數(shù)據(jù)必須按照存入的類型讀出,才能恢復其本來面貌 公開的標準格式如bmp、tif、gif、jpg和mp3等類型的文件,有大量軟件能生成和使用這些類型的文件 不公開或加密的文件格式如Microsoft Word的

9、doc格式就不公開,所以至今沒有Word以外的其他軟件能完美地讀出doc文件,緩沖型和非緩沖型文件系統(tǒng),緩沖型文件系統(tǒng)指系統(tǒng)自動在內(nèi)存中為每一個正在使用的文件開辟一個緩沖區(qū),在讀寫文件時,數(shù)據(jù)先送到緩沖區(qū),再傳給C程序或外存上緩沖型文件系統(tǒng)利用文件指針標識文件緩沖型文件系統(tǒng)中的文件操作,也稱高級文件操作 高級文件操作函數(shù)是ANSI C定義的文件操作函數(shù),具有跨平臺和可移植的能力 非緩沖型文件系統(tǒng)不會自動設置文件緩沖區(qū),緩沖區(qū)

10、需由程序員自己設定非緩沖型文件系統(tǒng)沒有文件指針,它使用稱為文件號的整數(shù)來標識文件,13.2文件的打開和關閉,下面介紹的函數(shù)均定義在中FILE *fopen(const char *filename, const char *mode);FILE *fp = fopen("C:\\CONFIG.SYS", "rw");filename是文件名包含路徑。如果不含路徑,表示打開當前目錄下的文

11、件mode是打開方式常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫、讀寫和添加"rb"表示只讀二進制文件返回值為指向此文件的指針,留待以后使用如果打開失敗,返回值為NULL,文件打開方式(mode):,對應二進制文件,對應文本文件,文件指針(File Pointer),FILE *fp ;是FILE型指針變量,

12、標識一個特定的磁盤文件與文件相關聯(lián)的每個流都有一個FILE類型的控制結構,定義有關文件操作的信息,用戶絕對不應修改,typedef struct { short level; /*緩沖區(qū)′滿′或′空′的程度*/ unsigned flags; /*文件狀態(tài)標志*/ char fd; /*文件描述符*/ unsigned char hold;

13、 /*如無緩沖區(qū)不讀字符*/ short bsize; /*緩沖區(qū)的大小*/ unsigned char *buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/ unsigned char *curp; /*指針當前的指向*/ unsigned istemp; /*臨時文件指示器*/ short token; /*用于有效性檢查*/ }FILE;

14、 /*在stdio.h文件中定義*/,13.2文件的打開和關閉,int fclose(FILE *fp);把遺留在緩沖區(qū)中的數(shù)據(jù)寫入文件,實施操作系統(tǒng)級的關閉操作同時,釋放與流聯(lián)系的文件控制塊,以后可以重復使用這部分空間多數(shù)情況下,系統(tǒng)限制同時處于打開狀態(tài)的文件總數(shù),因此,打開文件前先關閉無用文件是必要的fclose函數(shù)的返回值當順利地執(zhí)行了關閉操作,返回值為0如果返回值為非零值,表示關閉時有錯誤一

15、般只有驅動器中無盤或盤空間不夠時才失敗,關閉失敗會引起數(shù)據(jù)丟失、文件的破壞和程序中的隨機錯誤,13.3按字符讀寫文件,字符讀寫int fgetc(FILE *fp);從fp讀出一個字符,將位置指針指向下一個字符若讀成功,則返回該字符,若讀到文件尾,則返回EOF(EOF是一個符號常量,在stdio.h中定義為-1)int fputc(int c, FILE *fp);向fp輸出字符c若寫入錯誤,則返回EOF,否則返回c,13.

16、3按字符讀寫文件,【例13.1】從鍵盤輸入一串字符,轉存到磁盤文件上,,,【例13.2】 將0~127之間的ASCII字符寫到文件中,然后從文件中讀出并顯示到屏幕上,,,函數(shù)feof()檢查是否到達文件尾,當文件位置指針指向文件尾時,返回非0值,否則返回0值,,【例13.3】 修改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值,,,,【例13.3】 修

17、改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值,,,,,為什么在輸出第128個字符的ASCII碼值后又輸出了一個-1呢?,【例13.3】 修改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值,,,,,為什么在輸出第128個字符的ASCII碼值后又輸出了一個-1呢?,使用函數(shù)feof()時,僅當讀到文件結束符時才能判斷

18、出到達文件尾,而文件結束符是一個值為-1的不可打印的控制字符,,if (!iscntrl(ch)),13.3按字符讀寫文件,字符串讀寫 char *fgets(char *s,int n,FILE *fp);從fp所指的文件中讀取字符串并在字符串末尾添加'\0',然后存入s,最多讀n-1個字符當讀到回車換行符、文件末尾或讀滿n-1個字符時,函數(shù)返回該字符串的首地址特例:fgets(buf, sizeof(bu

19、f), stdin); int fputs(const char *s, FILE *fp);將字符串寫入文件中若出現(xiàn)寫入錯誤,則返回 EOF,否則返回一個非負數(shù),13.3按字符讀寫文件,【例13.4】用fgets()改寫例13.1程序,從鍵盤輸入一串字符,添加到文本文件demo.txt的末尾。假設文本文件demo.txt中已有內(nèi)容為:I am a student.,,,,13.4按格式讀寫文件,格式化讀寫int fscan

20、f(FILE *fp,const char *format,...);fscanf(fp, "%d,%6.2f", &i, &t);第1個參數(shù)為文件指針,第2 個參數(shù)為格式控制參數(shù),第3 個參數(shù)為地址參數(shù)表列int fprintf(FILE *fp,const char *format,...);fprintf(fp, "%d,%6.2f", i, t);第1個參數(shù)為文

21、件指針,第2 個參數(shù)為格式控制參數(shù),第3 個參數(shù)為輸出參數(shù)表列,將平均分作為STUDENT結構體的成員,使函數(shù)的接口更簡潔,【例13.5】修改例12.7程序,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件score.txt中,【例13.5】修改例12.7程序,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件score.txt中,【例13.5】修改例12.7程序,計算每個學生的4門課程的平均分,將學生

22、的各科成績及平均分輸出到文件score.txt中,【例13.5】修改例12.7程序,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件score.txt中,,,,,【例13.6】在例13.5基礎上, 從文件score.txt中讀出每個學生的4門課的平均分,各科成績及平均分,【例13.6】在例13.5基礎上, 從文件score.txt中讀出每個學生的4門課的平均分,各科成績及平均分,,,,13.5按數(shù)據(jù)塊讀寫文件,按數(shù)據(jù)塊

23、讀寫從fp所指的文件中讀取數(shù)據(jù)塊并存儲到buffer指向的內(nèi)存中buffer是待讀入數(shù)據(jù)塊的起始地址size是每個數(shù)據(jù)塊的大小(待讀入的每個數(shù)據(jù)塊的字節(jié)數(shù))count是最多允許讀取的數(shù)據(jù)塊個數(shù)(每個數(shù)據(jù)塊size個字節(jié))返回實際讀到的數(shù)據(jù)塊個數(shù)將buffer指向的內(nèi)存中的數(shù)據(jù)塊寫入fp所指的文件,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件student.txt中,

24、然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件student.txt中,然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件student.txt中,然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的

25、各科成績及平均分輸出到文件student.txt中,然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件student.txt中,然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,,【例13.7】在前幾個實例基礎上,計算每個學生的4門課程的平均分,將學生的各科成績及平均分輸出到文件student.txt中,然后再從文件中讀出數(shù)據(jù)并顯示到屏幕上,作業(yè),習題13.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論