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

下載本文檔

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

文檔簡介

2021-2022年黑龍江省齊齊哈爾市全國計算機(jī)等級考試C語言程序設(shè)計學(xué)校:________班級:________姓名:________考號:________

一、單選題(20題)1.有如下程序:

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn(2);

}

main()

{printf("%d\n",fib(3));}

該程序的輸出結(jié)果是A.A.2B.4C.6D.8

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

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

3.

A.if(x>0)y=1;elseif(x==0)y=0;elsey=-1;

B.y=0;if(x>0)y=1;elseif(x<0)y=-1;

C.y=0;if(x>=0)if(x>0)y=1;e1sey=-1;

D.if(x>=0)if(x>0)y=1;elsey=0:elsey=-1;

4.對于如圖所示二叉樹采用中根遍歷,正確的遍歷序列應(yīng)為()A.ABCDEFB.ABECDFC.CDFBEAD.CBDAEF

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

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

6.若用一個大小為6的數(shù)值來實現(xiàn)循環(huán)隊列,且當(dāng)前rear和front的值分別為0和3,當(dāng)從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為()。

A.1和5B.2和4C.4和2D.5和1

7.設(shè)q1和q2是指向一個float型一維數(shù)組的指針變量,k為float型變量,則不能正確執(zhí)行的語句是()。

A.k=*q1+*q2;B.q1=k;C.q1=q2;D.k=*q1*(*q2);

8.

9.下列程序段輸出的字符串長度為()。printf("\\aaa\'ccc\bddd\'");

A.11B.12C.13D.17

10.程序運(yùn)行后的輸出結(jié)果是()。#include<stdio.h>#include<stdlib.h>main(){int*a,*b,*c;a=b=c(int*)malloc(sizeof(int));*a=1;*b=2;*c=3;a=b;printf(“%d,%d,%d\n”,*a,*b,*c);}A.1.1.3B.2.2.3C.1.2.3D.3.3.3

11.

12.順序查找不論在順序線性表中還是在鏈?zhǔn)骄€性表中的時間復(fù)雜度為()。

A.O(n)B.O(n^2)C.O(n^1/2)D.O(1og2n)

13.有以下程序:#include<stdio.h>voidmain(){doublex=3.14159;printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);}程序運(yùn)行后的輸出結(jié)果是()。

A.3.142000B.3.141000C.3.143000D.3.140000

14.有下列程序:#include<stdio.h>#include"string.h"voidtim(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的運(yùn)行結(jié)果是()。A.xy,aaaaccB.aaaacc,xyC.bcc,aabccD.aabcc,bcc

15.堆排序是一種()排序。

A.插入B.選擇C.交換D.歸并

16.當(dāng)變量c的值不為2、4、6時,值為“真”的表達(dá)式是()。

A.(c>=2&&c<=6)&&(c%2!=1)

B.(c==2)||(c==4)||(c==6)

C.(c>=2&&c<=6)&&!(c%2)

D.(c>=2&&c<=6)||(c!=3)||(c!=5)

17.在面向?qū)ο蠓椒ㄖ校粚儆凇皩ο蟆被咎攸c的是A.一致性B.分類性C.多態(tài)性D.標(biāo)識唯一性

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

19.設(shè)棧S的初始狀態(tài)為空,6個元素入棧的順序為e1,e2,e3,e4,e5和e6。若出棧的順序是e2,e4,e3,e6,e5,el,則棧s的容量至少應(yīng)該是()。

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

20.以下定義語句中正確的是

A.inta=b=0;

B.charA=65+1,b='b';

C.noata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

二、2.填空題(20題)21.一個算法的空間復(fù)雜度是指該算法所耗費的【】。

22.【】是數(shù)據(jù)庫設(shè)計的核心。

23.下列程序利用指針將2個數(shù)按從大到小的順序輸出。

main()

{inta,b,【】;

printf("inputa,b:");

scanf("%d%d",&a,&b);

【】;

p2=&b;

if(a<b)

{p=p1;

p1=p2;

p2=p;

}

printf("a=%db=%d\n",a,b);

printf("max=%dmin=%d\n",【】);

24.軟件開發(fā)環(huán)境是全面支持軟件開發(fā)全過程的【】集合。

25.下列程序的輸出結(jié)果是【】。

voidfun(int*n)

{

while((*n)--);

printf("%d",++(*n));

}

main()

{inta=100;

fun(&a);

}

26.以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如:若輸入135則輸出531。請?zhí)羁铡?/p>

#include<stdio.h>

main()

{intn,s;

printf("Enteranumber:");scanf("%d",&n);

printf("Output:");

do

{s=n%10;printf("%d",s);[];}

while(n!=0);

printf("\n');

}

27.若有定義floatb[15],*p=b;,且數(shù)組b的首地址為200H,則p/13所指向的數(shù)組元素的地址為______。

28.以下程序運(yùn)行結(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[8],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

30.軟件維護(hù)活動包括以下幾類:改正性維護(hù)、適應(yīng)性維護(hù)、【】維護(hù)和預(yù)防性維護(hù)。

31.寫出下列程序的輸出結(jié)果______。

main()

{int=0;

while(n++<=1);

printf("%d,",n);

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

}

32.已有定義:double*p;,請寫出完整的語句,利用malloc函數(shù)使p指向一個雙精度型的動態(tài)存儲單元______。

33.數(shù)據(jù)庫是指按照一定的規(guī)則存儲在計算機(jī)中的【】的集合,它能被各種用戶共享。

34.執(zhí)行以下程序時,若輸入end<回車>,則輸出結(jié)果是【】。

main()

{charch[10]="Begin";

gets(&ch[1]);puts(ch);

}

35.按數(shù)據(jù)流的類型,結(jié)構(gòu)化設(shè)計方法有兩種設(shè)計策略,它們是變換分析設(shè)計和______。

36.有以下程序

voidf(inty,int*x)

{y=y+*x;*X=*X+y;}

main()

{intx=2,y=4;

f(y,&x);

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

}

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

37.執(zhí)行以下程序后的輸出結(jié)果是【】。

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

}

38.設(shè)有以下定義的語句:

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

p=a;

則*(*(P+2)+1)值為【】。

39.以下程序的輸出結(jié)果是【】。

#include<stdio.h>

main()

{ints[]={1,2,3,4},i;

intx=0;

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

{x=sb(s,x);

printf("%d",x);}

printf("\n");}

sb(s1,y)

int*s1,y;

{staticinti1=3;

y=s1[i1];

i1--;

return(y);}

40.若輸入tear、test、arj,則下列程序的運(yùn)行結(jié)果為【】。

main()

{char*strl[20],*str2[20],*str3[20];

charswap();

scanf("%s",str1);

scanf("%s",str2);

scanf("%s",str3);

if(strcmp(str1,str2)>0)swap(str1,str2);

if(strcmp(str1,str3)>0)swap(str1,str3);

if(strcmp(str2,str3)>0)swap(str2,str3);

printf("%s%s%s\n",str1,str2,str3);

}

charswap(p1,p2)

char*p1,*p2;

{char*p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);

}

三、1.選擇題(20題)41.下列對C語言字符數(shù)組的描述中正確的是

A.任何一個一維數(shù)組的元素在引用時,其下標(biāo)可以是整型、實型或字符型常量

B.一維數(shù)組的元素實質(zhì)上就是一個變量,代表內(nèi)存中的一個存儲單元

C.如果要引用數(shù)組中的每一個元素,則直接使用該數(shù)組名稱即使

D.以上都不對

42.若變量c為char類型,能正確判斷出c為小寫字母的表達(dá)式是______。

A.'a'<=c<='z'

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

C.('a'<=c)and('z'>=c)

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

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

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

44.下列關(guān)于棧的描述中錯誤的是()

A.棧是先進(jìn)后出的線性表B.棧只能順序存儲C.棧具有記憶作用D.對棧的插入與刪除操作中,不需要改變棧底指針

45.有如下程序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);}該程序的輸出結(jié)果是

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

46.能正確表示邏輯關(guān)系:"a≥10或a≤0"的C語言表達(dá)式是

A.a>=10ora<=0

B.a>=0|a<=10

C.a>=10&&a<=0

D.a>=10||a<=0

47.C語言中文件的存取方式()

A.只能順序存取B.只能隨機(jī)存取(或直接存取)C.可以順序存取,也可隨機(jī)存取D.只能從文件的開頭進(jìn)行存取

48.數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)之間的關(guān)系是()。

A.數(shù)據(jù)庫包括數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)

B.數(shù)據(jù)庫系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)

C.數(shù)據(jù)庫管理系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫系統(tǒng)

D.三者沒有明顯的包含關(guān)系

49.軟件工程的出現(xiàn)是由于()。A.A.程序設(shè)計方法學(xué)的影響B(tài).軟件產(chǎn)業(yè)化的需要C.軟件危機(jī)的出現(xiàn)D.計算機(jī)的發(fā)展

50.算法的時間復(fù)雜度是指______。

A.執(zhí)行算法程序所需要的時間B.算法程序的長度C.算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù)D.算法程序中的指令條數(shù)

51.若有定義inta=5,b=7;,則表達(dá)式a%=(b%2)運(yùn)算后,a的值為()。

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

52.6-5/2+1.2+5%2的值是()。

A.4.3B.4.8C.3.3D.3.8

53.若已定義x和y為double類型,則表達(dá)式x=1,y=x+5/2的值是______。

A.3B.4C.3D.3.5

54.設(shè)有定義:longx=123456L;,則以下能夠正確輸出變量x值的語句是()

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

B.printf("x=%ld\n",x);

C.printf("x=%8dL\n",x);

D.printf("x=%LD\n",x);

55.下面程序段的運(yùn)行結(jié)果是char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD")));

A.8B.12C.4D.7

56.下列程序段選擇項,使i的運(yùn)行結(jié)果為3的程序段是()。

A.inti=0,j=O;(i=2,(j++)+i);

B.inti=1,j=0;j=i=((i=3)*2);

C.inti=0,j=1;(j=1)?(i=1):(i=3);

D.inti=1,j=1;i+=j+=1;

57.軟件危機(jī)產(chǎn)生的原因從根本上說是()

A.軟件需求的增長超過軟件生產(chǎn)率的提高

B.軟件需求的增長小于軟件生產(chǎn)率的提高

C.軟件需求的減少大于軟件生產(chǎn)率的減少

D.軟件需求的減少小于軟件生產(chǎn)率的減少

58.下面能正確進(jìn)行字符串賦值操作的是()。

A.chars[5]={"ABCDE"};

B.chars[5]={'A','B','C','D','E'};

C.char*s;s="ABCDE";

D.char*s;scanf("%s",&s);

59.給出以下定義:charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};則正確的敘述為()。

A.數(shù)組x和數(shù)組y等價B.數(shù)組x和數(shù)組y的長度相同C.數(shù)組x的長度大于數(shù)組y的長度D.數(shù)組x的長度小于數(shù)組y的長度

60.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)/2的排序方法是()。

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

四、選擇題(20題)61.

62.

63.

64.下列選項中,能正確定義數(shù)組的語句是()。

A.

B.

C.

D.

65.

有以下程序:

intfun(intn)

{if(n==l)returnl;

elsereturn(n+fun(n一1)):

}

main

{intx;

scanf("%d",&x);x=fun(x);printf("%d\n",

x):

}

執(zhí)行程序時,給變量X輸入10,程序的輸出結(jié)果是()。

A.55B.54C.65D.45

66.設(shè)有條件表達(dá)式:(EXP)?i++;j--,則以下表達(dá)式中(EXP)完全等價的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

67.

68.

69.

70.

71.

72.有兩個關(guān)系R,S如下:

由關(guān)系R通過運(yùn)算得到關(guān)系s,則所使用的運(yùn)算為()。

A.選擇B.插入C.投影D.連接

73.在軟件生產(chǎn)過程中,需求信息的給出是______。A.A.程序員B.項目管理者C.軟件分析設(shè)計人員D.軟件用戶

74.(56)下列不屬于軟件調(diào)試技術(shù)的是()

A.強(qiáng)行排錯法

B.集成測試法

C.回溯法

D.原因排除法

75.

有下列程序段:

intn,t=1,S=0;

scanf("%d",&n);

do{s=s+t;t=t-2;while(t!=n);

為使此程序段不陷入循環(huán),從鍵盤輸入的數(shù)據(jù)應(yīng)該是()。

A.任意正奇數(shù)B.任意負(fù)偶數(shù)C.任意正偶數(shù)D.任意負(fù)奇數(shù)

76.若有定義語句:doublea,*p=&a;,以下敘述中錯誤的是()。A.定義語句中的*號是一個間址運(yùn)算符

B.定義語句中的*號是一個說明符

C.定義語句中的p只能存放double類型變量的地址

D.定義語句中,*p=&a把變量a的地址作為初值賦給指針變量P

77.設(shè)x為int型變量,則執(zhí)行以下語句后,x的值為()。x=10;x=x-=x-x;

A.10B.20C.40D.30

78.以下語句的執(zhí)行結(jié)果是()。

intm=0,s=1;

do{

s+=m++;

}while(m<6);

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

A.17B.16C.15D.18

79.

80.在黑盒測試方法中,設(shè)計測試用例的主要根據(jù)是()。

A.程序外部功能B.程序內(nèi)部邏輯C.程序數(shù)據(jù)結(jié)構(gòu)D.程序流程圖

五、程序改錯題(1題)81.下列給定程序中,函數(shù)proc()的功能是:從m個學(xué)生的成績中統(tǒng)計出低于平均分的學(xué)生人數(shù),人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲單元中。例如,輸入8名學(xué)生的成績:6070809065758595則低于平均分的學(xué)生人數(shù)為4(平均分為77.5)。實際輸入時學(xué)生數(shù)以“Enter”鍵作為結(jié)束,成績與成績之間也與Enter鍵作為分隔。請修改程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、程序設(shè)計題(1題)82.有一個一維數(shù)組,內(nèi)放10個學(xué)生成績,寫一個函數(shù),求出平均分。

參考答案

1.B

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

3.C解析:選項A的意思是:在x>O情況下,y為1,否則,在x=O時,y為0,剩下x<O時,y為-1,滿足本題中函數(shù)的要求。選項B描述的意思是:初始化y的值為0,在x>O時,給y重新賦值為1,否則,在x<O時,給y重新賦值為-1,滿足本題中函數(shù)的要求。選項C描述的意思是:在x>=0情況下,如果x>O,則y為1,否則,即x==0時,y為-1;剩下的x<O時,y為0??梢姶鸢窩實現(xiàn)的結(jié)果不是給定的表達(dá)式。選項D中描述的意思是:在x>=0的情況下,如果x>O,就給y賦值為1,否則即x==0時給y賦值為0,在不是x>=0的其他情況下,就給y賦值為-1,滿足本題中函數(shù)的要求。所以4個選項中C為所選。

4.D

5.A

6.B

7.B解析:選項A)是將指針q1和q2所指向的變量值相加,然后賦給k;選項B)中,float型數(shù)據(jù)和指針型數(shù)據(jù)之間不能進(jìn)行賦值運(yùn)算:選項C)中,是兩個指針變量之間的賦值:選項D)中,是兩個指針型變量所指向的兩個float型數(shù)據(jù)相乘。

8.D

9.C解析:轉(zhuǎn)義字符有1個\\\\、2個\\'、1個\\b,普通字符有3個a、3個c、3個d,共13個字符。

10.D

11.C

12.A

13.A根據(jù)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性。表達(dá)式“int(x*1000+0.5)/(double)1000”,首先計算“x*1000”,由于x是double類型,1000是整型,所以“x*1000”的結(jié)果默認(rèn)是double類型,即3141.59,加0.5后再執(zhí)行int的強(qiáng)制轉(zhuǎn)換,結(jié)果為3142。分母“(double)1000”強(qiáng)制轉(zhuǎn)換為double類型,此時計算“3142/(double)1000”,3142需要轉(zhuǎn)換成double類型,然后除以1000,結(jié)果為3.142000,默認(rèn)保留小數(shù)點后6位。故本題答案為A選項。

14.A解析:從main函數(shù)入手,定義了指向字符串的指針數(shù)組,并賦予了初始值,調(diào)用fun()函數(shù),函數(shù)的功能是:比較數(shù)組中各個元素的長度,按元素長度從小到大排列數(shù)組元素,所以執(zhí)行fun(ss,5)函數(shù)后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},所以調(diào)用printf函數(shù)輸出ss[0],ss[4]的值分別為xy,aaaacc。

15.B解析:堆排序是一種選擇排序。選擇排序有直接選擇排序和堆排序兩種。

16.D邏輯或運(yùn)算中只要有一個運(yùn)算量為真,結(jié)果就為真。當(dāng)“c>=2&&c<=6”條件不成立時,c的值肯定不是2、3、4、5、6,“c!=3”與“c!=5”均成立,所以D選項的結(jié)果一定為真。故本題答案為D選項。

17.A對象具有如下特性:標(biāo)識唯一性、分類性、多態(tài)性、封裝性、模塊獨立性。

18.B棧是限定只能在表的一端進(jìn)行插入和刪除操作的線性表,入棧和出棧都是在棧頂進(jìn)行,它們的操作特點是先進(jìn)后出,因此具有記憶作用。??梢圆捎庙樞虼鎯?,也可以采用鏈?zhǔn)酱鎯Α?/p>

19.C

20.B解析:本題考查變量的定義方法。如果要一次進(jìn)行多個變量的定義,則在它們之間要用逗號隔開,因此選項A)和D)錯誤。在選項C)中,變量c是一個浮點型指針,它只能指向一個浮點型數(shù)據(jù),不能指向指針變量b,故選項C)錯誤。

21.存儲空間存儲空間解析:空間復(fù)雜度是指算法在執(zhí)行過程中臨時占用的存儲空間大小,包括:①算法本身所占用的存儲空間;②算法的輸入輸出數(shù)據(jù)所占用的存儲空間;③算法在運(yùn)行過程中臨時占用的存儲空間。

22.數(shù)據(jù)模型數(shù)據(jù)模型

23.*p*p1*p2p1:&a*p1*p2

24.軟件工具軟件工具

25.00解析:在函數(shù)fun()中,while((*n)-)是先引用*n的值,再做(*n)--運(yùn)算,所以循環(huán)結(jié)束時*n的值為0,再做(*n)--運(yùn)算后,*n的值為-1;執(zhí)行++(*n)后,*n的值是0。

26.n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10解析:根據(jù)s=n%10可知:此操作可以將輸入的數(shù)據(jù)n的最后—位賦給s,根據(jù)題目的要求是要將輸入的數(shù)據(jù)逆序輸出,現(xiàn)在已經(jīng)將原數(shù)據(jù)的個位輸出,在其后如果執(zhí)行n/=10司將原數(shù)據(jù)的個位數(shù)去掉,滿足do....while的條件繼續(xù)s=n%10操作,此時可求出十位上的數(shù)進(jìn)行輸出,繼續(xù)執(zhí)行n/=10操作,與上相同最后將百位上的數(shù)進(jìn)行輸出,所以該題答案為:\u3000n/=10。

27.252H252H解析:要解答本題,首先要明白在對指針進(jìn)行加、減運(yùn)算時,數(shù)字'1'不是十進(jìn)制數(shù)的'1',而是指'1'個存儲單元長度。1個存儲單元長度占存儲空間的多少,應(yīng)該視具體情況而定,如果存儲單元的基類型是int型,則移動1個存儲單元的長度就是位移2個字節(jié);如果存儲單元基類型是float型,則移動1個存儲單元的長度就是位移4個字節(jié)。所以曠13所指向的數(shù)組元素的地址為:200H+(13*4)H=252H。

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

29.20

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

31.333,3解析:本題在while(n++<=1)語句后,直接加了分號,說明如果while()的條件為真時,該循環(huán)什么都不做;n++是先取n的當(dāng)前值和I做比較,然后再將n加1。第一次循環(huán),n=0時,循環(huán)條件n++=0<=1成立,執(zhí)行循環(huán),然后得到n=1。第二次循環(huán),n=1時,循環(huán)條件n++=1<=1成立,執(zhí)行循環(huán),然后得到n=2。第三次循環(huán),n=2時,循環(huán)條件n++=2<=1不成立,不執(zhí)行循環(huán),但在判斷循環(huán)條件時仍將n加1,得到n=3。退出循環(huán)后執(zhí)行printf語句,第二個printf語句輸出n++,是先輸出n的當(dāng)前值3,然后再將n加1,即程序結(jié)束后得到n=4,但輸出的是3。

32.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:malloc()函數(shù)只有一個參數(shù),該參數(shù)指定了需要分配多少字節(jié)的內(nèi)存。然后將分配好的內(nèi)存塊的首地址作為void*(未知類型指針)返回.故標(biāo)準(zhǔn)的調(diào)用形式應(yīng)該寫成:

p(double*)malloc(sizeof(double));

33.數(shù)據(jù)數(shù)據(jù)解析:數(shù)據(jù)庫是由一個互相關(guān)聯(lián)的數(shù)據(jù)的集合和一組用以訪問這些數(shù)據(jù)的程序組成,這些數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲。

34.Bend

35.事務(wù)分析設(shè)計事務(wù)分析設(shè)計解析:典型的數(shù)據(jù)流圖有兩種,即變換型和事務(wù)型。按照這兩種類型把設(shè)計方法分為兩類,即變換分析設(shè)計和事務(wù)分析設(shè)計。

36.8484解析:本題考核的知識點是函數(shù)的調(diào)用、值傳遞和地址傳遞的區(qū)別?!爸祩鬟f”指實參將值傳遞給形參后,實參與形參再無聯(lián)系。也就是說對行參的改變將不影響實參;地址傳遞是指地址或數(shù)組名作為形參時的參數(shù)傳遞,這種情況下對形參的改變將對實參產(chǎn)生影響.函數(shù)f(Y*x)的作用是讓y的值加上指針x所指向變量的值,讓指針x所指向變量的值加上y的值。由于形參y是傳值的,形參x是傳地址的,故調(diào)用該函數(shù)后,作為實參的y的值將不改變,而實參x的值將改變,故最后輸出的y的值為4,而x的值為8。

37.a=14a=14解析:逗號表達(dá)式的值是以逗號分隔的最后一個表達(dá)式的值。所以題目中的語句a=(3*5,a+4);就等價于a=a+4;。故本題輸出結(jié)果是a=14。

38.6060解析:p是指向整型數(shù)組的指針變量,p=a使得p指向數(shù)組a的第1行。p+2是數(shù)組a第3行的地址,*(p+2)是數(shù)組a第3行{50,60},其實*(p+2)為數(shù)組a第3行的首地址,*(p+2)+1為數(shù)組a第3行第2個元素的地址,那么*(*(P+2)+1)就是數(shù)組a第3行第2個元素,即60。

39.43214321解析:靜態(tài)存儲類的局部變量其生存期為整個程序的運(yùn)行期間,作用域卻只是定義它的函數(shù)或局部范圍。注意:局部變量和全局變量的作用域。

40.arjteartest

41.B解析:本題考查了字符數(shù)組的基本概念。選項A,因為數(shù)組元素的下標(biāo)只能為整數(shù),所以選項A錯誤。選項C,引用數(shù)組中的元素,可以通過數(shù)組名和下標(biāo)的方式來引用,只使用數(shù)組名不可以。

42.D解析:字符型數(shù)據(jù)在計算機(jī)內(nèi)部是以ASCII碼存儲的,英文大寫字母和小寫字母在ASCII碼表中都是連續(xù)的,大寫字母A到Z是從65到90,小寫字母a到z是97到122,所以只要變量c大于a并且小于z就能保證其為小寫字母。

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

44.B解析:在棧中,允許插入與刪除的一端稱為棧頂,不允許插入與刪除的另一端稱為棧底。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。即棧是按照先進(jìn)后出(FILO,F(xiàn)irstInLastOut)或后進(jìn)先出(LIFO,LastInFirstOut)的原則組織數(shù)據(jù)的,因此,棧也被稱為先進(jìn)后出表或后進(jìn)先出表。由此可以看出,棧具有記憶作用。答案B錯在帶鏈的棧的結(jié)點存儲順序與其邏輯順序是可以不一致的。

45.D

46.B解析:條件表達(dá)式本題考查C語言的邏輯表達(dá)式及邏輯或('||')運(yùn)算符的用法。''表示或的意思,'|'是按位或的意思,'&&'是并且的意思,C語言中沒有'or'。

47.D

48.B數(shù)據(jù)庫可以看成是長期存儲在計算機(jī)內(nèi)的、大量的、有結(jié)構(gòu)的和可共享的數(shù)據(jù)集合。數(shù)據(jù)庫可以被直觀地理解為存放數(shù)據(jù)的倉庫,只不過這個倉庫在計算機(jī)的大容量存儲器上,例如,硬盤就是一種最常見的計算機(jī)大容量存儲設(shè)備。數(shù)據(jù)必須按一定的格式存放,因為它不僅需要存放,而且還要便于查找和使用。

數(shù)據(jù)庫管理系統(tǒng)(DBMS)是位于用戶與操作系統(tǒng)之間的完成數(shù)據(jù)管理的系統(tǒng)軟件。它是用戶與數(shù)據(jù)庫的接口。應(yīng)用程序一般要通過DBMS才能訪問數(shù)據(jù)庫。在數(shù)據(jù)庫建立、運(yùn)用和維護(hù)時對數(shù)據(jù)庫進(jìn)行統(tǒng)一控制。

數(shù)據(jù)庫系統(tǒng)是指在計算機(jī)系統(tǒng)中引入數(shù)據(jù)庫后的系統(tǒng),一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及其開發(fā)工具)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫管理員和用戶構(gòu)成。數(shù)據(jù)庫是整個數(shù)據(jù)庫系統(tǒng)最基本的成分。數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)的核心。數(shù)據(jù)庫管理員是數(shù)據(jù)庫系統(tǒng)的責(zé)任維護(hù)者,負(fù)責(zé)對數(shù)據(jù)庫系統(tǒng)的整體維護(hù)。

綜上所述,本題中只有B選項的描述是正確的。

49.C解析:軟件工程的基本概念。軟件工程概念的出現(xiàn)源自于軟件危機(jī)。為了消除軟件危機(jī),通過認(rèn)真研究解決軟件危機(jī)的方法,認(rèn)識到軟件工程是使計算機(jī)軟件走向工程科學(xué)的途徑,逐步形成了軟件工程的概念。

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

51.A解析:本題考查'%'運(yùn)算符的使用。運(yùn)算符'%'要求兩個運(yùn)算對象都為整型,其結(jié)果是整數(shù)除法的余數(shù)。本題中表達(dá)式ao%=(b%2)等價于a=a%o(b%2)=5%(7%2)=5%1=0。

52.D

53.C解析:本題注意數(shù)據(jù)類型的轉(zhuǎn)換以及“/”的使用方法。

54.B

55.C在本題中,程序段首先定義了字符型指針變量p,并使其指向一個字符串,然后將指針變量p加3,即使其指向字符串的第四個元素。然后執(zhí)行輸出語句,通過輸出語句的輸出格式我們可以知道,最后輸出的是一個十進(jìn)制數(shù)的整型數(shù)值,其輸出列表為strlen(strcpy(P,″ABCD″))。這就要求我們了解strlen函數(shù)和strcpy函數(shù)的作用。

strcpy的調(diào)用格式是:strcpy(目的地址,源地址),其功能是把源地址的字符串復(fù)制到目的地址中,這種復(fù)制將覆蓋原來的字符串。strcat函數(shù)的功能是將源地址的字符串復(fù)制到目的地址字符串的后面。

strlen的調(diào)用格式是:strlen(字符串地址),其功能是返回字符串中字符的個數(shù)。

那么程序中執(zhí)行strcpy(P,″ABCD″)后指針變量p所指向的字符串為“ABCD”,該字符串中字符的個數(shù)為4,那么執(zhí)行strlen后,程序最終輸出的結(jié)果是4。因此本題正確的答案是C。

56.D

57.B

58.C解析:如果一個字符數(shù)組用來存儲字符串,那么在定義該字符數(shù)組時,數(shù)組的大小應(yīng)該比它將要實際存放的字符串長度大1,所以選項A)和B)錯;選項D)中s本身就是一個字符指針,不需再取地址。

59.C解析:在C語言中,字符串以'\\0'作為結(jié)束符,因此數(shù)組x的長度為7+1=8,而數(shù)組y的長度等于7。

60.D各種排序方法中最壞情況下需要比較的次數(shù)分別為:冒泡排序n(n-1)/2、快速排序n(n-1)/2、簡單插入排序n(n-1)/2、希爾排序0(n1.5)、簡單選擇排序n(n-1)/2、堆排序O(nlog2n)

61.B

62.C

63.D

64.D選項A)不符合c語言的語法要求;選項

B)中沒有指定數(shù)組的大??;選項c)中數(shù)組大小不能用變量來指定。

65.A

\n函數(shù)intfun(intn)的功能是求1+2+…+n的值并返回。所以執(zhí)行程序時,給變量x輸入10后,執(zhí)行語句“x=fun(x);”,X的值將變?yōu)?到10中10個整數(shù)的累加和,即55。

\n

66.B解析:條件表達(dá)式的形式為:“表達(dá)式1?表達(dá)式2:表達(dá)式3”。其含義為:當(dāng)“表達(dá)式1”的值為非零時,求出“表達(dá)式2”的值,此時“表達(dá)式2”的值就是整個條件表達(dá)式的值;當(dāng)“表達(dá)式1”的值為零時,求出“表達(dá)式3”的值,此時“表達(dá)式3”的值就是整個條件表達(dá)式的值。對于本題來說,當(dāng)表達(dá)式EXP為非0值時條件成立,即執(zhí)行語句i++;當(dāng)EXP等于0時,執(zhí)行語句j--;這等同于條件表達(dá)式“(EXP!=0)?i++:i++;”。

67.B

68.B

69.A\r\n

70.B

71.B

72.CC專門的關(guān)系運(yùn)算有3種:投影、選擇和連接。選擇運(yùn)算是從關(guān)系中找出滿足給定條件的那些元組,其中的條件是以邏輯表達(dá)式給出的,值為真的元組將被選取,這種運(yùn)算是從水平方向抽取元組。投影運(yùn)算是從關(guān)系模式中挑選若干屬性組成新的關(guān)系,這是從列的角度進(jìn)行的運(yùn)算,相當(dāng)于

\n對關(guān)系進(jìn)行垂直分解。連接運(yùn)算是二目運(yùn)算,需要兩個關(guān)系作為操作對象。

73.D本題主要考查軟件開發(fā)過程中,各角色的任務(wù)。在軟件開發(fā)過程中,需要參與過程的角色主要有用戶、軟件分析人員、軟件設(shè)計人員、項目管理人員和程序員等。其中為系統(tǒng)提供需求信息的是用戶的事情。

74.B

75.D

\n本題主要考查do—while循環(huán),因為變量t的初始值等于1,經(jīng)過第一次do-while循環(huán)后,執(zhí)行t=t-1這條語句一次,所以變量t的值為-1,判斷關(guān)系表達(dá)式t!=n是否成立,如果關(guān)系表達(dá)式成立,則執(zhí)行第二次循環(huán),如果關(guān)系表達(dá)式不成立,退出循環(huán)。由此可見,只要輸入變量n的值為負(fù)奇數(shù),則一定會使t==n成立,故退出do-while循環(huán)。

\n

76.A在變量定義doublea,*p:&a;中,*號是一個指針運(yùn)算符,而非間址運(yùn)算符,因此A)錯誤。

77.A執(zhí)行x=x-=x-x語句可寫成x=x-(x-x),可看出結(jié)果為10,故八選項正確。

78.B

79.D

80.A【答案】:A

【知識點】:黑盒測試

【解析】:黑盒測試也稱功能測試或數(shù)據(jù)驅(qū)動測試,它完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特征,只著眼于程序的外部結(jié)構(gòu),主要用來檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用。故選A。

81.(1)錯誤:intave,t=0;

正確:floatave,t=0.0;

(2)錯誤:if(s[i]>ave)

正確:if(s[i]<ave)

(3)錯誤:aver=ave;

正確:*aver=ave;

【解析】由程序可知變量ave和t中分別存放的是學(xué)生的平均分?jǐn)?shù)和分?jǐn)?shù)的總和,都是float型數(shù)據(jù),因此“intave,t=0;”應(yīng)改為“floatave,t=0.0;”。題目要求統(tǒng)計出低于平均分?jǐn)?shù)的學(xué)生人數(shù),因此“if(s[i]>ave)”應(yīng)改為“if(s[i]<ave)”。平均分?jǐn)?shù)是通過指針變量傳遞給主函數(shù)的,因此“aver=ave;”改為“*aver=ave;”。

82.\nfloataverage(floatarray[],intn)

\n{intI;

\nfloataver,sum=array[0];

\nfor(I=1;Isum=sum+array[I];

\naver=sum/n;

\nreturn(aver);}

\nmain

\n{floatave,score[10];

\nintI;

\nfor(I=0;I<10;I++)

\nscanf('%f',&score[I]);

\nave=average(score,10);

\nprintf('%f\\n',ave);}

\n2021-2022年黑龍江省齊齊哈爾市全國計算機(jī)等級考試C語言程序設(shè)計學(xué)校:________班級:________姓名:________考號:________

一、單選題(20題)1.有如下程序:

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn(2);

}

main()

{printf("%d\n",fib(3));}

該程序的輸出結(jié)果是A.A.2B.4C.6D.8

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

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

3.

A.if(x>0)y=1;elseif(x==0)y=0;elsey=-1;

B.y=0;if(x>0)y=1;elseif(x<0)y=-1;

C.y=0;if(x>=0)if(x>0)y=1;e1sey=-1;

D.if(x>=0)if(x>0)y=1;elsey=0:elsey=-1;

4.對于如圖所示二叉樹采用中根遍歷,正確的遍歷序列應(yīng)為()A.ABCDEFB.ABECDFC.CDFBEAD.CBDAEF

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

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

6.若用一個大小為6的數(shù)值來實現(xiàn)循環(huán)隊列,且當(dāng)前rear和front的值分別為0和3,當(dāng)從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為()。

A.1和5B.2和4C.4和2D.5和1

7.設(shè)q1和q2是指向一個float型一維數(shù)組的指針變量,k為float型變量,則不能正確執(zhí)行的語句是()。

A.k=*q1+*q2;B.q1=k;C.q1=q2;D.k=*q1*(*q2);

8.

9.下列程序段輸出的字符串長度為()。printf("\\aaa\'ccc\bddd\'");

A.11B.12C.13D.17

10.程序運(yùn)行后的輸出結(jié)果是()。#include<stdio.h>#include<stdlib.h>main(){int*a,*b,*c;a=b=c(int*)malloc(sizeof(int));*a=1;*b=2;*c=3;a=b;printf(“%d,%d,%d\n”,*a,*b,*c);}A.1.1.3B.2.2.3C.1.2.3D.3.3.3

11.

12.順序查找不論在順序線性表中還是在鏈?zhǔn)骄€性表中的時間復(fù)雜度為()。

A.O(n)B.O(n^2)C.O(n^1/2)D.O(1og2n)

13.有以下程序:#include<stdio.h>voidmain(){doublex=3.14159;printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);}程序運(yùn)行后的輸出結(jié)果是()。

A.3.142000B.3.141000C.3.143000D.3.140000

14.有下列程序:#include<stdio.h>#include"string.h"voidtim(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的運(yùn)行結(jié)果是()。A.xy,aaaaccB.aaaacc,xyC.bcc,aabccD.aabcc,bcc

15.堆排序是一種()排序。

A.插入B.選擇C.交換D.歸并

16.當(dāng)變量c的值不為2、4、6時,值為“真”的表達(dá)式是()。

A.(c>=2&&c<=6)&&(c%2!=1)

B.(c==2)||(c==4)||(c==6)

C.(c>=2&&c<=6)&&!(c%2)

D.(c>=2&&c<=6)||(c!=3)||(c!=5)

17.在面向?qū)ο蠓椒ㄖ?,不屬于“對象”基本特點的是A.一致性B.分類性C.多態(tài)性D.標(biāo)識唯一性

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

19.設(shè)棧S的初始狀態(tài)為空,6個元素入棧的順序為e1,e2,e3,e4,e5和e6。若出棧的順序是e2,e4,e3,e6,e5,el,則棧s的容量至少應(yīng)該是()。

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

20.以下定義語句中正確的是

A.inta=b=0;

B.charA=65+1,b='b';

C.noata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

二、2.填空題(20題)21.一個算法的空間復(fù)雜度是指該算法所耗費的【】。

22.【】是數(shù)據(jù)庫設(shè)計的核心。

23.下列程序利用指針將2個數(shù)按從大到小的順序輸出。

main()

{inta,b,【】;

printf("inputa,b:");

scanf("%d%d",&a,&b);

【】;

p2=&b;

if(a<b)

{p=p1;

p1=p2;

p2=p;

}

printf("a=%db=%d\n",a,b);

printf("max=%dmin=%d\n",【】);

24.軟件開發(fā)環(huán)境是全面支持軟件開發(fā)全過程的【】集合。

25.下列程序的輸出結(jié)果是【】。

voidfun(int*n)

{

while((*n)--);

printf("%d",++(*n));

}

main()

{inta=100;

fun(&a);

}

26.以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如:若輸入135則輸出531。請?zhí)羁铡?/p>

#include<stdio.h>

main()

{intn,s;

printf("Enteranumber:");scanf("%d",&n);

printf("Output:");

do

{s=n%10;printf("%d",s);[];}

while(n!=0);

printf("\n');

}

27.若有定義floatb[15],*p=b;,且數(shù)組b的首地址為200H,則p/13所指向的數(shù)組元素的地址為______。

28.以下程序運(yùn)行結(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[8],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

30.軟件維護(hù)活動包括以下幾類:改正性維護(hù)、適應(yīng)性維護(hù)、【】維護(hù)和預(yù)防性維護(hù)。

31.寫出下列程序的輸出結(jié)果______。

main()

{int=0;

while(n++<=1);

printf("%d,",n);

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

}

32.已有定義:double*p;,請寫出完整的語句,利用malloc函數(shù)使p指向一個雙精度型的動態(tài)存儲單元______。

33.數(shù)據(jù)庫是指按照一定的規(guī)則存儲在計算機(jī)中的【】的集合,它能被各種用戶共享。

34.執(zhí)行以下程序時,若輸入end<回車>,則輸出結(jié)果是【】。

main()

{charch[10]="Begin";

gets(&ch[1]);puts(ch);

}

35.按數(shù)據(jù)流的類型,結(jié)構(gòu)化設(shè)計方法有兩種設(shè)計策略,它們是變換分析設(shè)計和______。

36.有以下程序

voidf(inty,int*x)

{y=y+*x;*X=*X+y;}

main()

{intx=2,y=4;

f(y,&x);

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

}

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

37.執(zhí)行以下程序后的輸出結(jié)果是【】。

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

}

38.設(shè)有以下定義的語句:

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

p=a;

則*(*(P+2)+1)值為【】。

39.以下程序的輸出結(jié)果是【】。

#include<stdio.h>

main()

{ints[]={1,2,3,4},i;

intx=0;

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

{x=sb(s,x);

printf("%d",x);}

printf("\n");}

sb(s1,y)

int*s1,y;

{staticinti1=3;

y=s1[i1];

i1--;

return(y);}

40.若輸入tear、test、arj,則下列程序的運(yùn)行結(jié)果為【】。

main()

{char*strl[20],*str2[20],*str3[20];

charswap();

scanf("%s",str1);

scanf("%s",str2);

scanf("%s",str3);

if(strcmp(str1,str2)>0)swap(str1,str2);

if(strcmp(str1,str3)>0)swap(str1,str3);

if(strcmp(str2,str3)>0)swap(str2,str3);

printf("%s%s%s\n",str1,str2,str3);

}

charswap(p1,p2)

char*p1,*p2;

{char*p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);

}

三、1.選擇題(20題)41.下列對C語言字符數(shù)組的描述中正確的是

A.任何一個一維數(shù)組的元素在引用時,其下標(biāo)可以是整型、實型或字符型常量

B.一維數(shù)組的元素實質(zhì)上就是一個變量,代表內(nèi)存中的一個存儲單元

C.如果要引用數(shù)組中的每一個元素,則直接使用該數(shù)組名稱即使

D.以上都不對

42.若變量c為char類型,能正確判斷出c為小寫字母的表達(dá)式是______。

A.'a'<=c<='z'

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

C.('a'<=c)and('z'>=c)

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

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

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

44.下列關(guān)于棧的描述中錯誤的是()

A.棧是先進(jìn)后出的線性表B.棧只能順序存儲C.棧具有記憶作用D.對棧的插入與刪除操作中,不需要改變棧底指針

45.有如下程序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);}該程序的輸出結(jié)果是

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

46.能正確表示邏輯關(guān)系:"a≥10或a≤0"的C語言表達(dá)式是

A.a>=10ora<=0

B.a>=0|a<=10

C.a>=10&&a<=0

D.a>=10||a<=0

47.C語言中文件的存取方式()

A.只能順序存取B.只能隨機(jī)存取(或直接存取)C.可以順序存取,也可隨機(jī)存取D.只能從文件的開頭進(jìn)行存取

48.數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)之間的關(guān)系是()。

A.數(shù)據(jù)庫包括數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)

B.數(shù)據(jù)庫系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)

C.數(shù)據(jù)庫管理系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫系統(tǒng)

D.三者沒有明顯的包含關(guān)系

49.軟件工程的出現(xiàn)是由于()。A.A.程序設(shè)計方法學(xué)的影響B(tài).軟件產(chǎn)業(yè)化的需要C.軟件危機(jī)的出現(xiàn)D.計算機(jī)的發(fā)展

50.算法的時間復(fù)雜度是指______。

A.執(zhí)行算法程序所需要的時間B.算法程序的長度C.算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù)D.算法程序中的指令條數(shù)

51.若有定義inta=5,b=7;,則表達(dá)式a%=(b%2)運(yùn)算后,a的值為()。

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

52.6-5/2+1.2+5%2的值是()。

A.4.3B.4.8C.3.3D.3.8

53.若已定義x和y為double類型,則表達(dá)式x=1,y=x+5/2的值是______。

A.3B.4C.3D.3.5

54.設(shè)有定義:longx=123456L;,則以下能夠正確輸出變量x值的語句是()

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

B.printf("x=%ld\n",x);

C.printf("x=%8dL\n",x);

D.printf("x=%LD\n",x);

55.下面程序段的運(yùn)行結(jié)果是char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD")));

A.8B.12C.4D.7

56.下列程序段選擇項,使i的運(yùn)行結(jié)果為3的程序段是()。

A.inti=0,j=O;(i=2,(j++)+i);

B.inti=1,j=0;j=i=((i=3)*2);

C.inti=0,j=1;(j=1)?(i=1):(i=3);

D.inti=1,j=1;i+=j+=1;

57.軟件危機(jī)產(chǎn)生的原因從根本上說是()

A.軟件需求的增長超過軟件生產(chǎn)率的提高

B.軟件需求的增長小于軟件生產(chǎn)率的提高

C.軟件需求的減少大于軟件生產(chǎn)率的減少

D.軟件需求的減少小于軟件生產(chǎn)率的減少

58.下面能正確進(jìn)行字符串賦值操作的是()。

A.chars[5]={"ABCDE"};

B.chars[5]={'A','B','C','D','E'};

C.char*s;s="ABCDE";

D.char*s;scanf("%s",&s);

59.給出以下定義:charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};則正確的敘述為()。

A.數(shù)組x和數(shù)組y等價B.數(shù)組x和數(shù)組y的長度相同C.數(shù)組x的長度大于數(shù)組y的長度D.數(shù)組x的長度小于數(shù)組y的長度

60.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)/2的排序方法是()。

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

四、選擇題(20題)61.

62.

63.

64.下列選項中,能正確定義數(shù)組的語句是()。

A.

B.

C.

D.

65.

有以下程序:

intfun(intn)

{if(n==l)returnl;

elsereturn(n+fun(n一1)):

}

main

{intx;

scanf("%d",&x);x=fun(x);printf("%d\n",

x):

}

執(zhí)行程序時,給變量X輸入10,程序的輸出結(jié)果是()。

A.55B.54C.65D.45

66.設(shè)有條件表達(dá)式:(EXP)?i++;j--,則以下表達(dá)式中(EXP)完全等價的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

67.

68.

69.

70.

71.

72.有兩個關(guān)系R,S如下:

由關(guān)系R通過運(yùn)算得到關(guān)系s,則所使用的運(yùn)算為()。

A.選擇B.插入C.投影D.連接

73.在軟件生產(chǎn)過程中,需求信息的給出是______。A.A.程序員B.項目管理者C.軟件分析設(shè)計人員D.軟件用戶

74.(56)下列不屬于軟件調(diào)試技術(shù)的是()

A.強(qiáng)行排錯法

B.集成測試法

C.回溯法

D.原因排除法

75.

有下列程序段:

intn,t=1,S=0;

scanf("%d",&n);

do{s=s+t;t=t-2;while(t!=n);

為使此程序段不陷入循環(huán),從鍵盤輸入的數(shù)據(jù)應(yīng)該是()。

A.任意正奇數(shù)B.任意負(fù)偶數(shù)C.任意正偶數(shù)D.任意負(fù)奇數(shù)

76.若有定義語句:doublea,*p=&a;,以下敘述中錯誤的是()。A.定義語句中的*號是一個間址運(yùn)算符

B.定義語句中的*號是一個說明符

C.定義語句中的p只能存放double類型變量的地址

D.定義語句中,*p=&a把變量a的地址作為初值賦給指針變量P

77.設(shè)x為int型變量,則執(zhí)行以下語句后,x的值為()。x=10;x=x-=x-x;

A.10B.20C.40D.30

78.以下語句的執(zhí)行結(jié)果是()。

intm=0,s=1;

do{

s+=m++;

}while(m<6);

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

A.17B.16C.15D.18

79.

80.在黑盒測試方法中,設(shè)計測試用例的主要根據(jù)是()。

A.程序外部功能B.程序內(nèi)部邏輯C.程序數(shù)據(jù)結(jié)構(gòu)D.程序流程圖

五、程序改錯題(1題)81.下列給定程序中,函數(shù)proc()的功能是:從m個學(xué)生的成績中統(tǒng)計出低于平均分的學(xué)生人數(shù),人數(shù)由函數(shù)值返回,平均分存放在形參aver所指的存儲單元中。例如,輸入8名學(xué)生的成績:6070809065758595則低于平均分的學(xué)生人數(shù)為4(平均分為77.5)。實際輸入時學(xué)生數(shù)以“Enter”鍵作為結(jié)束,成績與成績之間也與Enter鍵作為分隔。請修改程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、程序設(shè)計題(1題)82.有一個一維數(shù)組,內(nèi)放10個學(xué)生成績,寫一個函數(shù),求出平均分。

參考答案

1.B

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

3.C解析:選項A的意思是:在x>O情況下,y為1,否則,在x=O時,y為0,剩下x<O時,y為-1,滿足本題中函數(shù)的要求。選項B描述的意思是:初始化y的值為0,在x>O時,給y重新賦值為1,否則,在x<O時,給y重新賦值為-1,滿足本題中函數(shù)的要求。選項C描述的意思是:在x>=0情況下,如果x>O,則y為1,否則,即x==0時,y為-1;剩下的x<O時,y為0??梢姶鸢窩實現(xiàn)的結(jié)果不是給定的表達(dá)式。選項D中描述的意思是:在x>=0的情況下,如果x>O,就給y賦值為1,否則即x==0時給y賦值為0,在不是x>=0的其他情況下,就給y賦值為-1,滿足本題中函數(shù)的要求。所以4個選項中C為所選。

4.D

5.A

6.B

7.B解析:選項A)是將指針q1和q2所指向的變量值相加,然后賦給k;選項B)中,float型數(shù)據(jù)和指針型數(shù)據(jù)之間不能進(jìn)行賦值運(yùn)算:選項C)中,是兩個指針變量之間的賦值:選項D)中,是兩個指針型變量所指向的兩個float型數(shù)據(jù)相乘。

8.D

9.C解析:轉(zhuǎn)義字符有1個\\\\、2個\\'、1個\\b,普通字符有3個a、3個c、3個d,共13個字符。

10.D

11.C

12.A

13.A根據(jù)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性。表達(dá)式“int(x*1000+0.5)/(double)1000”,首先計算“x*1000”,由于x是double類型,1000是整型,所以“x*1000”的結(jié)果默認(rèn)是double類型,即3141.59,加0.5后再執(zhí)行int的強(qiáng)制轉(zhuǎn)換,結(jié)果為3142。分母“(double)1000”強(qiáng)制轉(zhuǎn)換為double類型,此時計算“3142/(double)1000”,3142需要轉(zhuǎn)換成double類型,然后除以1000,結(jié)果為3.142000,默認(rèn)保留小數(shù)點后6位。故本題答案為A選項。

14.A解析:從main函數(shù)入手,定義了指向字符串的指針數(shù)組,并賦予了初始值,調(diào)用fun()函數(shù),函數(shù)的功能是:比較數(shù)組中各個元素的長度,按元素長度從小到大排列數(shù)組元素,所以執(zhí)行fun(ss,5)函數(shù)后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},所以調(diào)用printf函數(shù)輸出ss[0],ss[4]的值分別為xy,aaaacc。

15.B解析:堆排序是一種選擇排序。選擇排序有直接選擇排序和堆排序兩種。

16.D邏輯或運(yùn)算中只要有一個運(yùn)算量為真,結(jié)果就為真。當(dāng)“c>=2&&c<=6”條件不成立時,c的值肯定不是2、3、4、5、6,“c!=3”與“c!=5”均成立,所以D選項的結(jié)果一定為真。故本題答案為D選項。

17.A對象具有如下特性:標(biāo)識唯一性、分類性、多態(tài)性、封裝性、模塊獨立性。

18.B棧是限定只能在表的一端進(jìn)行插入和刪除操作的線性表,入棧和出棧都是在棧頂進(jìn)行,它們的操作特點是先進(jìn)后出,因此具有記憶作用。??梢圆捎庙樞虼鎯?,也可以采用鏈?zhǔn)酱鎯Α?/p>

19.C

20.B解析:本題考查變量的定義方法。如果要一次進(jìn)行多個變量的定義,則在它們之間要用逗號隔開,因此選項A)和D)錯誤。在選項C)中,變量c是一個浮點型指針,它只能指向一個浮點型數(shù)據(jù),不能指向指針變量b,故選項C)錯誤。

21.存儲空間存儲空間解析:空間復(fù)雜度是指算法在執(zhí)行過程中臨時占用的存儲空間大小,包括:①算法本身所占用的存儲空間;②算法的輸入輸出數(shù)據(jù)所占用的存儲空間;③算法在運(yùn)行過程中臨時占用的存儲空間。

22.數(shù)據(jù)模型數(shù)據(jù)模型

23.*p*p1*p2p1:&a*p1*p2

24.軟件工具軟件工具

25.00解析:在函數(shù)fun()中,while((*n)-)是先引用*n的值,再做(*n)--運(yùn)算,所以循環(huán)結(jié)束時*n的值為0,再做(*n)--運(yùn)算后,*n的值為-1;執(zhí)行++(*n)后,*n的值是0。

26.n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10解析:根據(jù)s=n%10可知:此操作可以將輸入的數(shù)據(jù)n的最后—位賦給s,根據(jù)題目的要求是要將輸入的數(shù)據(jù)逆序輸出,現(xiàn)在已經(jīng)將原數(shù)據(jù)的個位輸出,在其后如果執(zhí)行n/=10司將原數(shù)據(jù)的個位數(shù)去掉,滿足do....while的條件繼續(xù)s=n%10操作,此時可求出十位上的數(shù)進(jìn)行輸出,繼續(xù)執(zhí)行n/=10操作,與上相同最后將百位上的數(shù)進(jìn)行輸出,所以該題答案為:\u3000n/=10。

27.252H252H解析:要解答本題,首先要明白在對指針進(jìn)行加、減運(yùn)算時,數(shù)字'1'不是十進(jìn)制數(shù)的'1',而是指'1'個存儲單元長度。1個存儲單元長度占存儲空間的多少,應(yīng)該視具體情況而定,如果存儲單元的基類型是int型,則移動1個存儲單元的長度就是位移2個字節(jié);如果存儲單元基類型是float型,則移動1個存儲單元的長度就是位移4個字節(jié)。所以曠13所指向的數(shù)組元素的地址為:200H+(13*4)H=252H。

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

29.20

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

31.333,3解析:本題在while(n++<=1)語句后,直接加了分號,說明如果while()的條件為真時,該循環(huán)什么都不做;n++是先取n的當(dāng)前值和I做比較,然后再將n加1。第一次循環(huán),n=0時,循環(huán)條件n++=0<=1成立,執(zhí)行循環(huán),然后得到n=1。第二次循環(huán),n=1時,循環(huán)條件n++=1<=1成立,執(zhí)行循環(huán),然后得到n=2。第三次循環(huán),n=2時,循環(huán)條件n++=2<=1不成立,不執(zhí)行循環(huán),但在判斷循環(huán)條件時仍將n加1,得到n=3。退出循環(huán)后執(zhí)行printf語句,第二個printf語句輸出n++,是先輸出n的當(dāng)前值3,然后再將n加1,即程序結(jié)束后得到n=4,但輸出的是3。

32.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:malloc()函數(shù)只有一個參數(shù),該參

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論