郭建軍
(長治學(xué)院 數(shù)學(xué)系,山西 長治 046011)
隨著計算機硬件、軟件的不斷發(fā)展,計算機數(shù)據(jù)處理技術(shù)經(jīng)歷了人工管理、文件管理、數(shù)據(jù)庫管理三個主要階段。當(dāng)今應(yīng)用最廣泛的數(shù)據(jù)處理技術(shù)是數(shù)據(jù)庫管理,這使得許多語言處理系統(tǒng)中都有基于數(shù)據(jù)庫編程的內(nèi)容。例如VC++6.0中就有ODBC(Open Database Connectivity) 數(shù)據(jù)庫編程、ADO(ActiveX Data Object)數(shù)據(jù)庫編程,通過ODBC和ADO在VC++6.0語言中可訪問外部數(shù)據(jù)中的自由表[1]213-216。其實每一種語言處理程序中都有自身的文件系統(tǒng),這就是數(shù)據(jù)處理中的文件管理。在學(xué)習(xí)C語言程序設(shè)計的過程中,由于進(jìn)度安排等相關(guān)因素的影響,使得文件操作的相關(guān)內(nèi)容無法完整加以學(xué)習(xí)。文章通過對C語言文件的操作及應(yīng)用的介紹,希望引起對文件操作內(nèi)容學(xué)習(xí)的重視和研究。
文件是各種語言環(huán)境中最重要的內(nèi)容。在C語言程序設(shè)計中提供了一定的文件類型,以及對文件的操作。通過對文件類型的了解和對文件操作命令的使用,可靈活地對文件進(jìn)行處理。
在計算機系統(tǒng)中,文件分類的方法有很多。在C語言系統(tǒng)中對文件的分類可按輸入和輸出方式和存放在存儲介質(zhì)的形式來分類。
(1)按輸入輸出方式分類,可分為順序存取文件和直接存取文件[2]214-215。順序存取文件的特點是:當(dāng)“打開”這種類型文件,進(jìn)行讀或?qū)懖僮鲿r,總是從文件的開始進(jìn)行讀或?qū)憽V苯哟嫒∥募奶攸c是:當(dāng)“打開”這種類型文件,進(jìn)行讀或?qū)憰r,可調(diào)用C語言的庫函數(shù)指定開始讀或?qū)懙淖止?jié)號,然后直接對此位置上的數(shù)據(jù)進(jìn)行讀,或把數(shù)據(jù)寫到此位置上。
(2)按存放在存儲介質(zhì)上形式分類,可分為文本文件和二進(jìn)制文件[2]214-215。文本文件的特點是:按文件內(nèi)容字符的ASCII形式存儲在磁盤介質(zhì)上,這種類型的文件,用Windows下的記事本可直接打開,也可直接輸出到終端屏幕。二進(jìn)制文件的特點是:文件中的數(shù)據(jù)是按二進(jìn)制形式存儲在磁盤介質(zhì)上,數(shù)據(jù)類要決定字節(jié)大小,且存儲時無法轉(zhuǎn)變。這種類型的文件不能直接輸出到終端屏幕,但輸入、輸出時由于不轉(zhuǎn)換,所以速度快。
C語言中文件的操作是通過定義一個特殊的變量——文件類型指針變量來實現(xiàn),當(dāng)由FILE說明符定義了文件類型指針變量后,運用fopen()命令,可賦給文件類型指針變量打開文件的文件名,運用fclose()可關(guān)閉打開的文件。
對打開文件命令fopen()中的參數(shù)做出選擇,可控制文件的使用方式,控制的方式有:“讀”、“寫”、“讀寫”、“二進(jìn)形式”、“添加數(shù)據(jù)”。
例如:若定義了一個文件類型指針變量fp,則以下命令:
fp=fopen("c:\abc.txt","r");
解釋為:用只讀方式打開了C盤根目錄下文件名為abc.txt的文件,這種方式打開的文件,在使用時只能讀取文件中的內(nèi)容。
在C語言程序設(shè)計過程中,程序執(zhí)行的結(jié)果是否正確,是通過程序調(diào)試實現(xiàn)的。而在調(diào)試過程中,當(dāng)輸入一次原始數(shù)據(jù)后,程序執(zhí)行有錯需要改錯,改錯后再調(diào)試,還需再輸入一次原始數(shù)據(jù)進(jìn)行調(diào)試。這個調(diào)試過程對于輸入數(shù)據(jù)量少的程序來說還行,但對于輸入原始數(shù)據(jù)量大的程序來說,上述過程就比較煩瑣,而且數(shù)據(jù)是相同,只是重復(fù)地輸入。
通過調(diào)用文件的原始數(shù)據(jù),可避免在程序反復(fù)調(diào)試過程中重復(fù)輸入數(shù)據(jù),既保證數(shù)據(jù)的正確,又使輸入過程變得簡單。
在C程序設(shè)計時,如果程序中涉及數(shù)組變量和結(jié)構(gòu)體變量,程序調(diào)試時輸入的數(shù)據(jù)量相對比較大。以文件給二維數(shù)組變量提供輸入數(shù)據(jù)為例,文件格式及程序段如下。
先在記事本下輸入二維數(shù)組的數(shù)據(jù)元素,輸入形式是行列形式,每個數(shù)據(jù)之間用逗號分開,每行的最后的數(shù)也必須有逗號,并用相應(yīng)的文件名存盤。
輸入數(shù)據(jù)的程序段如下:

以上程序段,只需改變預(yù)定義中的M和N及文件abc.txt中的內(nèi)容,即可為任意行列的二維數(shù)組輸入數(shù)據(jù)。
程序調(diào)試正確。運行后輸出的結(jié)果,如果用一般的輸出方式,只能是在輸出屏幕上顯示一次,當(dāng)下一次程序運行后再輸出結(jié)果后,上一次的輸出結(jié)果就消失了。當(dāng)某些輸出結(jié)果有一定作用,而又想繼續(xù)使用時,就顯得極為不方便。如利用文件操作,保存程序運行的結(jié)果,就能解決這個問題。
程序運行結(jié)果輸出到文件的程序段:

以上程序段把100至1000之間的素數(shù)存入到文件名為prime.txt的文件中,每行10個數(shù)據(jù),通過該文件可查看素數(shù)的分布情況。
由于程序處理數(shù)據(jù)的類型不同,輸出的數(shù)據(jù)類型和命令也不同,只需根據(jù)輸出數(shù)據(jù)的類型,改變輸出命令的格式即可,但在建立輸入數(shù)據(jù)文件時,不能用二進(jìn)制方式創(chuàng)建文件。
在設(shè)計計算機輔助C程序設(shè)計測試系統(tǒng)時,如果要對考生所做的答案進(jìn)行計算機自動評分,對于客觀題型選擇題、填空題、判斷題的評分是比較容易的,但對程序設(shè)計題型的自動評分就相對難了。主要是程序設(shè)計方法比較靈活性,不可能用統(tǒng)一的一個標(biāo)準(zhǔn)程序來評判學(xué)生所編寫的程序。但不管設(shè)計出什么形式的程序,程序的執(zhí)行結(jié)果總是惟一的。利用程序執(zhí)行結(jié)果的惟一性,通過對學(xué)生程序輸出到文件的結(jié)果和老師考試前準(zhǔn)備的程序輸出結(jié)果的文件進(jìn)行比較,可完成程序設(shè)計的自動評分。這種評分的不足是,少了過程分,只注重結(jié)果。為了保證設(shè)計的程序具有通用性,可設(shè)置一些參數(shù),通過變化參數(shù)來驗證程序的通用性。兩個文件比較的程序:

以上程序只是二個普通的字符文件的比較,如果程序輸出數(shù)據(jù)類型復(fù)雜,則還需要對程序中相應(yīng)的語句進(jìn)行修改。
C語言程序中文件的應(yīng)用還很多,特別是程序調(diào)試時需要的特殊數(shù)據(jù)形式。例如:在為存儲復(fù)雜結(jié)構(gòu)二叉樹、圖等程序提供輸入數(shù)據(jù)時,數(shù)據(jù)文件格式的組織,數(shù)據(jù)文件讀取的命令,都需要進(jìn)行詳細(xì)設(shè)計。C語言程序中文件的應(yīng)用還有許多內(nèi)容需要去開發(fā)和探索,這樣才能更加體現(xiàn)程序設(shè)計的作用和魅力。
[1]顏盟盟. Visual C++ 從入門到精通[M].第1版.北京:化學(xué)工業(yè)出版社,2009-08.213-216.
[2]田淑清.全計算機等級考試二級教程-C 語言程序設(shè)計[M].第1 版.北京:高等教育出版社,2013-05.214-215.