【計算機二級C語言】卷018


選擇題

公共知識

【1】下列敘述中錯誤的是()。
〖A〗對於各種特定的輸入, 算法的時間復雜度是固定不變的
〖B〗算法的時間復雜度與使用的計算機系統無關
〖C〗算法的時間復雜度與使用的程序設計語言無關
〖D〗算法的時間復雜度與實現算法過程中的具體細節無關
算法的時間復雜度是指執行算法所需要的計算工作量。
為了能夠比較客觀地反映出一個算法的效率, 在度量一個算法的工作量時, 不僅應該與所使用的計算機、程序設計語言以及程序編制者無關, 而且還應該與算法實現過程中的許多細節無關。
為此, 可以用算法在執行過程中所需基本運算的執行次數來度量算法的工作量。
算法所執行的基本運算次數還與問題的規模有關; 對應一個固定的規模, 算法所執行的基本運算次數還可能與特定的輸入有關。
故本題答案為A選項。
【2】在長度為n的順序表中查找一個元素, 假設需要查找的元素一定在表中, 並且元素出現在表中每個位置上的可能性是相同的, 則在平均情況下需要比較的次數為()。
〖A〗(n + 1) / 2
〖B〗n
〖C〗3n / 4
〖D〗n / 4
在順序表中查找, 最好情況下第一個元素就是要查找的元素, 則比較次數為1; 在最壞情況下, 最后一個元素才是要找的元素, 則比較次數為n。
兩種情況平均即(1 + n) / 2。
故本題答案為A選項。
【3】設非空二叉樹的所有子樹中, 其左子樹上的結點值均小於根結點值, 而右子樹上的結點值均不小於根結點值, 則稱該二叉樹為排序二叉樹。對排序二叉樹的遍歷結果為有序序列的是()。
〖A〗中序序列
〖B〗前序序列
〖C〗后序序列
〖D〗前序序列或后序序列
前序遍歷:訪問根結點在訪問左子樹和訪問右子樹之前。
即先訪問根結點, 然后遍歷左子樹, 最后遍歷右子樹; 並且在遍歷左子樹和右子樹時, 仍然先訪問根結點, 然后遍歷左子樹, 最后遍歷右子樹。

中序遍歷:訪問根結點在訪問左子樹和訪問右子樹兩者之間。
即先遍歷左子樹, 然后訪問根結點, 最后遍歷右子樹。
並且在遍歷左子樹和右子樹時, 仍然首先遍歷左子樹, 然后訪問根結點, 最后遍歷右子樹。

后序遍歷:訪問根結點在訪問左子樹和訪問右子樹之后。
即首先遍歷左子樹, 然后遍歷右子樹, 最后訪問根結點;
並且在遍歷左子樹和右子樹時, 仍然首先遍歷左子樹, 然后遍歷右子樹, 最后訪問根結點。

題目給出的二叉樹顯然是左結點小於根結點, 根結點小於等於右結點。
如果要使結果為有序序列, 那么遍歷過程應該是左結點-根結點-右結點, 或者右結點-根結點-左結點。
根據前面3種遍歷特點可知, 中序遍歷符合要求。

故本題答案為A選項

【4】循環隊列的存儲空間為 Q(1 : 50), 初始狀態為 front = rear = 50。經過一系列正常的入隊與退隊操作后, front = rear = 25, 此后又插入一個元素, 則循環隊列中的元素個數為()。
〖A〗1, 或50且產生上溢錯誤
〖B〗51
〖C〗26
〖D〗2
循環隊列是隊列的一種順序存儲結構, 用隊尾指針rear指向隊列中的隊尾元素, 用排頭指針front指向排頭元素的前一個位置。
入隊運算時, 隊尾指針進1(即rear + 1), 然后在rear指針指向的位置插入新元素。
當front = rear = 25時可知隊列空或者隊列滿, 此后又插入了一個元素, 如果之前隊列為空, 插入操作之后隊列里只有一個元素, 如果插入之前隊列已滿(50個元素), 執行插入則會產生溢出錯誤。
故本題答案為A選項。
【5】軟件生命周期是指()。
〖A〗軟件產品從提出、實現、使用維護到停止使用退役的過程
〖B〗軟件的工程實施階段
〖C〗軟件的開發與管理
〖D〗軟件的實現和維護
通常, 將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為軟件生命周期。
也就是說, 軟件產品從考慮其概念開始, 到該軟件產品不能使用為止的整個時期都屬於軟件生命周期。
故本題答案為A選項。
【6】對象實現了數據和操作(方法)的結合, 其實現的機制是()。
〖A〗封裝
〖B〗繼承
〖C〗隱蔽
〖D〗抽象
在面向對象的程序中, 把數據和實現操作的代碼集中起來放在對象的內部, 稱之為封裝。
故本題答案為A選項。
【7】下面不屬於白盒測試方法的是()。
〖A〗邊界值分析
〖B〗語句覆蓋
〖C〗條件覆蓋
〖D〗分支覆蓋
白盒測試是把程序看成裝在一只透明的白盒子里, 測試者完全了解程序的結構和處理過程。
它根據程序的內部邏輯來設計測試用例, 檢查程序中的邏輯通路是否都按預定的要求正確地工作。
白盒測試的主要技術有邏輯覆蓋測試(語句覆蓋、路徑覆蓋、判斷覆蓋、條件覆蓋、判斷-條件覆蓋)、基本路徑測試等。
常用的黑盒測試方法和技術有:等價類划分法、邊界值分析法、錯誤推測法和因果圖等。
故本題答案為A選項。
【8】數據庫管理系統的基本功能不包括()。
〖A〗數據庫和網絡中其他系統的通信
〖B〗數據庫定義
〖C〗數據庫的建立和維護
〖D〗數據庫訪問
數據庫管理系統的功能包括數據模式定義、數據存取的物理構建、數據操縱、數據完整性安全性的定義與檢查、數據庫的並發控制與故障恢復、數據的服務。
故本題答案為A選項。
【9】在關系數據庫設計中, 關系模式是用來記錄用戶數據的()。
〖A〗二維表
〖B〗視圖
〖C〗屬性
〖D〗實體
在關系數據庫中用關系模型來表示數據結構, 表示為一個二維表, 一個關系就是一個二維表。
故本題答案為A選項。
【10】定義學生、教師和課程的關系模式STC(SNO, SN, SA, TN, CN, G), 其中的六個屬性分別為學生的學號、姓名、年齡、教師的姓名、課程名以及學生的成績, 則該關系為()。
〖A〗第一范式
〖B〗第二范式
〖C〗第三范式
〖D〗BCNF范式
范式是符合某一種級別的關系模式的集合。
關系數據庫中的關系必須滿足一定的要求, 滿足不同程度要求的為不同范式。
目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce - Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
滿足最低要求的范式是第一范式(1NF)。
在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF), 其余范式以次類推。
一般說來, 數據庫只需滿足第三范式(3NF)就行了。

第一范式:主屬性(主鍵)不為空且不重復, 字段不可再分(存在非主屬性對主屬性的部分依賴)。

第二范式:如果關系模式是第一范式, 每個非主屬性都沒有對主鍵的部分依賴。

第三范式:如果關系模式是第二范式, 沒有非主屬性對主鍵的傳遞依賴和部分依賴。

BCNF范式:所有屬性都不傳遞依賴於關系的任何候選鍵。

題目中關系模式STC滿足第一范式, 但不滿足第二范式。
故本題答案為A選項。

專業知識

【11】以下敘述中正確的是
〖A〗N - S流程圖只能描述簡單的順序結構的程序
〖B〗程序的算法只能使用流程圖來描述
〖C〗結構化程序的三種基本結構是循環結構、選擇結構、順序結構
〖D〗計算機可以直接處理C語言程序, 不必進行任何轉換
N - S流程圖是可以描述循環結構、選擇結構、順序結構等多種結構的程序, 所以A選項錯誤。
程序的算法可以用流程圖、偽代碼、N - S結構圖等方法表示, 所以B選項錯誤。
計算機只能處理二進制表示的目標程序, 不能直接執行由C語言編寫的源程序, 所以D選項錯誤。
【12】以下敘述中正確的是
〖A〗書寫源程序時, 必須注意縮進格式, 否則程序會有編譯錯誤
〖B〗程序的主函數名除main外, 也可以使用Main或_main
〖C〗程序可以包含多個主函數, 但總是從第一個主函數處開始執行
〖D〗在C程序中, 模塊化主要是通過函數來實現的
C語言的源程序中對縮進沒有要求, 所以A選項錯誤。
C語言中區分大小寫, main函數不能寫成Main或_main, 所以B選項錯誤。
一個C程序有且只有一個主函數, 所以C選項錯誤。
【13】C語言中double 類型數據占字節數為
〖A〗4
〖B〗8
〖C〗12
〖D〗16
在VC環境下, double型數據在內存中占8個字節, float型數據占4個字節, int型數據占2個字節, char型數據占1個字節。
所以選擇B。
【14】以下敘述中正確的是
〖A〗語言中的關鍵字不能作變量名, 但可以作為函數名
〖B〗標識符的長度不能任意長, 最多只能包含16個字符
〖C〗標識符總是由字母、數字和下划線組成, 且第一個字符不得為數字
〖D〗用戶自定義的標識符必須"見名知義", 如果隨意定義, 則會出編譯錯誤
C語言中的關鍵字即不能做變量名也不能做用戶函數名, 所以A錯誤。
標識符的命名規則, 即由下划線字母數字組成, 且必須以下划線和字母開始, 也不能和關鍵字一致。
不同C語言規定標識符的有效長度可能會不同, 但沒有限制最大長度, 所以B錯誤。
用戶定義的標識符只要滿足標識符命名規則沒有特殊要求, 不必一定"見名知義", 所以D錯誤。
【15】以下敘述中正確的是
〖A〗由printf輸出的數據都隱含左對齊
〖B〗scanf和printf是C語言提供的輸入和輸出語句
〖C〗賦值語句是一種執行語句, 必須放在函數的可執行部分
〖D〗由printf輸出的數據的實際精度是由格式控制中的域寬和小數的域寬來完全決定的
scanf和printf是C語言提供的輸入輸出函數, 所以B錯誤。
由printf輸出的數據都隱含右對齊, 所以A錯誤。
Printf輸出數據所占的寬度由系統決定, 所以D錯誤。
【16】以下敘述中正確的是
〖A〗復合語句在語法上包含多條語句, 其中不能定義局部變量
〖B〗花括號對 { } 只能用來表示函數的開頭和結尾, 不能用於其他目的
〖C〗空語句就是指程序中的空行
〖D〗當用scanf從鍵盤輸入數據時, 每行數據在沒按下回車鍵(Enter鍵)前, 可以任意修改
復合語句可以包含多條語句, 在其中可以定義局部變量, 所以A錯誤。
花括號對 { } 不僅用來表示函數的開頭和結尾, 也可以用於表示復合語句, 所以B錯誤。
C語言中的語句必須以分號";"結束, 所以空語句表示為";", 不是空行, 所以C錯誤。
【17】以下敘述中正確的是
〖A〗在C語言中, 邏輯真值和假值分別對應1和0
〖B〗關系運算符兩邊的運算對象可以是C語言中任意合法的表達式
〖C〗對於浮點變量x和y, 表達式:x == y 是非法的, 會出編譯錯誤
〖D〗分支結構是根據算術表達式的結果來判斷流程走向的
A選項中, 在C語言中, 邏輯真值對應非0; C選項中, 表達式:x == y 是合法的; D選項中, 分支結構的流程走向是根據表達式的值, 並不僅僅是算數表達式的值。
因此B選項正確。
【18】以下敘述中正確的是
〖A〗對於邏輯表達式:a++ || b++, 設a的值為1, 則求解表達式的值后, b的值會發生改變
〖B〗對於邏輯表達式:a++ && b++, 設a的值為0, 則求解表達式的值后, b的值會發生改變
〖C〗else 不是一條獨立的語句, 它只是if語句的一部分
〖D〗關系運算符的結果有三種:0, 1, -1
B選項和A選項中, 對於邏輯表達式, 其中b的值不會因為表達式的結果發生改變; D選項中, 關系運算符的結果有"真"和"假"兩種。
因此C選項正確。
【19】以下敘述中正確的是
〖A〗continue語句使得整個循環終止
〖B〗break語句不能用於提前結束for語句的本層循環
〖C〗使用break語句可以使流程跳出switch語句體
〖D〗在for語句中, continue與break的效果是一樣的, 可以互換
break語句通常用在循環語句和開關語句中。
當break用於開關語句switch中時, 可使程序跳出switch而執行switch以后的語句; 當break語句用於do - while、for、while循環語句中時, 可使程序終止循環而執行循環后面的語句, 即滿足條件時便跳出循環。
continue語句的作用是跳過循環體中剩余的語句而強行執行下一次循環。
A、B和D三個選項中均有錯誤。
因此C選項正確。
【20】以下敘述中正確的是
〖A〗循環發生嵌套時, 最多只能兩層
〖B〗三種循環for, while, do - while可以互相嵌套
〖C〗循環嵌套時, 如果不進行縮進形式書寫代碼, 則會有編譯錯誤
〖D〗for語句的圓括號中的表達式不能都省略掉
A選項中, 循環發生嵌套時, 沒有規定層數; C選項中, 循環嵌套時, 書寫代碼時沒有要求必須縮進; D選項中, for語句的圓括號中的表達式都可以省略掉。
因此B選項正確。
【21】下面選項中合法的字符常量是
〖A〗"X"
〖B〗'X'
〖C〗'abc'
〖D〗'\'
字符常量是用單引號括起來的一個字符。
A選項中, 使用雙引號, 所以是錯誤的; C選項中, 'abc'是字符串, 字符常量只能是單個字符, 不能是字符串; D選項中, 以反斜線"\"開頭的是轉義字符。
因此B選項正確。
【22】以下敘述中正確的是
〖A〗轉義字符要用雙引號括起來, 以便與普通的字符常量區分開
〖B〗字符常量在內存中占2個字節
〖C〗字符常量需要用單引號括起來
〖D〗字符常量是不能進行關系運算的
B選項中, 字符常量在內存中占1個字節; A選項中, 轉義字符是以反斜線"\"開頭, 后跟一個或幾個字符; D選項中, 字符常量可以進行關系運算, 不能參與數值運算。
因此C選項正確。
【23】以下敘述中正確的是
〖A〗用戶自己定義的函數只能調用庫函數
〖B〗實用的C語言源程序總是由一個或多個函數組成
〖C〗不同函數的形式參數不能使用相同名稱的標識符
〖D〗在C語言的函數內部, 可以定義局部嵌套函數
A選項中, "用戶自己定義的函數只能調用庫函數"描述是不正確的, 也可以調用自定義函數; C選項中, 對於不同函數的形式參數可以使用相同名稱的標識符; D選項中, 關於函數的定義不可以嵌套, 但函數的調用可以嵌套。
因此B選項正確。
【24】以下敘述中正確的是
〖A〗int *p1; int **p2; int *p3; 都是合法的定義指針變量的語句
〖B〗指針變量只能通過求地址運算符(&)來獲得地址值
〖C〗語句p = NULL; 與p=\0; 是等價的語句
〖D〗語句p = NULL; 執行后, 指針p指向地址為0的存儲單元
B選項描述不正確, 指針變量可以通過求地址運算符(&)來獲得地址值, 可以通過指針變量獲得地址值, 還可以通過標准函數獲得地址值; C選項中, p = NULL; 和p = 0; 或p = '\0'; 等價; D選項中, 語句p = NULL; 執行后, 指針p並不是指向地址為0的存儲單元, 而是具有一個確定的值-"空"。
因此A選項正確。
【25】以下敘述中正確的是
〖A〗即使不進行強制類型轉換, 在進行指針賦值運算時, 指針變量的基類型也可以不同
〖B〗如果企圖通過一個空指針來訪問一個存儲單元, 將會得到一個出錯信息
〖C〗設變量p是一個指針變量, 則語句p = 0; 是非法的, 應該使用p = NULL;
〖D〗指針變量之間不能用關系運算符進行比較
A選項描述不正確, 指針變量的賦值只能賦予地址, 決不能賦予任何其它數據, 否則將引起錯誤; C選項中, p = NULL; 和p = 0; 是等價的; D選項中, 指向同一數組的兩指針變量進行關系運算可表示它們所值數組元素之間的關系。
因此B選項正確。
【26】以下敘述中正確的是
〖A〗一條語句只能定義一個數組
〖B〗每個數組包含一組具有同一類型的變量, 這些變量在內存中占有連續的存儲單元
〖C〗數組說明符的一對方括號中只能使用整型常量, 而不能使用表達式
〖D〗在引用數組元素時, 下標表達式可以使用浮點數
A選項中, 一條語句只能定義一個數組是不准確的, 可以通過一條語句定義多個數組; C選項中, 數組說明符的一對方括號中可以是整型常量, 可以是整型常量表達式; D選項中, 在引用數組元素時, 下標表達式必須是整型的。
因此B選項正確。
【27】以下敘述中正確的是
〖A〗數組下標的下限是1
〖B〗數組下標的下限由數組中第一個非零元素的位置決定
〖C〗數組下標的下限由數組中第一個被賦值元素的位置決定
〖D〗char c1, c2, *c3, c4[40]; 是合法的變量定義語句
數組下標的下限是0。
因此D選項正確。
【28】以下敘述中正確的是
〖A〗語句int a[8] = { 0 }; 是合法的
〖B〗語句 int a[] = { 0 }; 是不合法的, 遺漏了數組的大小
〖C〗語句 char a[2] = { "A", "B" }; 是合法的, 定義了一個包含兩個字符的數組
〖D〗語句 char a[3]; a = "AB"; 是合法的, 因為數組有三個字符空間的容量, 可以保存兩個字符
B選項中, 如給全部元素賦值, 則在數組說明中, 可以不給出數組元素的個數; C選項中, char a[2] = { "A", "B" }; 不合法, 應為char a[2] = { 'A', 'B' }; ; D選項中, 用字符串方式賦值比用字符逐個賦值要多占1個字節, 在該選項中應為3個字節。
因此A選項正確。
【29】下面選項中的程序段, 沒有編譯錯誤的是
〖A〗char *sp, s[10]; sp = "Hello";
〖B〗char *sp, s[10]; s = "Hello";
〖C〗char str1[10] = "computer", str2[10]; str2 = str1;
〖D〗char mark[]; mark = "PROGRAM";
本題考查字符數組的初始化以及指向字符串的指針, B選項不能直接將字符串賦值給數組名, C選項不能將兩個字符數組直接互相賦值, D選項中不能這樣定義char mark[], 必須指定長度或者直接初始化。
【30】以下敘述中正確的是
〖A〗字符串常量"str1"的類型是:字符串數據類型
〖B〗有定義語句:char str1[] = "str1";, 數組str1將包含4個元素
〖C〗下面的語句用賦初值方式來定義字符串, 其中, '\0'是必須的

char str1[] = { 's', 't', 'r', '1', '\0' };

〖D〗字符數組的每個元素可存放一個字符, 並且最后一個元素必須是'\0'字符
本題考查字符數組的相關操作, B選項中數組str1包含了5個元素, 其中有結尾符; A選項中str1的類型不是字符串類型; 字符數組的最后一個元素可以不是'\0'字符。
故答案為C項。
【31】以下敘述中正確的是
〖A〗字符串數組, 是指數組中的每個元素都是一個存放字符串的一維數組
〖B〗char ca[3][5] = { "A", "BB", "CCC" }; 是不合語法的
〖C〗char ca[][5] = { "A", "BB", "CCC" }; 是不合語法的
〖D〗char *ca[3] = { "A", "BB", "CCC" }; 是不合語法的
本題考查字符串數組的相關知識, 選項B、C、D都是合語法的。
【32】以下敘述中正確的是
〖A〗兩個字符串可以用關系運算符進行大小比較
〖B〗函數調用strlen(s); 會返回字符串s實際占用內存的大小(以字節為單位)
〖C〗C語言本身沒有提供對字符串進行整體操作的運算符
〖D〗當拼接兩個字符串時, 結果字符串占用的內存空間是兩個原串占用空間的和
本題考查字符串處理函數strlen、strcat、strcmp。
B選項中strlen返回的是字符串s實際占用內存大小加上結尾符, A選項中不能用關系運算符進行大小比較, 可以使用strcmp。
D選項當使用連接函數strcat時, 內存空間會減少一個字符位置。
【33】以下敘述中正確的是
〖A〗如果函數帶有參數, 就不能調用自己
〖B〗所有函數均不能接受函數名作為實參傳入
〖C〗函數體中的語句不能出現對自己的調用
〖D〗函數名代表該函數的入口地址
本題考查函數調用相關知識, B選項中函數可以接受函數名作為實參傳入, 引用函數名也是指針, C、A選項是錯誤的, 因為遞歸函數就能調用自己。
【34】以下敘述中正確的是
〖A〗局部變量不能被說明為static
〖B〗只有全局變量才有自己的作用域, 函數中的局部變量沒有作用域
〖C〗只有在函數內部定義的變量才是局部變量
〖D〗只要是用戶定義的標識符, 都有一個有效的作用域
本題考查局部變量和全局變量作用域, B選項中局部變量也有作用域, C選項中, 函數內部定義的也可能是全局變量, A選項錯誤, 因為可以定義個靜態局部變量。
【35】下面選項中關於編譯預處理的敘述正確的是
〖A〗預處理命令行必須使用分號結尾
〖B〗凡是以#號開頭的行, 都被稱為編譯預處理命令行
〖C〗預處理命令行不能出現在程序的最后一行
〖D〗預處理命令行的作用域是到最近的函數結束處
本題考查預編譯的預編譯處理命令行, 預處理命令行不能以分號結尾, 所以A選項錯誤, 預處理命令行可以出現在程序的最后一行, 預處理命令行作用域是整個文件。
【36】以下敘述中正確的是
〖A〗使用typedef說明新類型名時, 其格式是:typedef 新類型名 原類型名;
〖B〗在程序中, 允許用typedef來說明一種新的類型名
〖C〗使用typedef 說明新類型名時, 后面不能加分號
〖D〗在使用typedef改變原類型的名稱后, 只能使用新的類型名
本題考查typedef的使用方法, typedef對已存在的類型使用一個新的名字, 選項A總新類型名應該在原類型名之后, C選項中后面要加分號, D選項中可以使用原類型名。
【37】以下敘述中正確的是
〖A〗結構體類型中各個成分的類型必須是一致的
〖B〗結構體類型中的成分只能是C語言中預先定義的基本數據類型
〖C〗在定義結構體類型時, 編譯程序就為它分配了內存空間
〖D〗一個結構體類型可以由多個稱為成員(或域)的成分組成
本題考查結構體類型, 結構體類型中的成分可以是結構體, 所以B選項錯誤, 定義結構體時編譯程序並不會給它分配內存空間, 所以C選項錯誤, 結構體中各個成分的類型可以是不一樣的, 所以A選項錯誤。
【38】以下敘述中正確的是
〖A〗使用typedef定義新類型名后, 新類型名與原類型名實際上是等價的
〖B〗結構體類型中的各個成分均不能是數組或指針
〖C〗結構體類型的變量, 不能在聲明結構體類型組成時一起定義
〖D〗元素為結構體類型的數組, 只能在聲明過結構體類型之后, 單獨進行定義
本題考查typedef的使用方法, typedef對已存在的類型使用一個新的名字, 結構體類型中的成分可以是數組和指針, 所以B選項錯誤, 結構體類型的變量可以在聲明結構體的時候一起定義, C選項錯誤, D選項中可以一起定義。
【39】下面選項中關於位運算的敘述正確的是
〖A〗位運算的對象只能是整型或字符型數據
〖B〗位運算符都需要兩個操作數
〖C〗左移運算的結果總是原操作數據2倍
〖D〗右移運算時, 高位總是補0
本題考查位運算。
按位取反只需要一個操作數, 所以B選項錯誤, 左移一位是原操作數的2倍, 其他情況不是, 比如左移兩位就是原操作數的4倍, 所以C選項錯誤, 右移運算時, 高位在某些情況下不是補0。
【40】下面選項中關於"文件指針"概念的敘述正確的是
〖A〗文件指針是程序中用FILE定義的指針變量
〖B〗文件指針就是文件位置指針, 表示當前讀寫數據的位置
〖C〗文件指針指向文件在計算機中的存儲位置
〖D〗把文件指針傳給fscanf函數, 就可以向文本文件中寫入任意的字符
在C語言中用一個指針變量指向一個文件, 這個指針稱為文件指針。
通過文件指針就可對它所指的文件進行各種操作。
文件指針不是文件位置指針, 所以B、C選項錯誤, D選項中不可以寫入任意的字符。

編程題

【41】使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中, 函數fun的功能是:將a所指3×5矩陣中第k列的元素左移到第0列, 第k列以后的每列元素行依次左移, 原來左邊的各列依次繞到右邊。
例如, 有下列矩陣:

若k為2, 程序執行結果為

請在程序的下畫線處填入正確的內容並把下畫線刪除, 使程序得出正確的結果。
注意:部分源程序在文件blank1.c中。
不得增行或刪行, 也不得更改程序的結構 !
(1) k
(2) N - 1
(3) temp
填空1:外循環p的值為數組移動的次數, 試題要求第k列左移, 則需要移動的次數為k, 所以應填k。
填空2:矩陣共N列, 所以應填N - 1。
填空3:臨時變量temp中存放的值為數組最左邊元素的值, 需要把temp放到數組的末尾, 即放到a[i][N - 1]中, 所以應填temp。
【42】使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中, 函數fun的功能是:根據形參m的值(2≤m≤9), 在m行m列的二維數組中存放如下所示規律的數據, 由main函數輸出。

請改正程序中的錯誤, 使它能得出正確的結果。
注意:部分源程序在文件modi1.c中。
不要改動main函數, 不得增行或刪行, 也不得更改程序的結構 !
(1) void fun(int a[][M], int m)
(2) a[j][k] = (k + 1) * (j + 1);
(1) 在函數體fun中可知, a是一個字符串數組型變量, 設置實參時, 用**a表示是錯誤的, 所以應改為void fun(int a[][M], int m)。
(2) 根據輸出的結果可知, 應改為a[j][k] = (k + 1) * (j + 1); 。
【43】使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中, 函數fun的功能是:將a、b中的兩個正整數合並形成一個新的整數放在c中。合並的方式是:將a中的十位和個位數依次放在變量c的十位和千位上, b中的十位和個位數依次放在變量c的個位和百位上。
例如, 當a = 45, b = 12。調用該函數后, c = 5241。
注意:部分源程序在文件prog1.c中。
請勿改動主函數main和其他函數中的任何內容, 僅在函數fun的花括號中填入你編寫的若干語句。
void fun(int a, int b, long *c) {
    *c = (a % 10) * 1000 + (b % 10) * 100 + (a / 10) * 10 + (b / 10);
}
本題是給出兩個兩位數的正整數分別取出各位上的數字, 再按條件組成一個新數。
取a十位數字的方法a / 10, 取a個位數字的方法a % 10。
同理可取出整數b的個位數和十位數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM