C語言程序設(shè)計(jì) 教案 第9章 文件_第1頁
C語言程序設(shè)計(jì) 教案 第9章 文件_第2頁
C語言程序設(shè)計(jì) 教案 第9章 文件_第3頁
C語言程序設(shè)計(jì) 教案 第9章 文件_第4頁
C語言程序設(shè)計(jì) 教案 第9章 文件_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計(jì)教案第9章文件授課內(nèi)容第9章文件任課教師授課形式理實(shí)一體任課班級(jí)教學(xué)方法本節(jié)采用以教師為主導(dǎo),在教學(xué)過程中同時(shí)采用提問法、討論法和互動(dòng)式教學(xué)方法。教學(xué)重點(diǎn)(1)理解文件的概念。(2)理解文件指針的概念。(3)掌握文件的打開與關(guān)閉。(4)掌握文件的讀寫。教學(xué)難點(diǎn)文件操作的應(yīng)用。教學(xué)目標(biāo)教學(xué)目標(biāo)熟練掌握結(jié)構(gòu)體的定義和應(yīng)用。技能目標(biāo)學(xué)會(huì)文件的讀取及將程序運(yùn)行結(jié)果保存在文件中的能力。素質(zhì)目標(biāo)(1)通過文件的讀寫、文件管理的學(xué)習(xí),同學(xué)們學(xué)會(huì)保存資料、資料共享等日常工作。(2)大數(shù)據(jù)時(shí)代,同學(xué)們應(yīng)該增強(qiáng)信息保護(hù)的意識(shí),防止個(gè)人隱私數(shù)據(jù)泄露。思政目標(biāo)教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容:教學(xué)過程:復(fù)習(xí)舊課導(dǎo)出新課講授新課9.1文件的概念和基本操作9.1.1文件概述“文件”是指一組相關(guān)數(shù)據(jù)的有序集合。這個(gè)數(shù)據(jù)集有一個(gè)名稱,稱為文件名。實(shí)際上在前面的各章中已經(jīng)多次使用了文件。例如,源程序文件、目標(biāo)文件、可執(zhí)行文件和庫文件等。文件通常是駐留在外部介質(zhì)(如磁盤)上的,在需要使用時(shí)才調(diào)入內(nèi)存中來。1.文件的分類文件有很多種,大家熟知的有文本文件、圖形圖像文件、聲音文件、視頻文件等,它們可以有很多的分類方法。(1)從用戶角度分類。普通文件:駐留在磁盤或其他外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集??梢允窃次募?、目標(biāo)文件、可執(zhí)行程序,也可以是一組待輸出處理的原始數(shù)據(jù),或者是一組輸出的結(jié)果。設(shè)備文件:與主機(jī)相連的各種外部設(shè)備,如顯示器、打印機(jī)、鍵盤等。在操作系統(tǒng)中,把外部設(shè)備也看作是一個(gè)文件來進(jìn)行管理,把它們的輸入、輸出等同于對磁盤文件的讀和寫。(2)從文件編碼方式分類。ASCII文件:也稱為文本文件,這種文件在磁盤中存放時(shí)每個(gè)字符對應(yīng)1字節(jié),用于存放對應(yīng)的ASCII碼。二進(jìn)制文件:按二進(jìn)制的編碼方式來存放文件。(3)從文件的處理方式分類。緩沖文件系統(tǒng):也稱為標(biāo)準(zhǔn)文件系統(tǒng)或高層文件系統(tǒng),是目前常用的文件系統(tǒng),也是ANSIC建議使用的文件系統(tǒng)。它與具體的機(jī)器無關(guān),通用性好,功能強(qiáng),使用方便。非緩沖文件系統(tǒng):也稱為底層文件系統(tǒng),與機(jī)器有關(guān),使用較為困難,但它節(jié)省內(nèi)存,執(zhí)行效率較高。2.文件類型指針文件指針是指用一個(gè)指針變量指向一個(gè)文件。通過文件指針可對它所指的文件進(jìn)行各種操作。定義說明文件指針的一般格式如下:FILE*指針變量標(biāo)識(shí)符;其中,F(xiàn)ILE應(yīng)為大寫,它實(shí)際上是由系統(tǒng)定義的一個(gè)結(jié)構(gòu),該結(jié)構(gòu)中包含文件名、文件狀態(tài)和文件當(dāng)前位置等信息。例如,F(xiàn)ILE*fp;,表示fp是指向FILE結(jié)構(gòu)的指針變量,通過fp即可找存放某個(gè)文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,實(shí)施對文件的操作。習(xí)慣上也籠統(tǒng)地把fp稱為指向一個(gè)文件的指針。9.1.2文件的打開與關(guān)閉1.文件打開fopen()函數(shù)文件在進(jìn)行讀寫操作之前要先打開,使用完畢后要關(guān)閉。所謂打開文件,實(shí)際上是建立文件的各種有關(guān)信息,并使文件指針指向該文件,以便進(jìn)行其他操作。關(guān)閉文件則是斷開指針與文件之間的聯(lián)系,也就禁止再對該文件進(jìn)行操作。fopen()函數(shù)用來打開一個(gè)文件,一般格式如下:文件指針名=fopen(文件名,使用文件方式);其中,“文件指針名”必須是被說明為FILE類型的指針變量,“文件名”是被打開文件的文件名,其類型為字符串常量或字符串?dāng)?shù)組;“使用文件方式”是指文件的類型和操作要求。2.文件關(guān)閉fclose()函數(shù)文件使用完畢后應(yīng)將它關(guān)閉,以保證本次文件操作的有效?!瓣P(guān)閉”就是使文件指針變量不指向該文件,也就是文件指針變量與文件“脫鉤”。此后不能再通過該指針對原來關(guān)聯(lián)的文件進(jìn)行操作。用fclose()函數(shù)關(guān)閉文件,一般格式如下:fclose(文件指針名);例如,fclose(fp);,正常完成關(guān)閉文件操作時(shí),fclose()函數(shù)返回值為0,若返回值非零,則表示有錯(cuò)誤發(fā)生。可用ferror()函數(shù)來測試。9.1.3文件的讀寫文件打開之后,可以對文件進(jìn)行讀和寫。1.寫字符fputc()函數(shù)fputc()函數(shù)的功能是把一個(gè)字符寫入指定的文件中,即字符表達(dá)式的字符輸出到文件指針?biāo)赶虻奈募?。一般格式如下:fputc(字符表達(dá)式,文件指針);其中,字符表達(dá)式即待寫入的字符量,可以是字符常量或變量。例如,fputc('a',fp);,表示把字符a寫入fp所指向的文件中。2.讀字符fgetc()函數(shù)fgetc()函數(shù)的功能是從指定的文件中讀一個(gè)字符,該字符的ASCII碼值作為函數(shù)的返回值。若讀取字符時(shí)文件已經(jīng)結(jié)束或出錯(cuò),fgetc()函數(shù)返回文件結(jié)束標(biāo)記EOF,此時(shí)EOF的值為-1。一般格式如下:字符變量=fgetc(文件指針);例如,ch=fgetc(fp);,表示從打開的文件fp中讀取一個(gè)字符并送入ch中。6.格式化讀寫fscanf()函數(shù)和fprintf()函數(shù)fscanf()函數(shù)和fprintf()函數(shù)與前面使用的scanf()函數(shù)和printf()函數(shù)的功能相似,都是格式化讀寫函數(shù)。兩者區(qū)別在于fscanf()函數(shù)和fprintf()函數(shù)的讀寫對象不是鍵盤和顯示器,而是磁盤文件。一般格式如下:fscanf(文件指針,格式字符串,輸入列表);fprintf(文件指針,格式字符串,輸出列表);例如,fscanf(fp,"%d%s",&i,s);fprintf((fp,"%d%c",j,ch);9.1.4文件定位所謂文件位置指針,是系統(tǒng)設(shè)置的用來指向文件當(dāng)前讀寫位置的指針,不需用戶定義,但會(huì)隨著文件的讀寫操作而移動(dòng),因此,在對文件進(jìn)行操作前,需先清楚當(dāng)前文件位置指針的位置,在不同位置進(jìn)行操作時(shí),也需將文件位置指針定位在相應(yīng)位置。在C語言中,可以使用文件定位函數(shù)將文件位置指針定位在所要讀寫的任意位置,這些函數(shù)皆包含在頭文件“stdio.h”中。1.rewind()函數(shù)rewind()函數(shù)的功能是將文件位置指針移至文件起始處。一般格式如下:rewind(fp);其中,fp為由fopen()函數(shù)打開的文件指針。2.fseek()函數(shù)fseek()函數(shù)用于將文件位置指針移到指定位置。一般格式如下:fseek(fp,位移量,起始點(diǎn));其中,fp是文件指針,指向被移動(dòng)的文件;位移量是移動(dòng)的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),位移量可正可負(fù)。位移量為正數(shù)時(shí),位置指針向文件尾方向移動(dòng),位移量為負(fù)數(shù)時(shí),位置指針向文件頭方向移動(dòng)。起始點(diǎn)是位移量的參考點(diǎn),有三種取值:0代表文件開始位置,1代表當(dāng)前位置,2代表文件尾位置。例如,fseek(fp,50L,0);,表示以文件開頭為基準(zhǔn),文件位置指針向文件尾方向移動(dòng)50字節(jié)。3.ftell()函數(shù)ftell()函數(shù)用于尋找位置指針的當(dāng)前位置。一般格式如下:longn;n=ftell(fp);返回值為文件位置指針當(dāng)前位置相對于文件開始的偏移字節(jié)數(shù),若函數(shù)調(diào)用出錯(cuò),則返回-1。4.feof()函數(shù)feof()函數(shù)用于判斷文件位置指針是否在文件結(jié)束位置。一般格式如下:feof(fp);當(dāng)文件位置指針在文件末尾時(shí),返回值為1,否則返回值為0。5.ferror()函數(shù)大多數(shù)輸入/輸出函數(shù)不具有明確的出錯(cuò)信息返回,在調(diào)用各種輸入/輸出函數(shù)時(shí),若出現(xiàn)了錯(cuò)誤,除了函數(shù)返回值有所反映外,還可用ferror()函數(shù)檢查。一般格式如下:ferror(fp);其中,fp為指向當(dāng)前文件的指針。在使用各種輸入/輸出函數(shù)進(jìn)行讀寫時(shí)是否出錯(cuò),若出錯(cuò),返回值為1,否則返回0。6.clearerr()函數(shù)clearerr()函數(shù)使文件錯(cuò)誤標(biāo)志和文件結(jié)束標(biāo)志置為0。假設(shè)在調(diào)用一個(gè)輸入/輸出函數(shù)時(shí)出現(xiàn)錯(cuò)誤,ferror()函數(shù)值為一個(gè)非零值。在調(diào)用clearerr(fp)后,ferror(fp)的值變?yōu)?。只要出現(xiàn)錯(cuò)誤標(biāo)志,就一直保留,直到對同一文件調(diào)用clearerr()函數(shù)或rewind()函數(shù),或任何其他一個(gè)輸入/輸出函數(shù)。一般格式如下:clearerr(文件指針);9.2常見錯(cuò)誤分析9.2.1文件操作要素不全文件操作三要素為打開、打開判斷和關(guān)閉,初學(xué)者通常容易忘記判斷打開是否成功或關(guān)閉文件,而且由于這類錯(cuò)誤在程序編譯及鏈接時(shí)并不報(bào)錯(cuò),很容易被忽略。因此,在編寫文件操作程序時(shí)可先把三要素寫好,然后再添加其他操作程序段。9.2.2打開方式有誤要注意打開方式的差別,只寫方式為只可寫不可讀,只讀方式為只可讀不可寫。另外,寫方式會(huì)新建文件,若想保留原文件內(nèi)容,則應(yīng)選擇追加方式,否則原內(nèi)容會(huì)丟失。9.2.3文件位置指針混亂編程時(shí)應(yīng)了解當(dāng)前文件位置指針的位置,如需要從文件開始進(jìn)行操作,應(yīng)保證此時(shí)位置指針在文件的開始處,或用rewind()函數(shù)將指針強(qiáng)制定位。如果不了解當(dāng)前文件位置指針的位置,可用ftell()函數(shù)查找,然后再進(jìn)行合適的定位。9.3文件綜合應(yīng)用實(shí)戰(zhàn)9.3.1實(shí)戰(zhàn)背景《中國詩詞大會(huì)》(ChinesePoetryConference)是央視首檔全民參與的詩詞節(jié)目,節(jié)目以“賞中華詩詞、尋文化基因、品生活之美”為基本宗旨,力求通過對詩詞知識(shí)的比拼及賞析,帶動(dòng)全民重溫那些曾經(jīng)學(xué)過的古詩詞,分享詩詞之美,感受詩詞之趣,從古人的智慧和情懷中汲取營養(yǎng),涵養(yǎng)心靈。截至2022年5月3日,《中國詩詞大會(huì)》已經(jīng)播出六季。節(jié)目中的選手來自各行各業(yè),有用唱歌的方式教學(xué)生背詩的中學(xué)教師,也有用廣東話朗誦詩詞的圖書編輯,有喜歡玩游戲的日語專業(yè)的大學(xué)生,也有失去了雙臂的法律系大學(xué)生,有熱愛詩詞的警察,還有年輕的情侶一起來參賽的?!吨袊娫~大會(huì)》帶動(dòng)了全民學(xué)習(xí)、誦讀古詩詞的浪潮。9.3.2實(shí)戰(zhàn)目的(1)掌握用fopen()函數(shù)打開文件的操作。(2)掌握用fgetc()函數(shù)、fputc()函數(shù)、fgets()函數(shù)、fputs()函數(shù)、fscanf()函數(shù)和fprintf()函數(shù)等不同的方式,在屏幕上顯示文件的內(nèi)容。9.3.3實(shí)戰(zhàn)內(nèi)容《中國詩詞大會(huì)》是繼《中國漢字聽寫大會(huì)》《中國成語大會(huì)》《中國謎語大會(huì)》之后,由央視科教頻道推出的一檔文化類演播室益智競賽節(jié)目。(1)將上面的文字內(nèi)容,用文件名“中國詩詞大會(huì).txt”存放在計(jì)算機(jī)的D盤上。(2)用fopen()函數(shù)打開“中國詩詞大會(huì).txt”文件。(3)在屏幕顯示“中國詩詞大會(huì).txt”內(nèi)容。9.3.4實(shí)戰(zhàn)過程#include<stdio.h>#include<stdlib.h>intmain(){ FILE*fp; charch,str1[100],str2[100]; if((fp=fopen("d:\\中國詩詞大會(huì).txt","r"))==NULL) { printf("文件讀取失?。?); exit(0); /*退出程序*/ } ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } fclose(fp); printf("\n\n"); if((fp=fopen("d:\\中國詩詞大會(huì).txt","rt"))==NULL) { printf("文件讀取失??!"); exit(0); /*退出程序*/ } while(!feof(fp)) { fgets(str1,100,fp); printf("%s",str1); } fclose(fp); printf("\n\n"); if((fp=fopen("d:\\中國詩詞大會(huì).txt","rt"))==NULL) { printf("文件讀取失?。?); exit(0); /*退出程序*/ } while(!feof(fp)) { fscanf(fp,"%s",str2); printf("%s",str2); } fclose(fp); printf("\n\n"); return0;}9.3.5實(shí)戰(zhàn)意義通過實(shí)戰(zhàn),學(xué)習(xí)文本文件輸入輸出的同時(shí),了解、熟悉《中國詩詞大會(huì)》舉辦的目的和意義?!吨?/p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論