2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩83頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.

3.有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&i,&y,name);當執行上述程序段,從鍵盤上輸入555667777abc后,y的值為()。A.55566.0B.566.0C.7777.0D.566777.0

4.有以下程序:程序運行后的輸出結果是()。A.13442B.13431C.01234D.02431

5.以下敘述中正確的是A.A.C程序中的注釋只能出現在程序的開始位置和語句的后面

B.C程序書寫格式嚴格,要求一行內只能寫一個語句

C.C程序書寫格式自由,一個語句可以寫在多行上

D.用C語言編寫的程序只能放在一個程序文件中

6.數據庫是______的集合,它具有統一的結構形式并存放于統一的存儲介質內,可被各個應用程序所共享。

A.視圖B.消息C.數據D.關系

7.以下程序的輸出結果是()main(){staticchara[10]={"Chinese"};printf("%d",strlen(a));}

A.7B.2C.9D.10

8.有以下程序:#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen(“d1.dat”,“w”);for(i=0;i<3;i++)fprintf(fp,“%d”,a[i]);fprintf(fp,“\n”);fclose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d”,&n);fclose(fp);printf(“%d\n”,n);}程序的運行結果是()。

A.321B.12300C.1D.123

9.

10.在學生管理的關系數據庫中,存取一個學生信息的數據單位是()。

A.文件B.數據庫C.字段D.記錄

11.下列程序的運行結果為()。#include<stdio.h>main{structdate{intyear,month,day;}today;printf("%d\n",sizeof(structdate));}A.8B.6C.10D.12

12.下列敘述中正確的是:()A.C語言程序中,main()函數必須在其它函數之前,函數內可以嵌套定義函數

B.C語言程序中,main()函數的位置沒有限制,函數內不可以嵌套定義函數

C.C語言程序中,main()函數必須在其它函數之前,函數內不可以嵌套定義函數

D.C語言程序中,main()函數必須在其它函數之后,函數內可以嵌套定義函數

13.若有以下程序

則程序的輸出結果是

A.3B.7C.6D.10

14.以下敘述中不正確的是

A.預處理命令行都必須以#號開始

B.在程序中凡是以#號開始的語句行都是預處理命令行

C.宏替換不占用運行時間,只占編譯時間

D.在以下定義是正確的:#definePI3.1415926;

15.以下有關宏替換的敘述不正確的是()。

A.雙引號中出現的宏名不替換B.使用宏定義可以嵌套C.宏定義儀儀是符號替換D.宏名必須用大寫字母表示

16.有以下程序:#include<stdio.h>#include<string.h>main(){charv[4][10]={“efg”,“abcd”,“mnopq”,“hijkl”},*p[4],*t;inti,j;for(i=0;i<4;i++)p[i]=v[i];for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(strcmp(p[i],p[j])>0) {t=p[i];p[i]=p[j];p[j]=t}for(i=0;i<4;i++) printf(“%s”,p[i]);}程序運行后的輸出結果是()。

A.efgabcdhijklmnopq

B.abcdefghijklmnopq

C.mnopqhijklefgabcd

D.efgabcdmnopqhijkl

17.若運行以下程序時,從鍵盤輸入ADescriptor<CR>(<CR>表示回車),則下面程序的運行結果是

#include<stdio.h>

main()

{charc;

intv0=1,v1=0,v2=0;

do{switch(c=getchar())

{case′a′:case′A′:

case′e′:case′E′:

case′i′:case′I′:

case′o′:case′O′:

case′u′:case′U′:v1+=1;

default:v0+=1;v2+=1;}}while(c!='\n');

printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);}

A.v0=7,v1=4,v2=7

B.v0=8,v1=4,v2=8

C.v0=11,v1=4,v2=11

D.v0=13,v1=4,v2=12

18.以下程序的輸出結果是()。main{charch[3][4]={"123","456","78"),*p[3];inti;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++)printf("%s",p[i]);}A.123456780B.123456780C.12345678D.147

19.在一個具有n個結點的有序單鏈表中插入一個新結點并仍然保持有序的時間復雜度是()。

A.O(1)B.O(n)C.O(n2)D.O(nlog2n)

20.下列敘述中正確的是______。

A.線性表是線性結構B.棧與隊列是非線性結構C.線性列表是非線性性結構D.二叉樹是線性結構

二、2.填空題(20題)21.順序存儲方法是把邏輯上相鄰的結點存儲在物理位置______的存儲單元中。

22.以下程序運行后的輸出結果是【】。

main()

{inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

}

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

}

23.若fp已正確定義為一個文件指針,d1.dat為二進制文件,請填空,以便為“讀”而打開此文件:

fp=fopen(【】);。

24.下面程序由兩個源程序文件:t4.h和t4.c組成,程序編譯運行的結果是:【】。

t4.h的源程序為:

#defineN10

#dennef2(x)(x*N)

t4.c的源程序為:

#include<stdio.h>

#defineM8

#definef(x)((x)*M)

#include"t4.h"

#main()

{inti,j;

i=f(1+1);j=f2(1+1);

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

}

25.下列程序的輸出結果【】。

#definePR(ar)printf("ar=%d",ar)

main()

{intj,a[]={1,3,5,7,9,1l,13,1},*p=a+5;

for(j=3;j;j--)

switch(j)

{case1:

case2:PR(*p++);break;

case3:PR(*(--p));}}

26.數據結構分為邏輯結構與存儲結構,線性鏈表屬于【】。

27.以下程序的功能是求下列算式中A、B、C的值,請填空。

#include<stdio.h>

main()

{inta,b,c,k,t=348;

for(a=0;a<10;a++)

for(b=0;b<10;b++)

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

{k=【】;

if(k==t)

printf("A=%dB=%dC=%d\n",a,b,c);

}

}

28.以下程序的輸出結果是【】。

main()

{char*p[]={"BOOL","OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%c",*p[i]);

printf("\n");

}

29.下列程序的輸出結果是【】。

main()

{

inta[]={2,4,6},*ptr=&a[0],x=8,y,z;

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

z=(*(ptr+y)<x)?*(ptr+y):x;

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

}

30.下面rotate函數的功能是:將n行n列的矩陣A轉置未AT,例如:

請填空

#defineN4

voidrotate(inta[][])

{inti,j,t;

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

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

{t=a[i][j];【】;a[j][i]=t;}

}

31.以下程序運行后的輸出結果是______。

#include<string.h>

voidfun(char*s,intp,intk)

{inti;

for(i=p;i<k-1;i++)s[i]=s[i+2];

}

main()

{chars[]="abcdefg";

fun(s,3,strlen(s));puts(s);

}

32.下面程序的運行結果是______。

#include<stdio.h>

main()

{inty,a;

y=2,a=1;

while(y--!=-1)

{do{a*=y;a++;}while(y--);}

printf("%d,%d",a,y);}

33.若有如下結構體說明:

structSTRU

{inta,b;charc:doubled;

stmctSTRU*p1,*p2;

};

請填空,以完成對t數組的定義,t數組的每個元素為該結構體類型。【】t[20]

34.設在主函數中有以下定義和函數調用語句,且fun函數為void類型,請寫出fun函數的首部【】。要求形參名為b。

main()

{doubles[10][22];

intn;

fun(s);

}

35.有以下定義和語句,則sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdate

{intday;

intmouth;

intyear;

union{intshare1;

floatshare2;

}share;

}a;

36.下列程序用來輸出結構體變量ex所占存儲單元的字節數。

structst

{charname[20];doublescore;};

main()

{structstex;

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

}

37.函數voidfun(float*sn,intn)的功能是:根據以下公式計算S,計算結果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請補全程序。

S=1-1/3+1/5-1/7+…+1/(2n+1)

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;

}

【】=s;

}

38.若有程序

main()

{inti,j;

scanf("i=%d,j=%d",&i,&j);

pfintf("i=%d,j=%d\n",i,j);

}

要求給i賦10,給j賦20,則應該從鍵盤輸入【】。

39.若有定義doublea[5];,則a數組元素下標的上限為______。

40.下列程序的運行結果是【】。

#include<stdio.h>

voidmain()

{ints=0,k;

for(k=7;k>4;k--)

{switch(k)

{case1:

case4:

case7:s++;break;

case2:

case3:

case6:break;

case0:

case5:s+=2;break;}}

printf("s=%d",s);}

三、1.選擇題(20題)41.在設計程序時,應采納的原則之一是()。

A.不限制goto語句的使用B.減少或取消注解行C.程序越短越好D.程序結構應有助于讀者理解

42.若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結點訪問順序是()。

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

43.若函數調用時的實參為變量時,以下關于函數形參和實參的敘述中正確的是()。

A.函數的實參和其對應的形參共占同一存儲單元

B.形參只是形式上的存在,不占用具體存儲單元

C.同名的實參和形參占同一存儲單元

D.函數的形參和實參分別占用不同的存儲單元

44.以下不能正確定義二維數組的選項是

A.inta[2][2]={{1},{2}};

B.inta[][2]={1,2,3,4};

C.inta[2][2]={{1},{2,3}};

D.inta[2][]={1,2},{3,4}};

45.如果進棧序列為e1,e2,e3,e4,則可能的出棧序列是

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

46.設有定義:intn1=0,n2,*p=&n2,*q=&n1;,下列賦值語句中與n2=n1;語句等價的是()。

A.*p=*q;B.p=q;C.*p=&n1;D.p=*q;

47.下列程序voidfunc1(inti);voidfunc2(inti)charst[]="hello,friend!";voidfuncl(inti){printf("%c",st[i]);if(i<3){i+=2;func2(i);}}voidfunc2(inti){printf("%c",st[i]);if(i<3){i+=2;funcl(i);}}main(){inti=0;funcl(i);printf("\n");}執行后的輸出結果是()

A.helloB.helC.hloD.hlrn

48.下述語句中,在字符串s1和s2相等時顯示"theyareEqual"的是()。

A.if(*s1=*s2)puts("theyareEqual");

B.if(!strcmp(s1,s2))puts("theyareEqual");

C.if(s1==s2)puts("theyareEqual");

D.if(strcmp(s1,s2))puts("theyareEqual");

49.有下列二叉樹,對此二叉樹前序遍歷的結果為()。

A.XZCYABB.XYZABCC.XYABCZD.XYAZBC

50.下列選項中錯誤的說明語句是

A.chara[]={'t','o','y','o','u','\0'};

B.chara[]={"toyou\0"};

C.chara[]="toyou\0";

D.chara[]='toyou\0';

51.有以下程序:voidf(intb[]){inti;for(i=2;i<6;i++)b[i]*=2;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10},i;f(A);for(i=0;i<10;i++)printf("%d,",a[i]);}程序運行后的輸出結果是()。

A.1,2,3,4,5,6,7,8,9,10,

B.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,

52.有以下程序:intf(intb[][4]){inti,j,s=0;for(j=0j<4;j++){i=j;if(i>2)i=3-j;s+=b[i][j];}returns;}main(){inta[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12},{3,2,1,0}};printf("%d\n",f(a));}執行后的輸出結果是()。

A.12B.11C.18D.16

53.在C語言中,引用數組元素時,其數組下標的數據類型允許是()。

A.整型表達式B.整型常量C.整型常量或整型表達式D.任何類型的表達式

54.數據的存儲結構是指()。

A.數據所占的存儲空間

B.數據的邏輯結構在計算機中的存放形式

C.數據在計算機中的順序存儲方式

D.存儲在計算機外存中的數據

55.在位運算中,操作數每左移兩位,其結果相當于()。

A.操作數乘以2B.操作數除以2C.操作數除以4D.操作數乘以4

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

A.模塊間的關系B.系統結構部件轉換成軟件的過程描述C.軟件層次結構D.軟件開發過程

57.下列所述中,是軟件調試技術的是()。

A.錯誤推斷B.集成測試C.回溯法D.邊界值分析

58.有以下語句,則對a數組元素的引用不正確的是inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))

59.在數據庫設計中,將E-R圖轉換成關系數據模型的過程屬于()。A.需求分析階段B.概念設計階段C.邏輯設計階段D.物理設計階段

60.若有以下定義和語句:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;則不能表示a數組元素的表達式是______。

A.*pB.a[10]C.*aD.a[p-a]

四、選擇題(20題)61.在長度為n的有序線性表中進行順序查找,最壞情況下需要比較的次數是

A.O(n)B.O(n2)C.O(log2n)D.O(nlog2n)

62.有以下程序

#include<stdio.h>

#defineN4

voidfun(inta[][N],intb[])

{inti;

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

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

}

main()

{intx[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;

fun(x,y);

for(i=0;i<N;i++)printf("%d,",y[i]);

printf("\n");

}

程序的運行結果是

A.l,2,3,4,

B.1,0,7,0,

C.1,4,5,9,

D.3,4,8,10,

63.軟件生命周期是指()。A.軟件產品從提出、實現、使用維護到停止使用退役的過程

B.軟件從需求分析、設計、實現到測試完成的過程

C.軟件的開發過程

D.軟件的運行維護過程

64.有以下程序:

注意:字母a的ASCIl碼值為97,程序運行后的輸出結果是()。

A.dB.goC.godD.good

65.程序調試的目的是

A.發現程序中的錯誤B.改正程序中的錯誤C.驗證程序的正確性D.改善軟件的性能

66.有以下程序段以下關于程序段執行情況的敘述,正確的是()。

A.當產生的隨機數n為0時結束程序運行

B.當產生的隨機數n為4時結束循環操作

C.當產生的隨機數n為1和2時不做任何操作

D.for循環語句固定執行8次

67.有如下程序段

#include"stdio.h"

#include"string.h"

#defineN10

#defineM10

char*find(char(*a)[M],intn)

{char*q;inti;

q=a[0];

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

if(strcmp(a[i],q)<0)q=a[i];

returnq;}

main()

{chars[N][M]={"tomeetme","you","and","he","china"};

char*p;

intn=5;

p=find(s,n);

puts(p);}

則執行后輸出的結果為A.A.heB.andC.youD.tomeetme

68.軟件詳細設計產生的圖如圖所示。該圖是()。A.N—S圖B.PAD圖C.程序流程圖D.E—R圖

69.

70.

有以下程序

#include<stdi0.h>

voidfun(intn,int*p)

(intf1,f2;

if(n==1||n==2)*p=1;

else

{fun(n-1,&f1);fun(n-2,&f2);

*p=f1+f2;

}

}

main

{ints;

fun(3,&s);printf("%d",s);

}

程序的運行結果是()。

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

71.

72.表示關系M<=N<=P的C語言表達式為()。

A.(M<=N.AND(N<=P.

B.(M<=N.&&(N<=P.

C.(M<=N<=P.

D.(M<=N.&(N<=P.

73.

74.

75.用鏈表表示線性表的優點是()。

A.便于隨機存取B.花費的存儲空間較順序存儲少C.便于插入和刪除操作D.數據元素的物理順序與邏輯順序相同

76.有以下函數該函數的功能是()。

A.計算s所指字符串占用內存字節的個數

B.比較兩個字符串的大小

C.計算s所指字符串的長度

D.將s所指字符串復制到字符串t中

77.執行下列程序后,變量a,b,C的值分別是()。intx=5,y=4;inta,b,c;a=(--x==y++)?X:++y;b=++x:c=y:A.a=5,b=5,c=5B.a=4,b=5,c=5C.a=5,b=6,c=5D.a=1,b=5,c=6

78.

79.下列程序的輸出結果是()。#include<stdio.h>main{inta=3,b=2,c=1;if(a<b)if(b<0)c=0;elsec++:printf("%d\n",c);}A.2B.0C.1D.不確定的值

80.下列數據結構中,能用二分法進行查找的是()。

A.順序存儲的有序線性表B.結性鏈表C.二叉鏈表D.有序線性鏈表

五、程序改錯題(1題)81.下列給定程序中,函數fun的功能是:從整數l0-55,查找能被3整除且有一位上的數值是5的數,把這些:故放在b所指的數組中,這些數的個數作為函數值返回。規定函數中al放位數,a2放十位數。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!試題程序:

六、程序設計題(1題)82.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,規定輸入的字符串中只包含字母和*號。請編寫函數其功能是使字符串的前導*號不得多于n個,若多于n個,則刪除多余的*號;若少于或等于n個,則不做處理。字符串中間和尾部的*號不刪除。例如,字符串中的內容為“*******A*BC*DEF*G****”,若n的值為4,刪除后,字符串中的內容應當是“****A*BC*DEF*G****”;若n的值為8,則字符串中的內容仍為“*******A*BC*DEF*G****”。n的值在主函數中輸入。在編寫函數時,不得使用C語言提供的字符串函數。注意:部分源程序給出如下。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>voidfun(char*a,intn){}voidmain(){ chars[81];intn; printf(“Enterastring:\n”); gets(s); printf(“Entern:”); scanf(“%d”,&n); fun(s,n); printf(“Thestringafterdeleted:\n”); puts(s);}

參考答案

1.C

2.C

3.B變量J只接收輸入數據的前兩位,從第三位開始直到空格之間的輸入整數都會被保存到浮點型變量Y中。

4.Bmain函數中定義包含5個元素的數組m,每個元素都是NODE類型。指針p指向數組第1個元素,指針q指向數組最后一個元素。while循環使用p、q從首尾向中間遍歷,遍歷的同時為各個元素賦值。所以第1輪循環,i的值為0,先執行的值為++i,后執行i++的值也為1,m[0].k和m[4].k的值都為1;接著第2輪循環,i的值為2,先執行的值為3,后執行i++的值也為3,m[l].k和m[3].k的值都為3;第3輪循環,p和q指向的都是m[2]元素,指針相同,循環結束,此時i的值為4,即m[2].k賦值為4。綜上,程序輸出:13431。本題答案為B選項。

5.C

6.C解析:數據庫是數據的集合,其中的數據是按數據所提供的數據模式存放的,它能構造復雜的數據結構,以建立數據之間的內在聯系與復雜的關系-故答案為C。

7.A

8.D程序首先將數組a中的元素1、2、3分別寫入了d1.dat文件中,再將d1.dat文件中的數據“123”整體寫到變量n的空間中,所以輸出的數據為123。故本題答案為D選項。

9.B

10.D解析:在關系數據表中,行稱為元組,對應存儲文件中的記錄,列稱為屬性,對應存儲文件中的字段,所以本題答案為D。

11.Bstructdate中包含year、month、day這3個整型變量,一個整型變量占2個字節;sizeof是求所占字節數的運算符。

12.B每個C程序有且只有一個主函數main,C程序總是從main函數開始執行,main函數后面的一對圓括號不能省略,main函數可以位于程序的任意位置。函數不可以嵌套定義,但函數可以嵌套調用。

13.D第—個if語句a!=1條件為假,所以執行dse后的語句r=1。第二個if語句b==2條件成立,執行r+=2,r的值變為3,第三個if語句c!=3條件為假,所以不做任何操作。執行下面的r+=3操作,r的值變為6。判斷第四個訌條件,d==4條件成立,執行r+=4操作,結果為10。

14.D解析:帶參數的宏定義如下:#define宏名(參數)字符串。本題中,宏定義的作用是指定用標識符PI來代替“3.1415926”這個字符串,但宏定義不是C語句,不必在行末加分號。

15.D解析:本題考查宏替換的規則。宏替換分為簡單的字符替換和帶參數的宏替換兩類。使用宏時應注意以下幾點:①定義僅僅是符號替換,不是賦值語句,因此不做語法檢查;②為了區別程序中其他的標識符,宏名的定義通常用大寫字母,但不是必須用大寫;③雙引號中出現的宏名不替換;④使用宏定義可以嵌套,即后定義的宏中可以使用先定義的宏。

16.Bmain函數中定義一個二維數組v,另外還定義一個指針數組p。通過for循環,將v的各個行(字符串的首地址)賦給P的對應下標的元素。然后通過嵌套的for循環,為該二維數組中存放的各個字符串進行排序。strcmp函數返回值大于0時(p[i]>p[j])交換兩個字符串,所以每一輪內嵌的for循環,都將下標為i的字符串放在最終的排序位置上,即排序規則是按字符串升序排列。字符串排序時,是將兩個字符串自左向右逐個字符比較(按字符的ASCII值大小),直到出現不同的字符或遇到‘\\0’為止。排序后,再將v中各個排序后的字符串輸出。所以程序輸出結果為:abcdefghijklmnopq。故本題答案為B選項。

17.D解析:本題考查switch語句的掌握。必須撐握以下內容:首先應該明白switch語句的語法格式:

switch語句的語法格式為:

switch(表達式)

{

case常量表達式1:語句組1;

case常量表達式2:語句組2;

case常量表達式n:語句組n;

default:語句組n+1;

}

另外,以下幾點關于switch語句的重點:

①系統在執行時計算開關表達式的值;②根據所得的值在各個case標號表達式中尋找匹配,直到發現與表達式匹配的標號(本例中匹配的是case\'B\':);\ue008③找\ue009到匹配后執行后面相應的語句表,順序往下執行;④如果無相匹配的標號,若存在default標號,則執行該語句標號后面的語句表n+1;當不存在default標號時,不執行switch中的任何一個語句表。

一般而言,在多分支結構中總會出現'意外'的情況,這時均可歸入default程序段,作統一的處理。default標號是可選性的,不必每次都有,視需要而定。switch語句中還可以包含switch語句,形成switch的嵌套。

18.B第一個for循環的作用是讓p指向每行的首地址,第二個for循環的作用是把它指向的字符串輸出,故選擇B選項。

19.B

20.A解析:一般將數據結構分為兩大類型:線性結構與非線性結構。線性表、棧與隊列、線性鏈表都是線性結構,而二叉樹是非線性結構。

21.相鄰相鄰

22.130130解析:本題主函數中用了一個for循環,循環了3次:當i=9時,i/10=0,執行switch語句中case0分支,m和n的值各增1,變為1和1,然后遇到break語句,退出switch語句;當i=10和11時,i/10都等于1,執行switch語句中的case1分支,兩次使n增1,變為3,退出switch語句。故該空格處應該填130。

23.d1.dat"rb"d1.dat,'rb'解析:打開文件的函數為fopen('文件名','mode'),其中'mode'表示文件的打開方式。如果打開的是二進制文件,其mode字符串可以是:'rb'、'wb'、'ab'、'rb+'、'wb+'、'ab+'。'r'表示以只讀方式打開。'w'表示以寫方式打開,如果已存在該文件名的文件,文件中的內容將被清空。若文件名不存在,則將創建該文件。'a'為追加方式打開。若文件存在時,將打開這個文件并且在文件的末尾進行追加。當文件不存在,將創建新文件。'r+'打開一個已存在文件用于更新(可讀可寫)。\'w+'創建一個新文件用于更新,如果文件存在,文件被重寫(可讀可寫)。'a+'打開用于追加,當文件不存在時,創建新文件,并在文件末尾進行追加(可讀可寫)。根據題意,應該填'd1.dat','rb'。

24.16111611解析:題目中第1條要替換的語句i=f(1+1);展開后是i=((1+1)*M);繼續展開為i((1+1*8),結果使i=16。而第2條語句j=f2(1+1)”;展開后為j=(1+1*N);繼續展開為j=(1+1*10),結果使j=11。故程序運行的結果是輸出1611。

25.ar=9ar=9ar=11ar=9ar=9ar=11解析:本題綜合考查了for循環,switch語句及宏替換等幾個知識點。j=3時,執行PR(*(--p));輸出數組元素a[4]的值;j=2時,執行PR(*p++);取出p所指位置的元素a[4],然后p++;當j=1時,執行PR(*p++);取得是數組元素a[6]的值11。

26.存儲結構

27.c<10或c<=9(a*100+b*10+c)+(a*100+b*10+a)c<10或c<=9\r\n(a*100+b*10+c)+(a*100+b*10+a)解析:本題使用窮舉法,用一個3重循環窮舉A、B、C可以組合成的所有三位數,對每種情況來判斷是否滿足題目要求,滿足則輸出3個值。因為A、B、C分別代表一位數,所以C的取值范圍是0~9,故第一空應該填c<10或c<=9。根據下面輸出的判斷條件k==t可知,k應該為每種情況下ABC+ABA的值,故應該填寫(a*100+b*10+c)+(a*100+b*10+a)或者其他等價表達式。

28.SO

29.66解析:條件運算符的優先級高于賦值運算符,因此本題先計算關系表達式(*ptr+y)<x)?*(ptr+y):x的值,再賦給變量z。當y=0時,*(ptr+y)=2,而x=8,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=2,所以z=2;當y-1時,*(ptr+y)=4,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=4,所以z=4;當y=2時,*(ptr+y)=6,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=6,所以z=6;循環結束。因此輸出z的結果為6。

30.j<=ia[i][j]=a[j][i]j<=i\r\na[i][j]=a[j][i]解析:將矩陣轉置就是將行列互換,所以第一處應填j<=i,第二處應填a[i][j]=a[j][i]。

31.abcfgabcfg解析:本題考查的是字符數組用作函數參數。C語言中數組名可以看作該數組首地址的常量指針、因此可以直接傳遞給指針類型的參數。本題的主函數調用fun(s,3,strlen(s));后,函數中for循環就是for(i=3;i<strlen(s)-1;i++),即i從3遞增到字符數組s的長度-2位置,循環中讓s[i]=s[i+2],所以函數fun()實現的功能簡單來說就是將字符串s下標為p+2~k范圍的字符整體復制到字符串s下標為p~k-2的位置上。在本題中strlen(s)返回s的長度7,所以復制的字符為s[5]~s[7],即'f'、'g','\\0'三個字符,復制到s[3]~s[5],故最終輸出的字符串為abcfg(因為s[5]為'\\0',所以后面的字符不會輸出)。

32.

33.structSTRUstructSTRU解析:結構體類型是構造數據類型,是用戶自己定義的一種類型。

結構體類型的定義:

struct結構體類型名

{

成員項表;

};

定義結構體變量的的形式為:

struct結構體類型名變量1,變量2,……

其中變量包括:一般變量、指針變量、數組變量等。

34.voidfun(doubleb[][22])voidfun(doubleb[][22])解析:程序中為了表示函數調用“不帶回值”,可以用“void”定義函數為“無類型”(或稱“空類型”),這樣系統就保證不使函數帶回任何值。當二維數組作為形參時,二維數組的第一維可以省略。

35.10410\r\n4解析:結構體變量所占內存長度是各成員占的內存長度之和。每個成員分別占有其自己的內存單元。int占2個字節,float占4個字節,共用體變量所占的內存長度等于最長的成員的長度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。

36.ex或structstex或structst

37.-1或-1.0*sn-1或-1.0\r\n*sn解析:由于在對S求和時,相鄰兩項的符號剛好相反,而在函數fun中沒有對數據進行取反的操作,故第—空的目的是對數據進行取反,以保證序列中相鄰兩項的符號不同。故第—個應填-1或-1.0。在執行完循環體后,要將求和結果通過指針參數的形式傳遞紿調用fun的函數,故第二空應填*sn。

38.i=0j=20i=0,j=20解析:scanf()函數的使用,該函數的第一個參數是格式字符串,主要由兩類字符組成,一類是非格式符要求原樣輸入,一類是格式符對應要輸入的變量,所以說本題中應該原樣輸入i=,j=,后面分別給變量0和20,所以說空格處應該填入i=0,j=20。

39.44解析:一維數組元素的定義形式為:數組名[N],則該數組中元素的下限是0,上限是N-1。

40.s=3s=3解析:當k=7時,執行case7,s++,s的值為1。當k=6時,直接break出switch結構;當k=5時,執行case5,s+=2,s的值為3;當k=4時由于不滿足for循環的條件,所以結束循環,所以輸出的s的值為3。注意:循環語句和條件的嵌套使用。

41.D解析:濫用goto語句將使程序流程無規律,可讀性差,因此選項A)不選;注解行有利于對程序的理解,不應減少或取消,選項B)也不選;程序的長短要依照實際情況而論,而不是越短越好,選項C)也不選。

42.D解析:中序遍歷的遞歸算法定義:①遍歷左子樹;②訪問根結點;③遍歷右子樹。前序遍歷的遞歸算法定義:①訪問根結點;②遍歷左子樹;③遍歷右子樹。后序遍歷的遞歸算法定義:①遍歷左子樹;②遍歷右子樹;③訪問根結點。根據前序遍歷的結果可知,a是根結點。由中序遍歷的結果dgbaechf可知,d、g、b是左子樹的結點,e、c、h、f是右子樹的結點。再由前序遍歷的結果bdg可知,b是a左邊子樹的根,由cefh可知,c是a右邊子樹的根。再由中序遍歷的結果dgb可知,d、g是b左邊子樹的結點,b右邊子樹無結點。再由前序遍歷結果dg可知,d為b左子樹的根,g是以d為根的子樹的右結點。至此,a的左子樹已完全弄清楚了。同樣的道理,可以弄清楚以c為根的子樹的結點位置。所以可知后序遍歷的結果是D。

43.D解析:在定義函數時函數名后面括弧中的變量名稱為“形式參數”(簡稱形參),在主調函數中調用一個函數時,函數名后面括弧中的參數(可以是一個表達式)稱為“實際參數”(簡稱實參)。C語言規定,實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在內存中,實參單元與形參單元是不同的單元。故本題應該選擇D。

44.D解析:二維數組的定義和初始化在定義中如果對所有元素賦初值,其第一維的長度可以省略;二維數組初始化也可以只對每行或前若干行的前若干個元素賦初值;在二維數組定義時不能省略第二維的長度。

45.D解析:在最壞情況下,快速排序、冒泡排序和直接插入排序需要的比較次數都為n(n-1)/2,堆排序需要的比較次數為nlogn2。

46.A解析:在定義指針變量p和q時,分別把變量n2和n1的地址賦給了指針變量p和q,所以*p和*q中內容就分別是變量n2和n1的值,所以語句*p=*q與語句n2=n1等價。因此選項A)正確。

47.C

48.B

49.D解析:對二叉樹的前序遍歷是指先訪問根結點,然后訪問左于樹,最后訪問右子樹,并且在訪問左、右子樹時,先訪問根結點,再依次訪問其左、右于樹。

50.D解析:通過賦初值的方式給一維數組賦字符串,可以用給一般數組賦初值的相同方式給一維字符數組賦字符串,也可以在賦值時直接賦字符串常量。選項B)和C)后面的'\\0'是多余的,不過也不錯,在C語言中,系統會自動在字符串的結尾處加上一個字符'\\0'作為串的結束標記。

51.B解析:本題在調用函數時,實參是數組名也是把數組a的首地址傳遞給形參,由條件i=2且i<6得出函數將列以a[2]開始的4個元素(3、4、5、6)進行乘2操作,結果分別是a[2]=6、a[3]=8、a[4]=10、a[5]=12。a[0]、a[1]、a[6]、a[7]、a[8]、a[9]的值沒有發生變化。

52.D解析:分析程序可知,函數f()中的for循環作用,是將數組前三行中的對角線上的元素,即b[0][0]、b[1][1]、b[2][2]和第一行的第四列元素即b[0][3]累加到變量s中,然后將s的值返回。在主函數中首先定義了一個4行4列的二維數組,接著通過輸出語句輸出函數f(a)的返回值。調用f(a)的返回值為a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。所以,4個選項中選項D符合題意。

53.C解析:在C語言中,引用數組元素時,其數組下標的數據類型可以是整型常量,也可以是整型表達式。

54.B解析:數據的存儲結構,又稱為數據的物理結構,是數據的邏輯結構在計算機中的存放形式,數據的存儲結構有順序結構、鏈式結構、散列結構和索引結構等。

55.D解析:本題主要考查左移、右移對數據值的影響,左移n位相當于乘以2的n次冪,右移n位相當于除以2的n次冪。

56.B軟件設計包括軟件的結構設計、數據接口設計和過程設計。其中軟件結構設計主要包括系統由哪些子系統構成,以及這些子系統之間的關系是怎樣的,并將這些內容編寫成文檔;數據接口設計的任務是為每個子系統設計其與其他子系統間的接口,并編寫成文檔,這個接口要是一個無二義的接口,不需要子系統的操作知識就可以使用;過程設計是指系統結構部件轉換成軟件的過程描述。

57.C解析:軟件調試技術包括強行排錯法、回溯法和原因排除法。邊界值分析、錯誤推斷都是黑盒測試的方法。

58.D解析:本題考查數組指針的應用。選項D)第一層括號中為數組a中第i項元素的值,外面再加指針運算符沒有意義。

59.CE-R圖轉換成關系模型數據則是把圖形分析出來的聯系反映到數據庫中,即設計出表,所以屬于邏輯設計階段。

60.B解析:程序中定義了數組a[10],則其元素的下標范圍為0~9,而B選項中的a[10]所表示的元素已經超出a數組元素的范圍,故應該選擇B。

61.A在有序的線性表中進行查找,最差的情況為從表頭查找到表尾都沒有所需要的值。長度為n的線性表從表頭開始每次取出一個值比較,若不符合,再取下一個值,依次比較,一直到最后一個,需要比較n次。

62.B本題考查二維數組的相關操作。程序主要包括兩個部分:主函數部分和fun函數。主函數初始給出了一個4×4的二維矩陣,并對每一行賦初值,可以看出每一行都要有4個元素,而對于給出的初值個數不滿足4個的,要先從第一列開始將各個值賦給各列,不足的部分用0補齊。函數fun的作用是將二維矩陣a中行號與列號相同的數據賦值給一維矩陣y,y的下標與該數據在a中的行號相同。題目所要求解的即通過printf函數將矩陣y中的元素按照順序輸出。本題中二維矩陣a初始化后為{{1,2,3,0},{4,0,0,0},{5,6,7,8},{9,10,0,0}}。將行號與列號相同的元素賦給y,則y矩陣的數據為{1,0,7,0},輸出即可得到結果。

63.A通常,將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為軟件生命周期。也就是說,軟件產品從考慮其概念開始,到該軟件產品不能使用為止的整個時期都屬于軟件生命周期。

64.Afun函數的功能是輸出字符串中ASCII碼能被2整除的字符,g的ASCIl碼為l03,0的ASCIl碼為111,d的ASCIl碼為l00,只有d滿足。因此,本題答案為A)。

65.B調試也稱排錯或糾錯。它與成功的測試形影相隨,測試成功的標志是發現錯誤。根據錯誤跡象,診斷錯誤的原因和位置,進而改正程序中的錯誤,這就是調試的任務。

調試分為靜態調試和動態調試,靜態調試就是指對源程序進行分析,然后確定可能出錯的地方并進行排錯。動態調試是指對程序的運行進行跟蹤并觀察其出錯點,然后進行排錯。

靜態調試通常可以采用如下兩種方法。

(1)輸出寄存器的內容

在測試中出現問題,設法保留現場信息。把所有的寄存器和主存中有關部分的內容打印出來(通常以八進制或十六進制的形式打印),進行分析研究。用這種方法調試,輸出的是程序的靜止狀態(程序在某一時刻的狀態),效率非常低,不得已才采用。

(2)為取得關鍵變量的動態值,在程序中插入打印語句。這是取得動態信息的簡單方法,并可檢驗在某事件后某個變量是否按預期要求發生了變化。此方法的缺點是可能輸出大量需要分析的信息,必須修改源程序才能插入打印語句,這可能改變關鍵的時序關系,引入新的錯誤。

動態調試通常利用程序語言提供的調試功能或專門的調試工具來分析程序的動態行為。一般程序語言和工具提供的調試功能有檢查主存和寄存器;設置斷點,即當執行到特定語句或改變特定變量的值時,程序停止執行,以便分析程序此時的狀態。

66.An為。時執行exit(0);函數結束,所以產生的隨機數為0時,函數結束。答案選擇A)。

67.B在本題中,首先定義了兩個宏N和M,大小都為10,然后定義了一個返回指針的函數find,該函數帶有兩個形參,第一個為字符型的指針數組,第二個為整型變量,在函數體中,首先定義了一個指針變量q,并將形參中指針數組的第一個元素賦值給q,然后執行for循環,在循環體中,首先執行條件判斷語句,其條件為strcmp(a[i],q)<0(strcmp函數的作用是比較兩字符串的大小,如果相等,則返回0值,如果參數中的第一個字符串大,則返回正值,否則返回負值),如果結果為真,說明指針數組當前元素所指向的字符串比q所指向的字符串小,此時,程序執行將當前指針數組元素賦值給p,最后返回p,通過上面的分析我們可以看出,find函數的作用是找出指針數組中各元素所指向字符串的最小字符串。

在主函數中,定義了一個二維數組s,并賦了初值,然后定義一個指針變量p,用來存放函數find的返回值。調用函數find的參數分別為s和5,結合形參看find函數,不難知道調用find函數就是找出二維數組s中各字符串中最小的字符串,那么應該為and。此時,指針變量p指向字符串“and”的首地址,然后執行puts(p),完成該字符串的輸出。因此,本題正確的答案是B。

68.CN-S圖(也被稱為盒圖或CHAPIN圖)、PAD(問題分析圖)及PFD(程序流程圖)是詳細設計階段的常用工具。E—R圖即實體一聯系圖,是數據庫設計的常用工具。從題中圖可以看出該圖屬于程序流程圖。

69.A

70.A

\n在函數fun中對參數n的值進行判斷,如果其值等于1或2,則*p=1,否則,函數fun進行遞歸調用fun(n.1,&f1);fun(13.2,&f2);*p=n+f2;在主函數調用fun函數時傳遞給參數n的值為3,fun函數又遞歸用了兩次自身fun(2,&n);fun(1,&f1);所以n和f2的值都為1,通過指針P的引用,變量S的值為2。

\n

71.C

72.BM<=N和N<=P是邏輯與的關系,應使用運算符&&。

73.A

74.A

75.CC。【解析】數據結構是相互之間存在一種或多種特定關系的數據元素的集合。”關系”描述的是數據元素之間的邏輯關系,因此又稱數據的邏輯結構。數據的存儲結構是指數據結構(數據的邏輯結構)在計算機中的表示,又稱物理結構。數據的存儲結構有順序存儲結構和鏈式存儲結構兩種。不同存儲結構的數據處理效率不同。由于鏈表采用鏈式存儲結構,元素的物理順序并不連續,對于插入和刪除無需移動元素,很方便,當查找元素時就需要逐個元素查找,因此查找的時間相對更長。

76.C首先char*s接受一個字符型數組的首地址并將這個首地址賦給另一個字符型指針char*t,while(*t++)不斷循環,直到*t為‘\\o’,再將t一1,這時字符指針t指向字符串的最后一個字符,又因為s指向字符數組的首地址即字符串的首地址,所以return(t--s)便是返回字符數組中字符串的長度。故本題答案為C)。

77.B本題考查自加(++)、自減(--)運算符的使用。“++x,--x”,在變量x前使用,先使X的值加1或者減1,再使用此時的表達式的值參與運算;“x++,x--”,先把使用X的值參與運算,在使用X之后,再使x的值加1或者減1。對于表達式--x=4,y++=4,兩者相等,--x=y++為真,所以a=x=4,執行完此語句后y的值是5。第2個表達式b=++x,x的值先加1,然后賦給b,即b=x+1=5;第一個表達式c=y=5。故B正確。

78.B

79.C第一個if語句,先判斷條件,發現a<b不成立,不再執行下列的語句,直接執行最后的printf輸出語句,然后結束程序,整個過程c的值沒有發生變化。

80.A\nA。【解析】二分法查找只適用于順序存儲的有序線性表,對于順序存儲的非有序線性表和線性鏈表,都只能采用順序查找。

\n

81.

82.voidfun(char*a,intn){ inti=0,k=0; char*p,*t; p=t=a; /*開始時,p與t同時指向數組的首地址*/ while(*t==‘*’) /*用k來統計前導星號的個數*/ {k++;t++;} if(k>n) /*如果k大于n,則使p的前導保留n個星號,其后的字符依次存入數組a中*/ { while(*p) { a[i]=*(p+k-n); i++; p++; } a[i]=‘\0’; /*在字符串最后加上字符串結束標志*/ }}字符串中前導*號不能多于n個,多余的應刪除。首先需要通過while循環統計字符串前導*號的個數,然后通過if條件語句完成前導*號的個數和n的比較,如果前導*號多于n個,則需要把n個*號和其余字符重新保留。2022-2023年貴州省安順市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.

3.有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&i,&y,name);當執行上述程序段,從鍵盤上輸入555667777abc后,y的值為()。A.55566.0B.566.0C.7777.0D.566777.0

4.有以下程序:程序運行后的輸出結果是()。A.13442B.13431C.01234D.02431

5.以下敘述中正確的是A.A.C程序中的注釋只能出現在程序的開始位置和語句的后面

B.C程序書寫格式嚴格,要求一行內只能寫一個語句

C.C程序書寫格式自由,一個語句可以寫在多行上

D.用C語言編寫的程序只能放在一個程序文件中

6.數據庫是______的集合,它具有統一的結構形式并存放于統一的存儲介質內,可被各個應用程序所共享。

A.視圖B.消息C.數據D.關系

7.以下程序的輸出結果是()main(){staticchara[10]={"Chinese"};printf("%d",strlen(a));}

A.7B.2C.9D.10

8.有以下程序:#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen(“d1.dat”,“w”);for(i=0;i<3;i++)fprintf(fp,“%d”,a[i]);fprintf(fp,“\n”);fclose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d”,&n);fclose(fp);printf(“%d\n”,n);}程序的運行結果是()。

A.321B.12300C.1D.123

9.

10.在學生管理的關系數據庫中,存取一個學生信息的數據單位是()。

A.文件B.數據庫C.字段D.記錄

11.下列程序的運行結果為()。#include<stdio.h>main{structdate{intyear,month,day;}today;printf("%d\n",sizeof(structdate));}A.8B.6C.10D.12

12.下列敘述中正確的是:()A.C語言程序中,main()函數必須在其它函數之前,函數內可以嵌套定義函數

B.C語言程序中,main()函數的位置沒有限制,函數內不可以嵌套定義函數

C.C語言程序中,main()函數必須在其它函數之前,函數內不可以嵌套定義函數

D.C語言程序中,main()函數必須在其它函數之后,函數內可以嵌套定義函數

13.若有以下程序

則程序的輸出結果是

A.3B.7C.6D.10

14.以下敘述中不正確的是

A.預處理命令行都必須以#號開始

B.在程序中凡是以#號開始的語句行都是預處理命令行

C.宏替換不占用運行時間,只占編譯時間

D.在以下定義是正確的:#definePI3.1415926;

15.以下有關宏替換的敘述不正確的是()。

A.雙引號中出現的宏名不替換B.使用宏定義可以嵌套C.宏定義儀儀是符號替換D.宏名必須用大寫字母表示

16.有以下程序:#include<stdio.h>#include<string.h>main(){charv[4][10]={“efg”,“abcd”,“mnopq”,“hijkl”},*p[4],*t;inti,j;for(i=0;i<4;i++)p[i]=v[i];for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(strcmp(p[i],p[j])>0) {t=p[i];p[i]=p[j];p[j]=t}for(i=0;i<4;i++) printf(“%s”,p[i]);}程序運行后的輸出結果是()。

A.efgabcdhijklmnopq

B.abcdefghijklmnopq

C.mnopqhijklefgabcd

D.efgabcdmnopqhijkl

17.若運行以下程序時,從鍵盤輸入ADescriptor<CR>(<CR>表示回車),則下面程序的運行結果是

#include<stdio.h>

main()

{charc;

intv0=1,v1=0,v2=0;

do{switch(c=getchar())

{case′a′:case′A′:

case′e′:case′E′:

case′i′:case′I′:

case′o′:case′O′:

case′u′:case′U′:v1+=1;

default:v0+=1;v2+=1;}}while(c!='\n');

printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);}

A.v0=7,v1=4,v2=7

B.v0=8,v1=4,v2=8

C.v0=11,v1=4,v2=11

D.v0=13,v1=4,v2=12

18.以下程序的輸出結果是()。main{charch[3][4]={"123","456","78"),*p[3];inti;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++)printf("%s",p[i]);}A.123456780B.123456780C.12345678D.147

19.在一個具有n個結點的有序單鏈表中插入一個新結點并仍然保持有序的時間復雜度是()。

A.O(1)B.O(n)C.O(n2)D.O(nlog2n)

20.下列敘述中正確的是______。

A.線性表是線性結構B.棧與隊列是非線性結構C.線性列表是非線性性結構D.二叉樹是線性結構

二、2.填空題(20題)21.順序存儲方法是把邏輯上相鄰的結點存儲在物理位置______的存儲單元中。

22.以下程序運行后的輸出結果是【】。

main()

{inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

}

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

}

23.若fp已正確定義為一個文件指針,d1.dat為二進制文件,請填空,以便為“讀”而打開此文件:

fp=fopen(【】);。

24.下面程序由兩個源程序文件:t4.h和t4.c組成,程序編譯運行的結果是:【】。

t4.h的源程序為:

#defineN10

#dennef2(x)(x*N)

t4.c的源程序為:

#include<stdio.h>

#defineM8

#definef(x)((x)*M)

#include"t4.h"

#main()

{inti,j;

i=f(1+1);j=f2(1+1);

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

}

25.下列程序的輸出結果【】。

#definePR(ar)printf("ar=%d",ar)

main()

{intj,a[]={1,3,5,7,9,1l,13,1},*p=a+5;

for(j=3;j;j--)

switch(j)

{case1:

case2:PR(*p++);break;

case3:PR(*(--p));}}

26.數據結構分為邏輯結構與存儲結構,線性鏈表屬于【】。

27.以下程序的功能是求下列算式中A、B、C的值,請填空。

#include<stdio.h>

main()

{inta,b,c,k,t=348;

for(a=0;a<10;a++)

for(b=0;b<10;b++)

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

{k=【】;

if(k==t)

printf("A=%dB=%dC=%d\n",a,b,c);

}

}

28.以下程序的輸出結果是【】。

main()

{char*p[]={"BOOL","OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%c",*p[i]);

printf("\n");

}

29.下列程序的輸出結果是【】。

main()

{

inta[]={2,4,6},*ptr=&a[0],x=8,y,z;

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

z=(*(ptr+y)<x)?*(ptr+y):x;

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

}

30.下面rotate函數的功能是:將n行n列的矩陣A轉置未AT,例如:

請填空

#defineN4

voidrotate(inta[][])

{inti,j,t;

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

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

{t=a[i][j];【】;a[j][i]=t;}

}

31.以下程序運行后的輸出結果是______。

#include<string.h>

voidfun(char*s,intp,intk)

{inti;

for(i=p;i<k-1;i++)s[i]=s[i+2];

}

main()

{chars[]="abcdefg";

fun(s,3,strlen(s));puts(s);

}

32.下面程序的運行結果是______。

#include<stdio.h>

main()

{inty,a;

y=2,a=1;

while(y--!=-1)

{do{a*=y;a++;}while(y--);}

printf("%d,%d",a,y);}

33.若有如下結構體說明:

structSTRU

{inta,b;charc:doubled;

stmctSTRU*p1,*p2;

};

請填空,以完成對t數組的定義,t數組的每個元素為該結構體類型。【】t[20]

34.設在主函數中有以下定義和函數調用語句,且fun函數為void類型,請寫出fun函數的首部【】。要求形參名為b。

main()

{doubles[10][22];

intn;

fun(s);

}

35.有以下定義和語句,則sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdate

{intday;

intmouth;

intyear;

union{intshare1;

floatshare2;

}share;

}a;

36.下列程序用來輸出結構體變量ex所占存儲單元的字節數。

structst

{charname[20];doublescore;};

main()

{structstex;

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

}

37.函數voidfun(float*sn,intn)的功能是:根據以下公式計算S,計算結果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請補全程序。

S=1-1/3+1/5-1/7+…+1/(2n+1)

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;

}

【】=s;

}

38.若有程序

main()

{inti,j;

scanf("i=%d,j=%d",&i,&j);

pfintf("i=%d,j=%d\n",i,j);

}

要求給i賦10,給j賦20,則應該從鍵盤輸入【】。

39.若有定義doublea[5];,則a數組元素下標的上限為______。

40.下列程序的運行結果是【】。

#include<stdio.h>

voidmain()

{ints=0,k;

for(k=7;k>4;k--)

{switch(k)

{case1:

case4:

case7:s++;break;

case2:

case3:

case6:break;

case0:

case5:s+=2;break;}}

printf("s=%d",s);}

三、1.選擇題(20題)41.在設計程序時,應采納的原則之一是()。

A.不限制goto語句的使用B.減少或取消注解行C.程序越短越好D.程序結構應有助于讀者理解

42.若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結點訪問順序是()。

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

43.若函數調用時的實參為變量時,以下關于函數形參和實參的敘述中正確的是()。

A.函數的實參和其對應的形參共占同一存儲單元

B.形參只是形式上的存在,不占用具體存儲單元

C.同名的實參和形參占同一存儲單元

D.函數的形參和實參分別占用不同的存儲單元

44.以下不能正確定義二維數組的選項是

A.inta[2][2]={{1},{2}};

B.inta[][2]={1,2,3,4};

C.inta[2][2]={{1},{2,3}};

D.inta[2][]={1,2},{3,4}};

45.如果進棧序列為e1,e2,e3,e4,則可能的出棧序列是

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

46.設有定義:intn1=0,n2,*p=&n2,*q=&n1;,下列賦值語句中與n2=n1;語句等價的是()。

A.*p=*q;B.p=q;C.*p=&n1;D.p=*q;

47.下列程序voidfunc1(inti);voidfunc2(inti)charst[]="hello,friend!";voidfuncl(inti){printf

溫馨提示

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

評論

0/150

提交評論