c語言程序設計
(考試時間120分鐘,滿分100分)
壹、選擇題((1)-(10)每小題2分,(11)-(50) 65438+每小題0分,***60分)以下為a)、b)、c)。
(1)下列說法正確的是(B)
a)算法的效率只與問題的規模有關,與數據的存儲結構無關。
b)算法的時間復雜度是指執行算法所需的計算工作量。
c)數據的邏輯結構與存儲結構壹壹對應。
d)算法的時間復雜度與空間復雜度相關。
(2)結構化程序設計中,模塊劃分的原則是(D)
a)每個模塊應包括盡可能多的功能。
b)每個模塊的規模應盡可能大。
c)模塊之間的鏈接應盡可能緊密。
d)模塊內的高內聚和模塊間的低耦合。
(3)下列說法正確的是(a)
a)軟件測試的主要目的是發現程序中的錯誤。
b)軟件測試的主要目的是確定程序中錯誤的位置。
c)為了提高軟件測試的效率,最好由程序員自己完成軟件測試。
d)軟件測試是為了證明軟件中沒有錯誤。
(4)下列選項中,(c)不是面向對象編程的特點。
a)繼承
b)多態性
c)類比
d)封裝
(5)下列關於隊列的說法正確的是(D)
a)隊列屬於非線性表。
b)隊列根據“先進後出”的原則組織數據
c)隊列刪除隊列末尾的數據。
d)隊列根據“先進先出”的原則組織數據
(6)對於下面的二叉樹
A
公元前
D E F X
Y Z
前序遍歷的結果是(c)
A) DYBEAFCZX
B) YDEBFZXCA
C) ABDYECFXZ
D) ABCDEFXYZ
(7)如果二叉樹中有n個度為2的節點,則二叉樹的葉節點數為(A)。
A) n+1
B) n-1
C) 2n
d)不適用
(8)在下面的關系運算中,可以在不改變關系表中屬性個數的情況下減少元組個數的是(b)。
a)和
b)薪酬
c)投影
d)笛卡爾乘積
(9)在E-R圖中,用來表示實體間關系的圖是(C)
a)矩形
b)橢圓形
c)菱形
d)平行四邊形
(10)下列說法中錯誤的是(a)
a)在數據庫系統中,數據的物理結構必須與邏輯結構壹致。
b)數據庫技術的根本目標是解決數據共享問題。
c)數據庫設計是指在現有數據庫管理系統的基礎上建立數據庫。
d)數據庫系統需要操作系統的支持。
在(11)算法中,每壹個需要執行的操作都必須有明確嚴格的規定,屬於算法的(c)。
a)合法性
b)可行性
c)確定性
d)貧困
(12)下列說法中錯誤的是(D)
a)計算機不能直接執行C語言編寫的源程序。
b)C編譯器編譯完C程序後,生成的帶後綴的文件。obj是壹個二進制文件。
c)帶有後綴的文件。obj和帶後綴的文件。鏈接器生成的exe是壹個二進制文件。
帶後綴的二進制文件。obj和。exe可以直接運行。
(13)根據C語言規定的用戶標識符命名規則,標識符中不能出現的是(b)。
a)大寫字母
b)連接器
c)數字字符
d)下劃線
(14)下列說法中錯誤的是(C)
A)C語言是壹種結構化編程語言。
b)結構化程序由三個基本結構組成:順序、分支和循環。
c)三種基本結構組成的程序只能解決簡單的問題。
d)結構化編程提倡模塊化設計方法。
(15)對於正常運行的C程序,下列說法正確的是(A)。
a)程序的執行總是從主函數開始,到主函數結束。
b)程序的執行總是從程序的第壹個函數開始,到主函數結束。
c)程序的執行總是從主函數開始,到程序的最後壹個函數結束。
d)程序的執行總是從程序的第壹個函數開始,到程序的最後壹個函數結束。
(16)變量已被正確定義。要通過scanf ("%d% c% d% c ",&;a1。c 1;a2和ampC2);該語句將值10和20賦給變量a1和a2,將字符X和Y賦給變量c1和c2。下面顯示的正確輸入形式是(註意:□代表空格字符)(d)
A) 10 □ x □ 20 □ y <回車>
B) 10 □ x20 □ y < Enter >
C) 10 □ x < Enter >
D) 10x < Enter >
20□Y < enter > 20□Y < enter >
(17)如果有壹個代數表達式(其中e只表示自然對數的底數,而不是變量),下列能正確表示該代數表達式的C語言表達式是(C)。
A)sqrt(abs(n^x+e^x))
B) sqrt(fabs(pow(n,x)+pow(x,e)))
C)sqrt(fabs(pow(n,x)+exp(x)))
sqrt(fabs(pow(x,n)+exp(x)))
(18)有壹個定義:int k = 0;在以下選項的四個表達式中,與其他三個表達式不同的值是(a)
A)k++
B)k+=1
C)++k
D)k+1
(19)有以下程序,其中%u表示輸出為無符號整數(B)。
主()
{無符號整數x = 0xFFFF/* x的初始值是十六進制數*/
printf("%u\n ",x);
}
程序運行後的輸出結果是
A)-1
B)65535
C)32767
D)0xFFFF
(20)讓變量X和Y被正確定義和賦值。在下列if語句中,(c)在編譯時會產生錯誤信息。
a)if(x++);
b)如果(x & gty & amp& ampy!=0);
c)如果(x & gty) x- -
d)如果(y & lt0) {;}
else y++;else x++;
(21)下列選項中,x為大於1的奇數時,取值為0的表達式(d)。
A)x%2==1
B)x/2
C)x%2!=0
D)x%2==0
(22)下列說法正確的是(c)
A)A)break語句只能在switch語句體中使用。
B)B)continue語句的作用是使程序的執行流程跳出所有包含它的循環。
C)C)break語句只能在循環體和switch語句體中使用。
d)在循環體中使用break語句與continue語句具有相同的效果。
(23)有以下程序(a)
主()
{int k=5,n = 0;
做
開關(k)
{ case 1:case 3:n+= 1;打破;
違約;n = 0;k-;
情況2:情況4:n+= 2;k-;打破;
}
printf("%d ",n);
} while(k & gt;0 & amp& ampn & lt5);
}
程序運行後的輸出結果是
A)235
B)0235
C)02356
2356
(24)有以下程序
勉()
{int i,j;
for(I = 1;我& lt4;i++)
{ for(j = I;j & lt4;j++) printf("%d*%d=%d ",I,j,I * j);
printf(" \ n ");
}
}
程序運行後的輸出結果是(b)
a)1 * 1 = 1 * 2 = 2 1 * 3 = 3 B)1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2*1=2 2*2=4 2*2=4 2*3=6
3*1=3 3*3=9
c)1 * 1 = 1D)1 * 1 = 1
1*2=2 2*2=4 2*1=2 2*2=4
1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9
(25)下列法律字符常量是(a)
A)"\x13 "
B)"\018 "
C)"65 "
D)"\n "
(26)在C語言中,函數返回值的類型最終取決於(a)
a)定義函數時,函數頭中指定的函數類型
B)B)return語句中表達式值的類型
c)調用函數時主函數傳遞的參數類型
d)定義函數時形參的類型
(27)已知大寫字母A的ASCII碼是65,小寫字母A的ASCII碼是97。下列說法中不能將變量C中的大寫字母轉換成相應小寫字母的是(d)。
c=(c-A)和amp+'a '
B)c=c+32
C)c=c-'A'+'a '
c =(' A '+c)& amp;-" a "
(28)具有以下功能
利息(char *s)
{ char * t = s;
while(* t++);
返回(t-s);
}
這個函數的作用是(b)
a)比較兩個字符的大小
b)計算由s表示的字符串占用的存儲字節數
c)計算由s表示的字符串的長度
d)將S表示的字符串復制到字符串t中
(29)假設現有的定義:浮點x;那麽下面定義指針變量P並賦初值的語句中(d)是正確的。
a)float * p = 1024;
b)int * p =(float x);
浮動p = & ampx;
浮動* P = & ampx;
(30)有以下程序
#包括
主()
{int n,* p = NULL
* p = & ampn;
printf("輸入n:");scanf("%d ",& ampp);printf("輸出n:");printf("%d\n ",p);
}
這個程序試圖通過指針P讀取變量n的數據並輸出,但是程序中有很多錯誤。下列說法正確的是(a)。
A)int n,* p = NULL
b)* p = & amp;n;
C)scanf("%d ",& ampp)
D)printf("%d\n ",p);
(31)下面程序中函數f的作用是:當flag為1時,從小到大排序;當標誌為0時,從大到小排序。
void f(int b[],int n,int flag)
{int i,j,t;
for(I = 0;我
for(j = I+1;j
如果(旗幟?b[I]& gt;b[j]:b[i]
}
主()
{int a[10]={5,4,3,2,1,6,7,8,9,10},I;
f(& amp;a[2],5,0);f(a,51);
for(I = 0;我& lt10;i++) printf("%d," a[I]);
}
程序運行後的輸出結果是(b)
A)1,2,3,4,5,6,7,8,9,10,
B)3,4,5,6,7,2,1,8,9,10,
C)5,4,3,2,1,6,7,8,9,10,
D)10,9,8,7,6,5,4,3,2,1,
(32)有以下程序
void f(int b[])
{ int I;
for(I = 2;我& lt6;i++)b[I]* = 2;
}
主()
{int a[10]={1,2,3,4,5,6,7,8,9,10},I;
f(a);
for(I = 0;我& lt10;i++) printf("%d ",a[I]);
}
程序運行後的輸出結果是(b)
A)1,2,3,4,5,6,7,8,9,10,
1,2,6,8,10,12,7,8,9,10
C)1,2,3,4,10,12,14,16,9,10,
D)1,2,6,8,10,12,14,16,9,10,
(33)有以下程序
typedef結構{int b,p;} A;
Void f(A c) /*註意:c是結構變量名*/
{ int j;
c . b+ = 1;c . p+= 2;
}
主()
{ int I;
A a={1,2 };
f(a);
printf("%d,%d\n ",a.b,a . p);
}
程序運行後的輸出結果是(D)
A)2,3
B)2,4
c)1.4
D)1,2
(34)有以下程序
主()
{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,},I,j,k,t;
for(I = 0;我& lt4;i++)
for(j = 0;j & lt3;j++)
for(k = j+1;k & lt4;k++)
if(a[j][I]& gt;a[k][I]){ t = a[j][I];a[j][I]= a[k][I];a[k][I]= t;}/*按列排序*/
for(I = 0;我& lt4;i++)printf("%d ",a[I][j]);
}
程序運行後的輸出結果是(a)
1,6,5,7,
8,7,3,1,
C)4、7、5、2、
D)1,6,2,1,
(35)有以下程序
主()
{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,},I,k,t;
for(I = 0;我& lt3;i++)
for(k = I+I;k & lt4;k++) if(a[i][i]
for(I = 0;我& lt4;i++)printf("%d ",a[0][I]);
}
程序運行後的輸出結果是(b)
A)6,2,1,1
B)6、4、3、2、
C)1,1,2,6,
D)2、3、4、6、
(36)有以下程序
void f(int *q)
{ int I = 0;
for(;我& lt5;i++)(* q)++;
}
主()
{int a[5]={1,2,3,4,5},I;
f(a);
for(I = 0;我& lt5;i++)printf("%d ",a[I]);
}
程序運行後的輸出結果是(b)
A)2,2,3,4,5,
B)6、2、3、4、5、
C)1,2,3,4,5,
D) 2、3、4、5、6、
(37)有以下程序
#包括
主()
{char p[20]={'a ',' b ',' c ',' d'},q[]="abc ",r[]= " abcde ";
strcpy(p+strlen(q),r);strcat(p,q);
printf("%d%d\n ",sizeof(p),strlen(p));
}
程序運行後的輸出結果是(C)
A)20 9
B)9 9
C)20 11
D)11 11
(38)有以下程序
#包括
主()
{char p[20]={'a ',' b ',' c ',' d'},q[]="abc ",r[]="abcde "
strcat(p,r);Strcpy(p+strlen(q),q);
Printf("%d \n ",sizeof(p));
}
程序運行後的輸出結果是(b)
A)9
B)6
C)11
D)7
(39)有以下程序
#包括
主()
Void f (char p [] [10],int n)/*字符串從小到大排序*/
{ char t[10];int i,j;
for(I = 0;我
for(j = I+1;j
if(strcmp(p[i],p[j])& gt;0) {strcpy(t,p[I]);strcpy(p[i],p[j]);strcpy(p[i],t);}
}
主()
{char p[5][10]={"abc "," aabdfg "," abbd "," dcdbe "," CD " };
f(p,5);
printf("%d\n ",strlen(p[0]));
}
程序運行後的輸出結果是(C)
A) 2
B) 4
C) 6
D) 3
(40)有以下程序
void f(int n,int *r)
{ int r 1 = 0;
if(n % 3 = = 0)r 1 = n/3;
else if(n % 5 = = 0)r 1 = n/5;
else f( - n,& ampr 1);
* r = r 1;
}
主()
{int m=7,r;
女(男,& ampr);printf("%d\n,r ");
}
程序運行後的輸出結果是(a)
A) 2
B) 1
C)3
D) 0
(41)有以下程序。
main(int argc,char *argv[])
{int n=0,I;
for(I = 1;I n = n * 10+* argv[I]--0;
printf("%d\n ",n);
}
編譯連接後,生成可執行文件tt.exe。如果它正在運行,請輸入以下命令行。
tt 12 345 678
程序運行後的輸出結果是(D)
A) 12
B) 12345
C)12345678
D) 136
(42)有以下程序
int a = 4;
整數f(整數n)
{ int t = 0;靜態int a = 5;
if(n % 2){ int a = 6;t++ = a++;}
else { int a = 7;t++ = a++;}
返回t+a++;
}
主()
{int s=a,I = 0;
for(;I〈2;i++)s+= f(I);
printf ("%d\n ",s);
}
程序運行後的輸出結果是(b)
A)24
B)28
C)32
D)36
(43)有壹個名為init.txt的文件,內容如下:
#定義HDY(A,B) A/B
# define PRINT(Y) Printf("y=%d\n,Y)
有以下程序
#include "init.txt "
主()
{int a=1,b=2,c=3,d=4,k;
K=HDY(a+c,b+d);
打印(K);
}
關於這個項目,下列說法正確的是(D)
a)編譯錯誤
b)操作錯誤
c)運行結果為y=0。
d)運行結果為y=6。
(44)有以下程序
主()
{char ch[]="uvwxyz ",* pc
Pc = chprintf(" % c \ n " ,*(PC+5));
}
程序運行後的輸出結果是(a)
A)z
B)0
c)元素ch[5]的地址
d)字符y的地址
(45)有以下程序
結構S { int n;int a[20];};
空f(結構S *P)
{int i,j,t;
for(I = 0;in-1;i++)
for(j = I+1;jn;j++)
如果(p->;a[I]& gt;p->;a[j]){ t = p-& gt;a[I];p->;a[I]= p-& gt;a[j];p->;a[j]= t;}
}
主()
{ int I;struct S = { 10,{2,3,1,6,8,7,5,4,10,9 } };
f(& amp;s);
for(I = 0;i printf("%d ",s . a[I]);
}
程序運行後的輸出結果是(a)
A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,21,
C)2,3,1,6,8,7,5,4,10,9
10,9,8,7,6,1,2,3,4,5,
(46)有以下程序
結構S { int n;int a[20];};
void f(int *a,int n)
{ int I;
for(I = 0;I a[I]+= I;
}
主()
{ int I;struct S = { 10,{2,3,1,6,8,7,5,4,10,9 } };
f(南非,南非);
for(I = 0;i printf("%d ",s . a[I]);
}
程序運行後的輸出結果是(a)
A)2,4,3,9,12,12,11,11,18,9,
B)3,4,2,7,9,8,6,5,11,10,
C)2,3,1,6,8,7,5,4,10,9
D)1,2,3,6,8,7,5,4,10,9,
(47)有以下程序段
typedef結構節點{ int data結構節點* next} *節點;
節點p;
下列說法正確的是(c)
A)p是指向struct節點結構變量的指針的指針。
b)節點p;語句錯誤
C)p是指向struct節點結構變量的指針。
D)p是struct節點結構變量。
(48)有以下程序
主()
{無符號字符a=2,b=4,c=5,d;
d = a | b;d & amp= c;printf("%d\n ",d);}
程序運行後的輸出結果是(b)
A)3
B)4
C)5
D)6
(49)有以下程序
#包括
主()
{ FILE * fpint k,n,a[6]={1,2,3,4,5,6 };
fp=fopen("d2.dat "," w ");
fprintf(fp," %d%d\n ",a[0],a[1],a[2]);fprintf(fp," %d%d%d \n ",a[3],a[4],a[5]);
fclose(FP);
fp=fopen("d2.dat "," r ");
fscanf(fp," %d%d ",& ampk & amp;n);printf("%d%d\n ",k,n);
fclose(FP);
}
程序運行後的輸出結果是(D)
A)1 2
B)1 4
123 4
D) 123 456
(50)有以下程序
#包括
主()
{ FILE * fpint i,a[6]={1,2,3,4,5,6k };
fp=fopen("d3.dat "," w+b ");
fwrite(a,sizeof(int),6,FP);
fseek(fp,sizeof(int)*3,SEEK _ SET);/*該語句使讀取文件的位置指針從文件頭向後移動3 int data */
fread(a,sizeof(int),3,FP);fclose(FP);
for(I = 0;我& lt6;i++) printf("%d ",a[I]);
}
程序運行後的輸出結果是(a)
A)4,5,6,4,5,6,
1,2,3,4,5,6,
C)4,5,6,1,2,3,
D)6,5,4,3,2,1,
填空題(每題2分,***40分)請將每題的正確答案寫在答題卡上序號從[1]到[20]的橫線上,答案不在試卷上計分。註意:用命令關鍵字填空必須完整。
(1)在深度為7的全二叉樹中,度為2的節點數為_ _ _ 63 _ _ _個。
(2)軟件測試分為白盒(箱)測試和黑盒(箱)測試,等價類劃分方法屬於_ _黑盒(或黑盒)測試。
(3)在數據庫系統中,實現各種數據管理功能的核心軟件稱為_ _數據庫管理系統。
(4)軟件生命周期可以分為幾個階段,壹般分為定義階段、開發階段和維護階段。編碼和測試屬於開發的_ _ _ _ _階段。
(5)在用於結構分析的數據流圖(DFD)中,通過使用數據字典準確地解釋了其中的圖形元素。
(6)執行以下程序後的輸出結果是a=14。
主()
{ int a = 10;
a=(3*5,a+4);printf("a=%d\n ",a);
}
(7)執行以下程序時,輸入1234567890,while循環體將執行0次。
#包括
主()
{ char ch
while((ch = getchar())= = ' 0 ')printf(" # ");
}
(8) (8)下面這個程序的運行結果是m=4 k=4 i=5 k=5。
int k = 0;
無效資金(整數)
{ m+= k;k+= m;printf("m=%d\n k=%d ",m,k++);}
主()
{ int I = 4;
fun(i++);printf("i=%d k=%d\n ",I,k);
}
(9) (9)下面的程序運行結果是# &;。
主()
{int a=2,b=7,c = 5;
開關(a & gt0)
{案例1:開關(b & lt0)
{ case 1:switch(“@”);打破;
案例2: printf("!");打破;
}
情況0:開關(c==5)
{ case 0:printf(" * ");打破;
案例1:printf(" # ");打破;
案例二:printf(" $ ");打破;
}
默認值:printf(& amp;);
}
printf(" \ n ");
}
(10)以下程序的輸出是9。
#包括
主()
{ printf("%d\n ",strlen(" IBM \ n 012 \ 1 \ \ ");
}
(11) Charch = "$ "已被定義;int i=1,j;執行j=!ch & amp& ampi++之後,I的值是1。
(12)以下程序的輸出是5 ^ 4。
#包括
主()
{ char a[]={'\1 ',' \2 ',' \3 ',' \4 ',' \ 0 ' };
printf("%d %d\n ",sizeof(a),srelen(a));
}
(13)有定義語句:int a[][3]={{0},{1},{ 2 } };,數組元素a[1][2]的值為0。
(14)下面這個程序的作用是求數組X中兩個相鄰元素的和,依次存入數組A,然後輸出。請填空。
主()
{int x[10],a[9],I;
for(I = 0;我& lt10;i++)
scanf("%d ",& ampx[I]);
for(I = 1;我& lt10;i++)
a[I-1]= x[I]+x[I-1];
for(I = 0;我& lt9;i++)
printf("%d ",a[I]);
printf(" \ n ");
(15)下面這個程序的作用是:用指針指向三個整數變量,通過指針操作找出三個數的最大值並輸出到屏幕上。請填寫空格:
主()
{int x,y,z,max,*px,*py,*pz,* pmax
scanf("%d%d%d ",& ampx & amp;y & amp;z);
px = & ampx;
py = & ampy;
pz = & ampz;
pmax = & ampmax
*pmax=*px(或* pmax = x);
if(* pmax & lt;* py)* pmax = * py;
if(* pmax & lt;* pz)* pmax = * pz;
printf("max=%d\n ",max);
}
(16)以下程序的輸出是10。
int fun(int*x,int n)
{如果(n==0)
返回x[0];
else返回x[0]+fun(x+1,n-1);
}
主()
{int a[]={1,2,3,4,5,6,7 };
printf("%d\n ",fun(a,3));
}
(17)以下程序的輸出是35
#包括
主()
{char *s1,*s2,m;
s 1 = S2 =(char *)malloc(sizeof(char));
* s 1 = 15;
* s2 = 20
m = * s 1+* S2;
printf("%d\n ",m);
}
(18)有說明。
結構日期{整數年;int月;int日;};
請寫壹個定義語句,將D定義為上述結構變量,並依次為其成員年、月、日賦初值:結構數據d = {2006,10,1 };
(19)有壹個定義:FILE * fw,請完成下面的語句來打開文件,以便可以繼續寫到文本文件readme.txt的末尾
fw=fopen("readme.txt "," a ")
2007年4月全國計算機等級考試二級C語言筆試答案
壹、選擇題:
1-5 24134
6-10 31321
11-15 34231
16-20 43113
21-25 43421
26-30 14241
31-35 22412
36-40 23232
41-45 42411
46-50 13241
二、填空:
1.63
2、墨盒
3.DBNS
4、發展
5、數據字典
6、a-14
7,0
8、無人接聽
9,#和符號
10,9
11,1
12,5_4
13,13 0
14,i=1
15,X[i-1]
16,無人接聽
17,10
18,40
19,無人接聽
20,“20a”