2016年計算機二級《C語言》備考衝刺題及答案

  一、程序填空題

2016年計算機二級《C語言》備考衝刺題及答案

程序通過定義學生結構體變量,存儲了學生的學號、姓名和三門課的成績。所有學

生數據均以二進制方式輸出到文件中。函數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,最後返回單詞的個數。