選擇題
公共知識
【1】某二叉樹的中序遍歷序列為 CBADE, 后序遍歷序列為 CBADE, 則前序遍歷序列為()。
二叉樹遍歷可以分為3種:前序遍歷(訪問根結點在訪問左子樹和訪問右子樹之前)、中序遍歷(訪問根結點在訪問左子樹和訪問右子樹兩者之間)、后序遍歷(訪問根結點在訪問左子樹和訪問右子樹之后)。
二叉樹的中序遍歷序列為CBADE, 后序遍歷序列為CBADE, 可知該樹只有左子樹結點, 沒有右子樹結點, E為根結點。
中序遍歷序列與后序遍歷序列相同說明該樹只有左子樹沒有右子樹, 因此該樹有5層, 從頂向下依次為EDABC。
故本題答案為A選項。
二叉樹的中序遍歷序列為CBADE, 后序遍歷序列為CBADE, 可知該樹只有左子樹結點, 沒有右子樹結點, E為根結點。
中序遍歷序列與后序遍歷序列相同說明該樹只有左子樹沒有右子樹, 因此該樹有5層, 從頂向下依次為EDABC。
故本題答案為A選項。
【2】下列敘述中正確的是()。
在棧中, 棧底保持不變, 有元素入棧, 棧頂指針增加; 有元素出棧, 棧頂指針減小。
在循環隊列中, 隊頭指針和隊尾指針的動態變化決定隊列的長度。
在循環鏈表中, 前一個結點指向后一個結點, 而最后一個結點指向頭結點, 只有頭結點是固定的。
線性鏈表中, 由於前一個結點包含下一個結點的指針, 尾結點指針為空, 要插入刪除元素, 只需要改變相應位置的結點指針即可, 頭指針和尾指針無法決定鏈表長度。
故本題答案為A選項。
在循環隊列中, 隊頭指針和隊尾指針的動態變化決定隊列的長度。
在循環鏈表中, 前一個結點指向后一個結點, 而最后一個結點指向頭結點, 只有頭結點是固定的。
線性鏈表中, 由於前一個結點包含下一個結點的指針, 尾結點指針為空, 要插入刪除元素, 只需要改變相應位置的結點指針即可, 頭指針和尾指針無法決定鏈表長度。
故本題答案為A選項。
【3】設棧的存儲空間為 S(1 : 60), 初始狀態為 top = 61。現經過一系列正常的入棧與退棧操作后, top = 1, 則棧中的元素個數為()。
棧是一種特殊的線性表, 它所有的插入與刪除都限定在表的同一端進行。
入棧運算即在棧頂位置插入一個新元素, 退棧運算即取出棧頂元素賦予指定變量。
棧為空時, 棧頂指針top = 0, 經過入棧和退棧運算, 指針始終指向棧頂元素。
初始狀態為top = 61, 當top = 1時, 元素依次存儲在單元1 : 60中, 個數為60。
故本題答案為A選項。
入棧運算即在棧頂位置插入一個新元素, 退棧運算即取出棧頂元素賦予指定變量。
棧為空時, 棧頂指針top = 0, 經過入棧和退棧運算, 指針始終指向棧頂元素。
初始狀態為top = 61, 當top = 1時, 元素依次存儲在單元1 : 60中, 個數為60。
故本題答案為A選項。
【4】設順序表的長度為n。下列排序方法中, 最壞情況下比較次數小於n(n - 1) / 2的是()。
堆排序最壞情況下比較次數為O(nlog2n), 快速排序、簡單插入排序、冒泡排序最壞情況下比較次數為n(n - 1) / 2。
故本題答案為A選項。
故本題答案為A選項。
【5】下面屬於軟件定義階段任務的是()。
軟件生命周期分為3個階段:軟件定義階段, 任務是確定軟件開發工作必須完成的目標, 確定工程的可行性; 軟件開發階段, 任務是具體完成設計和實現定義階段所定義的軟件, 通常包括總體設計、詳細設計、編碼和測試; 軟件維護階段, 任務是使軟件在運行中持久地滿足用戶的需要。
需求分析屬於軟件定義階段的任務。
故本題答案為A選項。
需求分析屬於軟件定義階段的任務。
故本題答案為A選項。
【6】下列選項中, 不是面向對象主要特征的是()。
面向對象的主要特征有抽象、繼承、封裝、多態等。
故本題答案為A選項。
故本題答案為A選項。
【7】某系統結構圖如下圖所示。該系統結構圖的最大扇入數是()。

扇入是指調用一個給定模塊的模塊個數。
圖中所示功能n.1被功能1、功能2和功能3三個模塊調用, 則最大扇入數為3。
故本題答案為A選項。
圖中所示功能n.1被功能1、功能2和功能3三個模塊調用, 則最大扇入數為3。
故本題答案為A選項。
【8】對數據庫數據的存儲方式和物理結構的邏輯進行描述的是()。
數據庫系統的概念模式也稱為模式, 是數據庫系統中全局數據邏輯結構的描述, 全體用戶的公共數據視圖; 外模式也稱子模式或者用戶模式, 是用戶的數據視圖, 也就是用戶所能看見和使用的局部數據的邏輯結構和特征的描述, 是與某一應用有關的數據的邏輯表示; 內模式又稱物理模式, 是數據物理結構和存儲方式的描述, 是數據在數據庫內部的表示方式。
可見對數據庫數據的存儲方式和物理結構的邏輯進行描述的是內模式。
故本題答案為A選項。
可見對數據庫數據的存儲方式和物理結構的邏輯進行描述的是內模式。
故本題答案為A選項。
【9】將實體-聯系模型轉換為關系模型時, 實體之間多對多聯系在關系模型中的實現方式是()。
將實體-聯系模型轉換為關系模型時, 一個m : n的聯系可以轉換為一個獨立的關系模式, 與該聯系相連的各實體的碼及聯系本身的屬性均轉換為關系的屬性, 而關系的碼為各實體碼的組合。
故本題答案為A選項。
故本題答案為A選項。
【10】定義學生、教師和課程的關系模式S(S#, Sn, Sd, Dc, SA)(其屬性分別為學號、姓名、所在系、所在系的系主任、年齡); C(C#, Cn, P#)(其屬性分別為課程號、課程名、先修課); SC(S#, C#, G)(其屬性分別為學號、課程號和成績)。包含對非主屬性部分依賴的關系是()。
若X→Y, 但Y不完全函數依賴於X, 則稱Y對X部分函數依賴。
關系模式S 中, (S#, Sd)→Dc, Sd →Dc, Dc不完全依賴於Sd且Sd為非主屬性。
故本題答案為A選項。
關系模式S 中, (S#, Sd)→Dc, Sd →Dc, Dc不完全依賴於Sd且Sd為非主屬性。
故本題答案為A選項。
專業知識
【11】以下敘述中正確的是
C語言所調用的函數可以放在調用它的函數前, 也可以放在調用它的函數后, 所以A錯誤。
C語言程序總是從main函數開始執行, 所以B錯誤。
main函數的位置可以放在開始, 也可以放在中間, 也可以放在最后, 所以C錯誤。
C語言程序總是從main函數開始執行, 所以B錯誤。
main函數的位置可以放在開始, 也可以放在中間, 也可以放在最后, 所以C錯誤。
【12】C語言程序中, 運算對象必須是整型數的運算符是
%取余運算是二目運算符, 且要求運算對象必須為整數, 所以選C。
【13】有以下程序
#include <stdio.h>
void main() {
int sum, pad, pAd;
sum = pad = 5;
pAd = ++sum, pAd++, ++pad;
printf("%d\n", pad);
}
程序的輸出結果是
C語言區分大小寫, pad與pAd是兩個不同的變量。
首先將5賦值給兩個變量, 由於賦值運算符的優先級高於逗號運算符, 所以計算pAd = ++sum, 此時pAd為6, sum也為6, 然后計算pAd++, pAd的值變為7, ++pad, pad的值變為6, 所以選擇B。
首先將5賦值給兩個變量, 由於賦值運算符的優先級高於逗號運算符, 所以計算pAd = ++sum, 此時pAd為6, sum也為6, 然后計算pAd++, pAd的值變為7, ++pad, pad的值變為6, 所以選擇B。
【14】有以下程序
#include <stdio.h>
void main() {
int a = 3;
a += a -= a * a;
printf("%d\n", a);
}
程序的輸出結果是
首先計算a * a結果為9, 執行a = a - 9, a的值為-6, 然后執行a += a, 即a = a + a = -6 + (-6), 所以值為-12。
【15】有如下程序
sizeof(double)是
sizeof是C語言中的一個操作符(operator), 不是函數調用, 簡單的說其作用就是返回一個對象或者類型所占的內存字節數。
所以選擇A。
所以選擇A。
【16】有以下程序
#include <stdio.h>
void main() {
int a = 2, c = 5;
printf("a=%%d,b=%%d\n", a, c);
}
程序的輸出結果是
C語言中用"%%"打印輸出字符"%", 所以%%d, 輸出為%d兩個普通字符, 而不是格式控制符"%d"的含義, 所以打印結果為C。
【17】若有定義語句:
char a = '\82';
則變量a
定義語句:char a = '\82'; 定義字符變量a, '\82'轉義字符錯誤, 三位八進制代表一個ASCII碼字符, 此處只有兩位數字, '\xhh'x開頭的兩位16進制數字代表一個ASCII碼字符, 這里沒有x, 因此A選項正確。
【18】有以下程序
#include <stdio.h>
void main() {
char c1 = 'A', c2 = 'Y';
printf("%d, %d\n", c1, c2);
}
程序的輸出結果是
本題重點考查字符變量的相關知識。
分別給字符型變量a和b分別賦值為'A'和'Y', 即A和Y的ASSCII碼, 因此輸出結果為65, 89, 因此B選項正確。
分別給字符型變量a和b分別賦值為'A'和'Y', 即A和Y的ASSCII碼, 因此輸出結果為65, 89, 因此B選項正確。
【19】若變量已正確定義:for (x = 0, y = 0; (y != 99 && x < 4); x++)
則以上for循環
則以上for循環
本題重點考查for語句的循環次數, for (x = 0, y = 0; (y != 99 && x < 4); x++) , y != 99 && x < 4即循環條件當y不等於99以及x < 4時, 執行循環語句, 當有一個條件不成立時, 均結束循環, 因此循環4次, B選項正確。
【20】對於while( !E)s;, 若要執行循環體s, 則E的取值應為:
while語句的一般形式為:while (表達式) 語句; 其中表達式是循環條件, 語句為循環體。
while語句的語義是:計算表達式的值, 當值為真(非0)時, 執行循環體語句。
該題中如要執行語句s, 則 !E應為真, 因此E應等於0, D選項正確。
while語句的語義是:計算表達式的值, 當值為真(非0)時, 執行循環體語句。
該題中如要執行語句s, 則 !E應為真, 因此E應等於0, D選項正確。
【21】有以下程序
#include <stdio.h>
void main() {
int x;
for (x = 3; x < 6; x++)
printf((x % 2) ? ("*%d") : ("#%d"), x);
printf("\n");
}
程序的輸出結果是
條件運算符組成條件表達式的一般形式為:表達式1?表達式2:表達式3
其求值規則為:如果表達式1的值為真, 則以表達式2 的值作為條件表達式的值, 否則以表達式2的值作為整個條件表達式的值。
本題中語句printf((x % 2) ? ("%d") : ("#%d"), x);
含義為變量x對2求余, 如果結果為真, 則按照"%d"格式輸出, 否則按照#%d輸出。
因此A選項正確。
【22】有以下程序
#include <stdio.h>
void main() {
int a, b;
for (a = 1, b = 1; a <= 100; a++) {
if (b >= 20)
break;
if (b % 3 == 1) {
b = b + 3;
continue;
}
b = b - 5;
}
printf("%d\n", a);
}
程序的輸出結果是
首先注意for循環的控制條件當b >= 20或者a > 100則跳出for循環也即b < 20且a <= 100時執行for循環; 第一次進入循環a = 1, b = 1均滿足循環條件, 但b % 3 == 1條件滿足, 故執行b = b + 3, 得到b = 4, 注意有continue, 所以后面語句不執行, 直接跳轉到a++這個語句, 所以第一次循環完之后a = 2, b = 4; 進入第二輪循環, b % 3 == 1也是滿足的, 故再次b = b + 3, 此輪循環執行之后a = 3, b = 7, 進入下一輪。
此后和前面循環同理, 都是b % 3 == 1滿足, 因為每次都是加3, 而之后又去模3, 且都跳過for后面語句直接執行a++, 所以, 一直循環到b = 22跳出for循環。
此時a為8.綜合起來就是, 每次循環b增加3, a增加1, 且當b > 22時跳出循環, 結束程序。
所以b從1增加到22, 有(22 - 1) / 3 = 7, 所以a = 1 + 7 = 8.因此C選項正確。
此后和前面循環同理, 都是b % 3 == 1滿足, 因為每次都是加3, 而之后又去模3, 且都跳過for后面語句直接執行a++, 所以, 一直循環到b = 22跳出for循環。
此時a為8.綜合起來就是, 每次循環b增加3, a增加1, 且當b > 22時跳出循環, 結束程序。
所以b從1增加到22, 有(22 - 1) / 3 = 7, 所以a = 1 + 7 = 8.因此C選項正確。
【23】有以下程序
#include <stdio.h>
void fun(int x, int y, int *c, int *d) {
*c = x + y;
*d = x - y;
}
void main() {
int a = 4, b = 3, c = 0, d = 0;
fun(a, b, &c, &d);
printf("%d %d\n", c, d);
}
程序的輸出結果是
主函數中首先初始化整型變量a、b、c、d分別為4、3、0、0。
調用函數fun, 將實參傳遞給形參。
在fun函數內, *c = 7、*d = 1。
返回主函數, 最后輸出7和1。
因此D選項正確。
調用函數fun, 將實參傳遞給形參。
在fun函數內, *c = 7、*d = 1。
返回主函數, 最后輸出7和1。
因此D選項正確。
【24】有以下程序
#include <stdio.h>
void fun(int *p, int *q) {
int t;
t = *p;
*p = *q;
*q = t;
*q = *p;
}
void main() {
int a = 0, b = 9;
fun(&a, &b);
printf("%d %d\n", a, b);
}
程序的輸出結果是
主函數中定義整型變量a、b, 分別賦值0和9。
將a和b的地址傳遞給指針變量p和q, 函數fun中將a和b的值互換后, 又將a的值賦給b。
返回主函數, 最后輸出9和9。
因此C選項正確。
將a和b的地址傳遞給指針變量p和q, 函數fun中將a和b的值互換后, 又將a的值賦給b。
返回主函數, 最后輸出9和9。
因此C選項正確。
【25】有以下程序
#include <stdio.h>
void main() {
int a[] = { 2, 4, 6, 8, 10 }, x, *p, y = 1;
p = &a[1];
for (x = 0; x < 3; x++)
y += *(p + x);
printf("%d\n", y);
}
程序的輸出結果是
本題通過語句"p=&a[1]"將指針變量p指向了存儲單元a[1], 即使得p[0]的值為4, y的初始值為1, 然后通過3次for循環, 使得y的值分別加上p[0]、p[1]和p[2], 那么y = 1 + 4 + 6 + 8, 所以輸出的y的值為19。
【26】有以下程序
#include <stdio.h>
void main() {
int i, x[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (i = 0; i < 3; i++)
printf("%d ", x[i][2 - i]);
printf("\n");
}
程序的輸出結果是
程序首先初始化二維數組x[3][3], 然后通過3次for循環, 輸出x[0][2]、x[1][1]和x[2][0]的值, 即3、5、7。
因此B選項正確。
因此B選項正確。
【27】設有某函數的說明為:int * func(int a[10], int n);
則下列敘述中, 正確的是
則下列敘述中, 正確的是
本題重點考查返回指針值的函數相關知識, 返回指針值的函數, 一般定義形式為:類型名*函數名(參數列表)。
func函數被定義為指針型函數, 它的形參int a[10]和 int n, 分別指一維數組a[0]和整型變量n。
func函數被定義為指針型函數, 它的形參int a[10]和 int n, 分別指一維數組a[0]和整型變量n。
【28】有以下程序
#include <stdio.h>
char fun(char *c) {
if (*c <= 'Z' && *c >= 'A')
*c -= 'A' - 'a';
return *c;
}
void main() {
char s[81], *p = s;
gets(s);
while (*p) {
*p = fun(p);
putchar(*p);
p++;
}
printf("\n");
}
若運行時從鍵盤上輸入
OPEN THE DOOR<回車>
程序的輸出結果是
OPEN THE DOOR<回車>
程序的輸出結果是
字符串輸入函數gets的功能是從標准輸入設備鍵盤上輸入一個字符串。
首先使指針變量p指向字符串的首字母, while循環語句中對字符串的每個字符進行fun函數操作。
fun函數的功能是, 將字符串中的大寫字母變小寫字母。
將處理結果返回主函數, 主函數通過putchar()字符輸出函數進行輸出。
因此C選項正確。
首先使指針變量p指向字符串的首字母, while循環語句中對字符串的每個字符進行fun函數操作。
fun函數的功能是, 將字符串中的大寫字母變小寫字母。
將處理結果返回主函數, 主函數通過putchar()字符輸出函數進行輸出。
因此C選項正確。
【29】設有定義語句:
char *aa[2] = { "abcd", "ABCD" };
則以下敘述正確的是
本題中定義了一個指針數組, 數組中存放的是字符指針, aa數組的兩個元素分別包含了5個字符, 所以可以存放5個字符的一維數組的首地址, 所以B選項錯誤。
aa數組的值是指向那兩個字符串的字符指針, 而不是那兩個字符串, 所以C選項錯誤。
aa本身是一個指向兩個字符指針的指針, 所以D選項錯誤。
aa數組的值是指向那兩個字符串的字符指針, 而不是那兩個字符串, 所以C選項錯誤。
aa本身是一個指向兩個字符指針的指針, 所以D選項錯誤。
【30】有以下程序
#include <stdio.h>
int fun(char *s) {
char *p = s;
while (*p != 0)
p++;
return (p - s);
}
void main() {
printf("%d\n", fun("goodbey!"));
}
程序的輸出結果是
本題主要考查了函數定義及調用, 以及while循環語句, 執行fun函數后, 首先是找到最后一個字符的地址, 然后減去第一個地址得到的就是這個字符串的長度, 所以本題答案為8。
答案為D選項。
答案為D選項。
【31】有以下程序
#include <stdio.h>
int fun(int n) {
int a;
if (n == 1)
return 1;
a = n + fun(n - 1);
return (a);
}
void main() {
printf("%d\n", fun(5));
}
程序的輸出結果是
考查函數的遞歸調用, 只需要一步一步遞歸調用fun函數即可, 執行fun(5) = 5 + (4 + (3 + (2 + fun(1)))) = 15, 所以答案為D選項。
【32】有以下程序
#include <stdio.h>
int d = 1;
void fun(int p) {
int d = 5;
d += p++;
printf("%d ", d);
}
void main() {
int a = 3;
fun(a);
d += a++;
printf("%d\n", d);
}
程序的輸出結果是
本題主要考查局部變量和全局變量的區別, 題目中函數之外定義的d為全局變量, 函數fun內定義的d為局部變量, 所以執行fun函數后, 打印出8, 執行完d += a++; 后d變為4, 所以答案為A。
【33】有以下程序
#include <stdio.h>
int fun(int a) {
int b = 0;
static int c = 3;
a = (c++, b++);
return (a);
}
void main() {
int a = 2, i, k;
for (i = 0; i < 2; i++)
k = fun(a++);
printf("%d\n", k);
}
程序的輸出結果是
題目中fun函數被執行了兩次, 兩次執行后, 都是返回了函數內部的b值, 所以答案為0, 即B選項正確。
【34】有以下程序
#include <stdio.h>
void main() {
char c[2][5] = { "6934", "8254" }, *p[2];
int i, j, s = 0;
for (i = 0; i < 2; i++)
p[i] = c[i];
for (i = 0; i < 2; i++)
for (j = 0; p[i][j] > 0 && p[i][j] <= '9'; j += 2)
s = 10 * s + p[i][j] - '0';
printf("%d\n", s);
}
程序的輸出結果是
本題的意圖在於將c中兩個字符串的偶數位置的數字組成一個新數, 找到的四個數字分別為6、3、8、5, 組成的數為6385, 所以答案為D選項。
【35】有以下程序
#include <stdio.h>
#define SQR(X) X * X
void main() {
int a = 10, k = 2, m = 1;
a /= SQR(k + m) / SQR(k + m);
printf("%d\n", a);
}
程序的輸出結果是
本題考查宏定義, 宏定義只是做個簡單的替換, 執行SQR(k + m) / SQR(k + m) = k + m * k + m / k + m * k + m = 15 / 2, a /= SQR(k + m) / SQR(k + m)的結果為1, 選項B正確。
【36】有以下程序
#include <stdio.h>
void main() {
char x = 2, y = 2, z;
z = (y << 1) & (x >> 1);
printf("%d\n", z);
}
程序的輸出結果是
本題考查位運算<<、&。
y << 1為4, x >> 1為1, 二者與一下為0, 所以B選項正確。
y << 1為4, x >> 1為1, 二者與一下為0, 所以B選項正確。
【37】有以下程序
#include <stdio.h>
struct S {
int a;
int b;
};
void main() {
struct S a, *p = &a;
a.a = 99;
printf("%d\n", __________);
}
程序要求輸出結構體中成員a的數據, 以下不能填入橫線處的內容是
本題考查結構體變量的引用, 題目中要求輸出結構體中成員a的數據, p為指針, *p為結構體變量, 那么*p.a可以表示為結構體中成員a的數據。
【38】有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun(double *p1, double *p2, double *s) {
s = (double *) calloc(1, sizeof(double));
*s = *p1 + *(p2 + 1);
}
void main() {
double a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s = a;
fun(a, b, s);
printf("%5.2f\n", *s);
}
程序的輸出結果是
本題考查把數組名作為函數參數, 執行fun函數后, s的值並沒有發生變化, 仍然是指向a, 所以輸出結果為1.10, 選項D正確。
【39】若已建立以下鏈表結構, 指針p、s分別指向如圖所示結點
則不能將s所指向結點插入到鏈表末尾的語句是

則不能將s所指向結點插入到鏈表末尾的語句是
本題考查向鏈表中插入節點, 選項B中, "s ->next='\0';"語句將s結點的next指針域賦值為NULL, "p=p->next; p->next=s;"這兩條語句將所有結點鏈接, 並將s結點鏈接在鏈表的尾部。
選項C和D表達方式相同, 只是將C選項的指針通過(*p)轉換為變量訪問。
都可以在鏈表末尾插入結點s。
A選項中, "s ->next=p;"將s的next指針域賦值為p, 不是鏈表的結尾, 尾指針的next域為NULL。
故本題答案為A選項。
選項C和D表達方式相同, 只是將C選項的指針通過(*p)轉換為變量訪問。
都可以在鏈表末尾插入結點s。
A選項中, "s ->next=p;"將s的next指針域賦值為p, 不是鏈表的結尾, 尾指針的next域為NULL。
故本題答案為A選項。
【40】若fp已定義為指向某文件的指針, 且沒有讀到該文件的末尾, 則C語言函數feof(fp)的函數返回值是
本題考查文件的定位, feof函數的用法是從輸入流讀取數據, 如果到達文件末尾(遇文件結束符), eof函數值為非零值, 否則為0, 所以選項D正確。
編程題
【41】使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中, 函數fun的功能是:把形參s所指字符串中最右邊的n個字符復制到形參t所指字符數組中, 形成一個新串。若s所指字符串的長度小於n, 則將整個字符串復制到形參t所指字符數組中。
例如, 形參s所指的字符串為:abcdefgh, n的值為5, 程序執行后t所指字符數組中的字符串應為:defgh。
請在程序的下畫線處填入正確的內容並把下畫線刪除, 使程序得出正確的結果。
注意:部分源程序在文件blank1.c中。
不得增行或刪行, 也不得更改程序的結構 !
例如, 形參s所指的字符串為:abcdefgh, n的值為5, 程序執行后t所指字符數組中的字符串應為:defgh。
請在程序的下畫線處填入正確的內容並把下畫線刪除, 使程序得出正確的結果。
注意:部分源程序在文件blank1.c中。
不得增行或刪行, 也不得更改程序的結構 !
(1) t, s
(2) s[i]
(3) 0或'\0'
填空1:當給定的長度n大於該字符串s的長度, 那么把該字符串直接拷貝到t就可以了, 所以應填t, s。
填空2:使用for循環語句, 把最右邊n個字符依次添加到t中, 所以應填s[i]。
填空3:字符串操作結束, 需要給t加一個字符串結束符, 所以應填0或'\0'。
填空2:使用for循環語句, 把最右邊n個字符依次添加到t中, 所以應填s[i]。
填空3:字符串操作結束, 需要給t加一個字符串結束符, 所以應填0或'\0'。
【42】使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中, 函數fun的功能是:找出一個大於給定整數m且緊隨m的素數, 並作為函數值返回。
請改正程序中的錯誤, 使它能得出正確的結果。
注意:部分源程序在文件modi1.c中。
不要改動main函數, 不得增行或刪行, 也不得更改程序的結構 !
請改正程序中的錯誤, 使它能得出正確的結果。
注意:部分源程序在文件modi1.c中。
不要改動main函數, 不得增行或刪行, 也不得更改程序的結構 !
(1) if (i % k == 0)
(2) if (k == i)
(1) 判斷當前數是否為素數, 若存在一個數(除1和其自身)能整除當前數, 則跳出本次循環, 所以if條件應為i % k == 0。
(2) 如果i是素數, 則循環結束時k == i, 將該值返回。
(2) 如果i是素數, 則循環結束時k == i, 將該值返回。
【43】使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中, 編寫函數void fun(int x, int pp[], int *n), 它的功能是:求出能整除x且不是偶數的各整數, 並按從小到大的順序放在pp所指的數組中, 這些除數的個數通過形參n返回。
例如, 若x中的值為30, 則有4個數符合要求, 它們是1、3、5、15。
注意:部分源程序在文件prog1.c中。
請勿改動主函數main和其他函數中的任何內容, 僅在函數fun的花括號中填入你編寫的若干語句。
例如, 若x中的值為30, 則有4個數符合要求, 它們是1、3、5、15。
注意:部分源程序在文件prog1.c中。
請勿改動主函數main和其他函數中的任何內容, 僅在函數fun的花括號中填入你編寫的若干語句。
void fun(int x, int pp[], int *n) {
int i, j = 0;
for (i = 1; i <= x; i = i + 2)
/*i的初始值為1, 步長為2, 確保i為奇數*/
if (x % i == 0)
/*將能整除x的數存入數組pp中*/
pp[j++] = i;
*n = j;
/*傳回滿足條件的數的個數*/
}
本題考查:偶數的判定方法; 整除的實現。
本題題干信息是:能整除x且不是偶數的所有整數。
循環語句中變量i從1開始且每次增2, 所以i始終是奇數。
整除的方法, 在前面已經講過多次, 這里就不再贅述了。
對於本題目要求的不是偶數的判定方法, 即該數對2求余不為0。
除以上方法外, 還可以通過for循環語句直接把偶數篩出去, 確保參與操作的數均為奇數。
本題題干信息是:能整除x且不是偶數的所有整數。
循環語句中變量i從1開始且每次增2, 所以i始終是奇數。
整除的方法, 在前面已經講過多次, 這里就不再贅述了。
對於本題目要求的不是偶數的判定方法, 即該數對2求余不為0。
除以上方法外, 還可以通過for循環語句直接把偶數篩出去, 確保參與操作的數均為奇數。