2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)_第1頁
2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)_第2頁
2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)_第3頁
2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)_第4頁
2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2021年四川省資陽市全國計算機等級考試C語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(20題)1.

有以下程序:

main

{intx=102,y=012;

printf("%2d,%2d\n",x,y);

}

執行后輸出結果是()。

A.10,01B.02,12C.102,10D.02,10

2.設有如下函數定義:#include<stdio.h>intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若執行調用語句“n=fun(3);”,則函數fun總共被調用的次數是()。

A.2B.3C.4D.5

3.

4.設有以下函數“voidfun(intn,char*s){…}”,則下列對函數指針的定義和賦值均正確的是()。

A.void(*pf)(int,char);pf=&fun;

B.void*pf();pf=fun;

C.void*pf();*pf=fun;

D.void(*pf)(int,char*);pf=fun;

5.設有定義:

inta=1,b=2,C=3;

以下語句中執行效果與其他三個不同的是()。

A.if(a>B.C=a,a=b,b=C;

B.if(a>B.{C=a,a=b,b=C;}

C.if(a>B.C=a;a=b;b=c;

D.if(a>B.{C=a;a=b;b=c;}

6.有以下程序main(){intp[7]={11,13,14,15,16,17,18},i=0,k=0;while(i<7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}執行后輸出結果是

A.58B.56C.45D.24

7.有以下程序

#include<stdio.h>

main()

{charc1,c2,c3,c4,c5,c6;

scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

c5=getchar();c6=getchar();

putchar(c1);putchar(c2);

printf("%c%c\n",c5,c6);

}

程序運行后,若從鍵盤輸入(從第1列開始)

123<回車>

45678<回車>

則輸出結果是A.A.1267B.1256C.1278D.1245

8.執行下列程序后,輸出的結果是()。#include<stdio.h>#defineS(X)X*Xvoidmain{inta=9,k=3,m=2;a/=S(k+m)/S(k+m):printf("%d",a);}A.1B.4C.9D.0

9.對于C語言的函數,下列敘述中正確的是()。

A.函數的定義不能嵌套,但函數調用可以嵌套

B.函數的定義可以嵌套,但函數調用不能嵌套

C.函數的定義和調用都不能嵌套

D.函數的定義和調用都可以嵌套

10.若有定義“a[]={1,2,3,4,5,6,7,8,9,10};”,則“a[a[5]-a[7]/a[1]]”的值是()。

A.2B.4C.3D.10

11.設有定義“doublea[10],*s=a;”,以下能夠代表數組元素a[3]的是()。

A.(*s)[3]B.*(s+3)C.*s[3]D.*s+3

12.

13.有以下程序:#include<stdio.h>intf(intm){staticintn=0;n+=m;returnn;}main(){intn=0;printf("%d,"f(++n));printf("%d\n",f(n++));}程序運行后的輸出結果是()。A.1,2B.1,1C.2,3D.3,3

14.有如下程序段

voidfun(int*a,int*b)

{int*k;

k=a;a=b;b=k;

}

main()

{inta=3,b=6,*x=&a,*y=&b;

fun(x,y);

printf("%d%d",a,b);

}

程序運行后輸出的結果是A.A.63

B.36

C.編譯出錯

D.00

15.設x和y均為int型變量,且x=10,y=3,則以下語句的輸出結果是()printf("%d,%d\n",x--,--y);

A.10,3B.9,3C.9,2D.10,2

16.以下程序的輸出結果是()。unionmyun{struct{intx,y,z;)u;intk:}a;main{a.u.x=4;a.u.y=5;a.u.z=6;k=0;printf(%d\n",a.u.x);}A.4B.5C.6D.0

17.對兩個數組a和b進行下列初始化:charm[]1="l234567":charn[]={1,2,3,4,5,6,7);則下列敘述正確的是()。A.數組m與數組n完全相同B.數組m與數組n長度相同C.數組m比數組n長1D.數組m與數組n中都存放字符串

18.冒泡排序在最壞情況下的比較次數是()。

A.n(n+1)/2B.nlog2nC.n(n-1)/2D.n/2

19.有以下程序:#include<stdio.h>main(){inta=1,b=0;if(--a)b++;elseif(a==0)b+=2;elseb+=3:print[("%d\n",b);}程序運行后的輸出結果是()。A.0B.1C.2D.3

20.下列關于棧的描述中錯誤的是()。A.棧是先進后出的線性表B.棧只能順序存儲C.棧具有記憶作用D.對棧的插入與刪除操作中,不需要改變棧底指針

二、2.填空題(20題)21.數據庫保護分為:安全性控制、______、并發性控制和數據的恢復。

22.算法的復雜度主要包括時間復雜度和______復雜度。

23.排序是計算機程序設計中的一種重要操作,常見的排序方法有插入排序、【】和選擇排序等。

24.按照邏輯結構分類,結構可以分為線性結構和非線性結構,棧屬于______。

25.設有宏定義:

#defineWIDTH80

#defineLENGTHWIDTH+40

則執行賦值語句“v=LENGTH*20;"(v為int型變量)后,v的值是【】。

26.下面程序的功能是:計算110之間的奇數之和與偶數之和,請填空。

#include<stdio.h>

main()

{inta,b,c,I;

a=c=0;

for(I=0;I<=10;I+=2)

{a+=I;

【】;

c+=b;}

printf("偶數之和=%d\n",a);

printf("奇數之和=%d\n",c-11);}

27.以下程序中函數f的功能是在數組x的n個數(假定n個數互不相同)中找出最大最小數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。請填空。

#include<stdio.h>

voidf(intx[],intn)

{intp0,p1,i,j,t,m;

i=j=x[0];p0=p1=0;

for(m=0;m<n;m++)

{if(x[m]>i){i=x[m];p0=m;}

elseif(x[m]<j){j=x[m];p1=m;}

}

t=x[p0];x[p0]=x[n-1];x[n-1]=t;

t=x[p1];x[p1]=【】;【】=t;

}

main()

{inta[10],u;

for(u=0;u<10;u++)scanf("%d",&a[u]);

f(a,10);

for(u=0;u<10;u++)printf("%d",a[u]);

printf("\n");

}

28.函數pi的功能是根據以下公式近似求得的:

pi*pi/6=1+1/(2*2)+1/(3.3)+...+1/(n*n)

請在下面的函數中天空,完成求pi的功能。

#include<math.h>

doublepi(longn)

{doubles=0.0,longi;

for(i=1;i<<=n;i++)s=s+【】;

return(sqrt(6*s));

}

29.以下定義的結構體類型擬包括兩個成員,其中成員變量info用來存入整形數據;成員變量link是指向自身結構體的指針,請將定義比沖完整

structnode

{intinfo;

______link;};

30.測試的目的是暴露錯誤,評價程序的可靠性;而______得目的是發現錯誤的位置并改正錯誤。

31.strcmp函數的功能是【】。

32.下面程序的輸出結果是【】。

main()

{intarr[10],i,k=0;

for(i=0;i<10;i++)arr[i]=i;

for(i=0;i<4;i++)k+=arr[i]=i;

printf("%d\n",k);

}

33.分析下列程序:

main()

{intx=1,y=0,a=0,b=0;

switch(a)

{case1:switch(b)

{case0:x++;

case1:y++;break;

}

case2:x++;y++;break;

}

printf("x=%d,y=%d\n",x,y);

}

運行程序的輸出結果是______。

34.設有下列的程序段:

charstr[]="Hello";

char*ptr;

ptr=-str;

執行上面的程序段后,*(ptr+5)的值為______。

35.以下程序輸出矩陣中值為。的元素的行下標和列下標。行下標和列下標分別放在同一下標的r和c數組元素中。程序通過調用隨機函數給矩陣賦值。

#defineN5

#include<stdlib.h>

main()

{inta[N][N],i,j,c[N*N],r[N*N],n;

for(i=0,i<N;i++)

for(j=0;j<N;j++)a[i][j]=rand()%5;

n=gindex(【】);

printf("\n\nTheresult:\nn=%d\n",n);

for(i=0;i<n;i++)printf("%4d%4d\n",r[i],c[i]);

}

intgindex(int(*p)[N],int*c,int*r)

{inti,j,k;

【】;

for(i=0;i<N,i++)

for(j=0;j<N;j++)

if(【】==0)

{r[k]=i;c[k]=j;【】;}

return【】;

}

36.以下程序中函數huiwen的功能是檢查一個字符串是否是回文,當字符串是回文時,函數數返回字符串:yes!否則函數返回這符串:no!并在主函數中輸出。所謂回文即正向與反向的拼寫都一樣,例如:adgda。請填空

#include<string.h>

char*huiwen(char*str)

{char*p1,*p2;inti,t=0;

pl=str;p2=______;

for(i=0;i<=strlen(str)/2;i+*)

if(*p1++!=*p2--){t=1;break;}

if(______)return("yes!");

elsereturn(*no!");

}

main()

{charstr[50];

printf("Input:");scanf("%s",str);

printf("%s\n",______);

}

37.程序的運行結果為【】。

main()

{intx,y,z;

x=24;

y=024;

z=0x24;

printf("%d,%d,%d\n",x,y,z);

}

38.常用的黑箱測試有等價類劃分法、【】和錯誤推測法3種。

39.以下程序的功能是:輸出100以內(不含100)能被3整除且個位數為6的所有整數,請填空。

#include<stdio.h>

main()

{inti,j

for(i=0;【】;i++)

{j=i*10+6;

if(【】)continue:

Printf("%d”",j);

}

}

40.以下程序用來輸出結構體變量student所占存儲單元的字節數,請填空。

structst

{charname[20];doublescore;

};

main()

{structststudent;

printf("studentsize:%d\n",sizeof(【】));

}

三、1.選擇題(20題)41.某一個漢字的區位碼為(2113H),則其內碼為()

A.(2199)10B.(C1B3H)C.(C1B3)10D.(B1B3H)

42.下列描述中正確的是()。

A.軟件工程只是解決軟件項目的管理問題

B.軟件工程主要解決軟件產品的生產率問題

C.軟件工程的主要思想是強調在軟件開發過程中需要應用工程化原則

D.軟件工程只是解決軟件開發過程中的技術問題

43.若有以下說明和語句:structst{intn;char*ch;};structsta[3]={5,"abc",7,"def",9,"ghk"},*p=a;則值為6的表達式是______。

A.p++->nB.p->n++C.(*p).n++D.++p->n

44.有如下程序

main()

{charch[2][5]={"6937","8254"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>′\0′;j+=2)

s=10*s+p[i][j]-′0′;

printf("%d\n",s);}

該程序的輸出結果是

A.69825B.63825C.6385D.693825

45.線性表L=(a1,a2,a3,…ai,…an),下列說法正確的是()

A.每個元素都有一個直接前件和直接后件

B.線性表中至少要有一個元素

C.表中諸元素的排列順序必須是由小到大或由大到小

D.除第一個元素和最后一個元素外,其余每個元素都有一個且只有一個直接前件和直接后件

46.若有如下程序:intm=1;main(){intt=0,s=0;{intm=4;s+=m;)t+=m;printf("%d,%d\n",s,t);}則程序運行后的輸出結果是()。

A.1,1B.1,4C.4,1D.4,4

47.下列程序的輸出結果是______。main(){inti=3;switch(i){case1:case2:printf("%d",i);case3:case4:break;default:printf("OK");}}

A.0B.3C.OKD.沒有任何輸出

48.以下敘述中正確的是

A.用C程序實現的算法必須要有輸入和輸出操作

B.用C程序實現的算法可以沒有輸出但必須要有輸入

C.用C程序實現的算法可以沒有輸入但必須要有輸出

D.用C程序實現的算法可以既沒有輸入出沒有輸出

49.已知各變量的類型說明如下:intk,a,b;unsignedlongw=5;doublex=1.42;則以下不符合C語言語法的表達式是():

A.x%(-3)B.w+=-2C.k=(a=2,b=3,a+b)D.a+=a-=(b=4)*(a=3)

50.因特網(習慣上稱國際互聯網)的英文名是()

A.InternetB.IntranetC.NCFCD.ISDN

51.執行下面的語句后,表達式*(p[0]+1)+**(q+2)的值為______。inta[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;

A.8B.7C.6D.5

52.當把4個表達式用做if語句的控制表達式時,有一個選項與其他3個選項含義不同,這個選項是()。

A.k%2B.k%2==1C.(k%2)!=0D.!k%2==1

53.以下非法的賦值語句是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

54.有以下程序:#include<stdio.h>main(){unsignedchara,b;a=413;b=4&3;printf("%d%d\n",a,b);}執行后的輸出結果是()。

A.70B.07C.11D.430

55.下面敘述正確的是______。A.算法的執行效率與數據的存儲結構無關

B.算法的空間復雜度是指算法程序中指令(或語句)的條數

C.算法的有窮性是指算法必須能在執行有限個步驟之后終止

D.以上三種描述都不對

56.若有定義floata=25,b,*p=&b;,則下列對賦值語句*p=a;和p=&a;的正確解釋為()。

A.兩個語句都是將變量a的值賦予變量p

B.*p=a是使p指向變量a,而p=&a是將變量a的值賦予變量指針p

C.*p=a是將變量a的值賦予變量b,而p=&a是使p指向變量a

D.兩個語句都是使p指向變量a

57.C語言中用于結構化程序設計的三種基本結構是A.順序結構、選擇結構、循環結構

B.if、switch、break

C.for、while、do-while

D.if、for、continue

58.程序中對fun()函數有如下說明void*fun();此說明的含義是______。

A.fun函數無返回值

B.fun函數的返回值可以是任意的數據類型

C.fun函數的返回值是無值型的指針類型

D.指針fun指向一個函數,該函數無返回值

59.若有說明語句:double*p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是()。

A.*p=&a;sCanf("%1f",p);

B.*p=&a;scanf("%f",p);

C.p=&a;scanf("%1f",*p);

D.p=&a;scanf("%1f",p);

60.在下列敘述中,錯誤的一條是()

A.主函數main中定義的變量在整個文件或程序中有效

B.不同函數中,可以使用相同名字的變量

C.形式參數是局部變量

D.在―個函數內部,可在復合語句中定義變量,這些變量只在本復合語句中有效

四、選擇題(20題)61.以下關于指針概念不正確的是()。

A.指針變量可以用整數賦值,但不可以用浮點數賦值

B.一個變量的地址稱為該變量的指針,一個指針變量只能指向同一類型的變量

C.只有同一類型的變量地址才能放到指向該類型變量的指針變量之中

D.只能將地址賦給指針變量

62.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrlIct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

returna;

}

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c).printf("%s,%c,%2.0f,%2.0f",d.Name,d.sex,d.score[0],d.score[1]);

}

程序的運行結果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

63.若有以下程序:

上面程序的輸出結果是()。

A.5B.7C.1D.3

64.

65.以下數組定義中錯誤的是()。

A.

B.

C.

D.

66.以下敘述中錯誤的是()。

A.改變函數形參的值,不會改變對應實參的值

B.函數可以返回地址值

C.可以給指針變量賦一個整數作為地址值.

D.當在程序的開頭包含頭文件stdio.h時,可以給指針變量賦NULL

67.

68.一個關系中屬性個數為1時,稱此關系為()。

A.對應關系B.單一關系C.一元關系D.二元關系

69.有以下程序程序運行后的輸出結果是()。

A.6,4,3,2B.6,2,l,l,C.1,1,2,6,D.2,3,1,6,

70.設有定義:intm=0;。以下選項的四個表達式中與其他三個表達式的值不相同的是()。

A.++mB.m+=1C.m++D.m+1

71.

72.

73.有以下程序:

程序運行后的輸出結果是()。

A..3,2,1,B.1,2,3,4,5,6,C.1,1,1,1,1,lD.6,6,6,6,6,6,

74.對線性表進行二分法檢索,其前提條件是()。A.A.線性表以順序方式存儲,并按關鍵碼值排好序B.線性表以順序方式存儲,并按關鍵碼的檢索頻率排好序

C.線性表以鏈式方式存儲,并按關鍵碼值排好序

D.線性表以鏈式方式存儲,并按關鍵碼的檢索頻率排好序

75.(65)軟件設計包括軟件的結構、數據接口和過程設計,其中軟件的過程設計是指()

A.模塊間的關系

B.系統結構部件轉換成軟件的過程描述

C.軟件層次結構

D.軟件開發過程

76.下列選項中,不是一個算法的基本特征的是()。

A.完整性B.可行性C.有窮性D.擁有足夠的情報

77.以下敘述中正確的是

A.自定義的函數中一定要有return語句

B.自定義的函數中不可以有多個return語句

C.自定義的函數中可以沒有return語句,此時函數應被定義為void類型

D.函數的return語句一定要帶有表達式

78.下列關于隊列的敘述中正確的是______。A.在隊列中只能插入數據B.在隊列中只能刪除數據C.隊列是先進先出的線性表D.隊列是先進后出的線性表

79.

80.以下不合法的字符常量是

A.’x\018’B.’\"’C.’\\’D.’\xcc’

五、程序改錯題(1題)81.下列給定程序中,函數proc()的功能是:對M名學生的學習成績,按從低到高的順序找出前m(m≤10)名學生來,并將這些學生數據存放在一個動態分配的連續存儲區中,此存儲區的首地址作為函數值返回。

請修改程序中的錯誤,使它能得到正確結果。

注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

六、程序設計題(1題)82.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c在此程序中,編寫函數intfun(),其功能是求出小于或等于lim的所有素數,將其存放在aa數組中,并返回所求出的素數的個數。注意:部分源程序在文件prog1.c中。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:1#include<conio.h>2#include<stdio.h>3#include<stdlib.h>4#defineMAX1005intfun(intlim,intaa[MAX])6{78}9voidmain()10{11FILE*wf;12intlimit,i,sum;13intaa[MAX];14system("CLS");15printf("輸入一個整數:");16scanf("%d",&limit);17sum=fun(limit,aa);18for(i=0;i<sum;i++)19{20if(i%10==0&&i!=0)/*每行輸出10個數*/21printf("\n");22printf("%5d",aa[i]);23}24/******************/25wf=fopen("out.dat","w");26sum=fun(15,aa);27for(i=0;i<sum;i++)28{29if(i%10==0&&i!=0)/*每行輸出10個數*/30fprintf(wf,"\n");31fprintf(wf,"%5d",aa[i]);32}33fclose(wf);34/******************/35}

參考答案

1.C解析:本題中,“printf('%2d,%2d\\n',x,y)”表示以逗號隔開輸出兩個十進制整數,每個整數域寬是2。而在C語言中規定:當域寬小于實際寬度時域寬不起作用,按實際寬度輸出,因此最后的輸出值為102和10(y的初值012表示八進制整數12,等于十進制的10)。所以,4個選項中選項C符合題意。

2.B執行調用語句“n=fun(3);”,3被當作實參傳遞進去,進行了一次調用。3被當作實參傳進去后,程序會執行“elsereturnfun(k-1)+1;”,函數被調用了第2次,參數是3-1,也就是2。2被當作參數傳進去后,程序會執行“elsereturnfun(k-1)+1;”函數被調用了第3次,參數是2-1,也就是1。1被當作實參傳進去后,程序會執行“elseif(k==1)return1;”,函數不再被遞歸調用。所以最終結果為3次。故本題答案為B選項。

3.A

4.D函數的參數可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數中。函數名代表函數的入口地址,指向函數的指針應該定義為“void(*Pf)();”。如果定義為“void*pf();”,則表示函數pf的返回值是一個基類型為void的指針。故本題答案為D選項。

5.C由于a小于b,所以所有選項中的條件都為假,c選項中實際執行了a=b;b=c;兩個操作。而A、B、D選項由于條件不成立,所以什么也沒有做,所以選擇c選項。

6.D解析:在主函數中首先定義了一個數組p并初始化,在while后面括號里的表達式中,i初值為0,當p[i]為偶數時,P[i]%2等于0,根據“&&”運算符的規則,其表達式為假退出循環,顯然當i=2時,p[i]=14為偶數,此時while后面括號里的表達式的值為假,退出循環,此時k=p[0]+p[1],即k=11+13。所以最后輸出k為24。

7.D解析:putchar(c1)輸出1,putchar(c2)輸出2,printf(“%c%c\\n”,c5,c6)輸出45。

8.D本題主要考查帶參數的宏定義,過程如下:由于定義為define(x)x*x沒有括號優先級,所以:a=a/(S(k+m)/S(k+m))=a/(k+m*k+m/k+m*k+m)=9/(3+2*3+2/3+2*3+2)=0。

9.A

10.C題干中,數組a包含10個元素。其中a[5]為6,a[7]為8,a[1]為2,所以表達式“a[a[5]-a[7]/a[1]]”等價于“a[6-8/2]”,等價于a[2],即3。故本題答案為C選項。

11.B題中,首先定義了double型的數組a,并將數組首地址賦給指針s。“(*s)”表示“a[1]”,“s[3]”不是指針變量,不能使用間址運算符“*”,故選項A、C不能表示“a[3]”;選項D的“*s+3”等于“a[0]+3”。故本題答案為B選項。

12.C

13.A解析:static變量用于局部變量中有記憶功能和全局生存期。函數中的靜態變量的特點是每次調用函數,靜態變量的值是上次調用完該函數后的靜態變量值,所以在此題中,第一調用函數,返回1,此時函數中的靜態變量n的值為l,所以第二次調用函數時,返回值為2。

14.B在本題中,程序首先定義了一個無返回值的函數fun,該函數帶有兩個整型的指針形參變量,在函數體中,首先定義一個整型指針變量k,然后試圖利用k來交換a和b的結果。但處理語句k=a;很明顯是對地址進行賦值操作。在C語言中,指針變量作為函數參數時,可以改變被指向的變量的值,但不能改變指針變量本身的值,即我們可以改變實參指向的變量的值,不能使實參指向其他的變量。因此,本函數并不能交換形參所指向變量的結果。

在主函數中,首先定義了兩個整型變量a和b,并分別被初始化為3和6,然后定義兩個指針變量x和y,分別指向a和b,接著調用fun函數,傳遞的實參為指針變量x和y,根據前面對fun函數的分析可知,調用該函數后并不能實現a和b數組的交換,因此,執行輸出語句后,輸出的結果是36。本題正確答案選B。

15.D

16.D因為a是結構體變量,最后一次輸入的值為結構體中的值,即a中的任何一個值都為0。

17.C在m數組中賦值的是字符串,其長度為7,末尾有結束符\0,故字節數為8,而n數組中賦的是字符,其長度為7,故C選項正確。

18.C冒泡排序的基本思想是:將相鄰的兩個元素進行比較,如果反序,則交換;對于一個待排序的序列,經一趟排序后,最大值的元素移動到最后的位置,其他值較大的元素也向最終位置移動,此過程稱為一趟冒泡。對于有n個數據的序列,共需n-1趟排序,第i趟對從l到n-i個數據進行比較、交換。冒泡排序的最壞情況是待排序序列逆序,第l趟比較n-1次,第2趟比較n-2次。依此類推,最后趟比較1次,一共進行n-l趟排序。因此,冒泡排序在最壞情況下的比較次數是(n-1)+(n-2)+…+l,結果為n(n-1)/2。本題的正確答案是選項C。

19.D

20.B棧是限定只能在表的一端進行插入和刪除操作的線性表,入棧和出棧都是在棧頂進行,它們的操作特點是先進后出,因此具有記憶作用。棧可以采用順序存儲,也可以采用鏈式存儲。

21.完整性控制完整性控制

22.空間空間解析:算法的復雜度主要包括時間復雜度和空間復雜度。所謂算法的時間復雜度,是指執行算法所需要的計算工作量。一個算法的空間復雜度,一般是指執行這個算法所需要的內存空間。

23.交換排序交換排序解析:常見的排序方法有插入排序(包括簡單插入排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選擇排序(包括簡單選擇排序和堆排序等)。注意:常見的排序方法及其作用機制和區別。

24.線性結構線性結構解析:數據的邏輯結構是指數據元素之間的邏輯關系,分為線性結構和非線性結構。常見的線性結構有線性表、棧和隊列等,常見的非線性結構有樹、二叉樹等。

25.880

26.b=I+1b=I+1解析:本題考查了for循環語句的執行過程。i+=2是修正表達式,執行一次循環體后i的值就增加2,i的初始值為0,每次加2后的和累加至a,所以a的值就是110之間的偶數之和;b的值是111之間的奇數和,但在輸出b值時,c去掉多加的11,即為110之間的奇數之和。

27.x[0]x[0]x[0],x[0]解析:函數f()通過for循環逐個比較數組x中的元素,循環結束后,p0和p1分別表示最大值和最小值在數組中的下標位置,然后按照題意將最大值x[p0]和數組的最后一個元素x[n-1]交換位置,再將最小值x[p1]和第一個元素(x[0])進行交換,所以空白處應該填入x[0]。

28.1.0/i/i或1.0/(i*i)1.0/i/i或1.0/(i*i)解析:由題面中提供的計算pi的公式可知:在第i項其值為1/(i*i),考慮到運算結果為浮點數,故必須要將1轉化為浮點數或采用1.0/(i*i)的形式。故本題應填1.0/(i*i)或其等效形式。

29.解析:本題中的結構類型名為structnode,所以空白處應填:structnode*,即定義一個指向自身的結構體指針。

30.軟件測試的目標是在精心控制的環境下執行程序,以發現程序中的錯誤,給出程序可靠性的鑒定;調試也稱排錯,它是一個與測試有聯系又有區別的概念。具體來說,測試的目的是暴露錯誤,評價程序的可靠性,而調試的目的是發現錯誤的位置,并改正錯誤。\r\n\r\n

31.字符串的比較strcmp函數的原型是intstrcmp(char*s1,char*s2);功能是對s1和s2所指字符串進行比較,若s1<s2返回負數,若s1==s2返回0,若s1>s2返回正數。

32.66解析:本題第1個for循環是為數組arr元素賦初值。第2個for循環是分別用i=0,1,2,3給數組元素arr[0]、arr[1]、arr[2]、arr[3]賦值,再累加到變量k中,k=0+1+2+3=6。

33.x=1y=0。x=1,y=0。解析:本題程序的主體部分是switch語句的嵌套結構,當變量a的值為0時,在第一層switch-case語句中,沒有匹配的case分支。因此,x和y的值沒有變化,仍然是1和0。

34.'\0''\\0'解析:本題涉及字符數組和指針的兩個知識點:①在c語言中,字符型數組在存放字符串時會自動在末尾加上字符串結束標識符'\\0',所以題中數組str有6個元素。②ptr指向數組s仕的首地址,ptr+5是指向str[5],*(ptr+5)是引用str[5]的值,即'\\0'。

35.acrk=0p[i][j]k++k

36.str+strlen(p1)-1或str+strlen(str)-1殘str-1+strlen(str)或3tr-1+strlen(p1)t==0或!t或t=='\0'huiwen(str)str+strlen(p1)-1或str+strlen(str)-1殘str-1+strlen(str)或3tr-1+strlen(p1)\r\nt==0或!t或t=='\\0'\r\nhuiwen(str)解析:判斷回文教一般使用兩個指針或下標變量分別從檢查串的第1個字符和最后一個字符開始相向移動,并比較兩者內容是否相同,直到中間相遇一直相同則是回文數,否則不是。函數huiwen中開始定義了兩個字符指針p1和p2,并讓p1指向str的開始位置,所以p2應該指向str的尾部,即&str[strlen(sir)-1]或寫成str+strlen(str)-1或者其他等價形式。然后使用一個循環,循環str的長度的一半次數,比較p1和p2的內容,并分別遞增和遞減這兩個指針。若有不同,則讓標志t為1,并跳出循環。所以最后一個if語句應該為判斷標志t是否為1,即應該填t==0或者其他等價形式。在主函數中,應該輸出huiwen()函數的返回結果,印最后一空應該填huiwen(str)。

37.242036

38.邊界值分析法邊界值分析法解析:黑箱測試方法完全不考慮程序的內部結構和內部特征,而只是根據程序功能導出測試用例。常用的黑箱測試有等價類劃分、邊界值分析法和錯誤推測法3種。

39.i<10或i<9j%3!=0或j%3i<10或i<9\r\nj%3!=0或j%3解析:程序中的j用于存放符合條件的整數,j=i,10+6;求得個位數為6的整數,由此可得出程序的循環次數為i<10,所以[15]處填i<10。然后通過if語句判斷整數是否能被3整除,若不能則繼續下一次循環,若能則輸出該整數,所以[16]處填j%3!=0。

40.structst或studentstructst或student

41.B

42.CC。【解析】軟件工程是指將工程化的思想應用于軟件的開發、應用和維護的過程,包括軟件開發技術和軟件工程管理。

43.D解析:根據結構變量的存儲特點,p+1意味著增加地址值為結構體數組a的一個元素所占的字節數,即p++使p由a[0]指向a[1]起始地址。本題++p->n得到p指向的結構體變量中成員n的值使之加1。因為p指向數組a起始地址,p->n的值為5,再掏打自加1運行,結果為6。

44.C解析:該題稍微難一點。主要要搞清楚以下幾點:①定義了一個指針數組char*p[2]后,程序中第一個循環for(i=0;i<2;i++)p[i]=ch[i];的作用,是使指針數組的p[0]元素(它本身是一個指針)指向了二維數組ch的第一行字符串,并使指針數組的p[1]元素指向二維數組ch的第二行字符串,這樣,就使指針數組p和二維數組ch建立起了一種對應關系,以后對二維數組ch的某個元素的引用就有兩種等價的形式:ch[i][j]或p[i][j]。②對二維數組ch的初始化,使其第一行ch[0]中存入了字符串'6937',第二行ch[1]中的內容為字符串'8254'。③程序中第二個循環中的循環體s=s*10+p[i][j]-\'0\';的功能是這樣的,每執行一次,將s中的值乘以10(也即,將s中的數值整體向左移動一位,并在空出來的個位上添一個0),再將當前p[i][j]中的字符量轉換為相應的數字,然后把這個數字加到s的個位上。④注意到內層循環的循環條件p[i]\ue009[j]>\'\\0\'是指p[i][j]中的字符只要不是字符串結束標志\'\\0\'就繼續循環,語句j+=2;是使下標j每次增加2,也即一個隔一個地從p[i]所指向的字符串中取出字符。經過上述解析后,不難看出,該程序首先從p[0]所指向的字符串'6937'中一個隔一個地取出字符,分別是\'6\'和\'3\',然后從p[1]所指向的字符串'8254'中一個隔一個地取出字符,分別是\'8\'和\'5\',同時經過轉換和相加運算后,結果s中的值應該是6385。

45.D解析:線性表可以為空表,排除選項B。第一個元素沒有直接前件,最后一個元素沒有直接后件,故排除選項A。線性表的定義中,元素的排列沒有規定大小順序,故選項C也有誤,只有D項是正確的。

46.C解析:{intm=4;s+=m;}是復合語句,m=4,s+=m等價于s=s+m=0+4=4。t+=m等價于t=t+m,這里m為全局變量,值為1,t=t+m=O+1=1。

47.D解析:在題中,i的值為3,由于“case3:”后面沒有break語句,所以繼續向下執行“case4:”后面的語句,由于“case4:”后面的語句為break強行退出switch語句,所以,本題沒有任何輸出。

48.C解析:算法是指為解決某個特定問題而采取的確定且有限的步驟。一個算法應當具有以下五個特性:有窮性;確定性;可行性;有零個或多個輸入;有一個或多個輸出。所以,4個選項中選項C符合題意。

49.A解析:“%”是求余運算符或模運算符,“%”兩側均應為整型數據,選項A)中的x是double型數據。

50.A

51.D解析:p為指針數組,其元素分別為指向數組a的4個元素的指針。q為指向指針的指針變量,其初值為指針數組p的首地址。所以:表達式*(p[0]+1)+**(q+2)=*(a+3+1)+**(p+2)即是*(a+4)+*(a+1)=a[5]+a[2]=1+4=5。

52.A整數k對2求余數的兩個結果只能是0和1,所以選項A)表示k除以2的余數,其結果是0或1。在選項B)、c)和D)中包括算術求余運算符“%”,關系等于運算符“-”和關系不等于運算符“!=”以及邏輯非運算符“!”。而邏輯運算符與賦值運算符、算術運算符、關系運算符之間從高到低的運算優先次序是:!(邏輯“非”)、算術運算符、關系運算符、(邏輯“與”)、?(邏輯“或”)、賦值運算符。選項B)含義是判斷表達式k%2的結果是否等于1、選項C)的含義是判斷表達式k%2的結果是否不等于0,選項D)含義是判斷表達式!k%2的結果是否等于1,所以選項B)、C)和D)的禽義相同。

53.C解析:本題考查的知識點是賦值語句的基本知識。在表達式的運算中,雙目賦值運算符的格式為“變量二表達式”,單目運算符一般形式為“運算符表達式”或“表達式運算符”。常量和表達式是不能被賦值的。選項A為復合表達式,首先計算(i=2,++i)的值,然后賦值給n,故選項A正確;選項B為簡單自加運算,故選項B正確;選項C在表達式++(i+1);中,(i+1)不是變量,該表達式的值為常量,而在++運算中,其運算對象必須為變量,故選項C錯誤;選項D中為復合賦值表達式,正確.所以應當選擇C。

54.A解析:&是按位“與”運算符,其運算規則是:參加運算的兩個運算量,如果兩個相應的位都為1,則該位的結果值為1,否則為0。|是按位“或”運算符,其運算規則是:兩個相應位中只要有一個為1,該位的結果為1。4轉換為二進制數為0100,3轉換為二進制數為0011,則4|3=0111,即7,4&3=0000,即0。

55.C解析:算法的執行效率與數據的邏輯結構和存儲結構都有很緊密的關系。算法的空間復雜度是指執行該算法需要的內存空間,并非算法程序中指令的條數。算法一般應該具有以下4個特征:可行性、確定性、有窮性和擁有足夠情報。其中,有窮性是指算法必須能在執行有限個步驟之后終止,否則可能失去實際意義。

56.C解析:“p”是指針變量,指向一個地址:“*p”,為p指針所指向地址的內容。

57.A解析:結構化程序由3種基本結構組成,即順序結構、循環結構(包括for語句、while語句及do…\u3000while語句)和選擇結構(包括if語句和switch語句)。

58.C解析:C語言中函數的定義分為有參函數的定義和無參函數的定義。無參函數的定義形式為:

類型標識符函數名()

{說明部分

語句

}

有參函數的定義有兩種形式:

類型標識符函數名(形式參數列表)

形式參數說明

{說明部分

語句

}

類型標識符函數名(類型名形參1,類型名形參2,…)

{說明部分

語句

}

其中函數名為用戶定義的C語言的合法標識符,其前面的類型標識符用來說明函數值的類型,可以是C允許的任何類型,如int、char、float、double和指針類型等。當函數值為整型時類型標識符可以省略,如果函數沒有返回值,類型標識符可以是void型。當函數的形參多于一個時,各個形參之間用逗號分隔。

59.D解析:double*p,a;語句表示定義了一個指向雙精度型的指針變量p和雙精度型變量a,而語句p=&a表示將變量a的地址賦給指針變量p;scanf'('%1f',p)表示用鍵盤輸入的數賦給指針變量p所指向的地址單元中。scanf()函數要求在輸入double型數據,格式控制符必須用%1f(或%1e)。否則,數據不能正確輸入。所以選項D)為正確答案。

60.A

61.A指針是用來指示一個內存地址的變量,因此只能將地址賦給指針變量,而不能是整數或浮點數。

62.Cf函數的功能是對形參a的各個成員用結構體變量b的各個成員進行賦值后,然后返回變量a。

63.C在c語言中,數組元素下標是從0開始的;指針變量P指向數組的首地址。for循環語句中,指針變量P始終指向數組的首地址,因而執行循環賦值語句后數組各元素的值均變為1。

64.D

65.B二維數組的初始化有以下幾種形式:①分行進行初始化;②不分行進行初始化;③部分數組元素進行初始化;④省略第一維的定義,不省略第二維的定義。選項B)等號右邊分了3行,大于等號左邊數組的行數2。

66.C解析:函數形參和實參分別占用不同的內存單元,改變形參的值不會影響對應實參的值,選項A)正確。指針類型的函數可以返回地址值,選項B)正確。在文件stdio.h中,NULL被定義為void型的指針,選項D)也正確。指針變量的值只能是存儲單元地址,而不能是一個整數,選項C)錯誤。

67.B

68.C解析:在關系模型數據庫中,基本結構是二維表,這種二維表稱為關系。關系的列稱為屬性,一個具有N個屬性的關系稱為N元關系。注意:各種關系查詢語言與過程性語言和非

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論