2021-2022年河北省唐山市全國計算機等級考試C語言程序設計_第1頁
2021-2022年河北省唐山市全國計算機等級考試C語言程序設計_第2頁
2021-2022年河北省唐山市全國計算機等級考試C語言程序設計_第3頁
2021-2022年河北省唐山市全國計算機等級考試C語言程序設計_第4頁
2021-2022年河北省唐山市全國計算機等級考試C語言程序設計_第5頁
已閱讀5頁,還剩108頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022年河北省唐山市全國計算機等級考試C語言程序設計學校:________班級:________姓名:________考號:________

一、單選題(20題)1.下列敘述中錯誤的是()。A.在數據庫系統中,數據的物理結構必須與邏輯結構一致,

B.數據庫技術的根本目標是要解決數據的共享問題

C.數據庫設計是指在已有數據庫管理系統的基礎上建立數據庫

D.數據庫系統需要操作系統的支持

2.有以下程序#include<stdio.h>structtt(intx;structtt*y;)*P;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main{inti;p=a;for(i=l;i<=2;i++){printf("%d,",p->x);P=p->y;}}程序的運行結果是()。A.20,30,B.30,17,C.15,30,D.20,15,

3.以下程序的輸出結果是()。main(){inti,a[4][4]一{{1,3,5),{2,4,6},{3,5,7}};printf("%(1%d%d%d\n".a[O][3],a[1][2],a[2][1],a[3][0];}A.0650B.1470C.5430D.輸出值不定

4.下列程序的輸出結果是()。main(){inta=1,b=2;printf("%d,%d\n",--a,++b);}

A.1,2B.1,3C.0,2D.0,3

5.棧和隊列的共同特點是()。

A.都是先進先出B.都是先進后出C.只允許在端點處插入和刪除元素D.沒有共同點

6.以下敘述正確的是()。

A.“charc1,*c2,*c3[10];”是合法的變量定義語句

B.數組說明符的方括號中不能使用表達式

C.數組元素下標可以是非整數

D.若有定義“chararray[4];”,則語句“printf(“%c”,array[“3”]);”是合法的

7.以下選項中,當x為大于1的奇數時,值為0的表達式是A.x%2==1B.x/2C.x%2!=0D.x%2==0

8.

9.有以下程序段:charname[20】;intnum;scanf("name=%Snum=%d",name,&num);當執行上述程序段,并從鍵盤輸入:name=Lilimum=1001<回車>后,name的值為()。A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001

10.以下程序的輸出結果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

11.一個函數返回值的類型是由()決定的。

A.return語句中表達式的類型B.定義函數時指定的函數類型C.在調用函數時臨時指定D.調用函數的主調函數的類型

12.在一個有向圖中,所有頂點的入度之和等于所有頂點的出度之和的()倍。A.A.1/2B.1C.2D.4

13.

14.有下列程序:程序執行后的輸出結果是()。A.11B.43C.57D.53

15.以下程序的輸出結果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3

16.若某表最常用的操作是在最后一個結點之后插入一個結點或刪除最后一個結點,則采用()存儲方式最節省運算時間。

A.單鏈表B.給出表頭指針的單循環鏈表C.雙鏈表D.帶頭結點的雙循環鏈表

17.為了提高軟件模塊的獨立性,模塊之間最好是()。

A.控制耦合B.公共耦合C.內容耦合D.數據耦合

18.檢查軟件產品是否符合需求定義的過程稱為()。

A.確認測試B.集成測試C.驗證測試D.驗收測試

19.對關系S和R進行集合運算,結果中既包含S中的所有元組也包含R中的所有元組,這樣的集合運算稱為()

A.并運算B.交運算C.差運算D.積運算

20.下列程序的輸出結果是()。#include<stdio.h>main{inti;for(i=1;i<=10,i++){if((i*i>=20)&&(i*i<=100))break;}printf("%d\n",i*i;}A.49B.36C.25D.64

二、2.填空題(20題)21.在索引查找或分塊查找中,首先查找【】,然后再查找相應的【】,整個索引查找的平均查找長度等于查找索引表的平均查找長度與查找相應子表的平均查找長度之和。

22.以下程序的輸出結果是______。

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

23.下列程序執行后輸出的結果是【】。

structs

{intx,y;}data[2]={10,100,20,200};

main()

{

structs*p=data;

printf("%d\n",++(p->x));

}

24.僅依據規格說明書描述的程序功能來設計測試實例的方法稱為【】。

25.若輸入12、3、2、5、7,則以下程序的運行結果為【】。

intmax,min;

voidmax_min_value();

main()

{inti,number[5];

printf("輸入5個整數;\n");

for(i=0;i<5;i++)scanf("%d",&number[i]);

maxminvalue(number,5);

printf("max=%d,min=%d\n",max,min);

getch();

}

voidmax_min_value(array,n)

intarray[],n;

{int*p;

max=min=*array;

for(p=array+1;p<array+n;p++)

if(*p>max)max=*p;

elseif(*p<min)min=*p;

}

26.設函數findbig已定義為求3個數中的最大值,以下程序將利用函數指針調用findbig函數。請填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=【】。

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

}

27.數據庫系統中實現各種數據管理功能的核心軟件是______。

28.設有以下定義和語句,則*(*(p+2)+1)的值為【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

29.以下程序的運行結果為【】。

main()

{inti,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},b[4][3];

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

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

b[j][i]=a[i][j];

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

{for(j=0;j<3;j++)

printf("%-3d",b[i][j]);

printf("\n");

}

}

30.解題方案的準確而完整的描述稱為______。

31.一棵二叉樹中共有80個葉子結點與10個度為1的結點,則該二叉樹中的總結點數為【】。

32.函數調用語句:“fgets(buf,n,fp);”從fp指向的文件中讀入,n個字符放到buf字符數組中,函數返回值為______。

33.最簡單的交換排序方法是______。

34.算法的復雜度主要包括【】復雜度和空間復雜度。

35.在關系模型中,把數據看成是二維表,每一個二維表稱為一個【】。

36.以下程序段中,錯誤的行號是【】。①#include<stdio.h>②main()③{charstr[14];str[]={"IloveChina!"};④printf("%s",str);⑤}

37.下列程序的輸出結果是______。

main()

{inta[]={31,27,20,12,6,1},*p=a;

p++;

printf("%d\n",*(p+2));

}

38.若有如下定義:

int[]={11,24,56,19,29,39),*t=s;

則不移動指針t,且通過指針t引用數組中值為29的元素的表達式是【】。

39.若變量a,b已定義為int類型并賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的的輸出語句()。

40.數據元素之間______的整體稱為邏輯結構。

三、1.選擇題(20題)41.對于n個結點的單向鏈表(無表頭結點),需要指針單元的個數至少為______。

A.n-1B.nC.n+1D.2n

42.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為()。

A.GEDHFBCAB.DGEBHFCAC.ABCDEFGHD.ACBFEDHG

43.調用gets和puts函數時,必須包含的頭文件是

A.stdio.hB.stdlib.hC.defineD.以上都不對

44.下列函數的運行結果是

main()

{inti=2,p;

intj,k;

j=i;k=++i;p=f(j,k);

printf("%d",p);}

intf(inta,intb)

{intc;

if(a>b)c=1;

elseif(a==b)c=0;

elsec=-1;

return(c);}

A.-1B.1C.2D.編譯出錯,無法運行

45.下列二維數組初始化語句中,不正確的是()。

A.intb[][2]={1,2,3,4,5,6,7};

B.intb[3][5]={0,0,0};

C.intb[][4]={{1,2},{3,4,5},{6}};

D.intb[3][2]={(1,2),(3,4),(5,6)};

46.設有下列二叉樹:對此二叉樹前序遍歷的結果為()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

47.以下能正確表示x在-5到-1或5到1范圍(含5和1)內,值為“真”的表達式是()

A.(x>=-5)||(x<=-1)&&(x<=5)&&(x>=1)

B.!(x>=-5||x<=-1&&x<=5||x>=1)

C.x<-5&&x>-1||x<1&&x>5

D.(x<-5)||(x>-1&&x<1)||(x>5)

48.以下選項中,合法的一組C語言數值常量是()。

A.028.5e-3-0xf

B.12.0X0234.5e0

C.1774e1.50abe

D.0x8A10,0003.e5

49.設有以下說明語句typedefstruct{intn;charch[8];}PER;則下面敘述中正確的是

A.PER是結構體變量名

B.PER是結構體類型名

C.typedefstruct是結構體類型

D.struct是結構體類型名

50.下列有關格式輸入函數scanf的敘述中正確的是()

A.輸入項可以是C語言中規定的任何變量,并且在任何變量前必須加地址符號“&”

B.可以只有格式控制項,沒有地址列表項

C.在輸入數據時,必須規定精度。如:scanf("%4.2f",&d);

D.當輸入數據時,必須指明變量地址

51.有以下程序:main(){unsignedchara,b,c;a=0x3;b=a│0x8;c=b<<1;printf("%d%d\n",b,C);}程序運行后的輸出結果是()。

A.-1112B.-19C.1224D.1122

52.如果要限制一個變量,命名其只能為本文件所用,必須通過()來實現。

A.外部變量說明B.靜態內部變量C.靜態外部變量D.局部變量說明

53.有以下函數intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下關于aaa函數的功能的敘述正確的是A.求字符串s的長度B.比較兩個串的大小C.將串s復制到串tD.求字符串s所占字節數

54.設有定義:charp[]={‘1’,‘2’,‘3’,},*q=p;,以下不能計算出一個char型數據所占字節數的表達式是______。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

55.下列程序的輸出結果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=ifor(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

56.有如下程序

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0;

printf("%f\n",y);}

該程序的輸出結果是

A.0.000000B.0.250000C.0.500000D.1.000000

57.算法的時間復雜度是指______。

A.執行算法程序所需要的時間B.算法程序的長度C.算法執行過程中所需要的基本運算次數D.算法程序中的指令條數

58.在調用函數時,如果實參是簡單變量,它與對應形參之間的數據傳遞方式是______。

A.地址傳遞B.單向值傳遞C.由實參傳給形參。再由形參傳同實參D.傳遞方式由用戶指定

59.若輸入1.5、2.5,則以下程序的運行結果為______。main(){floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("%d",c);}max(x,y)floatx,y;{floatz;z=x>y?x:y;return(z);}

A.1.5B.2.5C.2D.3

60.下列敘述中錯誤的是()。

A.線性表是由n個元素組成的一個有限序列

B.線性表是一種線性結構

C.線性表的所有結點有且僅有一個前件和后件

D.線性表可以是空表

四、選擇題(20題)61.

62.

63.

64.設有如下定義:

若要使P指向data中的n域,正確的賦值語句是()。

A.

B.

C.

D.

65.設有以下語句:

其中0≤k<5。以下不是對字符串的正確引用的是()。

A.*strpB.strp[k]C.str[k]D.strp

66.有以下程序:

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

A.12B.14C.1234D.123456

67.若有以下程序:

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

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

68.下列排序方法中,最壞情況下比較次數最少的是()。

A.簡單選擇排序B.冒泡排序C.堆排序D.直接插入排序

69.已知intx=(1,2,3,4);變量x的值是()。

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

70.若變量x、y已正確定義并賦值,以下符合C語言語法的表達式是()。

A.X+1=yB.++X.Y=X一一C.X=X+10=X+YD.double(X)/10

71.若有定義“inta=5,b=7;”,則表達式a%=(b%2)運算后,a的值為()。

A.0B.1C.11D.3

72.

下列程序的輸出結果是()。

main

{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)j+=p[i];

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

}

A.42B.45C.56D.60

73.

74.

75.用樹形結構來表示實體之間聯系的模型稱為()。

A.關系模型B.層次模型C.網狀模型D.數據模型

76.若變量c為char類型,能正確判斷出c為小寫字母的表達式是_______。A.′a′<=c<=′z′

B.(c>=′a′)||(c<=′z′)

C.(′a′=C)

D.(c>=′a′)&&(c<=′z′)

77.若有以下定義和語句:“doubler=99,*p=&r;*P=r;”,則以下正確的敘述是()。

A.兩個*p含義相同,都說明給指針變量p賦值

B.在“doubler=99,*p=&r;”中,把r的地址賦值給了P所指的存儲單元

C.語句“*p=r;”把變量r的值賦給指針變量P

D.語句“*p=r;”取變量r的值放回r中

78.有以下程序

#include<stdio.h>

main()

{charcl,c2;

c1=A+8-4

c2=A+8-5;

printf("%C,%d\n",cl,c2);

}

已知字母A的ASCIl碼為65,程序運行后的輸出結果是()。

A.E,69B.D,69C.E,DD.輸出無定值

79.有以下程序:

voidmain()

{intk=0,n=0;

while(k<5)

{switch(k)

{default:break;

case1:n+=k;

case2:

case3:n+=k;

}

k++;

}

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

}

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

A)0B)4

C)6D)7

80.由兩個棧共享一個存儲空間的好處是______。A.A.減少存取時間,降低下溢發生的概率

B.節省存儲空間,降低上溢發生的概率

C.減少存取時間,降低上溢發生的概率

D.節省存儲空間,降低下溢發生的概率

五、程序改錯題(1題)81.下列給定程序中,函數proc的功能是:首先把b所指字符串中的字符按逆序存放,然后將str1所指字符串中的字符和Str2所指字符串中的字符,按排列的順序交叉合并到str所指數組中,過長的剩余字符接在str所指數組的尾部。例如,當str1所指字符串中的內容為ABCDEFG,str2所指字符串中的內容為1234時,str所指數組中的內容應該為A483C2D1EFG;而當str1所指字符串中的內容為1234,str2所指字符串中的內容為ABCEDFG時,str所指數組中的內容應該為1G2F31:4DCBA。

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio。h>

#include<string.h>

voidproc(char*strl,char*str2,char*str){

inti,j;charch;

i=0;j=strleu(str2)-1;

//****found****

while(i>j)

{

ch=str2[i];str2[i]=str2[j];str2[j]=ch;

i++;j--;

}

while(*str1||*str2)

{

if(*str1){*str=*str1;str++;str1++;)

if(*str2){*str=*str2;str++;str2++;)

}

//****found****

*str=0:

}

voidmain

{

chars1[100],s2[100],t[200];

system("CLS");

printf("\nEnters1string:");

scanf("%s",sl);

printf("\nEnters2string:");

scanf("%s",s2);

proc(s1,s2,t);

printf("\nTheresultis:%s\n",t);

}

六、程序設計題(1題)82.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編寫函數fun(),其功能是將M行N列的二維數組中的數據,按列的順序依次存放到一維數組中,將一維數組中數據的個數存放在形參n所指的存儲單元中。注意:部分源程序給出如下。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf(“Thematrix:\n”);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(“%3d”,w[i][j]);printf(“\n”);}fun(w,a,&n,3,4);printf(“TheAarray:\n”);for(i=0;i<n;i++)<p=""></n;i++)<>printf(“%3d”,a[i]);}

參考答案

1.A解析:本題考查數據庫系統的基本概念和知識。數據的邏輯結構,是數據間關系的描述,它只抽象地反映數據元素之間的邏輯關系,而不管其在計算機中的存儲方式。數據的存儲結構,又叫物理結構,是邏輯結構在計算機存儲器里的實現。這兩者之間沒有必然的聯系。因此,選項A的說法是錯誤的。

數據庫可以看成是長期存儲在計算機內的、大量的、有結構的和可共享的數據集合。因此,數據庫具有為各種用戶所共享的特點。不同的用戶可以使用同一個數據庫,可以取出它們所需要的子集,而且容許子集任意重疊。數據庫的根本目標是要解決數據的共享問題。因此,選項B的說法是正確的。

數據庫設計是在數據庫管理系統的支持下,按照應用的要求,設計一個結構合理、使用方便、效率較高的數據庫及其應用系統。數據庫設計包含兩方面的內容:一是結構設計,也就是設計數據庫框架或數據庫結構;二是行為設計,即設計基于數據庫的各類應用程序、事務等。因此,選項C的說法是錯誤的。

數據庫系統除了數據庫管理軟件之外,還必須有其他相關軟件的支持。這些軟件包括操作系統、編譯系統、應用軟件開發工具等。對于大型的多用戶數據庫系統和網絡數據庫系統,還需要多用戶系統軟件和網絡系統軟件的支持。因此,選項D的說法是正確的。因此,本題的正確答案是選項A。

2.D程序的結構體數組a的元素形成了一個單向的循環鏈表,每個元素的指針成員都指向下一個元素的地址。

3.A當所賦的值不夠其列的寬度時,系統在其后自動補0,因此a[0][3]=0,a[1][2]=6,a[2][1]=5,a[3][0]=0,故選擇A選項。

4.D解析:本題主要考查自加(++)、自減(--)運算符的使用。“++i,--i”在使用i之前,先使i的值加1或者減1,然后再使用i此時的值參與運算;“i++,i--”是在使用i參與表達式運算之后,再使i的值加1或者減1。本題中--a和++b是先執行a減1和b加1操作,再輸出表達式的值。

5.C解析:考查棧和隊列概念的掌握。棧和隊列都是一種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區別是:棧只允許在表的一端進行插入或刪除操作,是一種'后進先出'的線性表;而隊列只允許在表的一端進行插入操作,在另一端進行刪除操作,是一種'先進先出'的線性表。模塊之間的耦合程度反映了模塊的獨立性,也反映了系統分解后的復雜程度。按照耦合程度從弱到強,可以將其分成5級,分別是:數據耦合、同構耦合、控制耦合、公用耦合和內容耦合。選項C),沒有這種耦合方式。

6.AC語言規定定義數組時,數組的長度必須是整型常量,數組說明符的方括號中表達式只要是常量即合法,因此選項B錯誤。C語言規定,數組元素下標必須是非負整數,因此選項C錯誤。選項D中,“chararray[4]”數組的長度為4,“army[“3”]”中“3”是常量字符串,與C語言規定數組的下標必須是非負整數不符。故本題答案為A選項。

7.D解析:因為x的值為大于1的奇數,所以x除以2的余數等于1,因此,選項A)、C)中表達式的結果為真,不為0;對于選項B)來說,x除以2的商不會等于0;選項D)中表達式的結果為假,即等于0。

8.B

9.A考查簡單的C程序。由題可知,程序中輸入name的值為Lili,所以輸出的必定是Lili,答案選擇A。

10.B解析:第1個循環對數組a進行賦值:第2個循環對數組p進行賦值;第3個循環對k進行累加,k的初值等于5,第1次循環,k=k+p[0]*2=5+0*2=5,第2次循環,k=k+p[1]*2=5+2*2=9,第3次循環,k=k+p[2]*2=9+6*2=21并輸出。

11.B

12.B

13.A

14.D函數f是一個遞歸函數。當x>=2時,遞歸調用自身,返回值為x*f(x-l)+(x-l)*f(x-2);3x<2時,返回值為1。main函數中,調用函數f傳入4,所以y的值是f(4)。f(4)等價于4*f(3)+3*f(2);f(3)等價于3*f(2)+2*f(1);f(2)等價于2*f(1)+1*f(0);f(0)、f(1)等價于1。綜上:f(2)等于3,f(3)等于11,f(4)等于53。本題答案為D選項。

15.B(x&1)&&(z<‘z’)=(0.5&1)&&(‘a’<‘z’)=1&&1=1,故選擇B選項。

16.D

17.D解析:耦合性與內聚性是模塊獨立性的兩個定性標準,是互相關聯的。在程序設計中,各模塊間的內聚性越強,則耦合性越弱。一般較優秀的軟件設計,應盡量做到高內聚、低耦合,有利于提高模塊的獨立性。

18.A本題主要考查軟件測試的基本知識。軟件測試的步驟可分為單元測試(模塊測試)、集成測試、確認測試和系統測試。

(1)單元測試是針對每個模塊進行的測試,它可從程序的內部結構出發設計測試用例,多個模塊可以平行、對立地測試。單元測試主要用于發現詳細設計和編程時犯下的錯誤。單元測試多采用白盒測試,輔之以黑盒測試。

(2)集成測試是在單元測試的基礎上,根據模塊結構圖將各個模塊連接起來,必須精心計劃,應提交集成測試計劃、集成測試規格說明和集成測試分析報告。主要目標是發現與接口有關的問題。集成測試可以發現概要設計時犯的錯誤。

(3)確認測試用于驗證軟件的功能和性能及其他特性是否與用戶的要求一致。確認測試主要用于發現需求分析時犯下的錯誤,一般使用黑盒法測試,以表明軟件符合需求說明書的要求,應該仔細設計測試用例和測試過程。確認測試必須有用戶參加,或以用戶為主,用戶應參與設計測試用例,通常情況下,主要使用生產中的實際數據進行測試,測試數據通過用戶接口輸入。

(4)系統測試是將已經通過確認測試的軟件,作為整個計算機系統的元素與計算機硬件、外設和網絡等其他因素結合在一起,進行一系列的組裝測試和確認測試。系統測試的目的是通過與系統的需求定義做比較,發現軟件與系統的定義不符合的地方。系統測試可以發現問題定義時犯下的錯誤。

19.AA)【解析】關系的并運算是指由結構相同的兩個關系合并,形成一個新的關系,新關系中包含兩個關系中的所有元組。

20.C本題考查for循環及if語句。當執行到第一個滿足(i*i>一20)&&(i*i<=100)這個條件的i出現時,break跳出循環,執行下列的printf語句。

21.索引表塊索引表\r\n塊

22.指針P指向數組a的首地址,執行語句p++;后p指向數組a的第2個元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

23.1111解析:程序中結構體數組data首地址(即&data[0])賦值給結構體指針變量p,++(P->x)表示先將p所指向的結構體變量的成員x值加1,然后將此x(即data[0].x)輸出。

24.黑箱法黑箱法

25.max=12min=2

26.findbigfindbig解析:f是指向函數的指針變量,根據題意要求,空格處應填入findbig。

本題目考查:C語言中指向函數的指針變量定義的一般形式為;

數據類型標識符(*指針變量名)();

“數據類型標識符”表示函數返回值的類型。

函數的調用可以通過函數名調用,也可以通過函數指針調用。在給函數指針變量賦值時,只需給出函數名而不必給出參數。(*p)()表示定義一個指向函數的指針變量,專門用來存放函數的入口地址,可以先后指向不同的指針變量。用函數指針調用函數時,只需要將(*p)代替函數名即可,在(*p)之后的括號中,根據需要寫上參數。

27.數據庫管理系統數據庫管理系統解析:數據庫管理系統是數據庫的管理機構,它是一種系統軟件,負責數據庫中的數據組織、數據操縱、數據維護、控制及保護和數據服務等。

28.6060解析:程序中定義a是一個3行2列的二維數組,p是指向兩個元素的一維數組指針,并讓p指向二維數組a的首行。則代碼*(*(p+2)+1)中的p+2指向二維數組a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

29.159261037114812159\r\n2610\r\n3711\r\n4812解析:程序的功能是將一個二維數組的行和列元素互換,存到另一個二維數組中。

30.算法算法解析:算法是指對解題方案的準確而完整的描述。

31.179179解析:在任意一棵二叉樹中,度為0的結點(即葉子結點)總是比度為2的結點多一個。本題中的二叉樹有80個葉子結點,因此,該二叉樹有80-1=79個度為2的結點;又知本題中的二叉樹有10個度為1的結點。因此,本題中的二叉樹總結點數為:葉子結點數+度為1的結點數+度為2的結點數=80+10+79=179

32.buf的首地址buf的首地址解析:考查fgets()函數的功能,fgets()函數用來從文件中讀入字符串。調用格式為:fgets(buf,n,fp)。此處,fp是文件指針,buf是存放字符串的起始地址,n是一個int型變量。調用函數fgets()時,最多能讀入n-1個字符,系統自動在最后加字符串結束標志,并以buf作為函數值返回。

33.冒泡排序冒泡排序解析:交換排序是指借助數據元素之間的互相交換進行排序的一種方法。冒泡排序是一種最簡單的交換排序方法,它是通過相鄰元素之間的相互交換逐步將線性表變成有序。

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

35.關系關系解析:在數據庫中,一個表就是一個關系。一個關系的邏輯結構就是一張二維表。

36.③數組可以在定義時整體賦初值,但不能在賦值語句中整體賦初值。因此,可將第三行改為charstr[14]={"IloveChina!"};

37.1212解析:本題簽考查如何用指針引用數組元素。分析程序,首先定義了一個指向數組a的指針p,p指向數組的首地址,通過p++,將p指向a[1],p+2是將指針后移2位指向a[3],*(p+2)即是取a[3)的值12。

38.*(t+4)*(t+4)解析:本題定義了指針變量t,并用數組s的首地址給它賦初值。t+4代表數組第6個元素的地址,*(t+4)是取得該地址中的值即29,而此時并沒有移動指針t。

39.printf(“a=%db=%d”aB);printf(“a=%d,b=%d”,a,B);解析:printf函數的一般格式為:“printf(格式控制,輸出表列)”。

40.邏輯關系邏輯關系

41.C解析:在n個結點的單向鏈表(無表頭結點)中,每個結點都有一個指針單元(即指針域),加上頭指針,至少需要n+1個指針單元。

42.B遍歷是按照一定規則對樹中全部結點逐一訪問的方法。二叉樹可由根結點、左子樹和右子樹三個部分組成。根據對根結點訪問的先后順序,可將遍歷方法分為先序遍歷、中序遍歷和后序遍歷三種。先序遍歷首先訪問根結點,再先序遍歷左子樹,最后先序遍歷右子樹,可見遍歷是一個遞歸的過程。求樹的遍歷這種問題的關鍵在于認清每棵子樹的根結點的訪問順序。題目給出了一棵樹的先序遍歷和中序遍歷的結點順序,先序遍歷的第一個結點為整棵樹的根結點,即根結點為A,而在中序遍歷的順序中,結點A的前面還有DBGE四個結點,表示這四個結點構成以A為結點的二叉樹的左子樹,同理,中序遍歷中A結點后面的CHF三個結點構成以A為結點的二叉樹的右子樹。于是原來的對一棵二叉樹的分析變為對該二叉樹的左右子樹的分析。以左子樹為例,左子樹結點的先序遍歷為BDEG,中序遍歷為DBGE,該子樹的根結點為B,B結點的左子樹為一個結點D,右子樹為以E為根結點,結點G是E的左孩子。同理,可對CHF三個結點進行分析。

最后得到整棵樹的結構后,按照后序遍歷寫出所有結點的順序:DGEBHFCA。

43.A解析:gets函數和puts函數是庫函數,必須包含的頭文件是stdio.h。

44.A解析:函數調用相當于f(2,3),程序運算應得結果為'-1'。

45.D解析:在對二維數組元素賦初值時,可以只對部分元素賦初值,未賦初值的元素自動取0;C語言規定,對于二維數組,只可以省略第1個方括號中的常量表達式,而不能省略第2個方括號中的常量表達式;賦的初值不能多于事先定義好的數組元素個數。

在選項D)賦值表達式中,對每一維的元素賦初值應用{},而不是()。

46.B解析:所謂二叉樹的前序遍歷(DLR)是指在訪問根結點、遍歷左子樹與遍歷右子樹這3者中,首先訪問根結點,然后遍歷左子樹,最后遍歷右子樹,并且,在遍歷左右子樹時,上述規則同樣適用,即“根-左-右”。故該二叉樹的前序遍歷結果為“ATBZXCYP”。對于本題,若使用后序遍歷和中序遍歷的結果分別為“ZBTYCPXA”和“TZBACYXP”。

47.A

48.B解析:選項A中,028是八進制形式,但后面跟的8不在0~7之內,所以非法;選項C中,4e1.5是指數形式,但e后面所跟的不是整數,所以非法;選項D中,10,000中不能有“,”,所以非法。故本題應該選擇B。

49.B解析:本題中,typedef聲明新的類型名PER來代替已有的類型名,PER代表上面指定的一個結構體類型,此時,也可以用PER來定義變量。

50.D解析:如果是指針型變量或數組名,則變量前不加地址符號&,所以選項A的說法有誤。必須有地址列表項才能實現正確輸入,所以選項B的說法有誤。在輸入數據時,不可以指定實型數據的精度,所以選項C的說法有誤。只有選項D的說法正確。

51.D解析:將a的值轉換為二進制位:00000011,再與0x8的二進制“00001000”位與,得到結果“00001011”賦值給b,b的值為11,再將b左移一位得到;00010110,賦值給c,c的值為22,所以最后輸出的b,c的值位11,22。所以4個選項中D正確。

52.C

53.A解析:aaa()函數中,首先定義了一個字符指針t指向形參s,然后通過一個while循環讓指針\u3000t不斷遞增,直到t指向字符串結束標志處。當t指向結束標志處時,由于后綴++運算符的原因,它還會被再遞增1,所以接卜來的t--;語句讓它回到結束標志處。最后返回t-s,因此s還是指向字符串第1個字符處,而t指向了字符串結尾,故返回值為字符串的長度值。

54.A解析:本題考查的重點是sizeof()的運用。sizeof用于返回其操作數(變量、類型)相對應數據類型的字節數。因此,選項A是錯誤的,因為p是一個地址,它既不是一個數據類型,也不是數據變量。

55.B

56.C解析:該題目測驗考生對if...elseif結構的理解,比較簡單。x的值滿足x<10.0的關系,所以程序將執行y=1.0/x;語句,y的值應該等于0.5。最后,用printf函數輸出時,%f的輸出格式為小數點后保留6位。

57.C解析:算法的時間復雜度實際上就是執行算法程序所需要的計算工作量。為了客觀地反映算法性能,在度量算法的時間復雜度時,應該與編寫算法程序所使用的程序設計語言、執行算法程序時所使用的計算的工具以及程序員的水平無關。選項A錯誤,因為同一算法程序在運行速度不同的計算機上運行時,其計算時間是不同的。選項B錯誤,因為算法所編寫的程序長度往往與程序設計語言以及程序員的水平有關,同一個算法,用不同的程序設計語言或者不同的程序員所編寫出的程序其長度可能會大不相同。選項D錯誤,因為根據一個算法所編制出的程序之中,其指令條數往往與程序設計語言以及程序員的水平有關,不能用算法程序中的指令條數來度量算法的時間復雜度。所以,本題正確答案為C。

58.B解析:本題考查函數調用時的數據流向問題。簡單變量只能實現單向的值傳遞。在調用函數時,通常在主調函數和被調函數之間有數據傳遞關系。在定義函數時,函數名后面括號中的變量名稱為“形參”;在調用函數時,函數名后面括號中的變量名稱為“實參”。有關實參和形參的說明如下:(1)形參在函數未被調用時,不占用存儲單元,只有在發生函數調用時形參才被分配內存空間,函數調用結束后,釋放形參所占的內存空間。(2)在被定義的函數中,必須指定形參的類型。(3)實參可以是常量、變量或表達式。(4)宴參與形參的類型應一致。(5)如果形參是簡單變量,實參對形參的數據傳遞是按值傳遞,即單向傳遞,只能由實參傳給形參,不能由形參傳回來給實參。如果形參是地址變量,實參對形參的數據傳遞是按地址傳遞,可以實現雙向傳遞,既能由實參傳給形參,又能由形參傳回來給實參。

59.C

60.CC.【解析】線性表是一種線性結構,由n(n≥0)個元素組成,所以線性表可以是空表。但是在線性表中,第一個結點沒有前件,最后一個結點沒有后件,其他結點有且只有一個前件和后件,所以選項C.是錯誤的。

61.A

62.B

63.C

64.C本題主要考查了結構體變量引用成員數據的方法,主要有以下兩種:結構體變量名.成員名或結構體指針_>成員名。

65.Dstrp是一個指針數組名,即它是一個指向指針的指針,strp不是對字符串的引用。

66.D本題考查的是文件的綜合應用。本題首先以創建方式打開文件”d2.dat”,兩次調用fprintf函數把a[O],a[1],a[2],a[3],a[4],a[5]的值寫到文件”d2.d8t”中,文件”d2.dat”的內容為:1,2,3<回車>4,5,6。然后把該文件關閉再以只讀方式打開,文件位置指針指向文件頭,再通過fs-canf函數從中讀取兩個整數到k和n中,由于格式符之間無間隔,因此輸入數據可以用回車隔開,故輸入的k的值為123,n的值為456。

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

68.C\n在最壞情況下,冒泡排序、簡單選擇排序和直接插入排序需要的比較次數都是n(n一1)/2,堆排序需要比較的次數為nlog2n,這也是堆排序的最大優點。

\n

69.D逗號表達式的值,結果為最后一個表達式的值。即4.

70.BA選項中不能將變量Y賦給表達式,c選項中錯誤與A選項一樣,D選項中強制類型轉換表達式應寫成(doub1e)x/10。

71.A本題考查“%”運算符的使用。運算符“%”是整數除法的余數。本題中表達式a%=(b%2)等價于a=a%(b%2)=5%(7%2)=5%1=0。

72.B

\nC語言中,數組的下標默認為0,因此數組P的下標從0開始,所以p[8]的范圍為0~7。第l次循環i=0,執行循環,得出i=1,因此p[i]為p[1]=12,12%2=0,不執行后面的語句;接著進行第2次循環,此時i=1,小于7執行循環,并且i自加,得i=2,因此p[i]為p[2]=13,13%2=1,執行后面的語句;依此類推最后退出循環。最后j的值為:j=13+15+17=45。

\n

73.C

74.A

75.B解析:在數據庫系統中,由于采用的數據模型不同,相應的數據庫管理系統(DBMS)也不同。目前常用的數據模型有3種:層次模型、網狀模型和關系模型。在層次模型中,實體之間的聯系是用樹結構來表示的,其中實體集(記錄型)是樹中的結點,而樹中各結點之間的連線表示它們之間的關系。所以,本題的正確答案是B。

76.D

77.B在定義*p=&r時,是表示r的地址賦給了p所指的存儲單元,因此選項B正確。

78.A\n本值輸出兩個值,%c為輸出一個字母,0/4d輸出一個數字。“A”的ASCIl碼為65,再加4之后為69,也就是字母E,所以本題A正確。

\n

79.D首先k=0,執行default,退出switch,k++,執行case1,2,3后,n=2,k++,執行case2,3,n=4,k++,執行case3,n=7.執行k++,執行default,k++,退出循環。

80.B棧是一種只允許在棧頂進行插入和刪除操作的線性表,使兩個棧共享同一存儲空間的是雙向棧,即將兩個棧的棧頂設在向量空間的兩端,讓兩個棧各自向中間空間延伸。當其中一個棧的元素較多,超過向量空間的一半時,只要另一個棧的元素不多,那么,前者就可以占用后者的部分存儲空間。只有當整個向量空間被兩個棧占滿(即兩個棧底相遇)時,才會發生上溢。使用這種棧的優點是可以有效地節省存取空間,降低上溢發生的概率,而對于存取時間并沒有影響。

81.\n\t(1)錯誤:while(i>j)

\n正確:while(i<j)

\n(2)錯誤:*str=0;

\n正確:*str=\0;

\n【解析】由函數proc可知,變量i和j分別存放的是字符串str前面和后面第i個字符的位置,當i<j時,兩個位置的字符交換。因此,“while(i>j)”應改為“while(i<j)”;交叉合并完成后,要為新的字符串添加結束符,因此,“*str=0;”應改為“*str=\0;”,\n

82.voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j;for(j=0;j<nn;j++)/*將二維數組中的數據按列的順序依次存入一維數組中*/for(i=0;i<=""p="">{b[*n]=*(*(s+i)+j);*n=*n+1;/*通過指針返回元素個數*/}}題目要求實現將二維數組元素存入一維數組。使用for循環語句來控制二維數組元素的下標,同時使用指針變量配合操作。可以用兩個循環來處理問題,由于是按列的順序取出,因此第1個循環用于控制列下標,第2個循環用于控制行下標。2021-2022年河北省唐山市全國計算機等級考試C語言程序設計學校:________班級:________姓名:________考號:________

一、單選題(20題)1.下列敘述中錯誤的是()。A.在數據庫系統中,數據的物理結構必須與邏輯結構一致,

B.數據庫技術的根本目標是要解決數據的共享問題

C.數據庫設計是指在已有數據庫管理系統的基礎上建立數據庫

D.數據庫系統需要操作系統的支持

2.有以下程序#include<stdio.h>structtt(intx;structtt*y;)*P;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main{inti;p=a;for(i=l;i<=2;i++){printf("%d,",p->x);P=p->y;}}程序的運行結果是()。A.20,30,B.30,17,C.15,30,D.20,15,

3.以下程序的輸出結果是()。main(){inti,a[4][4]一{{1,3,5),{2,4,6},{3,5,7}};printf("%(1%d%d%d\n".a[O][3],a[1][2],a[2][1],a[3][0];}A.0650B.1470C.5430D.輸出值不定

4.下列程序的輸出結果是()。main(){inta=1,b=2;printf("%d,%d\n",--a,++b);}

A.1,2B.1,3C.0,2D.0,3

5.棧和隊列的共同特點是()。

A.都是先進先出B.都是先進后出C.只允許在端點處插入和刪除元素D.沒有共同點

6.以下敘述正確的是()。

A.“charc1,*c2,*c3[10];”是合法的變量定義語句

B.數組說明符的方括號中不能使用表達式

C.數組元素下標可以是非整數

D.若有定義“chararray[4];”,則語句“printf(“%c”,array[“3”]);”是合法的

7.以下選項中,當x為大于1的奇數時,值為0的表達式是A.x%2==1B.x/2C.x%2!=0D.x%2==0

8.

9.有以下程序段:charname[20】;intnum;scanf("name=%Snum=%d",name,&num);當執行上述程序段,并從鍵盤輸入:name=Lilimum=1001<回車>后,name的值為()。A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001

10.以下程序的輸出結果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

11.一個函數返回值的類型是由()決定的。

A.return語句中表達式的類型B.定義函數時指定的函數類型C.在調用函數時臨時指定D.調用函數的主調函數的類型

12.在一個有向圖中,所有頂點的入度之和等于所有頂點的出度之和的()倍。A.A.1/2B.1C.2D.4

13.

14.有下列程序:程序執行后的輸出結果是()。A.11B.43C.57D.53

15.以下程序的輸出結果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3

16.若某表最常用的操作是在最后一個結點之后插入一個結點或刪除最后一個結點,則采用()存儲方式最節省運算時間。

A.單鏈表B.給出表頭指針的單循環鏈表C.雙鏈表D.帶頭結點的雙循環鏈表

17.為了提高軟件模塊的獨立性,模塊之間最好是()。

A.控制耦合B.公共耦合C.內容耦合D.數據耦合

18.檢查軟件產品是否符合需求定義的過程稱為()。

A.確認測試B.集成測試C.驗證測試D.驗收測試

19.對關系S和R進行集合運算,結果中既包含S中的所有元組也包含R中的所有元組,這樣的集合運算稱為()

A.并運算B.交運算C.差運算D.積運算

20.下列程序的輸出結果是()。#include<stdio.h>main{inti;for(i=1;i<=10,i++){if((i*i>=20)&&(i*i<=100))break;}printf("%d\n",i*i;}A.49B.36C.25D.64

二、2.填空題(20題)21.在索引查找或分塊查找中,首先查找【】,然后再查找相應的【】,整個索引查找的平均查找長度等于查找索引表的平均查找長度與查找相應子表的平均查找長度之和。

22.以下程序的輸出結果是______。

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

23.下列程序執行后輸出的結果是【】。

structs

{intx,y;}data[2]={10,100,20,200};

main()

{

structs*p=data;

printf("%d\n",++(p->x));

}

24.僅依據規格說明書描述的程序功能來設計測試實例的方法稱為【】。

25.若輸入12、3、2、5、7,則以下程序的運行結果為【】。

intmax,min;

voidmax_min_value();

main()

{inti,number[5];

printf("輸入5個整數;\n");

for(i=0;i<5;i++)scanf("%d",&number[i]);

maxminvalue(number,5);

printf("max=%d,min=%d\n",max,min);

getch();

}

voidmax_min_value(array,n)

intarray[],n;

{int*p;

max=min=*array;

for(p=array+1;p<array+n;p++)

if(*p>max)max=*p;

elseif(*p<min)min=*p;

}

26.設函數findbig已定義為求3個數中的最大值,以下程序將利用函數指針調用findbig函數。請填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=【】。

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

}

27.數據庫系統中實現各種數據管理功能的核心軟件是______。

28.設有以下定義和語句,則*(*(p+2)+1)的值為【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

29.以下程序的運行結果為【】。

main()

{inti,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},b[4][3];

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

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

b[j][i]=a[i][j];

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

{for(j=0;j<3;j++)

printf("%-3d",b[i][j]);

printf("\n");

}

}

30.解題方案的準確而完整的描述稱為______。

31.一棵二叉樹中共有80個葉子結點與10個度為1的結點,則該二叉樹中的總結點數為【】。

32.函數調用語句:“fgets(buf,n,fp);”從fp指向的文件中讀入,n個字符放到buf字符數組中,函數返回值為______。

33.最簡單的交換排序方法是______。

34.算法的復雜度主要包括【】復雜度和空間復雜度。

35.在關系模型中,把數據看成是二維表,每一個二維表稱為一個【】。

36.以下程序段中,錯誤的行號是【】。①#include<stdio.h>②main()③{charstr[14];str[]={"IloveChina!"};④printf("%s",str);⑤}

37.下列程序的輸出結果是______。

main()

{inta[]={31,27,20,12,6,1},*p=a;

p++;

printf("%d\n",*(p+2));

}

38.若有如下定義:

int[]={11,24,56,19,29,39),*t=s;

則不移動指針t,且通過指針t引用數組中值為29的元素的表達式是【】。

39.若變量a,b已定義為int類型并賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的的輸出語句()。

40.數據元素之間______的整體稱為邏輯結構。

三、1.選擇題(20題)41.對于n個結點的單向鏈表(無表頭結點),需要指針單元的個數至少為______。

A.n-1B.nC.n+1D.2n

42.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為()。

A.GEDHFBCAB.DGEBHFCAC.ABCDEFGHD.ACBFEDHG

43.調用gets和puts函數時,必須包含的頭文件是

A.stdio.hB.stdlib.hC.defineD.以上都不對

44.下列函數的運行結果是

main()

{inti=2,p;

intj,k;

j=i;k=++i;p=f(j,k);

printf("%d",p);}

intf(inta,intb)

{intc;

if(a>b)c=1;

elseif(a==b)c=0;

elsec=-1;

return(c);}

A.-1B.1C.2D.編譯出錯,無法運行

45.下列二維數組初始化語句中,不正確的是()。

A.intb[][2]={1,2,3,4,5,6,7};

B.intb[3][5]={0,0,0};

C.intb[][4]={{1,2},{3,4,5},{6}};

D.intb[3][2]={(1,2),(3,4),(5,6)};

46.設有下列二叉樹:對此二叉樹前序遍歷的結果為()

A.ZBTYCPXAB.ATBZXCYPC.ZBTACYXPD.ATBZXCPY

47.以下能正確表示x在-5到-1或5到1范圍(含5和1)內,值為“真”的表達式是()

A.(x>=-5)||(x<=-1)&&(x<=5)&&(x>=1)

B.!(x>=-5||x<=-1&&x<=5||x>=1)

C.x<-5&&x>-1||x<1&&x>5

D.(x<-5)||(x>-1&&x<1)||(x>5)

48.以下選項中,合法的一組C語言數值常量是()。

A.028.5e-3-0xf

B.12.0X0234.5e0

C.1774e1.50abe

D.0x8A10,0003.e5

49.設有以下說明語句typedefstruct{intn;charch[8];}PER;則下面敘述中正確的是

A.PER是結構體變量名

B.PER是結構體類型名

C.typedefstruct是結構體類型

D.struct是結構體類型名

50.下列有關格式輸入函數scanf的敘述中正確的是()

A.輸入項可以是C語言中規定的任何變量,并且在任何變量前必須加地址符號“&”

B.可以只有格式控制項,沒有地址列表項

C.在輸入數據時,必須規定精度。如:scanf("%4.2f",&d);

D.當輸入數據時,必須指明變量地址

51.有以下程序:main(){unsignedchara,b,c;a=0x3;b=a│0x8;c=b<<1;printf("%d%d\n",b,C);}程序運行后的輸出結果是()。

A.-1112B.-19C.1224D.1122

52.如果要限制一個變量,命名其只能為本文件所用,必須通過()來實現。

A.外部變量說明B.靜態內部變量C.靜態外部變量D.局部變量說明

53.有以下函數intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下關于aaa函數的功能的敘述正確的是A.求字符串s的長度B.比較兩個串的大小C.將串s復制到串tD.求字符串s所占字節數

54.設有定義:charp[]={‘1’,‘2’,‘3’,},*q=p;,以下不能計算出一個char型數據所占字節數的表達式是______。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

55.下列程序的輸出結果是______。main(){inti,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=ifor(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%d\n",k);}

A.20B.21C.22D.23

56.有如下程序

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0;

printf("%f\n",y);}

該程序的輸出結果是

A.0.000000B.0.250000C.0.500000D.1.000000

57.算法的時間復雜度是指______。

A.執行算法程序所需要的時間B.算法程序的長度C.算法執行過程中所需要的基本運算次數D.算法程序中的指令條數

58.在調用函數時,如果實參是簡單變量,它與對應形參之間的數據傳遞方式是______。

A.地址傳遞B.單向值傳遞C.由實參傳給形參。再由形參傳同實參D.傳遞方式由用戶指定

59.若輸入1.5、2.5,則以下程序的運行結果為______。main(){floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("%d",c);}max(x,y)floatx,y;{floatz;z=x>y?x:y;return(z);}

A.1.5B.2.5C.2D.3

60.下列敘述中錯誤的是()。

A.線性表是由n個元素組成的一個有限序列

B.線性表是一種線性結構

C.線性表的所有結點有且僅有一個前件和后件

D.線性表可以是空表

四、選擇題(20題)61.

62.

63.

64.設有如下定義:

若要使P指向data中的n域,正確的賦值語句是()。

A.

B.

C.

D.

65.設有以下語句:

其中0≤k<5。以下不是對字符串的正確引用的是()。

A.*strpB.strp[k]C.str[k]D.strp

66.有以下程序:

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

A.12B.14C.1234D.123456

67.若有以下程序:

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

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

68.下列排序方法中,最壞情況下比較次數最少的是()。

A.簡單選擇排序B.冒泡排序C.堆排序D.直接插入排序

69.已知intx=(1,2,3,4);變量x的值是()。

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

70.若變量x、y已正確定義并賦值,以下符合C語言語法的表達式是()。

A.X+1=yB.++X.Y=X一一C.X=X+10=X+YD.double(X)/10

71.若有定義“inta=5,b=7;”,則表達式a%=(b%2)運算后,a的值為()。

A.0B.1C.11D.3

72.

下列程序的輸出結果是()。

main

{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)j+=p[i];

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

}

A.42B.45C.56D.60

73.

74.

75.用樹形結構來表示實體之間聯系的模型稱為()。

A.關系模型B.層次模型C.網狀模型D.數據模型

76.若變量c為char類型,能正確判斷出c為小寫字母的表達式是_______。A.′a′<=c<=′z′

B.(c>=′a′)||(c<=′z′)

C.(′a′=C)

D.(c>=′a′)&&(c<=′z′)

77.若有以下定義和語句:“doubler=99,*p=&r;*P=r;”,則以下正確的敘述是()。

A.兩個*p含義相同,都說明給指針變量p賦值

B.在“doubler=99,*p=&r;”中,把r的地址賦值給了P所指的存儲單元

C.語句“*p=r;”把變量r的值賦給指針變量P

D.語句“*p=r;”取變量r的值放回r中

78.有以下程序

#include<stdio.h>

main()

{charcl,c2;

c1=A+8-4

c2=A+8-5;

printf("%C,%d\n",cl,c2);

}

已知字母A的ASCIl碼為65,程序運行后的輸出結果是()。

A.E,69B.D,69C.E,DD.輸出無定值

79.有以下程序:

voidmain()

{intk=0,n=0;

while(k<5)

{switch(k)

{default:break;

case1:n+=k;

case2:

case3:n+=k;

}

k++;

}

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

}

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

A)0B)4

C)6D)7

80.由兩個棧共享一個存儲空間的好處是______。A.A.減少存取時間,降低下溢發生的概率

B.節省存儲空間,降低上溢發生的概率

C.減少存取時間,降低上溢發生的概率

D.節省存儲空間,降低下溢發生的概率

五、程序改錯題(1題)81.下列給定程序中,函數proc的功能是:首先把b所指字符串中的字符按逆序存放,然后將str1所指字符串中的字符和Str2所指字符串中的字符,按排列的順序交叉合并到str所指數組中,過長的剩余字符接在str所指數組的尾部。例如,當str1所指字符串中的內容為ABCDEFG,str2所指字符串中的內容為1234時,str所指數組中的內容應該為A483C2D1EFG;而當str1所指字符串中的內容為1234,str2所指字符串中的內容為ABCEDFG時,str所指數組中的內容應該為1G2F31:4DCBA。

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio。h>

#include<string.h>

voidproc(char*strl,char*str2,char*str){

inti,j;charch;

i=0;j=strleu(str2)-1;

//****found****

while(i>j)

{

ch=str2[i];str2[i]=str2[j];str2[j]=ch;

i++;j--;

}

while(*str1||*str2)

{

if(*str1){*str

溫馨提示

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

評論

0/150

提交評論