一、程式填空題
程式通過定義學生結構體變數,儲存了學生的學號、姓名和三門課的成績。所有學
生資料均以二進位制方式輸出到檔案中。函式fun的功能是重寫形參filename所指檔案中最後一個學生的資料,即用新的學生資料覆蓋該學生原來的資料,其他學生的資料不變。
請在程式的下畫線處填人正確的內容並把下畫線刪除,使程式得出正確的結果。
注意:部分源程式在檔案BLANKl.C中。不得增行或刪行,也不得更改程式的結構!
二、程式修改題
下列給定程式中函式Creatlink的功能是:建立帶頭結點的單向連結串列,併為各結點資料域賦0到m-1的值。
請改正函式Creatlink中指定部位的錯誤,使它能得出正確的結果。
注意:部分源程式在檔案MODll.C中,不要改動main函式,不得增行或刪行,也不得更改程式的結構!
試題程式:
三、程式設計題
請編寫函式fun,該函式的'功能是:統計一行字串中單詞的個數,作為函式值返回。字串在主函式中輸入,規定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。
注意:部分源程式在檔案PROGl.C中。
請勿改動main函式和其他函式中的任何內容,僅在函式fun的花括號中填入所編寫的若干語句。
試題程式:
參考答案及解析
一、程式填空題
【參考答案】
(1)filename(2)fp(3)fp
【解題思路】
填空1:本空是對文字檔案的開啟,filename所指的檔案中的最後資料要進行重寫,因此首先是要開啟,因而本空填寫filename。
填空2:fseek功能是重定位流上的檔案指標。用法:int fseek(FILE*stream,long offset,int e);本空應該填寫fp。
填空3:因為題目中要對所有學生資料均以二進位制方式輸出到檔案中,因此本空填寫fp。
知識點講解:函式名:fseek功能:重定位流上的檔案指標。
用法:int fseek(FILE*stream,long romwhere)。
描述:函式設定檔案指標stream的位置。如果執行成功,stream將指向以fromwhere為基準(從檔案的哪裡開始偏移)、偏移offset個位元組的位置。正數表示正向偏移,負數表示負向偏移。如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。
返回值:成功,返回0;否則返回非0值。
二、程式修改題
【參考答案】
(1)P=(NODE*)malloc(sizeof(NODE));(2)return h;
【解題思路】
(1)由變數定義可知P為指向結點的指標。指向剛分配的結構指標,所以應改為P=(NODE·)malloc(sizeof(NODE))。
(2)在動態分配記憶體的下一行語句是,使用臨時結構指標變數h儲存P指標的初始位置,最後返回不能使用p,是因為P的位置已經發生了變化,所以應改為return h。
三、程式設計題
【參考答案】
【解題思路】
要判斷單詞的個數,首先想到的是程式怎樣識別出一個單詞,如果一個字母的下一個字元為空格或者結束標記,則表示一個單詞結束,因此程式使用for迴圈語句遍歷整個字串,用if條件語句判斷當前字元是否表示一個單詞的結束,如果當前字元表示一個單詞結束,則存放單詞個數的變數加1,最後返回單詞的個數。