選擇題
公共知識
【1】下列算法中均以比較作為基本運算, 則平均情況與最壞情況下的時間復雜度相同的是()。
在順序存儲的線性表中查找最大項時, 最壞情況下要比較所有元素直到最后一個最大值, 比較次數為n, 順序查找的平均情況時間復雜度為O(n)。
可見最壞情況與平均情況下的時間復雜度相同。
因此A選項正確。
故本題答案為A選項。
可見最壞情況與平均情況下的時間復雜度相同。
因此A選項正確。
故本題答案為A選項。
【2】在具有2n個結點的完全二叉樹中, 葉子結點個數為()。
完全二叉樹是指除最后一層外, 每一層上的結點數均達到最大值, 在最后一層上只缺少右邊的若干結點。
根據完全二叉樹性質, 如果共2n個結點, 從根結點開始按層序用自然數1, 2, …, 2n給結點編號, 則編號為n的結點左子結點編號為2n, 因此葉子結點編號為n + 1, n + 2, …, 2n。
故葉子結點個數為n, 本題答案為A選項。
根據完全二叉樹性質, 如果共2n個結點, 從根結點開始按層序用自然數1, 2, …, 2n給結點編號, 則編號為n的結點左子結點編號為2n, 因此葉子結點編號為n + 1, n + 2, …, 2n。
故葉子結點個數為n, 本題答案為A選項。
【3】下列敘述中正確的是()。
在棧中, 棧底指針保持不變, 有元素入棧, 棧頂指名增加, 有元素出棧, 棧頂指針減少。
在循環隊列中, 隊頭指針和隊尾指針的動態變化決定隊列的長度。
在循環鏈表中, 前一個結點指向后一個結點, 而最后一個結點指向頭結點, 只有頭結點是固定的。
線性鏈表中, 由於前一個結點包含下一個結點的指針, 尾結點指針為空, 要插入或刪除元素, 只需要改變相應位置的結點指針即可, 頭指針和尾指針無法決定鏈表長度。
故本題答案為A選項。
在循環隊列中, 隊頭指針和隊尾指針的動態變化決定隊列的長度。
在循環鏈表中, 前一個結點指向后一個結點, 而最后一個結點指向頭結點, 只有頭結點是固定的。
線性鏈表中, 由於前一個結點包含下一個結點的指針, 尾結點指針為空, 要插入或刪除元素, 只需要改變相應位置的結點指針即可, 頭指針和尾指針無法決定鏈表長度。
故本題答案為A選項。
【4】循環隊列的存儲空間為 Q(1 : 40), 初始狀態為 front = rear = 40。經過一系列正常的入隊與退隊操作后, front = rear = 15, 此后又退出一個元素, 則循環隊列中的元素個數為()。
循環隊列是隊列的一種順序存儲結構, 用隊尾指針rear指向隊列中的隊尾元素, 用排頭指針front指向排頭元素的前一個位置。
入隊運算時, 隊尾指針進1(即rear + 1), 然后在rear指針指向的位置插入新元素。
退隊運算時, 排頭指針進1(即front + 1), 然后刪除front指針指向的位置上的元素。
當front = rear = 15時可知隊列空或者隊列滿, 此后又退出一個元素, 如果之前隊列為空, 退出操作會產生錯誤, 隊列里有0個元素; 如果退出之前隊列已滿(40個元素), 執行退出后, 隊列里還有39個元素。
故本題答案為A選項。
入隊運算時, 隊尾指針進1(即rear + 1), 然后在rear指針指向的位置插入新元素。
退隊運算時, 排頭指針進1(即front + 1), 然后刪除front指針指向的位置上的元素。
當front = rear = 15時可知隊列空或者隊列滿, 此后又退出一個元素, 如果之前隊列為空, 退出操作會產生錯誤, 隊列里有0個元素; 如果退出之前隊列已滿(40個元素), 執行退出后, 隊列里還有39個元素。
故本題答案為A選項。
【5】某系統結構圖如下圖所示
該系統結構圖的深度是()。

該系統結構圖的深度是()。
樹的根結點所在層次為1, 其他結點所在的層次等於它的父結點所在層次加1, 樹的最大層次就是樹的深度。
因此本系統結構圖的深度為4, 本題答案為A選項。
因此本系統結構圖的深度為4, 本題答案為A選項。
【6】軟件測試的目的是()。
軟件測試是為了發現錯誤而執行程序的過程。
測試要以查找錯誤為中心, 而不是為了演示軟件的正確功能, 不是為了評估軟件或改正錯誤。
故本題答案為A選項。
測試要以查找錯誤為中心, 而不是為了演示軟件的正確功能, 不是為了評估軟件或改正錯誤。
故本題答案為A選項。
【7】需求分析階段產生的主要文檔是()。
需求分析階段的工作可以概括為:需求獲取、需求分析、編寫需求規格說明書、需求評審四個方面。
軟件需求規格說明書是描述需求中的重要文檔, 是軟件需求分析的主要成果。
故本題答案為A選項。
軟件需求規格說明書是描述需求中的重要文檔, 是軟件需求分析的主要成果。
故本題答案為A選項。
【8】下列關於數據庫特點的說法中正確的是()。
數據庫管理系統的特點:共享性高, 冗余度小; 具有高度的物理獨立性和邏輯獨立性; 整體結構化, 用數據模型描述; 由數據庫管理系統提供數據安全性、完整性、並發控制和恢復能力。
故本題答案為A選項。
故本題答案為A選項。
【9】在關系數據庫設計中, 關系模式設計屬於()。
關系數據庫設計有需求分析設計、概念設計、邏輯設計、物理設計、編碼、測試、運行、進一步修改等幾個階段。
在需求分析設計階段形成需求說明書, 概念設計階段形成概念數據模型(作為進一步設計數據庫的依據), 邏輯設計階段形成邏輯數據模型(從ER圖向關系模式轉換、關系視圖設計、模式規范化), 物理設計階段形成數據庫內部模型(此時涉及具體軟件硬件環境)。
因此關系模式設計屬於邏輯設計。
故本題答案為A選項。
在需求分析設計階段形成需求說明書, 概念設計階段形成概念數據模型(作為進一步設計數據庫的依據), 邏輯設計階段形成邏輯數據模型(從ER圖向關系模式轉換、關系視圖設計、模式規范化), 物理設計階段形成數據庫內部模型(此時涉及具體軟件硬件環境)。
因此關系模式設計屬於邏輯設計。
故本題答案為A選項。
【10】定義學生、教師和課程的關系模式:S(S#, Sn, Sd, SA)(屬性分別為學號、姓名、所在系、年齡); C(C#, Cn, P#)(屬性分別為課程號、課程名、先修課); SC(S#, C#, G)(屬性分別為學號、課程號和成績)。則該關系為()。
范式是符合某一種級別的關系模式的集合。
關系數據庫中的關系必須滿足一定的要求, 滿足不同程度要求的為不同范式。
目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce - Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
滿足最低要求的范式是第一范式(1NF)。
在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF), 其余范式以次類推。
一般說來, 數據庫只需滿足第三范式(3NF)就行了。
關系數據庫中的關系必須滿足一定的要求, 滿足不同程度要求的為不同范式。
目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce - Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
滿足最低要求的范式是第一范式(1NF)。
在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF), 其余范式以次類推。
一般說來, 數據庫只需滿足第三范式(3NF)就行了。
第一范式:主屬性(主鍵)不為空且不重復, 字段不可再分(存在非主屬性對主屬性的部分依賴)。
第二范式:如果關系模式是第一范式, 每個非主屬性都沒有對主鍵的部分依賴。
第三范式:如果關系模式是第二范式, 沒有非主屬性對主鍵的傳遞依賴和部分依賴。
BCNF范式:所有屬性都不傳遞依賴於關系的任何候選鍵。
題目中關系模式沒有非主屬性對主鍵的傳遞依賴和部分依賴, 滿足第三范式, 但不滿足BCNF范式。
故本題答案為A選項。
專業知識
【11】以下敘述中正確的是
C語言程序可以不包含三種基本結構, 也可以包含其中的一種或多種, 所以A錯誤。
三種基本結構可以表示任何復雜的算法, 所以C錯誤。
正確的算法, 不管是簡單算法還是復雜算法都可以在有限的操作步驟之后結束, 這是算法的有窮性, 所以D錯誤。
三種基本結構可以表示任何復雜的算法, 所以C錯誤。
正確的算法, 不管是簡單算法還是復雜算法都可以在有限的操作步驟之后結束, 這是算法的有窮性, 所以D錯誤。
【12】以下敘述中正確的是
C語言的程序中, 函數不一定都放在同一個源文件中, 可以分別放在不同源文件中, 通過#include命令來引用, 所以B錯誤。
結構化程序可以包含三種基本結構中的一種或幾種, 所以C、D錯誤。
結構化程序可以包含三種基本結構中的一種或幾種, 所以C、D錯誤。
【13】以下敘述中正確的是
變量可以定義在函數體外也可以定義在函數體內, 所以A錯誤。
常量的類型可以從字面形式上區分, 比如1為整型常量, 1.0為實型常量, a為字符型常量, 所以B錯誤。
預定義的標識符不是C語言的關鍵字, 所以C錯誤。
常量的類型可以從字面形式上區分, 比如1為整型常量, 1.0為實型常量, a為字符型常量, 所以B錯誤。
預定義的標識符不是C語言的關鍵字, 所以C錯誤。
【14】以下敘述中正確的是
C程序中的實型常量只有十進制一種數制, 所以A錯誤。
八進制數以0打頭, 所以C錯誤。
C語言中整數只有十進制、八進制、十六進制三種, 沒有二進制數制, 所以D錯誤。
八進制數以0打頭, 所以C錯誤。
C語言中整數只有十進制、八進制、十六進制三種, 沒有二進制數制, 所以D錯誤。
【15】以下敘述中正確的是
scanf函數中的格式控制字符串是為了輸入數據用的, 無論其中有什么字符, 也不會輸出到屏幕上, 所以A正確。
scanf()的格式控制串可以使用其他非空白字符, 如逗號, 但在輸入時必須輸入這些字符, 以保證匹配就可以, 所以B錯誤。
Printf函數可以輸出常量也可以輸出變量, 所以C錯誤。
Prinf函數可以用"\%"來輸出百分號%, 所以D錯誤。
scanf()的格式控制串可以使用其他非空白字符, 如逗號, 但在輸入時必須輸入這些字符, 以保證匹配就可以, 所以B錯誤。
Printf函數可以輸出常量也可以輸出變量, 所以C錯誤。
Prinf函數可以用"\%"來輸出百分號%, 所以D錯誤。
【16】以下敘述中正確的是
在printf和scanf函數中都可以指定數據的寬度, 所以B錯誤。
scanf()的格式控制串可以使用其他非空白字符, 如逗號, 但在輸入時必須輸入這些字符, 以保證匹配, 所以C錯誤。
復合語句可以由任意多條語句構成, 可以使一條也可以沒有, 所以D錯誤。
scanf()的格式控制串可以使用其他非空白字符, 如逗號, 但在輸入時必須輸入這些字符, 以保證匹配, 所以C錯誤。
復合語句可以由任意多條語句構成, 可以使一條也可以沒有, 所以D錯誤。
【17】以下敘述中正確的是
B選項中, (x > 0) && (x < 10)的值是1或0, 條件是x > 0 並且x < 10。
但是 0 < x < 10這種寫法的結果任何時候都是1; C選項中, 邏輯"非"(即運算符 !)的運算級別是最高的; A選項中, 算術運算符優先級較高, 關系和邏輯運算符優先級較低。
因此D選項正確。
但是 0 < x < 10這種寫法的結果任何時候都是1; C選項中, 邏輯"非"(即運算符 !)的運算級別是最高的; A選項中, 算術運算符優先級較高, 關系和邏輯運算符優先級較低。
因此D選項正確。
【18】以下敘述中正確的是
A選項中, if語句的嵌套沒有規定層數; C選項中, 可以在else子句中再嵌套if語句; D選項中, 改變if - else 語句的縮進格式, 不會改變程序的執行流程, 需要注意if和else的配對問題。
因此B選項正確。
因此B選項正確。
【19】以下敘述中正確的是
B選項中, for語句中需要先求解先求解表達式1; C選項中, for語句使用最為靈活, 它完全可以取代 while 語句; D選項中, 對於死循環, 也可以使用for語句。
因此A選項正確。
因此A選項正確。
【20】以下敘述中正確的是
break語句通常用在循環語句和開關語句中。
當break用於開關語句switch中時, 可使程序跳出switch而執行switch以后的語句; 當break語句用於do - while、for、while循環語句中時, 可使程序終止循環而執行循環后面的語句, 即滿足條件時便跳出循環。
continue語句的作用是跳過循環體中剩余的語句而強行執行下一次循環。
B、C和D三個選項中均有錯誤。
因此A選項正確。
當break用於開關語句switch中時, 可使程序跳出switch而執行switch以后的語句; 當break語句用於do - while、for、while循環語句中時, 可使程序終止循環而執行循環后面的語句, 即滿足條件時便跳出循環。
continue語句的作用是跳過循環體中剩余的語句而強行執行下一次循環。
B、C和D三個選項中均有錯誤。
因此A選項正確。
【21】以下敘述中正確的是
A選項中, '\0'表示結束; B選項中, 字符常量是用單引號括起來的一個字符; D選項中, '\"'是雙引號符。
因此C選項正確。
因此C選項正確。
【22】以下敘述中正確的是
A選項中, 字符變量在定義時可以賦初值; C選項中, 同一英文字母的大寫和小寫形式代表的是不同的字符常量; D選項中, 轉義字符以反斜線"\"開頭的。
因此B選項正確。
因此B選項正確。
【23】以下敘述中正確的是
B選項中, 函數調用時, 函數名稱是需要區分大小寫的; A選項中, 函數名不允許以數字開頭; D選項中, 在函數中允許有多個return 語句, 但每次調用只能有一個return 語句被執行。
因此C選項正確。
因此C選項正確。
【24】以下敘述中正確的是
B選項中, 如果p是指針變量, 則*p表示變量p所指向的地址的值; A選項中, 如果p是指針變量, 則&p表示變量p的地址; D選項中, 如果p是指針變量, *p + 1表示將p所指的值加上1, 而*(p + 1)表示的是先將指針右移一位再取所指向變量的值。
因此C選項正確。
因此C選項正確。
【25】以下敘述中正確的是
B選項中, 所謂函數類型是指函數返回值的類型。
在C語言中允許一個函數的返回值是一個指針(即地址), 這種返回指針值的函數稱為指針型函數; C選項中, 函數的參數不僅可以是整型、實型、字符型等數據, 還可以是指針類型; A選項中, 雖然不同基類型的指針變量占用字節數是相同的, 但是不能混用。
因此D選項正確。
在C語言中允許一個函數的返回值是一個指針(即地址), 這種返回指針值的函數稱為指針型函數; C選項中, 函數的參數不僅可以是整型、實型、字符型等數據, 還可以是指針類型; A選項中, 雖然不同基類型的指針變量占用字節數是相同的, 但是不能混用。
因此D選項正確。
【26】如果定義:float a[10], x;
則以下敘述中正確的是
則以下敘述中正確的是
B選項中, 表達式a + 1不是非法的; C選項中, *(a + 1)即指a[1]; D選項中, *&a[1]不是非法的。
因此A選項正確。
因此A選項正確。
【27】有以下程序
#include <stdio.h>
void main() {
int a[] = { 2, 4, 6, 8 }, *p = a, i;
for (i = 0; i < 4; i++)
a[i] = *p++;
printf("%d\n", a[2]);
}
程序的輸出結果是
本題通過語句"*p=a"將一維數組a的首地址的值賦值給指針變量p, 即*p的值為2。
執行for循環, a[i] = *p++, 將*p的值賦給a[i]后, 指針p再進行++操作, 即指針p向后移動一個元素。
當i = 0時a[0] = *p, 然后p++;, 移動后p指針指向元素a[1]; 當i = 1時, 即a[1] = *p; p++; 此時p指針指向元素a[2]; 以此類推, 可知for循環中語句"a[i]=*p++"並沒有改變數組a的值, 因此a[2]的值是6。
故本題答案為D選項。
執行for循環, a[i] = *p++, 將*p的值賦給a[i]后, 指針p再進行++操作, 即指針p向后移動一個元素。
當i = 0時a[0] = *p, 然后p++;, 移動后p指針指向元素a[1]; 當i = 1時, 即a[1] = *p; p++; 此時p指針指向元素a[2]; 以此類推, 可知for循環中語句"a[i]=*p++"並沒有改變數組a的值, 因此a[2]的值是6。
故本題答案為D選項。
【28】以下敘述中正確的是
二維數組在初始化時, 可以省略第1維, 但是不可以省略第2維。
可以為部分數組元素初始化。
B選項、C選項和A選項內的初始化都沒有錯誤。
因此D選項正確。
可以為部分數組元素初始化。
B選項、C選項和A選項內的初始化都沒有錯誤。
因此D選項正確。
【29】以下敘述中正確的是
字符串中的字符依次存儲在內存中一塊連續的區域內, 並且把空字符' \0'自動附加到字符串的尾部作為字符串的結束標志。
故字符個數為n的字符串在內存中應占(n + 1)個字節。
選項A中有6個元素, 其中包含結尾字符, C選項中字符串常量包含8個字符, 所以不能賦值在str[7]中, D選項后者賦值錯誤。
故字符個數為n的字符串在內存中應占(n + 1)個字節。
選項A中有6個元素, 其中包含結尾字符, C選項中字符串常量包含8個字符, 所以不能賦值在str[7]中, D選項后者賦值錯誤。
【30】以下敘述中正確的是
字符串中的字符依次存儲在內存中一塊連續的區域內, 並且把空字符' \0'自動附加到字符串的尾部作為字符串的結束標志。
故字符個數為n的字符串在內存中應占(n + 1)個字節。
B選項中兩者等價, C選項中可以使用字符串常量來給一維字符數組賦值, 就像B選項中一樣, A選項中數組長度比字符串長度小一個字節, 字符串中包含隱含的結尾符。
故字符個數為n的字符串在內存中應占(n + 1)個字節。
B選項中兩者等價, C選項中可以使用字符串常量來給一維字符數組賦值, 就像B選項中一樣, A選項中數組長度比字符串長度小一個字節, 字符串中包含隱含的結尾符。
【31】設有定義
char str[] = "Hello";
則語句
printf("%d %d", sizeof(str), strlen(str));
的輸出結果是
printf("%d %d", sizeof(str), strlen(str));
的輸出結果是
本題考查sizeof和strlen對字符串的處理不同之處, sizeof求出字符串的字符個數, 包括結尾符。
Strlen求出字符串的實際字符, 不包括結尾符。
所以答案為6, 5, C選項正確。
Strlen求出字符串的實際字符, 不包括結尾符。
所以答案為6, 5, C選項正確。
【32】在32位編譯器上, 設有定義
char *str1 = "Hello", str2[] = "Hello";,
則以下語句
printf("%d %d", sizeof(str1), sizeof(str2));
的輸出結果是
printf("%d %d", sizeof(str1), sizeof(str2));
的輸出結果是
本題主要考查了指向字符串的指針和字符數組, str1為一個字符指針, 所以sizeof為4, str2為字符數組, 其中包含6個字符, 所以答案為4 6。
【33】以下敘述中正確的是
在某些情況下, 函數名可以作為實參傳遞, 所以A選項錯誤。
函數遞歸調用使用棧區來遞歸, 需要額外開銷, 並且效率不高, C選項錯誤。
遞歸調用需要明確指出遞歸結束條件, 否則就陷入死循環了。
函數遞歸調用使用棧區來遞歸, 需要額外開銷, 並且效率不高, C選項錯誤。
遞歸調用需要明確指出遞歸結束條件, 否則就陷入死循環了。
【34】以下敘述中正確的是
聲明變量不分配空間, 定義變量要分配空間, 所以B選項錯誤。
符合語句中可以定義變量, 所以C選項錯誤。
函數的形參屬於局部變量, 所以A選項錯誤。
符合語句中可以定義變量, 所以C選項錯誤。
函數的形參屬於局部變量, 所以A選項錯誤。
【35】以下敘述中正確的是
本題考查預處理中文件包含的概念, 包含文件中可以包含其他文件, B選項錯誤, #include可以出現在程序文件的中間, C選項錯誤, 包含文件被修改了, 包含該文件的源程序必須重新進行編譯和連接。
【36】以下敘述中正確的是
本題考查結構體變量作為函數參數, 函數返回可以是結構體類型, 也可以是結構體類型的指針, 結構體數組可以作為參數傳給函數。
【37】以下敘述中正確的是
本題考查結構體變量作為函數參數, 結構體變量的地址可以作為參數傳給函數, 結構體數組名就是一個地址, 可以傳給函數, 如果是同類型的結構體變量, 可以整體賦值。
【38】設有如下的說明和定義
struct {
int a;
char *s;
} x, *p = &x;
x.a = 4;
x.s = "hello";
則以下敘述中正確的是
本題考查結構體變量的引用, ++p->a的效果是使成員a增1, p++->a不合法, *p->s++為字符e, 與(*p)->s++不等價。
【39】下面關於位運算符的敘述, 正確的是
本題考查位運算。
^為按位異或, |為按位或, ~表示按位取反。
所以C選項正確。
^為按位異或, |為按位或, ~表示按位取反。
所以C選項正確。
【40】下面關於"EOF"的敘述, 正確的是
在C語言中, 或更精確地說成C標准函數庫中表示文件結束符(end of file)。
在while循環中以EOF作為文件結束標志, 這種以EOF作為文件結束標志的文件, 必須是文本文件。
在文本文件中, 數據都是以字符的ASCII代碼值的形式存放。
我們知道, ASCII代碼值的范圍是0 ~ 255, 不可能出現-1, 因此可以用EOF作為文件結束標志。
在while循環中以EOF作為文件結束標志, 這種以EOF作為文件結束標志的文件, 必須是文本文件。
在文本文件中, 數據都是以字符的ASCII代碼值的形式存放。
我們知道, ASCII代碼值的范圍是0 ~ 255, 不可能出現-1, 因此可以用EOF作為文件結束標志。
編程題
【41】使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中, 函數fun的功能是:在3×4的矩陣中找出在行上最大、在列上最小的那個元素, 若沒有符合條件的元素則輸出相應信息。
例如, 有下列矩陣:
程序執行結果為:find : a[2][2] = 9
請在程序的下畫線處填入正確的內容並把下畫線刪除, 使程序得出正確的結果。
注意:部分源程序在文件blank1.c中。
不得增行或刪行, 也不得更改程序的結構 !
例如, 有下列矩陣:

程序執行結果為:find : a[2][2] = 9
請在程序的下畫線處填入正確的內容並把下畫線刪除, 使程序得出正確的結果。
注意:部分源程序在文件blank1.c中。
不得增行或刪行, 也不得更改程序的結構 !
(1) j
(2) 0
(3) i++
本題是在矩陣中找出在行上最大、在列上最小的那個元素。
填空1:找出行上最大的數, 並將該數的列數j保存在c中, 所以應填j。
填空2:使用while循環語句和控制變量find, 如果該數不是列中的最小數, 那么把find置0, 所以應填0。
填空3 : i是while的控制變量, 所以每做一次循環, 該數值要加1, 所以應填i++。
填空1:找出行上最大的數, 並將該數的列數j保存在c中, 所以應填j。
填空2:使用while循環語句和控制變量find, 如果該數不是列中的最小數, 那么把find置0, 所以應填0。
填空3 : i是while的控制變量, 所以每做一次循環, 該數值要加1, 所以應填i++。
【42】使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中, 函數fun的功能是:根據整形參m的值, 計算如下公式的值。
例如, 若m中的值為5, 則應輸出0.536389。
請改正程序中的錯誤, 使它能得出正確的結果。
注意:部分源程序在文件modi1.c中。
不要改動main函數, 不得增行或刪行, 也不得更改程序的結構 !

例如, 若m中的值為5, 則應輸出0.536389。
請改正程序中的錯誤, 使它能得出正確的結果。
注意:部分源程序在文件modi1.c中。
不要改動main函數, 不得增行或刪行, 也不得更改程序的結構 !
(1) for (i = 2; i <= m; i++)
(2) y -= 1.0 / (i * i);
(1) 使用for循環計算公式, 必須計算到m, 所以應改為for(i = 2; i <= m; i++)。
(2) 在除法運算中, 如果除數和被除數都是整數, 那么所除結果也是整數, 因此應改為y -= 1.0 / (i * i)。
(2) 在除法運算中, 如果除數和被除數都是整數, 那么所除結果也是整數, 因此應改為y -= 1.0 / (i * i)。
【43】使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中, m個人的成績存放在score數組中, 請編寫函數fun, 它的功能是:將低於平均分的人數作為函數值返回, 將低於平均分的分數放在below所指的數組中。
例如, 當score數組中的數據為10、20、30、40、50、60、70、80、90時, 函數返回的人數應該是4, below中的數據應為10、20、30、40。
注意:部分源程序在文件prog1.c中。
請勿改動主函數main和其他函數中的任何內容, 僅在函數fun的花括號中填入你編寫的若干語句。
例如, 當score數組中的數據為10、20、30、40、50、60、70、80、90時, 函數返回的人數應該是4, below中的數據應為10、20、30、40。
注意:部分源程序在文件prog1.c中。
請勿改動主函數main和其他函數中的任何內容, 僅在函數fun的花括號中填入你編寫的若干語句。
int fun(int score[], int m, int below[]) {
int i, j = 0;
float av = 0.0;
for (i = 0; i < m; i++)
av = av + score[i] / m;
/*求平均值*/
for (i = 0; i < m; i++)
if (score[i] < av)
/*如果分數低於平均分, 則將此分數放入below數組中*/
below[j++] = score[i];
return j;
/*返回低於平均分的人數*/
}
要計算低於平均分的人數, 首先應該求出平均分, 然后通過for循環語句和if條件語句找出低於平均分的分數。
該題第1個循環的作用是求出平均分av, 第2個循環的作用是找出低於平均分的成績記錄並存入below數組中。
該題第1個循環的作用是求出平均分av, 第2個循環的作用是找出低於平均分的成績記錄並存入below數組中。