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頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2021-2022年湖北省隨州市全國計算機(jī)等級考試C語言程序設(shè)計測試卷一(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(20題)1.若某線性表最常用的操作是存取任一指定序號的元素和在最后進(jìn)行插入和刪除運(yùn)算,則利用()存儲方式最節(jié)省時間。

A.順序表B.雙鏈表C.帶頭結(jié)點(diǎn)的雙循環(huán)鏈表D.單循環(huán)鏈表

2.在帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是()。

A.head=NULLB.head->next=NULLC.head->next=headD.head!=NULL

3.有以下程序:#include<stdio.h>main(){chars[]={“012xy”;inti,n=0;for(i=0;s[i]|=0;i++)if(s[i]>=‘a(chǎn)’&&s[i]<=‘z’)n++;printf(“%d\n”,n);}程序的運(yùn)行結(jié)果是()。

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

4.在c語言中,變量的隱含存儲類別是()。

A.autoB.staticC.externD.無存儲類別

5.每次從無序表中取出一個元素,把它插入到有序表中的適當(dāng)位置,此種排序方法叫做()排序。

A.插入B.堆C.快速D.歸并排序

6.C語言中的變量只能由字母、數(shù)字和下劃線組成,且第一個字符()。

A.必須是字母B.必須是下劃線C.必須是下劃線和字母D.可以是字母.數(shù)字或下劃線中任一一種

7.有如下程序段

#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);}

則執(zhí)行后輸出的結(jié)果為A.A.heB.andC.youD.tomeetme

8.若有下列說明和語句,則對結(jié)構(gòu)體變量st中成員i的引用方式不正確的是()。Structstu{inti;intname;}st,*p;p=&st;

A.st.iB.*p.iC.(*p).iD.p->i

9.若主調(diào)用函數(shù)類型為double,被調(diào)用函數(shù)定義中沒有進(jìn)行函數(shù)類型說明,而return語句中的表達(dá)式類型為float型,則被調(diào)函數(shù)返回值的類型是()。

A.int型B.float型C.double型D.由系統(tǒng)當(dāng)時的情況而定

10.以下關(guān)于結(jié)構(gòu)化程序設(shè)計的敘述中正確的是()。

A.結(jié)構(gòu)化程序使用goto語句會很便捷

B.在c語言中,程序的模塊化是利用函數(shù)實現(xiàn)的

C.一個結(jié)構(gòu)化程序必須同時由順序、分支、循環(huán)三種結(jié)構(gòu)組成

D.由三種基本結(jié)構(gòu)構(gòu)成的程序只能解決小規(guī)模的問題

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

A.使用staticfloata定義的外部變量存放在內(nèi)存中的靜態(tài)存儲區(qū)

B.使用floatb定義的外部變量存放在內(nèi)存中的動態(tài)存儲區(qū)

C.使用staticfloatc定義的內(nèi)部變量存放在內(nèi)存中的靜態(tài)存儲區(qū)

D.使用floatd定義的內(nèi)部變量存放在內(nèi)存中的動態(tài)存儲區(qū)

12.在下面的字符數(shù)組定義中,哪一個有語法錯誤()。A.chara[20]=”abcdefg”;

B.chara[]=”x+y=55.”;

C.chara[15];

D.chara[10]=’5’;

13.在以下的敘述中,正確的是()。

A.線性表的順序存儲結(jié)構(gòu)優(yōu)于鏈表存儲結(jié)構(gòu)

B.二維數(shù)組是其數(shù)據(jù)元素為線性表的線性表

C.棧的操作方式是先進(jìn)先出

D.隊列的操作方式是先進(jìn)后出

14.若有定義:“inta=4,b=5;floatx=3.4,y=2.1;”,則下列表達(dá)式的值為()。(float)(a+b)/2+(int)x%(int)y;

A.5.5B.55C.5.500000D.55.00000

15.設(shè)有宏定義“#defineIsDIV(k,n)((k%n==1)?1:0)”,且變量m已正確定義并賦值,則宏調(diào)用“IsDIV(m,5)&&IsDIV(m,7)”為真時所要表達(dá)的是()。

A.判斷m是否能被5和7整除

B.判斷m被5和7整除是否都余1

C.判斷m被5或者7整除是否余1

D.判斷m是否能被5或者7整除

16.有以下程序:#include<stdio.h>main(){inti=0.s=0;for(;;)if(i==3‖i==5)continue;if(i==6)break;i++;s+=i;}printf("%d\n",s);程序運(yùn)行后的輸出結(jié)果是()。

A.10B.13C.21D.程序進(jìn)入列循環(huán)

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

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

18.線性表的順序存儲結(jié)構(gòu)是一種()。

A.隨機(jī)存取的存儲結(jié)構(gòu)B.順序存取的存儲結(jié)構(gòu)C.索引存取的存儲結(jié)構(gòu)D.Hash存取的存儲結(jié)構(gòu)

19.在下列幾種排序方法中,要求內(nèi)存量最大的是______。

A.插入排序B.選擇排序C.快速排序D.歸并排序

20.某二叉樹結(jié)點(diǎn)的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點(diǎn)數(shù)目為()

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

二、2.填空題(20題)21.關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件,包括實體完整性、______和自定義完整性。

22.若有定義:inta=4,b=5,c=6;然后順序執(zhí)行下列語句后,變量b中的值是()。c=(a-=(b-5));c=(a%3)+(b=1);

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

f(intA)

{staticc=0;

c=a+c++;

return(c);

}

main()

{inta=2,i,k;

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

k=f(a++);

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

}

24.若下面程序的輸出結(jié)果是4,請?zhí)羁铡?/p>

main()

{inti,j,k;

k=0;i=j=【】;

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

}

25.下列程序的運(yùn)行結(jié)果是______。

#include<stdio.h>

longfunc(intx)

{longp;

if(x==0‖x==1)

return(1);

p=x*func(x-1);

return(p);

}

main()

{printf("%d\n",func(4));

}

26.下面函數(shù)用來求兩個單精度數(shù)之和,并通過形參將結(jié)果傳回,請?zhí)羁铡?/p>

voidsub(floatx,floaty,【】z)

{【】=x+y;}

27.下面程序有兩個printf語句,如果第一個printf語句輸出的是194,則第二個printf語句的輸出結(jié)果是【】。

main()

{inta[10]={1,2,3,4,5,6,7,8,9,0},*p;

p=a;

printf("%x\n",p);

printf("%x\n,p+9);

}

28.測試的目的是暴露錯誤,評價程序的可靠性;而______的目的是發(fā)現(xiàn)錯誤的位置并改正錯誤。

29.以下程序的輸出結(jié)果是#include<stdio.h>structstiintx;int*y;}*p;intdt[4]={10,20,30,40};structstaa[4]={50,&dt[0],60,&dt[0],60,&it[0],60,&dt[0],};main(){p=aa;printf("%d\n",++(p->x));}

30.若x為血類型,請寫出與!x等價的C語言表達(dá)式______。

31.以下程序運(yùn)行后輸出結(jié)果是【】。

#include<stdio,h>

voidswap(y)

{intt;

t=x;x=y;y=t:printf("%d%d",x,y);

}

main()

{ihta=3,b=4:

swap(a,b);prinff("%d%d",a,b);

}

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

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;

}

33.若輸入字符串:(圖片),則以下while循環(huán)體將執(zhí)行【】次。

while((ch=getchar())=='e')printf("*");

34.以下程序調(diào)用invert函數(shù)按逆序重新放置a數(shù)組元素的值。a數(shù)組中的值在main函數(shù)中讀入。

#include<stdio.h>

#defineN10

invert(s,i,j)

int*s,i,j;

{intt;

if(i<j)

{t=*(s+i);

*(s+i)=(s+j);

*(s+j)=t;

invert(s,【】,j-1);

}

}

main()

{

inta[N],i;

for(i=0;i<N;i++)scanf("%d",a+【】);

invert(a,0,N-1);

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

printf("\n")

}

35.按照邏輯結(jié)構(gòu)分類,結(jié)構(gòu)可以分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),棧屬于______。

36.有以下程序,若運(yùn)行時從鍵盤輸入:18,11<回車>,則程序的輸出結(jié)果是【】。

main()

{inta,b;

printf("Entera,b:");scanf("%d,%d",&a,&b);

while(a!=b)

{while(a>b)a-=b;

while(b>a)b-=a;

}

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

}

37.設(shè)有下列宏定義:

#defineA2

#defineB(A+3)

則執(zhí)行賦值語句“k=B*20;”(k為int型變量)后,k的值是______。

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

inta[3][2]={1,2,3,4,5},*p[3];

p[0]=a[1];

則*(p[0]+1)所代表的數(shù)組元素是【】。

39.下列程序的運(yùn)行結(jié)果是______。

#include<stdio.h>

main()

{inta,b,c;

a=3;b=4;c=5;

if(a>b)

if(a>c)

printf("%d",a);

elseprintf("%d",b);

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

}

40.若有以下定義和語句,則使指針p指向值為36的數(shù)組元素的表達(dá)式是【】。

inta[10]={19,23,44,17,37,28,49,36},*p;

p=a;

三、1.選擇題(20題)41.下列關(guān)于單目運(yùn)算符++、--的敘述中正確的是A.它們的運(yùn)算對象可以是任何變量和常量

B.它們的運(yùn)算對象可以是char型變量和int型變量,但不能是float型變量

C.它們的運(yùn)算對象可以是int型變量,但不能是double型變量和float型變量

D.它們的運(yùn)算對象可以是char型變量、int型變量和float型變量

42.在微機(jī)中,應(yīng)用最普遍的字符編碼是()

A.BCD碼B.ASCII碼C.漢字騙碼D.補(bǔ)碼

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

A.一個邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲結(jié)構(gòu)

B.數(shù)據(jù)的邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存儲結(jié)構(gòu)不影響數(shù)據(jù)處理效率

D.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存儲結(jié)構(gòu)影響數(shù)據(jù)處理效率

44.fgetc函數(shù)的作用是從指定文件讀入一個字符,該文件的打開方式必須是______。

A.只讀B.追加C.讀或讀寫D.以上均正確

45.以下程序的輸出結(jié)果是______。main(){charst[20]="hello'、0\t\\";printf("%d%d\n",strlen(st),sizeof(st));}

A.99B.520C.1320D.2020

46.第

13

設(shè)有程序段

intk=10;

while(k=0)k=k-1;

則下面描述中正確的是A.while循環(huán)執(zhí)行10次B.循環(huán)是無限循環(huán)C.循環(huán)體語句一次也不執(zhí)行D.循環(huán)體語句執(zhí)行一次

47.需求分析階段的任務(wù)是()

A.軟件開發(fā)方法B.軟件開發(fā)工具C.軟件開發(fā)費(fèi)用D.軟件系統(tǒng)功能

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

#include<stdio.h>

main()

{stmctst

{inty,x,z;

};

union

{longi;

intj;

chark;

}un;

printf("%d,%d\n",sizeof(stmctst),sizeof(un));

}

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

49.對于n個結(jié)點(diǎn)的單向鏈表(無表頭結(jié)點(diǎn)),需要指針單元的個數(shù)至少為______。

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

50.若fp已正確定義并指向某個文件,當(dāng)未遇到該文件結(jié)束標(biāo)志時函數(shù)feof(fp)的值為()

A.0B.1C.-1D.一個非0值

51.以下程序的輸出結(jié)果是()structHAR{intx,y;structHAR*p;}h[2];main(){h[0].x=1;h[0].y=2;h[1].x=3;h[1].y=4;h[0].p=&h[1];h[1].p=h;printf("%d%d\n"h[0].p)->x,(h[1].p)->y);}

A.12B.23C.14D.32

52.若w、x、y、z、m均為int型變量,則執(zhí)行下列的語句后m的值是()。w=2,x=3,y=4,z=5;m=(w<x)?w:x;m=(m<z)?m:z;m=(m<y)?m:y;

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

53.下列關(guān)于棧的描述中,正確的是()

A.在棧中只能插入元素B.在棧中只能刪除元素C.只能在一端插入或刪除元素D.只能在一端插入元素,而在另一端刪除元素

54.下列能正確定義且賦初值的語句是()。

A.intn1=n2=10;

B.charc=32;

C.floatf=f+1.1;

D.doublex=12.3E2.5;

55.在軟件設(shè)計中,不屬于過程設(shè)計工具的是()。

A.PDL(過程設(shè)計語言)B.PAD圖C.N-S圖D.DFD圖

56.下列程序的輸出結(jié)果是______。main(){intk=17;printf("%d,%0,%x\n",k,k,k);}

A.17,021,0x11B.17,17,17C.17,Ox11,021D.17,21,11

57.若有定義:inta[4][10];,則以下選項中對數(shù)組元素a[i][j]引用錯誤的是______。(0<=i<4,0<=j<10)

A.*(&a[0][0]+10*i+j)B.*(a+i)+jC.*(*(a+i)+j)D.*(a[i]+j)

58.下面程序執(zhí)行后的輸出結(jié)果是(小數(shù)點(diǎn)后只寫一位)______。main(){doubled;floatf;long1;inti;i=f=1=d=20/3;printf("%d%ld%f%f\n",i,l,f,d);}

A.666.06.0B.666.76.7C.666.06.7D.666.76.0

59.下列敘述中正確的是A.break語句只能用于switch語句

B.在switch語句中必須使用default

C.break語句必須與switch語句中的case配對使用

D.在switch語句中,不一定使用break語句

60.下列程序的運(yùn)行結(jié)果是()。#include<stdio.h>#include<string.h>main(){char*s1="abDuj";char*s2="ABdUG";intt;t=strcmp(s1,s2);printf("%d",t);}

A.正數(shù)B.負(fù)數(shù)C.零D.不確定的值

四、選擇題(20題)61.對建立良好的程序設(shè)計風(fēng)格,下面描述正確的是

A.程序應(yīng)簡單、清晰、可讀性好B.符號名的命名只需符合語法

C.充分考慮程序的執(zhí)行效率D.程序的注釋可有可無

62.若以下選項中的變量已正確定義,則正確的賦值語句是()。

A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3

63.有下列程序:

main()

{inti,j,x=0;

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

{x++;

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

{if(j%2)continue;

x++:

}

x++:

}

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

}

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

A.x=4B.x=8C.x=6D.x=12

64.

以下程序的輸出結(jié)果是()。

main

{charst[20]="hello\0\t\\\";

printf("%d%d\n",strlen(st).sizeof(st));

}

A.99B.520C.1320D.2020

65.為了避免嵌套的條件分支語句if—else的二義性,C語言規(guī)定:C程序中的else總是與_____組成配對關(guān)系。

A.縮排位置相同的ifB.在其之前未配對的ifC.在其之前未配對的最近的ifD.同一行上的if

66.

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

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

68.下面程序的輸出結(jié)果是()。

#include<stdio.h>

main()

{inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};

inti,j,n;

n=9;

i=n/5;

j=n-i*5-1;

printf("a[%d][%d]=%d\n",i,j,a[i][j]);

}

執(zhí)行后輸出結(jié)果是()。A.A.a[1][3]=6

B.a[1][3]=-3

C.a[1][3]=2

D.不確定

69.

70.(71)算法分析的目的是______。

A.找出數(shù)據(jù)結(jié)構(gòu)的合理性

B.分析算法的效率以求改進(jìn)

C.分析算法的易懂性和可靠性

D.找出算法中輸入和輸出之間的關(guān)系

71.若已定義的函數(shù)有返回值,則以下關(guān)于該函數(shù)調(diào)用的敘述中錯誤的是()。

A.函數(shù)調(diào)用可以嵌套和遞歸

B.函數(shù)調(diào)用可以作為一個函數(shù)的實參

C.函數(shù)調(diào)用可以出現(xiàn)在表達(dá)式中

D.函數(shù)調(diào)用可以作為一個函數(shù)的形參

72.面向?qū)ο蠓椒ㄖ校粚儆趯ο蠡咎攸c(diǎn)的是()。

A.標(biāo)識唯一性B.分類性C.封裝性D.一致性

73.下列對隊列的敘述正確的是()。

A.隊列按“先進(jìn)后出”原則組織數(shù)據(jù)

B.隊列屬于非線性表

C.隊列在隊尾刪除數(shù)據(jù)

D.隊列按“先進(jìn)先出”原則組織數(shù)據(jù)

74.

有以下程序

#include<stdio.h>

main

{inty=9;

for(;y>0;y--)

if(y%3==0)printf("%d",--y);

}

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

A.741B.963C.852D.875421

75.

76.

77.下面程序的運(yùn)行結(jié)果是()。

A.gaeB.gaC.LanguageD.有語法錯

78.(27)程序流程圖(PFD)中的箭頭代表的是()

A.數(shù)據(jù)流

B.控制流

C.調(diào)用關(guān)系

D.組成關(guān)系

79.有以下程序:main(){intm=12,n=34;printf("%d%d",m++,++n);printf("%d%d\n",n++,++m);}程序運(yùn)行后的輸出結(jié)果是______。

A.12353514B.12353513C.12343514D.12343513

80.以下敘述中正確的是

A.C語言比其他語言高級

B.C語言可以不用編譯就能被計算機(jī)識別執(zhí)行

C.C語言以接近英語國家的自然語言和數(shù)學(xué)語言作為語言的表達(dá)形式

D.C語言出現(xiàn)得最晚,具有其他語言的一切優(yōu)點(diǎn)

五、程序改錯題(1題)81.下列給定程序中,函數(shù)proc()的功能是根據(jù)整型形參n,計算如下公式的值:y=1-1/(22)+1/(33)-1/(44)+…+(-1)(n+1)/(m)例如,n中的值為l0,則應(yīng)輸出0.817962。請修改程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、程序設(shè)計題(1題)82.請編寫一個函數(shù)proc(),它的功能是:將str所指字符串中所有下標(biāo)為奇數(shù)位置的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入abcdel23,則應(yīng)輸出aBcDe123。注意:部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

參考答案

1.A

2.B

3.B程序首先給字符數(shù)組s賦值為“012xy”。for循環(huán)語句的功能是遍歷字符串,通過if條件語句對字符串中的小寫字母進(jìn)行計數(shù),字符串中小寫字母個數(shù)為2,即n=2。故本題答案為B選項。

4.A解析:auto變量:無static聲明的局部變量。用auto作存儲類別的聲明時,可以不寫auto,存儲類別隱含確定為auto(自動存儲類別),是動態(tài)存儲方式。大多數(shù)變量是自動變量。用static聲明的局部變量是靜態(tài)局部變量。函數(shù)調(diào)用結(jié)束后靜態(tài)局部變量占據(jù)的內(nèi)存存儲單元空間不釋放,局部變量保留原值,下次調(diào)用時可以繼續(xù)使用該值。用extern聲明外部變量,外部變量即全局變量,可以用extern聲明來改變?nèi)肿兞康淖饔糜?實際上,關(guān)鍵字'auto'可以省略,auto不寫則隱含確定為'自動存儲類別',屬于動態(tài)存儲方式。

5.A

6.C

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

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

8.B解析:本題主要考查結(jié)構(gòu)指針:p=&st,訪問結(jié)構(gòu)體的成員,可以通過結(jié)構(gòu)變量訪問,即st.i,也可以用等價的指針形式,即(*p).i和p->i。

9.A

10.B濫用90t0語句將使程序的流程毫無規(guī)律,可讀性差,對于初學(xué)者來說盡量不要使用,所以A錯誤?!獋€結(jié)構(gòu)化程序可以包含順序、分支、循環(huán)結(jié)構(gòu)中的一種或多種,所以C錯誤。由三種基本結(jié)構(gòu)構(gòu)成的程序可以解決任何復(fù)雜的問題,所以D錯誤。

11.B

12.D

13.B

14.C在計算(float)(a4-b)/2時,由于通過強(qiáng)制類型轉(zhuǎn)換將(a+b)轉(zhuǎn)換成了float型,所以應(yīng)先將2轉(zhuǎn)換成float型,再進(jìn)行計算,得4.500000。在計算(int)x%(int)y時,先將x和y通過強(qiáng)制類型轉(zhuǎn)換成int型,再進(jìn)行求余運(yùn)算,結(jié)果為1。又因為4.500000是float型,所以將1和它相加時,先將1換成float型,再計算,得到5.500000。類型轉(zhuǎn)換的一般規(guī)則是:低級類型從高級類型,并進(jìn)行相應(yīng)的轉(zhuǎn)換。數(shù)據(jù)類型的級別由低到高的排序表示為:char→int→unsigned→log→float→double。

15.B邏輯與運(yùn)算兩邊運(yùn)算對象的值都為真時,結(jié)果才為真。所以需要m能被5和7整除都余1。故本題答案為B選項。

16.D解析:程序第1次執(zhí)行for循環(huán)時,i=0,兩條if語句中的表達(dá)式都不成立,執(zhí)行i++;s+=i;此時i為1,s為1第2次循環(huán),兩條if語句中的表達(dá)式也不成立,執(zhí)行i++,s+=i,此時i為2,s為3;……;當(dāng)i=3時,執(zhí)行continue,結(jié)束本輪循環(huán),不執(zhí)行i++;繼續(xù)執(zhí)行下一輪循環(huán),這樣一來i值始終為3,繼續(xù)continue,無終止條件,進(jìn)入死循環(huán)。

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

18.A

19.D解析:快速排序的基本思想是,通過一趟排序?qū)⑴判蛴涗浄指畛瑟?dú)立的兩部

分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,再分別對這兩部分記錄繼

續(xù)進(jìn)行排序,以達(dá)到整個序列有序;插入排序的基本操作是指將無序序列中的各元素依

次插入到已經(jīng)有序的線性表中,從而得到一個新的序列;選擇排序的基本思想是:掃描整

個線性表,從中選出最小的元素,將它交換到表的最前面(這是它應(yīng)有的位置),然后對剩

下的于表采用同樣的方法,直到表空為止;歸并:排序是將兩個或兩個以上的有序表組合

成一個新的有序表。

注意:各種排序方法實現(xiàn)過程及實現(xiàn)機(jī)制。

20.C

21.參照完整性參照完整性

22.11解析:本題考查的是基本賦值運(yùn)算符和賦值表達(dá)式。a-=(b-5)等價于a=a-(b-5)=4,c=a=4;a%3=1,c=(a%3)+(b=1)=2,其中b的值被b=1確定為1。

23.77解析:在程序執(zhí)行時,static變量僅初始化一次,下次使用時將使用上次保存的值。

24.-2-2解析:題目中定義并初始化了變量k為0,最后輸出k的值,要求為4,而在此期間只有k+=-(i+j);這條語句改變了k的值,即要求表達(dá)式-(i+j)的值為4。所以,答案應(yīng)該為-2,因為只有i=j=-2時,表達(dá)式-(i+j)的值才為4。

25.2424解析:本題考查函數(shù)的循環(huán)調(diào)用。p=x*func(x-1),當(dāng)x=4時,不滿足if語句的條件,p=4*func(3),x=3也不滿足條件,則func(3)=3*func(2),func(2)=2*func(1),x=1滿足條件return(1),則輸出結(jié)果為4*3*2*1-24。

26.float**zfloat*\r\n*z解析:C程序中可以通過傳送地址的方式在被調(diào)用函數(shù)中直接改變被調(diào)用函數(shù)中變量的值,從而達(dá)到函數(shù)之間數(shù)據(jù)的傳遞。

27.1a61a6解析:對于指針變量的運(yùn)算,就是對地址的運(yùn)算。本題中由于指針指向的是整型變量,所以,使指針變量移動9個位置也就是移動18個字節(jié)。注意,本題是以十六進(jìn)制輸出的。

28.調(diào)試調(diào)試

29.C

30.x==0x==0解析:!x的邏輯意思就是x為非,即x==0。

31.43344334解析:程序?qū)⒆兞縜,b的值傳給函數(shù)swap的形參x,y,并在函數(shù)中對x,y的值進(jìn)行交換,所以在函數(shù)swap中輸出x,y的值4,3,由于c程序的函數(shù)是僧傳遞,實參a,b的值不會隨形參x,y的改變而改變,所以在主函數(shù)中輸出的a,b的值為3,4。

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

33.00解析:函數(shù)getchar()是從鍵盤得到用戶輸入的一個字符。用戶輸入的第1個字符是a,不管后面輸入的是什么ch的值都是'a',因此條件(ch=getchar())=='e'為假,這個循環(huán)不會被執(zhí)行。

34.i+1i

35.線性結(jié)構(gòu)線性結(jié)構(gòu)解析:數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間的邏輯關(guān)系,分為線性結(jié)構(gòu)和非線性結(jié)構(gòu)。常見的線性結(jié)構(gòu)有線性表、棧和隊列等,常見的非線性結(jié)構(gòu)有樹、二叉樹等。

36.1111解析:首先,程序通過scanf()函數(shù)將18和11分別讀入到變量a和b中。然后,因為a!=b為真,進(jìn)入外層while循環(huán)。此時a>b為真,執(zhí)行a-=b;,a的值變?yōu)?8-11=7:接下來b>a也為真,執(zhí)行b-=a;,b的值變?yōu)?1-7=4。此時a!=b還是為真,第2次進(jìn)入外層循環(huán)。a>b為真,執(zhí)行a-=b;,a的值變?yōu)?-4=3。b>a為真,執(zhí)行b-=a;,b的值變?yōu)?-3=1接下來a!=b為真第3次進(jìn)入外層循環(huán)。a>b為真,執(zhí)行a-=b,a的值變?yōu)?-1=2。b>a為假,不執(zhí)行b-=a;;然后第4次進(jìn)入外層循環(huán),a>b為真,執(zhí)行a-=b,a的值變?yōu)?-1=1。b>a為假,不執(zhí)行b-=a;此時a和b均為1了,a!=b條件為假,外層循環(huán)結(jié)束。故本題輸出的結(jié)果是11。

37.100100解析:本題考查帶參數(shù)的宏定義及相關(guān)運(yùn)算。運(yùn)算過程為:k=B*20=(A+3)*20=(2+3)*20=100。

38.a[1][1]a[1][1]解析:p是一個指針數(shù)組,p[0]指向數(shù)組a[1][0]。*(p[0]+1)代表數(shù)組a[1][1]。

39.55解析:分析程序,當(dāng)a=3;b=4;c=5時,判斷語句a>b不成立,所以不執(zhí)行后面的語句,直接執(zhí)行“printf('%d\\n',c);”語句,輸出c的值,輸出結(jié)果為5。

40.p=p+7或p+=7p=p+7或p+=7解析:本題考查通過指針引用數(shù)組元素。值為36的數(shù)組元素在a數(shù)組中是第8個元素,即a[7]。在程序中,p=a;語句將數(shù)組a的首地址賦給了指針變量p,則可以用*(p+i)來表示數(shù)組元素,*(p+i)與a[i]等價,a[7]可表示為*(p+7)。要使指針p指向a[7],可以用p=p+7移動指針,故填寫p=p+7或p+=7。

41.D本題主要考查自加與自減運(yùn)算符。在C語言中,自加與自減運(yùn)算符具有以下性質(zhì):

(1)自加運(yùn)算符“++”和自減運(yùn)算符“--”的運(yùn)算本身是一種賦值運(yùn)算,其結(jié)果是使運(yùn)算對象的值增1或減1。

(2)++、--運(yùn)算符是單目運(yùn)算符,運(yùn)算對象可以是整型變量或字符型變量,也可以是實型變量,但不能是常量和表達(dá)式。

(3)自加、自減運(yùn)算符無論是作為前綴還是后綴運(yùn)算符,對于變量而言,其效果相同,但作為表達(dá)式來說,其值不同。

(4)++和--運(yùn)算符的結(jié)合方向是“自右向左”。

(5)不要在一個表達(dá)式中對同一個變量進(jìn)行多次自增或自減運(yùn)算??梢灾辣绢}正確的答案是D。

42.B

43.D解析:邏輯結(jié)構(gòu)是反映了元素之間的邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu),存儲結(jié)構(gòu)是邏輯結(jié)構(gòu)在計算機(jī)中的存放形式,它們都具有線性結(jié)構(gòu)和非線性結(jié)構(gòu)。邏輯結(jié)構(gòu)有順序、鏈接、索引等存儲結(jié)構(gòu),采用不同的存儲結(jié)構(gòu),數(shù)據(jù)處理的效率不同。

44.D解析:fgetc函數(shù)是指從指定的文件讀入一個字符,該文件必須是以讀或讀寫方式打開的。fgetc函數(shù)的調(diào)用形式為:ch=fgetc(fp);。

45.B解析:C語言中字符串是以'0'字符結(jié)束的,且strlen()函數(shù)計算的是'0'字符前的所有字符的個數(shù)。本題中strlen(st)應(yīng)為5。數(shù)組定義以后系統(tǒng)就為其分配相應(yīng)大小的內(nèi)存空間,而不論其中有投有內(nèi)容。sizeof()函數(shù)是計算變量或數(shù)組的所分配到的內(nèi)存空間的大小。所以本題的sizeof(st)為20。

46.C本題中,首先將0賦給k,表達(dá)式變?yōu)?,跳出循環(huán),沒有執(zhí)行循環(huán)體語句。解答本題的關(guān)鍵是掌握while語句。

47.DD)【解析】需求分析是軟件定義時期的最后一個階

\n段,它的基本任務(wù)就是詳細(xì)調(diào)查現(xiàn)實世界要處理的對象,充分了解原系統(tǒng)的工作概況,明確用戶的各種需求,然后在這些基礎(chǔ)上確定新系統(tǒng)的功能。

48.B解析:本題主要考查結(jié)構(gòu)體和聯(lián)合內(nèi)存使用的區(qū)別:結(jié)構(gòu)中不同的成員分別使用不同的內(nèi)存空間,一個結(jié)構(gòu)所占內(nèi)存空間的大小是結(jié)構(gòu)中每個成員所占內(nèi)存空間大小的總和,結(jié)構(gòu)中每個成員相互獨(dú)立;聯(lián)合所占用的內(nèi)存空間為最長的成員所占用的空間。

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

50.A解析:文件尾測試函數(shù)feof()的應(yīng)用,讀取文件時,當(dāng)文件中的數(shù)據(jù)全部讀完后,文件位置指針將位于文件的結(jié)尾。此時如果讀數(shù)據(jù),將會出現(xiàn)錯誤。為了保證讀寫數(shù)據(jù)的正確性,需要進(jìn)行文件尾測試,文件尾測試使用函數(shù)feof(),它的功能是測試fp指向的文件是否到達(dá)文件尾。若到達(dá)文件尾,返回值為非0,否則返回值為0。在本題中fP指向的某文件還沒有到了文件尾,因此返回0。

51.D解析:本題中是一個含有兩個結(jié)點(diǎn)的循環(huán)鏈表。

C語言中結(jié)構(gòu)體的定義為:

struct結(jié)構(gòu)題類型名

{

成員項表;

};

52.A解析:條件表達(dá)式“a?b:c”的含義是:當(dāng)a為真時,其值等于表達(dá)式b的值;當(dāng)a為假時,其值等于表達(dá)式c的值。

表達(dá)式運(yùn)算過程:第1個表達(dá)式:w=2<x=3為真,所以返回w的值,即m=w=2;第2個表達(dá)式:m=2<z=5為真,所以返回m的值,即m=2;第3個表達(dá)式:w=2<y=4為真,所以返回m的值,即m=2。

53.C\nC)【解析】棧實際也是線性表,只不過是一種特殊的線性表。棧是只能在表的~端進(jìn)行插入和刪除運(yùn)算的線性表,通常稱插入、刪除的這一端為棧頂另一端為棧底。當(dāng)表中沒有元素時稱為空棧。棧頂元素總是最后被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。

\n

54.B解析:C語言規(guī)定,可以在定義變量的同時給變量賦初值,稱為變量初始化。在選項A)中在給n1和n2進(jìn)行賦初值,但變量02沒有定義;在選項C)中定義變量f時,不能在賦值表達(dá)式的右邊出現(xiàn)變量f自身,所以選項C)錯誤:在選項D)用指數(shù)表達(dá)式的常量中,字母E后面的數(shù)應(yīng)該為整數(shù),而不應(yīng)該為小數(shù)形式。因此,選項B)正確。

55.D解析:PDL一種設(shè)計性語言,用于書寫軟件設(shè)計規(guī)約。它是軟件設(shè)計中廣泛使用的語言之一。N-S圖是無線的流程圖,是算法描述工具;PAD圖是問題分析圖,它用二維樹狀結(jié)構(gòu)的圖表示程序的控制流,將這種圖轉(zhuǎn)換為程序代碼比較容易。此3類均是過程設(shè)計工具,數(shù)據(jù)流圖(DataFunctionDiagram):又名數(shù)據(jù)功能圖表,簡稱DFD,是采用圖形方式來表達(dá)系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過程,是結(jié)構(gòu)化系統(tǒng)分析方法的主要表達(dá)工具及用于表示軟件模型的一種圖示方法。

56.D

57.B解析:本題中選項B是錯誤的引用,*(a+i)+j只代表了a[i][j]的地址。

58.A

59.D解析:break語句除了能用于switch語句外,還可以用于循環(huán)語句中,因此選項A不正確。在switch語句中,可以使用default來執(zhí)行所有case均失配時的分支,也可以不使用default,此時若所有case均失配則跳出switch,因此選項B不正確。在switch語句中,每個case的作用就是標(biāo)出一個執(zhí)行的起點(diǎn),當(dāng)符合某個case時,程序就從該case所標(biāo)出的起點(diǎn)處開始執(zhí)行,若沒有break語句中斷執(zhí)行的話,程序會一直執(zhí)行到switch的最后一條語句,而不是碰到下一個case就跳出switch。雖然break與case的配對使用會讓所有case分支互不重疊條理明確,但不配對使用在C語言中也是允許的。因此選項C不正確,應(yīng)該選擇D。

60.A解析:本題考查字符串比較函數(shù)和兩個字符串比較的原則兩個知識點(diǎn),①原則是依次比較兩個字符串同一位置的對字符,若它們的ASCII碼值相同,則繼續(xù)比較下一對字符,若它們的ASCII碼值不同,則ASCII碼值較大的字符所在的字符串較大;若所有字符相同,則兩個字符串相等;若一個字符串全部i個字符與另一個字符串的前i個字符相同,則字符串較長的較大。②strcmp(s1,s2)的返回值,當(dāng)str1<str2時,返回值<0;當(dāng)str1=str2時,返回值為0;當(dāng)str1>str2,返回值>0。

61.A具有良好的程序設(shè)計風(fēng)格是一個程序員必不可少的素質(zhì)。我們在編寫程序時要養(yǎng)成良好的程序設(shè)計習(xí)慣,對程序的要求不僅能夠在計算機(jī)上正確運(yùn)行,而且要便于閱讀和被別人理解,便于程序的調(diào)試和維護(hù)。好的程序設(shè)計風(fēng)格有助于提高程序的正確性、可讀性、可維護(hù)性和可用性。要使程序具有良好的風(fēng)格,必須做到以下幾點(diǎn):

(1)合理的標(biāo)識符的命名。由于一個程序中必然有很多標(biāo)識符,特別是在一個大型復(fù)雜的程序中,標(biāo)識符可能成千上萬,對標(biāo)識符作用的正確理解是讀懂程序的前提,如果程序員隨意命名標(biāo)識符,程序的可讀性會很差。因此,在命名標(biāo)識符時要注意其可理解性。

(2)在程序中添加一定的注釋。注釋是程序員與日后的程序讀者之間詢通的重要工具,它用自然語言或偽碼描述。它說明了程序的功能,特別是在維護(hù)階段,對理解程序提供了明確指導(dǎo)。因此,一定的注釋是程序必不可少的組成部分。

(3)程序的編輯風(fēng)格。為了使程序的結(jié)構(gòu)一目了然,可以在程序中利用空格、空行、縮進(jìn)等技巧使程序?qū)哟吻逦?,便于對程序的理解?/p>

(4)語句的結(jié)構(gòu)。在結(jié)構(gòu)化程序設(shè)計中,單個語句結(jié)構(gòu)是編碼階段的任務(wù),語句結(jié)構(gòu)追求簡單直接,不能為了追求效率而使代碼復(fù)雜化。

總之,程序應(yīng)簡單、清晰、可讀性和可理解性好。

62.C解析:賦值的一般形式為:變量名:表達(dá)式;,賦值的方向為由右向左,即將:右側(cè)表達(dá)式的值賦給:左側(cè)的變量,執(zhí)行步驟是先計算再賦

溫馨提示

  • 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

提交評論