2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計_第1頁
2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計_第2頁
2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計_第3頁
2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計_第4頁
2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計學(xué)校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.以下敘述中不正確的是()。

A.在一個函數(shù)中,可以有多條return語句

B.函數(shù)的定義不能嵌套,但函數(shù)的調(diào)用可以嵌套

C.函數(shù)必須有返回值

D.不同的函數(shù)中可以使用相同名字的變量

3.設(shè)”inta=15,b=26;”,則”printf(“%d,%d”,a,b);”的輸出結(jié)果是()。

A.15B.26,15C.15,26D.26

4.若變量已正確定義,要求程序段完成5!的計算,不能完成此操作的程序段是______。

A.for(i=1,p=1;i<=5;i++)p*=i;

B.for(i=1;i<=5;i++){p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i;i++;}

D.i=1;p=1;do{p*=i;i++;}while(i<=5);

5.數(shù)字字符“2”的ASCII碼為十進制數(shù)50,數(shù)字字符“5”的ASCII碼為十進制數(shù)()

A.52B.55C.54D.53

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

A.C程序中的#include和#define行均不是C語句

B.除逗號運算符外,賦值運算符的優(yōu)先級最低

C.C程序中,j++;是賦值語句

D.C程序中,+、-、*、/、%是算術(shù)運算符,可用于整型和實型數(shù)的運算

7.由兩個棧共享一個存儲空間的好處是______。

A.減少存取時間,降低下溢發(fā)生的幾率

B.節(jié)省存儲空間,降低上溢發(fā)生的幾率

C.減少存取時間,降低上溢發(fā)生的幾率

D.節(jié)省存儲空間,降低下溢發(fā)生的幾率

8.若要求從鍵盤讀入含有空格字符的字符串,應(yīng)該使用函數(shù)______。A.getc()B.gets()C.getchar()D.scanf()

9.有以下程序:#includeMain(){charc1,c2;c1='A'+'8'-'4';c2='A'+'8'-'5';printf("%c,%d\n",c1,c2);}已知字母A的ASCII碼為65,程序運行后的輸出結(jié)果是()。A.E,68.B.D.69C.E,DD.輸出無定值

10.有以下程序:voidf(inta[],inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main(){inti,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++)printf("%d,",aa[i]);printf("\n");}執(zhí)行后輸出結(jié)果是()。

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

11.結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成,三種基本結(jié)構(gòu)組成的算法A.可以完成任何復(fù)雜的任務(wù)B.只能完成部分復(fù)雜的任務(wù)C.只能完成符合結(jié)構(gòu)化的任務(wù)D.只能完成一些簡單的任務(wù)

12.下列程序段的輸出結(jié)果是()。chara=9,b=020;prihtf("%o\n",~a&b<<1);

A.100000B.8C.40D.77

13.以下程序是用來計算兩個非負數(shù)之間的最大公約數(shù):我們假設(shè)x,y中最大的那個數(shù)的長度為n,基本運算時間復(fù)雜度為O(1),那么該程序的時間復(fù)雜度為()A.O(1)B.O(logn)C.O(n)D.O(n^2)

14.對線性表進行二分法檢索,其前提條件是()。

A.線性表以順序方式存儲,并按關(guān)鍵碼值排好序

B.線性表以順序方式存儲,并按關(guān)鍵碼的檢索頻率排好序

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

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

15.

16.帶頭結(jié)點的單鏈表head為空的判定條件是()。

A.head=NULLB.head→next=NULLC.head→next=headD.head!=NULL

17.有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3;charflag;flag=b>=2&&c<=3;switch(a){ case1:switch(flag) { case0:printf(“**”);break; case1:printf(“%%”);break; } case0:switch(c) { case1:printf(“$$”);break; case2:printf(“&&”);break; default:printf(“##”); }}printf(“\n”);}程序運行后的輸出結(jié)果是()。

A.**$$B.%##C.%&&D.**##

18.下列關(guān)于線性鏈表的敘述中,正確的是()A.各數(shù)據(jù)結(jié)點的存儲空間可以不連續(xù),但它們的存儲順序與邏輯順序必須一致

B.各數(shù)據(jù)結(jié)點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續(xù)

C.進行出入與刪除時,不需要移動表中的元素

D.以上三種說法都不催

19.在以下一組運算中,優(yōu)先級最高的運算符是()

A.<=B.=C.%D.&&

20.

二、2.填空題(20題)21.軟件維護活動包括以下幾類:改正性維護、適應(yīng)性維護、【】維護和預(yù)防性維護。

22.以下程序中函數(shù)fun()的功能是構(gòu)成一個如圖所示的帶頭結(jié)點的單向鏈表,在結(jié)點的數(shù)據(jù)域中放入了具有兩個字符的字符串。函數(shù)disp的功能是顯示輸出該單向鏈表中所有結(jié)點中的字符串。請?zhí)羁胀瓿珊瘮?shù)disp。

#include<atdio.h>

typedefstructnode/*鏈表結(jié)點結(jié)構(gòu)*/

{charsub[3];

structnode*next;

}Node

Node~un(chars)/*建立鏈表*/

{......}

voiddisp(Node*h)

{Node*Ps

p=h->next;

while(【】)

{printf("%s\n",p->suh);p=【】;}

}

main()

{Node*hd;

hd=fun();disp(hd);prinff("\n");

23.性表的多種存儲結(jié)構(gòu)中,最簡單的方法是【】。

24.有下列程序;

#include<stdio.h>

main()

{charc;

while((c=getchar())!=',')putchar(++C);

}

程序運行時,如果從鍵盤輸入:A,B,<CR>,則輸出結(jié)果為______。

25.閱讀下列程序,則程序的輸出結(jié)果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c='y';}

26.在深度為7的滿二叉樹中,度為2的節(jié)點個數(shù)為()。

27.以下程序運行時若從鍵盤輸入:102030<回車>。輸出結(jié)果是【】。

#include<stdio.h>

main()

{

inti=0,j=0,k=0;

scanf("%d%*d%d",&i,&j,&k);

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

}

28.以下程序的運行結(jié)果是【】。

#include<stdio.h>

longfib(intg)

{switch(g)

{case0:return0;

case1:

case2:return1;}

return(fib(g-1)+fib(g-2));}

main()

{longk;

k=fib(5);

printf("k=%5ld\n",k);}

29.下面程序的輸出是【】。

main()

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

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

arr[i]=i;

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

k+=arr[i]+i;

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

30.若有如下程序:

main()

{ints[]={1,2,3,4,5,6},*p=s;

printf("%d,%d\n",*(p+3),*(p+6));}

則程序運行后的輸出結(jié)果是【】。

31.在進行軟件結(jié)構(gòu)設(shè)計時,應(yīng)遵循的最主要原理是【】。

32.若fp已正確定義為一個文件指針,d1.dat為二進制文件,請?zhí)羁?,以便為“讀”而打開此文件:

fp=fopen(【】);。

33.實現(xiàn)程序可將磁盤中的一個文件復(fù)制到另一個文件中,兩個文件的文件名在可執(zhí)行命令的命令行中(相當(dāng)于copy命令),假定文件在當(dāng)前目錄下。請補全程序。

#include<stdio.h>

voidmain(intargc,char*argv[])

{FILE*f1,*f2;

if(argc<【】)

{printf("parametererror!\n");exit(0);}

f1=fopen(argv[1],"r");

f2=fopen(argv[2],"w");

while(【】)fputc(fgetc(f1),f2);

fclose(f1);

fclose(f2);

}

34.在樹形結(jié)構(gòu)中,沒有前件的結(jié)點是()。

35.下列程序的運行結(jié)果是______。

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

36.下面程序的運行結(jié)果是【】。

#include<stdio.h>

#defineSIZE12

main()

{chars[SIZE];intI;for(I=0;I<SIZE;I++)s[I]=′A′+I+321;

sub(s,7,SIZE-1);

for(I=0;I<SIZE;I++)printf("%c",s[I]);

printf("\n");}

sub(char*a,intt1,intt2)

{charch;

while(t1<t2)

{ch=*(a+t1);

*(a+t1)=*(a+t2);

*(a+t2)=ch;

t1++;t2--;}}

37.以下函數(shù)把b字符串連接到a字符串的后面,并返回a中新字符串的長度。請?zhí)羁铡?/p>

strcen(chara[],charb[])

{intnum=0,n=0;

while(*(a+num)!=【】)num++;

while(b[n]){*(a+num)=b[n];num++;【】;}

return(num);

}

38.設(shè)有以下變量定義,并已賦確定的值,

charw;intx;floaty;doubleZ;

則表達式:w*x+z-y所求得的數(shù)據(jù)類型為上【】。

39.以下函數(shù)用來求出兩整數(shù)之和,并通過形參將結(jié)果傳回,請?zhí)羁铡?/p>

voidfunc(intx,inty,【】z)

{*z=x+y;}

40.下列程序可以判斷輸入的年份是不是閏年。

#include

main()

{int【】,leap;

scanf("%d",&year);

if(year%4)

leap=0;

elseif(year%lO0)

【】;

elseif(year%400)

leap=0;

else

leap=1;

if(【】)

printf("%d年是閏年",year);

else

printf("%d年不是閏年\n",year);

}

三、1.選擇題(20題)41.有以下程序:#include<stdlib.h>main(){char*p,*q;p=(char*)malloc(sizeof(char)*20);q=p;scanf("%s%s",p,q);printf("%s%s\n",p,q);}若從鍵盤輸入:abcdef<回車>,則輸出結(jié)果是()。

A.defdefB.abcdefC.abedD.dd

42.若x=2,y=3,則x&y的結(jié)果是()。

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

43.結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是()。

A.程序的規(guī)模B.程序的效率C.程序設(shè)計語言的先進性D.程序的易讀性

44.以下程序的輸出是______。structst{intx;int*y;}*p;intdt[4]={10,20,30,40};structstaa[4]={50,&dt[0],60,&dt[1],60,&dt[2],60,&dt[3]};main(){p=aa;printf("%d\n",++(p->X));}

A.51B.11C.50D.60

45.關(guān)系表中的每一行記錄稱為一個()。

A.字段B.元組C.屬性D.關(guān)鍵碼

46.已有定義:chara[]="xyz",b[]={'x','y','z'};,以下敘述中正確的是

A.數(shù)組a和b的長度相同B.a數(shù)組長度小于b數(shù)組長度C.a數(shù)組長度大于b數(shù)組長度D.上述說法都不對

47.結(jié)構(gòu)化程序設(shè)計的一種基本方法是()

A.篩選法B.遞歸法C.歸納法D.逐步求精法

48.以下程序的輸出結(jié)果是#include<stdio.h>main(){inta=15/b=21,m=0;switch(a%3){case0:m++;break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf("%d\n",m);}

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

49.當(dāng)下面的程序運行后,變量c的值為______。main(){inta=45,b=27,c=0;c=max(a,b);}intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}

A.45B.27C.0D.72

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

A.a=a+7;B.a=7+b+c,a++C.int(12.3%4)D.a=a+7=c+b

51.若程序中定義了以下函數(shù):doublemyadd(doublea,doubleb){return(a+b);}并將其放在調(diào)用語句之后,則在調(diào)用之前應(yīng)該對函數(shù)進行說明,以下選項中錯誤的說明是()。

A.doublemyadd(doublea,b);

B.doublemyadd(double,double);

C.doublemyadd(doubleb,doublea);

D.doublemyadd(doublex,doubley);

52.以下語句或語句組中,能正確進行字符串賦值的是______。A.char*sp;*sp="right!";

B.chars[10];s="right!";

C.chars[10];*s="right!";

D.char*sp="right!";

53.在調(diào)用函數(shù)時,如果實參是簡單變量,它與對應(yīng)形參之間的數(shù)據(jù)傳遞方式是______。

A.地址傳遞B.單向值傳遞C.由實參傳紿形,再由形參傳回實參D.傳遞方式由用戶指定

54.函數(shù)fseek的正確調(diào)用形式是()。

A.fseek(位移量,起始點,文件類型指針);

B.fseek(文件類型指針,位移量,起始點);

C.fseek(文件類型指針,起始點,位移量);

D.fseek(起始點,位移量,文件類型指針);

55.下列程序的輸出結(jié)果是______。main(){chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);}

A.非法B.a[4]的地址C.5D.3

56.軟件調(diào)試的目的是______。

A.發(fā)現(xiàn)錯誤B.改正錯誤C.改善軟件的性能D.挖掘軟件的潛能

57.設(shè)變量a是int型,f是float型,i是double型,則表達式10+'a'+i*f的值的數(shù)據(jù)類型為()。

A.intB.floatC.doubleD.不確定

58.若變量已正確說明為int類型,要通過語句scanf("%d%d%d",&a,&b,&c);給a賦值3,b賦值5,c賦值8,下面不正確的輸入形式是()。

A.3<回車>5<回車>8<回車>B.3,5,8<回車>C.3<回車>58<回車>D.35<回車>8<回車>

59.若有以下程序:#include<stdio.h>inta[]={2,4,6,8};main(){inti;int*p=a;for(i=0;i<4;i++)a[i]=*p;printf("%d\n",a[2]);}上面程序的輸出結(jié)果是()。

A.6B.8C.4D.2

60.若二維數(shù)組a有m列,則在a[i][j]前的元素個數(shù)為()。

A.j*m+iB.i*m+jC.j*m+i+1D.i*m+j+1

四、選擇題(20題)61.

下列程序的運行結(jié)果是()。

#include<stdio.h>

main

{inta=2,b=3,c=4:

if(a<b)

if(b<0)C=0:

elsec++;

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

}

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

62.對線性表進行二分法檢索,其前提條件是()。

A.線性表以順序方式存儲,并按關(guān)鍵碼值排好序

B.線性表以順序方式存儲,并按關(guān)鍵碼的檢索頻率排好序

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

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

63.設(shè)有關(guān)系R和S,關(guān)系代數(shù)表達式為R一(R—S)表示的是()。

A.R∩SB.R—SC.RUSD.R÷S

64.

65.一個工作人員可以使用多臺計算機,而一臺計算機可被多個人使用,則實體工作人員與實體計算機之間的聯(lián)系是()。

A.一對一B.一對多C.多對多D.多對一

66.

67.若有下列定義(設(shè)int類型變量占2個字節(jié)):inti=8,j=9;則下列語句:printf("i=%%d,j=%%d\n",i,j);輸出的結(jié)果是()。A.i=8,j=9B.i=%d,j=%dC.i=%8,j=%9D.8,9

68.

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

A.C程序可以由多個程序文件組成

B.一個c語言程序只能實現(xiàn)一種算法

C.c程序可以由一個或多個函數(shù)組成,

D.一個C函數(shù)可以單獨作為一個C程序文件存在

70.

71.下列選項中屬于結(jié)構(gòu)化程序設(shè)計原則的是()。

A.可封裝

B.多態(tài)性

C.自下而上

D.逐步求精

72.有以下程序:

程序的運行結(jié)果是()。

A.1212B.117C.1111D.127

73.有下列程序:

main

{inty=10;

do{y--;}while(--y);

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

)

當(dāng)執(zhí)行程序時,輸出的結(jié)果是()。

A.-1B.1C.4D.0

74.設(shè)有定義"doublea[10],*s=a;",以下能夠代表數(shù)組元素a[3]的是()。

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

75.

有以下程序:

main

{intk=5;

while(--k)printf("%d",k-=3);

printf("\n");

}

執(zhí)行后的輸出結(jié)果是()。

A.1B.2C.4D.死循環(huán)

76.相對于數(shù)據(jù)庫系統(tǒng),文件系統(tǒng)的主要缺陷有數(shù)據(jù)關(guān)聯(lián)差、數(shù)據(jù)不一致性和()。

A.可重用性差B.安全性差C.非持久性D.冗余性

77.

78.

79.以下程序運行時,若從鍵盤輸入l02030<回車>,輸出的結(jié)果是()。

A.10200B.102030C.10300D.10030

80.

五、程序改錯題(1題)81.寫出下列程序的運行結(jié)果。

fun(inta,intb)

{if(a>b)return(a);

Elsereturn(b);}

main

{intx=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);printf(“%d\n”,r);}

六、程序設(shè)計題(1題)82.假定輸入的字符串只包含字母和“#”號,請編寫函數(shù)fun(),它的功能是:刪除字符串中所有的“#”號。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,若字符串中的內(nèi)容為“##w#e1##come###”,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是“welcome”。請勿改動main()函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。試題程序:

參考答案

1.B

2.C

3.C

4.B解析:選項B中每次執(zhí)行循環(huán)體都要執(zhí)行p=1,無法保存上次的運算結(jié)果,執(zhí)行完while循環(huán)后p=5。

5.D

6.D解析:“%”是求余運算符,其兩側(cè)的數(shù)值只能為整型,不能用于實型數(shù)據(jù)的運算。

7.B解析:常常一個程序中要用到多個棧,為了不發(fā)生上溢錯誤,就必須給每個棧分配一個足夠大的存儲空間。但實際中,很難準確地估計,若每個棧都分配過大的存儲空間,勢必造成系統(tǒng)空間緊張;若讓多個棧共用一個足夠大的連續(xù)存儲空間,則可利用棧的動態(tài)特性使他們的存儲空間互補。

8.B解析:函數(shù)getchar()的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個字符,且只能接受—個字符(回車符也算是—個字符),所以getchar()不能用宋讀入字符串。scanf()函數(shù)要求按—定的格式來輸入,若同時輸入多個字符串,則以空格或回車分割,所以空格不能被識別為—個字符,也就無法讀入空格字符。函數(shù)gets()的作用是從終端輸入—個字符串\u3000(包括空格)至字符數(shù)組,直到遇到換行符為止,所以可以用來鍵盤讀入空格字符。

9.A本題目中字符變量c1是字符'A'的ASCII碼加上4,即69所對應(yīng)的字符E'。字符變量c2是字符'A'的ASCII碼加上3,即68所對應(yīng)的字符D'。但是打印輸出時,c1以%c的格式輸出,所以是E,c2以%d的格式輸出,所以是68。

10.A解析:在C語言中所謂函數(shù)的遞歸是指在調(diào)用一個函數(shù)的過程中,又出現(xiàn)了直接或間接調(diào)用該函數(shù)本身,直接調(diào)用該函數(shù)本身的稱為函數(shù)遞歸,而間接調(diào)用該函數(shù)稱為函數(shù)的間接遞歸調(diào)用。由程序可以看出函數(shù)f(a,i,j)為一遞歸函數(shù),其功能是當(dāng)i<j時,將數(shù)組中的元素a[i]和a[j]交換,然后再調(diào)用函數(shù)f(a,i+1,j-1),將數(shù)組中a[i+1]和a[j--]交換,這樣一直遞歸到數(shù)組下標(biāo)i=j,可見該遞歸函數(shù)的作用是使數(shù)組中首尾元素依次互換。主函數(shù)中定義了一個長度為5的數(shù)組aa并初始化,然后調(diào)用f(a,0,4),將數(shù)組a中的元素依次互換,故最后for循環(huán)輸出的數(shù)組aa中各元素的值為5、4、3、2、1,所以,4個選項中選項A符合題意。

11.A解析:C程序由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本的結(jié)構(gòu)組成,這三種結(jié)構(gòu)可以組成任何復(fù)雜的C程序,即可以完成任何復(fù)雜的任務(wù)。

12.C解析:將變量a按位求反,再與b按位與,最后左移1位。9的二進制表示為00001001,020的二進制表示為00010000。a按位求反為11110110,再與b按位與結(jié)果為00010000,左移1位結(jié)果為00100000。按八進制輸出為040。

13.B

14.A解析:對線性表進行二分法檢索,要求線性表是按順序方式存儲的,并按關(guān)鍵碼值的大小排好序,而不是按關(guān)鍵碼的檢索頻率排序。

15.B

16.B

17.Bmain函數(shù)中,根據(jù)“b=2,c=3”可知表達式“b>=2&&c<=3”為真,flag值為1。由“a=1”和外層switch語句的case標(biāo)號沒有break語句,可知外層switch語句執(zhí)行case1,case0。對于外層case1:嵌套的switch語句根據(jù)“flag=1”執(zhí)行case1,執(zhí)行“printf(“%%”);”,輸出“%”,接著執(zhí)行break語句,結(jié)束內(nèi)層switch執(zhí)行外層;對于外層case0:嵌套的switch語句根據(jù)“c=3”執(zhí)行default語句,執(zhí)行“printf(“##”);”,輸出“##”。故本題答案為B選項。

18.C

試題2分析

結(jié)點的存儲順序和邏輯順序不一定一致,存儲空間也不一定連續(xù)。插入和刪除元素的時候,不需要移動表中的元素。

試題2答案

C

19.C

20.D

21.完善性軟件維護活動包括以下幾類:改正性維護,適應(yīng)性維護、完善性維護和預(yù)防性維護,完善性維護是指為了滿足用戶對軟件提出的新功能與性能要求,需要修改或再開發(fā)軟件,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性。

22.p!=NULL或P或p!=0或p!='0'p->next或(*p).nextp!=NULL或P或p!=0或p!='0'\r\np->next或(*p).next解析:程序中定義了一個結(jié)構(gòu)體類型名Node,其中定義了一個指向結(jié)點類型的指針next。接下來用Node定義了頭結(jié)點指針變量h和指向第一個結(jié)點的指針變量p,在滿足p未指向最后一個結(jié)點的空指針時(即為NULL),輸出p所指向結(jié)點的字符串,所以第一處應(yīng)填p!=NULL,然后將p指向下一個非空結(jié)點,所以第二處應(yīng)填P->next或與其等效的形式,反復(fù)執(zhí)行直到所有的結(jié)點都輸出。

23.順序存儲順序存儲

24.BB解析:因為c是字符類型變量,它只能接收一個字符,所以c=A,字符型變量在參與算術(shù)運算的時候是用其相應(yīng)的ASCII碼參與運算的,這樣++c得到字母B的ASCII碼,用putchar函數(shù)輸出是輸出其相應(yīng)的字符,所以是B。

25.30x30x解析:本題的參數(shù)傳遞屬于值傳遞,所以函數(shù)內(nèi)不能改變調(diào)用函數(shù)中的數(shù)據(jù)。

26.6363解析:滿二叉樹的第k層上有2k-1個結(jié)點,度為k的滿二叉樹一共有2k-1個結(jié)點,由二叉樹的性質(zhì)可知:除去第k層上的結(jié)點,其他所有結(jié)點都是度為2的結(jié)點,所以度為2的結(jié)點數(shù)為2k-1-2k-1,即27-1-27-1=63。

27.1030010300解析:本題的scanf()函數(shù)要求用戶輸入三個十進制整數(shù),但只接受第一和第三個到函數(shù)的第二和第三個參數(shù)所指的內(nèi)存地址中。所以本題的輸出為:10300。

28.k=5k=5解析:本題主要考查了函數(shù)的遞歸調(diào)用方法。g=0或\ue008g=1\ue009或g=2是遞歸的終止條件,然后用回代的方法從一個已知值推出下一個值,直到計算出最終結(jié)果。

29.1212解析:本題通過第一個for循坪將數(shù)組arr[0]-arr[9]分別賦值為0-9,通過第二個for循環(huán)的三次循環(huán)累加,求出結(jié)果為12,具體分析如下:

i=1:k=0+arr[1]+1即k=2;

i=2:k=2+arr[2]+2即k=6;

i=3:k=6+arr[3]+3即k=12;

30.4不定值4,不定值

31.模塊獨立原理模塊獨立原理

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

33.3!feof(f1)3\r\n!feof(f1)解析:要實現(xiàn)文件復(fù)制,需要指定源文件及目的文件,因此在命令行下執(zhí)行程序時至少要指定兩個參數(shù),加上程序名本身,故argc的值至少為3,因此第一空應(yīng)填3。while循環(huán)中語句fputc(fgetc(f1),f2);的目的是將f1中的字符依次讀出并寫入到f2對應(yīng)的文件中去,直至文件f1結(jié)束為止,因此第二空為!feof(f1)。

34.根結(jié)點根結(jié)點

35.2525解析:本題考查帶參數(shù)的宏的定義及相關(guān)運算。運算過程為:t=POW(x+y)=(2+3)*(2+3)=25。

36.abcdefglkjIhabcdefglkjIh解析:本題主要考查了字符變量可參與的運算。因為字符在計算機中是以ASCII碼的形式存放的,所以字符變量可看作整型變量來處理,如參與算術(shù)運算等,某字符的大寫字母的ASCII碼值比它對應(yīng)的小寫字母ASCII碼值小32。

37.0'或0或NULLn++或++n或n=n+1或n+=10'或0或NULL\r\nn++或++n或n=n+1或n+=1

38.double型或雙精度型double型或雙精度型解析:①先進行w*x的運算,先將字符型w轉(zhuǎn)換成整型,運算結(jié)果為整型;②再將w*x的結(jié)果與z相加,要先將第一步的整型轉(zhuǎn)換為double型,運算結(jié)果為double型;③最后將w*x+z的結(jié)果與y相減,要先將float型y轉(zhuǎn)換成double型,結(jié)果為double型。

39.int*int*解析:從題中代碼可知:z應(yīng)該是一個整型指針,因此應(yīng)填int*。

40.yearleap=1leap

41.A解析:本題首先定義兩個字符型指針變量p和q,通過malloc()函數(shù)申請20個字符的存儲空間,并把它的首地址賦給p,在把p的值賦給q,p和q指向同一個存儲區(qū)。在scanf()語句中讀取字符串到p和q指向的字符串,先把“abc”讀取到p指向的存儲區(qū)中,第一個空格是結(jié)束標(biāo)記,第二個空格是分隔符,再把“def”存放到q指向的存儲區(qū),把原先的內(nèi)容覆蓋。所以p和q指向的存儲區(qū)中內(nèi)容是“def”,所以最后輸出的def,def所以4個選項中A正確。

42.B解析:本題主要考查按位與(&)運算的知識點。“&”是對兩個運算量相應(yīng)的位進行邏輯與,“&”的規(guī)則與邏輯與“&&”相同。x=2的二進制為00000010,y=3的二進制為00000011,x&y=00000010,轉(zhuǎn)化為十進制即為2。

43.D解析:程序不僅是編寫完就結(jié)束了,為了測試和維護程序,往往還有其他人閱讀和跟蹤程序,因此程序設(shè)計的風(fēng)格應(yīng)該強調(diào)簡單和清晰,即程序的易讀性,“清晰第一,效率第二”。

44.A解析:p是指向結(jié)構(gòu)aa的結(jié)構(gòu)指針,++(p->x)是對p的x成員的值進行加1。p=aa使得p指向aa的首地址,p->x的值為50,那么++(p->X)就等于51。

45.BB)【解析】在關(guān)系表中,每一列稱為一個屬性,對應(yīng)表中的一個字段;每一行稱為一個元組,對應(yīng)表中的一條記錄。

46.C解析:a數(shù)組存放的是字符串,系統(tǒng)會自動在字符串的最后加上一個'\\0',所以a數(shù)組的長度為4,而b數(shù)組的長度為3,故a數(shù)組長度大于b數(shù)組長度。

47.D解析:在結(jié)構(gòu)化程序設(shè)計中,通常采取自頂向下、逐步求精的方法,尤其是在詳細設(shè)計和編碼階段,其總的思想就是先全局后局部、先整體后細節(jié)、先抽象后具體、程序自頂向下、逐步細化。而篩選法、遞歸法和歸納法指的都是程序的某種具體算法。逐步求精法是結(jié)構(gòu)化程序設(shè)計中很重要的思想,一定要牢記!

48.A解析:switch語句的條件是“a%3=15%3=0”,所以執(zhí)行case0后面的語句,m++;m=1,然后就執(zhí)行break,跳出switch語句,所以最后輸出的m的值為1。注意:switch嵌套語句的使用。

49.A

50.B

51.A解析:函數(shù)聲明是對所用到的函數(shù)的特征進行必要的聲明,編譯系統(tǒng)以函數(shù)聲明中給出的信息為依據(jù),對調(diào)用表達式進行檢測,以保證調(diào)用表達式與函數(shù)之間的參數(shù)正確傳遞。函數(shù)聲明的一般格式為:

類型標(biāo)識符函數(shù)名(類型標(biāo)識符形參,…);

這些信息就是函數(shù)定義中的第一行的內(nèi)容。這里形參的名字是不重要的,重要的是類型標(biāo)識符,函數(shù)聲明中也可以不寫形參名只寫該形參的聲明類型,但不能只寫形參名而不寫該形參的類型。本題中,選項A中doublemyadd(doublea,b),沒寫出形參b的類型。

52.D解析:本題考查了考生對字符串常量的理解。字符串常量是一段以雙引號括起來的字符序列,它既可以出現(xiàn)在對字符數(shù)組的初始化中,也可以出現(xiàn)在表達式中。當(dāng)它用于對字符數(shù)組的初始化時,應(yīng)注意系統(tǒng)自動為其添加的結(jié)束標(biāo)志'\\0'。而當(dāng)它出現(xiàn)在表達式中時,應(yīng)該將其看作一個constchar*類型的指針常量。在選項A中,首先定義了一個字符指針sp,然后將一個字符串賦給甲所指的地址,這是錯誤的。因為sp是一個未經(jīng)初始化的野指針,不知其指向哪兒,往一個不確定的地址中寫數(shù)據(jù)很容易讓程序出錯。選項B首先定義了一個字符數(shù)組,然后將一個字符串賦給數(shù)組名,這是錯誤的。因為數(shù)組名是一個指針常量,不可以被改變。選項C首先定義了一個字符數(shù)組,然后將一個字符串賦給數(shù)組的第一個元素,這也是錯誤的。因為字符串在表達式中相當(dāng)于一個常字符指針,將一個指針值賦給一個字符型變量是行不通的。選項D是定義一個字符指針sp,同時使其指向一個字符串常量,即將一個常字符型指針賦給sp。這是可行的。所以,4個選項中選項D符合題意。

53.B解析:C語言函數(shù)中的參數(shù)傳遞方式有傳值與傳址兩種方式,傳值方式是指將實參的值復(fù)制一份傳遞給形參,而傳址方式是指將實參的變量地址傳遞給形參,也就是實參的引用。

54.B解析:改變文件位置的指針函數(shù)fseek()的調(diào)用形式為:fseek(fp,offset,position);。fseek函數(shù)參數(shù)說明:“fp”是指向該文件的文件型指針;“offset'’為位移量,指從起始點position.到要確定的新位置的字節(jié)數(shù)。也就是以起點為基準,向前移動的字節(jié)數(shù)。ANSIC要求該參數(shù)為長整型量;“position”為起始點,指出以文件的什么位置為基準進行移動,position的值用整型常數(shù)表示,“0”表示文件的開頭,“1”表示文件的當(dāng)前位置,“2”表示文件的末尾。

55.C解析:本題中char*p=a+5;即相當(dāng)于p=&a[5],而--p,是先要減1,則printf語句要輸出的值就是a[4]。

56.B解析:在對程序進行測試時會發(fā)現(xiàn)錯誤,這就要進行程序調(diào)試(排錯)。程序調(diào)試活動由三部分組成:一是錯誤定位,根據(jù)錯誤的外部表現(xiàn)形式,確定程序中出錯的位置,找出錯誤的內(nèi)在原因;二是對程序進行修改,排除這個錯誤;三是進行回歸測試,防止引進新的錯誤。所以程序調(diào)試的目的就是診斷和改正程序中的錯誤。軟件調(diào)試不能改善軟件的性能,也不能挖掘軟件的潛能。

57.C解析:int型、float型、double型的數(shù)據(jù)可以混合,要先轉(zhuǎn)換成同一類型再運算。10+‘a(chǎn)’運算后值的類型為int型,i*f運算后值的類型為double型,最后表達式值的類型為double型。

58.B解析:本題中,“%d%d%d”表示按整數(shù)輸入數(shù)據(jù),輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可以用回車鍵或Tab鍵。選項B)中不應(yīng)該使用逗號。

59.D解析:在C語言中,數(shù)組元素下標(biāo)是從0開始的;指針變量p指向數(shù)組的首地址。for循環(huán)語句中,指針變量p始終指向數(shù)組的首地址,因而執(zhí)行循環(huán)賦值語句后數(shù)組各元素的值均變?yōu)?。

60.B解析:二維數(shù)組的元素可以看成是按矩陣形式存放的,總是先存放第一行的元素,再存放第二行的元素。數(shù)組第一維的下標(biāo)是i,說明它前面還有i行,有i*m個元素,數(shù)組第二維的下標(biāo)是j,說明它前面還有j列,有j個元素,所以共有i*m+j個元素。

61.C

\n本題考查if…else語句。第一個if語句,先判斷條件,發(fā)現(xiàn)a<b條件成立,則執(zhí)行第二個if語句,再判斷條件,發(fā)現(xiàn)b<0條件不成立,則執(zhí)行與其配對的else語句c++,c自加1,得c=5。

\n

62.A解析:對線性表進行二分法檢索,要求線性表是按順序方式存儲的,并按關(guān)鍵碼值的大小排好序,而不是按關(guān)鍵碼的檢索頻率排序。

63.AR—s表示屬于R但不屬于s,R—(R—S)表示屬于R但不屬于(R—s),即相當(dāng)于Rns。

64.A

65.C因為一個人可以操作多個計算機,而一臺計算機又可以被多個人使用,所以兩個實體之間是多對多的關(guān)系。

66.A

67.B本題考查函數(shù)的輸出格式。在printf函數(shù),格式說明符中有兩個“%”說明;將第1個%后面的字符原樣輸出,并不輸出其對應(yīng)r的變量值。

68.C

69.B在一個C語言程序中可以進行多種算法的實現(xiàn),對算法的個數(shù)沒有規(guī)定,所以B錯誤。

70.C

71.D模塊化、自頂向下、逐步求精和限制使用goto語句是結(jié)構(gòu)化程序設(shè)計的原則。因此答案明顯為D.逐步求精。

72.B根據(jù)宏替換的替換規(guī)則,我們可知,

73.A

\n本題考查do-while循環(huán)。當(dāng)--y是0(即y是o)時結(jié)束循環(huán),輸出--y,先將y的值減1再輸出Y的值。

74.B\n用帶下標(biāo)的指針變量引用一維數(shù)組元素若有以下定義和語句:“int*P,s[10],i;P=s}”,且o≤i<10,可以用&.s[i]、s+i和p+i三種表達式來表示s[i]的地址。同時可以用s[i]、*(s+i)和*(p+i)三種表達式來表示數(shù)組元素s[i]。

\n

75.A解析:因為在while循環(huán)的循環(huán)條件中,一運算符是前綴形式,所以表達式—k的值是k自減之后的值。程序開始時,將k的值初始化為5,然后進入while循環(huán),因為—k的值為4(非零),所以執(zhí)行循環(huán)體輸出k-=3的值1,此時k的值也變?yōu)?。第2次執(zhí)行循環(huán)條件,—k的值為0,所以循環(huán)結(jié)束。因此最后輸出的結(jié)果是1,故應(yīng)該選擇A。

76.D解析:文件系統(tǒng)所管理的數(shù)據(jù)文件基本上是分散的、相互獨立的,因此相對于數(shù)據(jù)庫系統(tǒng),以此為基礎(chǔ)的數(shù)據(jù)處理存在3個缺點,數(shù)據(jù)冗余大、數(shù)據(jù)的不一致性、程序與數(shù)據(jù)的相互依賴(簡稱為數(shù)據(jù)依賴)。注意:文件系統(tǒng)和數(shù)據(jù)庫系統(tǒng)各自的特點,人工管理階段及數(shù)據(jù)庫系統(tǒng)三代的特點。

77.B

78.D

79.C根據(jù)scanf函數(shù)附加的格式說明字符,可知%后的”*”是附加說明符,用來表示跳過它相應(yīng)的數(shù)據(jù),所以本題中忽略第2個數(shù)據(jù)的輸入,則i=10,j=30,k的值不變,還是0,所以輸出結(jié)果是l0300。

80.D

81.

82.

【解析】在while循環(huán)中,利用if判斷表達式中每一個字符是否為“#”,如果不是,將其復(fù)制到字符串,否則跳過,這就實現(xiàn)了函數(shù)的功能。

(1)首先利用工作指針指向字符串,當(dāng)指針不指向串尾時,就對字符串進行循環(huán)判斷。

(2)在循環(huán)中利用if判斷表達式字符是否為“#”,如果不是,將其復(fù)制到字符串,否則跳過。

(3)所有字符處理完后,記得在新串s的末尾加上結(jié)束符“ˊ\0ˊ”。

2021-2022年浙江省杭州市全國計算機等級考試C語言程序設(shè)計學(xué)校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.以下敘述中不正確的是()。

A.在一個函數(shù)中,可以有多條return語句

B.函數(shù)的定義不能嵌套,但函數(shù)的調(diào)用可以嵌套

C.函數(shù)必須有返回值

D.不同的函數(shù)中可以使用相同名字的變量

3.設(shè)”inta=15,b=26;”,則”printf(“%d,%d”,a,b);”的輸出結(jié)果是()。

A.15B.26,15C.15,26D.26

4.若變量已正確定義,要求程序段完成5!的計算,不能完成此操作的程序段是______。

A.for(i=1,p=1;i<=5;i++)p*=i;

B.for(i=1;i<=5;i++){p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i;i++;}

D.i=1;p=1;do{p*=i;i++;}while(i<=5);

5.數(shù)字字符“2”的ASCII碼為十進制數(shù)50,數(shù)字字符“5”的ASCII碼為十進制數(shù)()

A.52B.55C.54D.53

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

A.C程序中的#include和#define行均不是C語句

B.除逗號運算符外,賦值運算符的優(yōu)先級最低

C.C程序中,j++;是賦值語句

D.C程序中,+、-、*、/、%是算術(shù)運算符,可用于整型和實型數(shù)的運算

7.由兩個棧共享一個存儲空間的好處是______。

A.減少存取時間,降低下溢發(fā)生的幾率

B.節(jié)省存儲空間,降低上溢發(fā)生的幾率

C.減少存取時間,降低上溢發(fā)生的幾率

D.節(jié)省存儲空間,降低下溢發(fā)生的幾率

8.若要求從鍵盤讀入含有空格字符的字符串,應(yīng)該使用函數(shù)______。A.getc()B.gets()C.getchar()D.scanf()

9.有以下程序:#includeMain(){charc1,c2;c1='A'+'8'-'4';c2='A'+'8'-'5';printf("%c,%d\n",c1,c2);}已知字母A的ASCII碼為65,程序運行后的輸出結(jié)果是()。A.E,68.B.D.69C.E,DD.輸出無定值

10.有以下程序:voidf(inta[],inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main(){inti,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++)printf("%d,",aa[i]);printf("\n");}執(zhí)行后輸出結(jié)果是()。

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

11.結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成,三種基本結(jié)構(gòu)組成的算法A.可以完成任何復(fù)雜的任務(wù)B.只能完成部分復(fù)雜的任務(wù)C.只能完成符合結(jié)構(gòu)化的任務(wù)D.只能完成一些簡單的任務(wù)

12.下列程序段的輸出結(jié)果是()。chara=9,b=020;prihtf("%o\n",~a&b<<1);

A.100000B.8C.40D.77

13.以下程序是用來計算兩個非負數(shù)之間的最大公約數(shù):我們假設(shè)x,y中最大的那個數(shù)的長度為n,基本運算時間復(fù)雜度為O(1),那么該程序的時間復(fù)雜度為()A.O(1)B.O(logn)C.O(n)D.O(n^2)

14.對線性表進行二分法檢索,其前提條件是()。

A.線性表以順序方式存儲,并按關(guān)鍵碼值排好序

B.線性表以順序方式存儲,并按關(guān)鍵碼的檢索頻率排好序

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

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

15.

16.帶頭結(jié)點的單鏈表head為空的判定條件是()。

A.head=NULLB.head→next=NULLC.head→next=headD.head!=NULL

17.有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3;charflag;flag=b>=2&&c<=3;switch(a){ case1:switch(flag) { case0:printf(“**”);break; case1:printf(“%%”);break; } case0:switch(c) { case1:printf(“$$”);break; case2:printf(“&&”);break; default:printf(“##”); }}printf(“\n”);}程序運行后的輸出結(jié)果是()。

A.**$$B.%##C.%&&D.**##

18.下列關(guān)于線性鏈表的敘述中,正確的是()A.各數(shù)據(jù)結(jié)點的存儲空間可以不連續(xù),但它們的存儲順序與邏輯順序必須一致

B.各數(shù)據(jù)結(jié)點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續(xù)

C.進行出入與刪除時,不需要移動表中的元素

D.以上三種說法都不催

19.在以下一組運算中,優(yōu)先級最高的運算符是()

A.<=B.=C.%D.&&

20.

二、2.填空題(20題)21.軟件維護活動包括以下幾類:改正性維護、適應(yīng)性維護、【】維護和預(yù)防性維護。

22.以下程序中函數(shù)fun()的功能是構(gòu)成一個如圖所示的帶頭結(jié)點的單向鏈表,在結(jié)點的數(shù)據(jù)域中放入了具有兩個字符的字符串。函數(shù)disp的功能是顯示輸出該單向鏈表中所有結(jié)點中的字符串。請?zhí)羁胀瓿珊瘮?shù)disp。

#include<atdio.h>

typedefstructnode/*鏈表結(jié)點結(jié)構(gòu)*/

{charsub[3];

structnode*next;

}Node

Node~un(chars)/*建立鏈表*/

{......}

voiddisp(Node*h)

{Node*Ps

p=h->next;

while(【】)

{printf("%s\n",p->suh);p=【】;}

}

main()

{Node*hd;

hd=fun();disp(hd);prinff("\n");

23.性表的多種存儲結(jié)構(gòu)中,最簡單的方法是【】。

24.有下列程序;

#include<stdio.h>

main()

{charc;

while((c=getchar())!=',')putchar(++C);

}

程序運行時,如果從鍵盤輸入:A,B,<CR>,則輸出結(jié)果為______。

25.閱讀下列程序,則程序的輸出結(jié)果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c='y';}

26.在深度為7的滿二叉樹中,度為2的節(jié)點個數(shù)為()。

27.以下程序運行時若從鍵盤輸入:102030<回車>。輸出結(jié)果是【】。

#include<stdio.h>

main()

{

inti=0,j=0,k=0;

scanf("%d%*d%d",&i,&j,&k);

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

}

28.以下程序的運行結(jié)果是【】。

#include<stdio.h>

longfib(intg)

{switch(g)

{case0:return0;

case1:

case2:return1;}

return(fib(g-1)+fib(g-2));}

main()

{longk;

k=fib(5);

printf("k=%5ld\n",k);}

29.下面程序的輸出是【】。

main()

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

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

arr[i]=i;

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

k+=arr[i]+i;

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

30.若有如下程序:

main()

{ints[]={1,2,3,4,5,6},*p=s;

printf("%d,%d\n",*(p+3),*(p+6));}

則程序運行后的輸出結(jié)果是【】。

31.在進行軟件結(jié)構(gòu)設(shè)計時,應(yīng)遵循的最主要原理是【】。

32.若fp已正確定義為一個文件指針,d1.dat為二進制文件,請?zhí)羁?,以便為“讀”而打開此文件:

fp=fopen(【】);。

33.實現(xiàn)程序可將磁盤中的一個文件復(fù)制到另一個文件中,兩個文件的文件名在可執(zhí)行命令的命令行中(相當(dāng)于copy命令),假定文件在當(dāng)前目錄下。請補全程序。

#include<stdio.h>

voidmain(intargc,char*argv[])

{FILE*f1,*f2;

if(argc<【】)

{printf("parametererror!\n");exit(0);}

f1=fopen(argv[1],"r");

f2=fopen(argv[2],"w");

while(【】)fputc(fgetc(f1),f2);

fclose(f1);

fclose(f2);

}

34.在樹形結(jié)構(gòu)中,沒有前件的結(jié)點是()。

35.下列程序的運行結(jié)果是______。

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

36.下面程序的運行結(jié)果是【】。

#include<stdio.h>

#defineSIZE12

main()

{chars[SIZE];intI;for(I=0;I<SIZE;I++)s[I]=′A′+I+321;

sub(s,7,SIZE-1);

for(I=0;I<SIZE;I++)printf("%c",s[I]);

printf("\n");}

sub(char*a,intt1,intt2)

{charch;

while(t1<t2)

{ch=*(a+t1);

*(a+t1)=*(a+t2);

*(a+t2)=ch;

t1++;t2--;}}

37.以下函數(shù)把b字符串連接到a字符串的后面,并返回a中新字符串的長度。請?zhí)羁铡?/p>

strcen(chara[],charb[])

{intnum=0,n=0;

while(*(a+num)!=【】)num++;

while(b[n]){*(a+num)=b[n];num++;【】;}

return(num);

}

38.設(shè)有以下變量定義,并已賦確定的值,

charw;intx;floaty;doubleZ;

則表達式:w*x+z-y所求得的數(shù)據(jù)類型為上【】。

39.以下函數(shù)用來求出兩整數(shù)之和,并通過形參將結(jié)果傳回,請?zhí)羁铡?/p>

voidfunc(intx,inty,【】z)

{*z=x+y;}

40.下列程序可以判斷輸入的年份是不是閏年。

#include

main()

{int【】,leap;

scanf("%d",&year);

if(year%4)

leap=0;

elseif(year%lO0)

【】;

elseif(year%400)

leap=0;

else

leap=1;

if(【】)

printf("%d年是閏年",year);

else

printf("%d年不是閏年\n",year);

}

三、1.選擇題(20題)41.有以下程序:#include<stdlib.h>main(){char*p,*q;p=(char*)malloc(sizeof(char)*20);q=p;scanf("%s%s",p,q);printf("%s%s\n",p,q);}若從鍵盤輸入:abcdef<回車>,則輸出結(jié)果是()。

A.defdefB.abcdefC.abedD.dd

42.若x=2,y=3,則x&y的結(jié)果是()。

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

43.結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是()。

A.程序的規(guī)模B.程序的效率C.程序設(shè)計語言的先進性D.程序的易讀性

44.以下程序的輸出是______。structst{intx;int*y;}*p;intdt[4]={10,20,30,40};structstaa[4]={50,&dt[0],60,&dt[1],60,&dt[2],60,&dt[3]};main(){p=aa;printf("%d\n",++(p->X));}

A.51B.11C.50D.60

45.關(guān)系表中的每一行記錄稱為一個()。

A.字段B.元組C.屬性D.關(guān)鍵碼

46.已有定義:chara[]="xyz",b[]={'x','y','z'};,以下敘述中正確的是

A.數(shù)組a和b的長度相同B.a數(shù)組長度小于b數(shù)組長度C.a數(shù)組長度大于b數(shù)組長度D.上述說法都不對

47.結(jié)構(gòu)化程序設(shè)計的一種基本方法是()

A.篩選法B.遞歸法C.歸納法D.逐步求精法

48.以下程序的輸出結(jié)果是#include<stdio.h>main(){inta=15/b=21,m=0;switch(a%3){case0:m++;break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf("%d\n",m);}

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

49.當(dāng)下面的程序運行后,變量c的值為______。main(){inta=45,b=27,c=0;c=max(a,b);}intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}

A.45B.27C.0D.72

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

A.a=a+7;B.a=7+b+c,a++C.int(12.3%4)D.a=a+7=c+b

51.若程序中定義了以下函數(shù):doublemyadd(doublea,doubleb){return(a+b);}并將其放在調(diào)用語句之后,則在調(diào)用之前應(yīng)該對函數(shù)進行說明,以下選項中錯誤的說明是()。

A.doublemyadd(doublea,b);

B.doublemyadd(double,double);

C.doublemyadd(doubleb,doublea);

D.doublemyadd(doublex,doubley);

52.以下語句或語句組中,能正確進行字符串賦值的是______。A.char*sp;*sp="right!";

B.chars[10];s="right!";

C.chars[10];*s="right!";

D.char*sp="right!";

53.在調(diào)用函數(shù)時,如果實參是簡單變量,它與對應(yīng)形參之間的數(shù)據(jù)傳遞方式是______。

A.地址傳遞B.單向值傳遞C.由實參傳紿形,再由形參傳回實參D.傳遞方式由用戶指定

54.函數(shù)fseek的正確調(diào)用形式是()。

A.fseek(位移量,起始點,文件類型指針);

B.fseek(文件類型指針,位移量,起始點);

C.fseek(文件類型指針,起始點,位移量);

D.fseek(起始點,位移量,文件類型指針);

55.下列程序的輸出結(jié)果是______。main(){chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);}

A.非法B.a[4]的地址C.5D.3

56.軟件調(diào)試的目的是______。

A.發(fā)現(xiàn)錯誤B.改正錯誤C.改善軟件的性能D.挖掘軟件的潛能

57.設(shè)變量a是int型,f是float型,i是double型,則表達式10+'a'+i*f的值的數(shù)據(jù)類型為()。

A.intB.floatC.doubleD.不確定

58.若變量已正確說明為int類型,要通過語句scanf("%d%d%d",&a,&b,&c);給a賦值3,b賦值5,c賦值8,下面不正確的輸入形式是()。

A.3<回車>5<回車>8<回車>B.3,5,8<回車>C.3<回車>58<回車>D.35<回車>8<回車>

59.若有以下程序:#include<stdio.h>inta[]={2,4,6,8};main(){inti;int*p=a;for(i=0;i<4;i++)a[i]=*p;printf("%d\n",a[2]);}上面程序的輸出結(jié)果是()。

A.6B.8C.4D.2

60.若二維數(shù)組a有m列,則在a[i][j]前的元素個數(shù)為()。

A.j*m+iB.i*m+jC.j*m+i+1D.i*m+j+1

四、選擇題(20題)61.

下列程序的運行結(jié)果是()。

#include<stdio.h>

main

{inta=2,b=3,c=4:

if(a<b)

if(b<0)C=0:

elsec++;

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

}

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

62.對線性表進行二分法檢索,其前提條件是()。

A.線性表以順序方式存儲,并按關(guān)鍵碼值排好序

B.線性表以順序方式存儲,并按關(guān)鍵碼的檢索頻率排好序

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

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

63.設(shè)有關(guān)系R和S,關(guān)系代數(shù)表達式為R一(R—S)表示的是()。

A.R∩SB.R—SC.RUSD.R÷S

64.

65.一個工作人員可以使用多臺計算機,而一臺計算機可被多個人使用,則實體工作人員與實體計算機之間的聯(lián)系是()。

A.一對一B.一對多C.多對多D.多對一

66.

67.若有下列定義(設(shè)int類型變量占2個字節(jié)):inti=8,j=9;則下列語句:printf("i=%%d,j=%%d\n",i,j);輸出的結(jié)果是()。A.i=8,j=9B.i=%d,j=%dC.i=%8,j=%9D.8,9

68.

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

A.C程序可以由多個程序文件組成

B.一個c語言程序只能實現(xiàn)一種算法

C.c程序可以由一個或多個函數(shù)組成,

D.一個C函數(shù)可以單獨作為一個C程序文件存在

70.

71.下列選項中屬于結(jié)構(gòu)化程序設(shè)計原則的是()。

A.可封裝

B.多態(tài)性

C.自下而上

D.逐步求精

72.有以下程序:

程序的運行結(jié)果是()。

A.1212B.117C.1111D.127

73.有下列程序:

main

{inty=10;

do{y--;}while(--y);

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

)

當(dāng)執(zhí)行程序時,輸出的結(jié)果是()。

A.-1B.1C.4D.0

74.設(shè)有定義"doublea[10],*s=a;",以下能夠代表數(shù)組元素a[3]的是()。

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

75.

有以下程序:

main

{intk=5;

while(--k)printf("%d",k-=3);

printf("\n");

}

執(zhí)行后的輸出結(jié)果是()。

A.1B.2C.4D.死循環(huán)

76.相對于數(shù)據(jù)庫系統(tǒng),文件系統(tǒng)的主要缺陷有數(shù)據(jù)關(guān)聯(lián)差、數(shù)據(jù)不一致性和()。

A.可重用性差B.安全性差C.非持久性D.冗余性

77.

78.

79.以下程序運行時,若從鍵盤輸入l02030<回車>,輸出的結(jié)果是()。

A.10200B.102030C.10300D.10030

80.

五、程序改錯題(1題)81.寫出下列程序的運行結(jié)果。

fun(inta,intb)

{if(a>b)return(a);

Elsereturn(b);}

main

{intx=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);printf(“%d\n”,r);}

六、程序設(shè)計題(1題)82.假定輸入的字符串只包含字母和“#”號,請編寫函數(shù)fun(),它的功能是:刪除字符串中所有的“#”號。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,若字符串中的內(nèi)容為“##w#e1##come###”,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是“welcome”。請勿改動main()函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。試題程序:

參考答案

1.B

2.C

3.C

4.B解析:選項B中每次執(zhí)行循環(huán)體都要執(zhí)行p=1,無法保存上次的運算結(jié)果,執(zhí)行完while循環(huán)后p=5。

5.D

6.D解析:“%”是求余運算符,其兩側(cè)的數(shù)值只能為整型,不能用于實型數(shù)據(jù)的運算。

7.B解析:常常一個程序中要用到多個棧,為了不發(fā)生上溢錯誤,就必須給每個棧分配一個足夠大的存儲空間。但實際中,很難準確地估計,若每個棧都分配過大的存儲空間,勢必造成系統(tǒng)空間緊張;若讓多個棧共用一個足夠大的連續(xù)存儲空間,則可利用棧的動態(tài)特性使他們的存儲空間互補。

8.B解析:函數(shù)getchar()的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個字符,且只能接受—個字符(回車符也算是—個字符),所以getchar()不能用宋讀入字符串。scanf()函數(shù)要求按—定的格式來輸入,若同時輸入多個字符串,則以空格或回車分割,所以空格不能被識別為—個字符,也就無法讀入空格字符。函數(shù)gets()的作用是從終端輸入—個字符串\u3000(包括空格)至字符數(shù)組,直到遇到換行符為止,所以可以用來鍵盤讀入空格字符。

9.A本題目中字符變量c1是字符'A'的ASCII碼加上4,即69所對應(yīng)的字符E'。字符變量c2是字符'A'的ASCII碼加上3,即68所對應(yīng)的字符D'。但是打印輸出時,c1以%c的格式輸出,所以是E,c2以%d的格式輸出,所以是68。

10.A解析:在C語言中所謂函數(shù)的遞歸是指在調(diào)用一個函數(shù)的過程中,又出現(xiàn)了直接或間接調(diào)用該函數(shù)本身,直接調(diào)用該函數(shù)本身的稱為函數(shù)遞歸,而間接調(diào)用該函數(shù)稱為函數(shù)的間接遞歸調(diào)用。由程序可以看出函數(shù)f(a,i,j)為一遞歸函數(shù),其功能是當(dāng)i<j時,將數(shù)組中的元素a[i]和a[j]交換,然后再調(diào)用函數(shù)f(a,i+1,j-1),將數(shù)組中a[i+1]和a[j--]交換,這樣一直遞歸到數(shù)組下標(biāo)i=j,可見該遞歸函數(shù)的作用是使數(shù)組中首尾元素依次互換。主函數(shù)中定義了一個長度為5的數(shù)組aa并初始化,然后調(diào)用f(a,0,4),將數(shù)組a中的元素依次互換,故最后for循環(huán)輸出的數(shù)組aa中各元素的值為5、4、3、2、1,所以,4個選項中選項A符合題意。

11.A解析:C程序由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本的結(jié)構(gòu)組成,這三種結(jié)構(gòu)可以組成任何復(fù)雜的C程序,即可以完成任何復(fù)雜的任務(wù)。

12.C解析:將變量a按位求反,再與b按位與,最后左移1位。9的二進制表示為00001001,020的二進制表示為00010000。a按位求反為11110110,再與b按位與結(jié)果為00010000,左移1位結(jié)果為00100000。按八進制輸出為040。

13.B

14.A解析:對線性表進行二分法檢索,要求線性表是按順序方式存儲的,并按關(guān)鍵碼值的大小排好序,而不是按關(guān)鍵碼的檢索頻率排序。

15.B

16.B

17.Bmain函數(shù)中,根據(jù)“b=2,c=3”可知表達式“b>=2&&c<=3”為

溫馨提示

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

評論

0/150

提交評論