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

下載本文檔

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

文檔簡介

2021-2022年山東省威海市全國計算機等級考試C語言程序設(shè)計學校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.在ASC算法team日常開發(fā)中,常常面臨一些數(shù)據(jù)結(jié)構(gòu)的抉擇,令人糾結(jié)。目前大家在策劃一個FBI項目(FastBinaryIndexing),其中用到的詞匯有6200條,詞匯長度在10-15之間,詞匯字符是英文字母,區(qū)分大小寫。請在下面幾個數(shù)據(jù)結(jié)構(gòu)中選擇一個使檢索速度最快的()

A.二叉搜索樹,比較函數(shù)開銷:1次運算/每字符

B.哈希表,hash算法開銷:10次運算/每字符

C.鏈表,比較函數(shù)開銷:1次運算/每字符

D.TRIE樹,尋找子節(jié)點開銷:1次運算/每字符

3.有以下程序main(){chars[]="abcde";s+=2;printf("%d\n",s[0]);}執(zhí)行后的結(jié)果是______。A.輸出字符a的ASCⅡ碼B.輸出字符c的ASCⅡ碼C.輸出字符cD.程序出錯

4.若有定義;intw[3][5];,則以下不能正確表示該數(shù)組元素的表達式是()。A.*(*w+3)B.*(w+1)[4]C.*(*(w+1))D.*(&w[0][0]+1)

5.以下敘述中正確的是()A.當對文件的讀(寫操作完成之后,必須將它關(guān)閉,否則可能導致數(shù)據(jù)丟失

B.打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋

C.在一個程序中當對文件進行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù)

D.語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)

6.有以下程序:程序運行后的輸出結(jié)果是()。A.6B.10C.8D.4

7.下面不正確的字符賦值或賦初值的方式為()。

A.chars[10]=”hello!”

B.chars[10]={‘h’,‘e’,‘l’,‘l’,‘o’,‘!’}

C.chars[10];s=”hello”

D.char[]=”hello!”

8.下列選項中不是字符常量的是()。

A.'\v'B.'\x2a'C.'a'D."\0"

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

A.7B.0C.3D.8

10.從一個長度為100的順序表中刪除第30個元素時需向前移動()個元素

A.70B.71C.69D.30

11.有以下程序

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;

*q=*(p+5);

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

}

程序運行后的輸出結(jié)果是A.運行后報錯B.66C.611D.510

12.有以下程序:#include<stdio.h>main(){FILE*f;f=fopen(“fllea.txt”,“w”);fprintf(f,“abc”);fclose(f);}若文本文件filea.txt中原有內(nèi)容為hello,則運行以上程序后,文件filea.txt中的內(nèi)容為()。

A.abcloB.abcC.helloabcD.abchello

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

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

14.快速排序在已經(jīng)有序的情況下效率最差,復雜度為()

A.O(nlogn)B.O(n^2logn)C.O(n^1.5)D.O(n^2)

15.數(shù)據(jù)庫的故障恢復一般是由()來執(zhí)行恢復

A.電腦用戶B.數(shù)據(jù)庫恢復機制C.數(shù)據(jù)庫管理員D.系統(tǒng)普通用戶

16.

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

main

{inta,b,d=25;

a=d/10%9;

b=a&&(一1);

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

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

17.計算機系統(tǒng)的組成是______。

A.主機、外設(shè)B.運算器、控制器C.硬件系統(tǒng)和軟件系統(tǒng)D.CPU、內(nèi)存儲器

18.下面敘述中錯誤的是()。

A.軟件測試的目的是發(fā)現(xiàn)錯誤并改正錯誤

B.對被調(diào)試的程序進行“錯誤定位”是程序調(diào)試的必要步驟

C.程序調(diào)試通常也稱為Debug

D.軟件測試應嚴格執(zhí)行測試計劃,排除測試的隨意性

19.已定義以下函數(shù)fun(char*p2,char*p1){while((*p2=*p1)!='0'){P1++;p2++;}}函數(shù)的功能是

A.將p1所指字符串復制到p2所指內(nèi)存空間

B.將P1所指字符串的地址賦給指針p2

C.對p1和p2兩個指針所指字符串進行比較

D.檢查P1和p2兩個指針所指字符串中是否有'\0'

20.

二、2.填空題(20題)21.若有程序:

main()

{inti,j;

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

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

}

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

22.閱讀下面程序,則程序的執(zhí)行結(jié)果為【】。

#include"stdio.h"

fun(intk,int*p)

{inta,b;

if(k==1‖k==2)

*p=1;

else{fun(k-1,&a);

fun(k-2,&b);

*p=a+b;}}

main()

{intx;

fun(6,&x);

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

23.己定義charch='$';inti=l,j;,執(zhí)行j=!ch&&ii++以后,i的值為【】。

24.在對文件進行操作的過程中,若要求文件的位置回到文件的開頭,應當調(diào)用的函數(shù)是【】函數(shù)。

25.若a=1,b=2,則表達式!(x=A)‖(y=B)&&0的值是______。

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

27.軟件危機的核心問題是【】和軟件開發(fā)效率低。

28.數(shù)據(jù)庫系統(tǒng)其內(nèi)部分為三級模式,即概念模式、內(nèi)模式和外模式。其中,______是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式。

29.以下程序運行后的輸出結(jié)果是______。

main()

{

chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*p1+k)==*{p2+k))

printf("%c",*(p1+k));

}

30.下面程序運行后的輸出結(jié)果是()。

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6},*k[3],i=1;

while(i<4)

{k[i-1]=&a[2*i-1];

printf("%d",*k[i-1]);

i++;

}

}

31.若有下列定義:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;,則值為3的表達式為:______。

32.在循環(huán)中,continue語句與break語句的區(qū)別是:______語句只是結(jié)束本次循環(huán),然后進行循環(huán)的條件判定。

33.有以下程序:

intf(intn)

{if(n==1)return1;

elsereturnf(n-1)+1;}

main()

{inti,j=0;

for(i=1;i<3;i++)j+t(i);

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

}

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

34.在C語言中,while和do…while循環(huán)的主要區(qū)別是______的循環(huán)至少被執(zhí)行一次。

35.以下程序運行后的輸出結(jié)果是【】。

main()

{chars[]="9876",*p;

for(p=s;p<s+2;p++)printf("%s\n",p);

}

36.設(shè)x、y、z均為int型變量,請寫出描述“x或y中至少有一個小于z”的表達式______。

37.以下程序的功能是:刪去一維數(shù)組中所有相同的數(shù),使相同的數(shù)只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)fun返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。

例如,若一維數(shù)組中的數(shù)據(jù)是:

2223445666677899101010

刪除后,數(shù)組中的內(nèi)容應該是:2345678910。請?zhí)羁铡?/p>

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{inti,j=1;

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

if(a[j-1]【】a[i])a[j++]=a[i];

【】;

}

main()

{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;

printf("Theoriginaldata:\n");

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

n=fun(a,n);

printf("\nThedataafterdeleted:\n");

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

}

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

main()

{intn=0;

while(n++<=1);

printf("%d,",n);

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

}

39.當運行以下程序時,輸入abcd,程序的輸出結(jié)果是【】。

insert(charstr[])

{inti;

i=stolen(str);

while(i>0)

{str[2*i]=str[i];str[2*i-1]='*';i--;}

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

}

main()

{charstr[40];

seanf("%s",str);insert(str);

}

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

三、1.選擇題(20題)41.以下敘述中錯誤的是()。

A.C語句必須以分號結(jié)束

B.復合語句在語法上被看作一條語句

C.空語句出現(xiàn)在任何位置都不會影響程序運行

D.賦值表達式末尾加分號就構(gòu)成賦值語句

42.以下4個選項中,不能看成一條語句的是

A.;B.a=5,b=2.5,c=3.6;C.if(a<5);D.if(b!=5)x=2;y=6;

43.若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

44.以下程序的輸出結(jié)果是______。#includemain(){char*p1,*p2,str[50]="ABCDEFG";p1="abcd";p2="efgh";strcpy(str+1,p2+1);strcpy(str+3,p1+3);printf("%s",str);}

A.AfgdEFGB.AbfhdC.AfghdD.Afgd

45.以下能正確定義一維數(shù)組的選項是______。

A.inta[5]={0,1,2,3,4,5};

B.chara[]={0,1,2,3,4,5};

C.chara={'A','B','C'};

D.inta[5]="0123";

46.有如下程序:main(){intx=23;do{printf("%d",x--);}while(!x);}程序運行后的輸出結(jié)果是()。

A.321B.23C.不輸出任何內(nèi)容D.陷入死循環(huán)

47.具有3個結(jié)點的二叉樹有

A.2種形態(tài)B.4種形態(tài)C.7種形態(tài)D.5種形態(tài)

48.有以下程序:#include<stdio.h>main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k--;}printf("%d,%d\n",k,n);}程序運行后的輸出結(jié)果是()。

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

49.sizeof(float)是()。A.一個雙精度型表達式B.一個整型表達式C.一種函數(shù)調(diào)用D.一個不合法的表達式

50.下列程序段的執(zhí)行結(jié)果是______。inti=0;while(i++<=2)printf("%d\t",i);

A.123B.12C.1D.無結(jié)果

51.數(shù)據(jù)結(jié)構(gòu)作為計算機的一門學科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對各種數(shù)據(jù)結(jié)構(gòu)進行的運算,以及()。A.A.數(shù)據(jù)的存儲結(jié)構(gòu)B.計算方法C.數(shù)據(jù)映象D.邏輯存儲

52.C語言規(guī)定,在一個C程序中,main()函數(shù)的位置()。

A.必須在系統(tǒng)調(diào)用的庫函數(shù)之后B.必須在程序的開始C.必須在程序的最后D.可以在任意位置

53.若在定義語句:inta,b,c,*p=&c;之后,接著執(zhí)行以下選項中的語句,則能正確執(zhí)行的語句是()。

A.scanf("%d",a,b,c);

B.scanf("%d%d%d",a,b,c):

C.scanf("%d",p);

D.scanf("%d",&p);

54.分析下列程序,其最終執(zhí)行結(jié)果是______。main(){intn[3],i,j,k;for(i=0;i<3;i++)n[i]=O;k=2;for(i=0;i<k;i++)for(j=0;j<k;j++)n[j]=n[i]-1;printf("%d\n",n[0]);}

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

55.下列選項中合法的賦值語句是()。

A.a=b=34B.a=34,b=34C.i-1;D.m=(int)(x+y);

56.下列程序中函數(shù)reverse()的功能是將a所指數(shù)組中的內(nèi)容進行逆置。#include<stdio.h>voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;)}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,10);for(i=0;i<3;i++)s+=b[i];printf("%d\n",s);}程序運行后的輸出結(jié)果是()。

A.27B.6C.25D.30

57.以下函數(shù)值的類型是_______。fun(floatx){floaty;y=3*x-4;returny;}

A.intB.不確定C.voidD.float

58.為了使模塊盡可能獨立,要求()。

A.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強

B.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱

C.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱

D.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強

59.棧通常采用的兩種存儲結(jié)構(gòu)是()。

A.順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)B.散列方式和索引方式C.鏈表存儲結(jié)構(gòu)和數(shù)組D.線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)

60.下面程序的輸出結(jié)果是()main(){intx=2,y=0,z;x+=3+2;printf("%d",x);x*=y(tǒng)=z=4;printf("%d",x);}

A.728B.無法計算C.7,4D.8,4

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

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

62.有以下程序:

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

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

63.

64.有以下程序:

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

A.zB.0C.元素eh[5]的地址D.字符Y的地址

65.若有說明語句:double*p,a;則通過scanf語句正確給輸入項讀人數(shù)據(jù)的程序段是()。

A.*p=&a;scanf("%1f”,p);

B.*p=&a;scanf("%f",p);

C.p=&a;scanf("%",*p);

D.p=&a;scanf("%1f",p);

66.

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

A.a:=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b

68.以下是if語句的基本形式:

if(表達式.語句

其中“表達式”()。

A.必須是邏輯表達式B.必須是關(guān)系表達式C.必須是邏輯表達式或關(guān)系表達式D.可以是任意合法的表達式

69.

70.設(shè)有定義:

71.有以下程序:

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

A.10,1B.20,1C.10,2D.20,2

72.

73.

74.如果intC=3,d=4,k=0,下列描述正確的是()。A.c>d!=k和c>(d!=k)的執(zhí)行順序是一樣的

B.c&&d>k的結(jié)果為假

C.c||(d=k)執(zhí)行后d的值為0

D.!c!=(d!=k)表達式的值為1

75.若程序中有以下說明和定義。

structabc

{

intx;chary;

}

structabcs1,s2;

則會發(fā)生的情況是

A.編譯時出錯B.程序?qū)㈨樞蚓幾g、連接、執(zhí)行

C.能順序通過編譯、連接,但不能執(zhí)行D.能順序通過編譯,但連接出錯

76.若有定義語句:

char}sl=‘’0K”,:Its2=”ok”;

以下選項中,能夠輸出“OK”的語句是()。

A.if(strcmp(sl,s2)!=0)puts(s2);

B.if(strcmp(sl,s2)!=0)puts(s1);

C.if(strcmp(sl,s2)==1)puts(s1);

D.if(strcmp(sl,s2)==0)puts(s1);

77.設(shè)char型變量x中的值為10100111,則表達式(2+x)^(~3)的值是

A.10101001B.10101000C.11111101D.01010101

78.若已定義inta=25,b=14,c=19;以下三目運算符(?:)所構(gòu)成的語句執(zhí)行后a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序輸出的結(jié)果是

A.***a=25,b=13,c=19B.***a=26,b=14,c=19

C.###a=25,b=13,c=19D.###a=26,b=14,c=19

79.有以下程序程序的運行結(jié)果是()

A.8,5,4,2,B.8,7,5,2C.9,7,6,4,D.7,4,2,

80.設(shè)有表示學生選課的三張表,學生s(學號,姓名,性別,年齡,身份證號),課程c(課號,課名),選課SC(學號,課號,成績),則表sc的關(guān)鍵字(鍵或碼)為()。

A.課號,成績B.學號,成績C.學號,課號D.學號,姓名,成績

五、程序改錯題(1題)81.下列給定程序中,函數(shù)proc()的功能是:給一維數(shù)組arr輸人任意4個整數(shù),并按如下的規(guī)律輸出。例如,若輸入2345,則程序運行后輸出以下矩陣:請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、程序設(shè)計題(1題)82.程序定義了M×M的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)proc(inta[][M],intn),該函數(shù)的功能是使數(shù)組左下半三角元素中的值加上n。例如,a數(shù)組中的值為:

注意:部分源程序給出如下。

請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。

試題程序:

參考答案

1.A

2.D

3.D解析:此題中s是—個字符數(shù)組,而字符數(shù)紐是在編繹時為它分配內(nèi)存單元的,即此字符數(shù)組的地址在編譯時是確定的,所以對此地址變量并不能賦值,故語句“s+=2;”錯誤,故程序出錯。

4.B通過—維數(shù)組名或指向維數(shù)組元素的指針來引用數(shù)組元素有兩種寫法:a[i]和*(a+i),它們是等價的。這是一種運算符之間的等價轉(zhuǎn)換,就好像a-(b-C)等價于a-b+c一樣。知道了這種轉(zhuǎn)換,我們可以將之擴展到二維數(shù)組甚至任意維數(shù)組上來。因為[]運算符的結(jié)合性是從左至右的,所以w[i][j]等價于(w[i][j],此時可以先將任意一個[]運算符轉(zhuǎn)換為指針形式為:(*(w+i)[j]或*(w[i]+j),或者同時轉(zhuǎn)換:*(*(w+i)+j)。上述幾種形式都完全等價于w[i][j]。選項A中,*(*w+3)可以看成*(*(w+0)+3),即w[0][3],是正確的。選項B小,因為[]運算符的優(yōu)先級高于*運算符,所以*(w+1)[4]等價于*((w+1)[4]等價于*(*((w+1)+4)),即*(*(w+5)+0),它等價于w[5][0],很明顯它超過數(shù)組的范圍了,故不正確。選項C等價于w[1][0],是下確的。選項D中,&w[0][0]是數(shù)組w第1個元素的地址,它等價于&*(*(w+0)+0),外面的&和*可以抵消,就好像先乘以個數(shù),然后再除以這個數(shù)一樣。所以,&w[0][0]等價于*(w+0)+0。即*w。所以原式就變?yōu)?(*w+1)等價于w[0][1],這個也是合法的。綜上所述,本題應該選擇B。

5.AB)選項中打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)不一定被覆蓋,也可以對源文件進行追加操作等。C)選項中在一個程序中當對文件進行了寫操作后,不用先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù),可以用fseek()函數(shù)進行重新定位即可。D)選項中,C語言中的文件可以進行隨機讀寫。

6.C題干中,整型指針變量Pk指向k,Pm指向m,所以右邊表達式“*pk*(*pm)”的值為“k*m”,即2*4=8;左邊表達式“*(p=&n)”先將變量n的地址賦給p,然后對p解引用,引用到n,將n的值賦為8。本題答案為C選項。

7.C

8.Dc語言規(guī)定,一個字符常量代表ASCII碼字符集里的一個字符,在群序中用單引號括起來,以便區(qū)分。'\v'表示的是豎向跳格:'kx2a'表示的是兩位十六迸制數(shù);'a'表示的是字符a對應的ASCII碼值。"\0"用雙引號故不正確。

9.C根據(jù)題意,要求統(tǒng)計字符數(shù)組s中阿拉伯數(shù)字的個數(shù)?!癱hars[]=“012xy\\08s34f4w2”;”,其元素是字符型。字符‘0的ASCII值是48,字符‘\\0’的ASCII值是0,因此可以計算出‘\\0’之前阿拉伯數(shù)字的個數(shù),由字符數(shù)組s可知,有3個阿拉伯數(shù)字。故本題答案為C選項。

10.A

11.C解析:本題中第一行代碼對指針P進行了初始化,其指向數(shù)組a的第6個元素,在其后的操作中p的值也沒有改變過,所以最后輸出*p=*\u3000\u3000(p+0)\u3000\u3000=a\u3000[5]\u3000=6,而第二行代碼中對q指向的值進行賦值,等價于*q=a[10]=11,所以輸出結(jié)果*q為11。

12.B執(zhí)行“fprintf(f,“abc”);”后,f文件原有內(nèi)容被“abc”覆蓋。故本題答案為B選項。

13.C棧和隊列都是一種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區(qū)別是:棧只允許在表的一端進行插入或刪除操作,是一種“后進先出”的線性表;而隊列只允許在表的一端進行插入操作,在另一端進行刪除操作,是一種“先進先出”的線性表:本題答案為C)。

14.D

15.CC)【解析】數(shù)據(jù)庫一旦發(fā)生故障,需要及時進行故障恢復,并由數(shù)據(jù)庫管理員負責執(zhí)行故障恢復。

16.B

\n當邏輯運算符“&&”兩邊的值是非零時,邏輯表達式的值為真(即為1)。所以b=2&&(-1)=1,2%9=2,故a=2,故先算a/10=25/10=2。

\n

17.C

18.A軟件測試的目的是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,并不涉及改正錯誤,所以選項A錯誤。程序調(diào)試的基本步驟有:錯誤定位、修改設(shè)計和代碼,以排除錯誤、進行回歸測試,防止引進新的錯誤。程序調(diào)試通常稱為Debug,即排錯。軟件測試的基本準則有:所有測試都應追溯到需求、嚴格執(zhí)行測試計劃,排除測試的隨意性、充分注意測試中的群集現(xiàn)象、程序員應避免檢查自己的程序、窮舉測試不可能、妥善保存測試計劃等文件。故答案為A選項。

19.A解析:fun()函數(shù)中聲明了兩個字符串指針作為形參,在其函數(shù)體中用了一個while循環(huán),首先while括號內(nèi)表達式*p2=*p1是將p1所指的內(nèi)容賦值到P2所指的存儲空間中,然后再判斷是否為'\\0',表達式的值為真時,執(zhí)行循環(huán)體,指針p1和指針P2分別下移一位,當p1指向字符'\\0'時,表達式的值為假,循環(huán)結(jié)束,故此函數(shù)的功能是將p1所指字符串復制到p2所指內(nèi)存空間中。

20.D

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

22.88解析:函數(shù)可以被遞歸調(diào)用,但是不能遞歸定義。有返回值的函數(shù)調(diào)用可以出現(xiàn)在表達式可以出現(xiàn)的任何地方。

23.11解析:本題中的ch是一個字符變量,其初始值為'$'(非0值即為真),所以!ch的結(jié)果為假,此時&&右邊的i++被“短路”,即不會被計算。由此可見,i的值不會改變,故本題應該填1。

24.rewind()或fseek()rewind()或fseek()

25.00解析:根據(jù)運算符的運算順序可知,該表達式最后運算的是與(&&)運算,而任何表達式與“0”進行“與”運算,結(jié)果都為0。

26.線性結(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)有樹、二叉樹等。

27.軟件質(zhì)量差軟件質(zhì)量差解析:大約在20世紀60年代末人們在計算機軟件的開發(fā)和維護過程中,遇到了一系列嚴重問題,從而認識到軟件危機的存在。軟件危機的核心問題是軟件開發(fā)的質(zhì)量太差和軟件系統(tǒng)開發(fā)的效率太低。

28.外模式外模式解析:數(shù)據(jù)庫系統(tǒng)的三級模式分別是內(nèi)模式、概念模式和外模式。其中,物理模式給出了數(shù)據(jù)庫的物理存儲結(jié)構(gòu)和存取方法;概念模式是數(shù)據(jù)庫系統(tǒng)中全局數(shù)據(jù)邏輯結(jié)構(gòu)的描述;外模式是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式。

29.gaegae解析:主函數(shù)中定義了字符數(shù)組a和b,其初值分別為Language和Programe,然后定義了兩個指針變量p1和p2,并讓它們指向a和b。通過分析可知下面的for循環(huán)中,每循環(huán)一次就將pl+k和p2+k所指向的字符進行比較,如果相等,輸出該字符,循環(huán)共執(zhí)行8次,顯然Language和Programe中只有字符gae相等,所以最后輸出為gae。

30.246

31.p+=2*(p++)p+=2,*(p++)解析:由題可知a[2]=3,因此只要使指針p指向a[3],然后再引用指針的值就可以了。

32.continuecontinue解析:continue語句只是結(jié)束本次循環(huán),然后進行循環(huán)的條件判定。break語句是終止整個循環(huán)的執(zhí)行,不再進行條件判定。

33.33解析:i=1時,f(1)=1,j=j+f(1)=0+1=1;i=2時,f(2)=f(1)+1=1+1=2:j=j+f(2)=1+3=3;此時循環(huán)結(jié)束,程序運行后的輸出結(jié)果是3。

34.do…whiledo…while解析:考查while和do…while循環(huán)的主要區(qū)別。while循環(huán)的控制出現(xiàn)在循環(huán)體之前,只有當while后面的表達式的值為非零時,才可能執(zhí)行循環(huán)體;在do…while構(gòu)成的循環(huán)體中,總是先執(zhí)行一次循環(huán)體,然后再求表達式的值,因此無論表達式的值是否為零,循環(huán)體至少要被執(zhí)行一次。

35.98768769876\r\n876解析:指針是一種數(shù)據(jù)類型,這種數(shù)據(jù)類型的變量用來存放內(nèi)存中分配的存儲單元的首地址。指針的定義:

類型說明符*指針變量名;

36.x<z‖y<zx<z‖y<z解析:本題考查邏輯運算符和邏輯表達式。x或y中至少有一個小于z,即x<z或y<z,是“或”的關(guān)系。

37.!=returnj!=returnj解析:函數(shù)fun中,變量j用于控制刪除后剩下的數(shù)中的下標,i用于搜索原數(shù)組中的元素。j始終是新數(shù)組已有元素中最后一個元素的下一個元素的下標,所以訂語句中的條件是a[j-1]!=a[i],其中a[j-1]就是新數(shù)組中的最后一個元素,若條件成立則表示出現(xiàn)了不同的值,a[i]要添加到新數(shù)組中。該算法只能用于數(shù)組已排序的題目中。

38.333,3解析:本題在while(n++<=1)語句后,直接加了分號,說明如果while()的條件為真時,該循環(huán)什么都不做:n++是先取n的當前值和1做比較,然后再將n加1。第一次循環(huán),n=0時,循環(huán)條件n++=<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的當前值3,然后再將n加l,即程序結(jié)束后得到n=4,但輸出的是3。

39.a*b*c*d*a*b*c*d*解析:程序中的變量i用于存放字符串str的長度,執(zhí)行while語句,通過分析可知,字符串第2*i項的值可由第i項的值得到;第2*i-1項直接賦值為。號,i減1,如此反復直到不滿足i>0的條件時,輸出運行后的字符串。

40.fseek(文件指針位移量起始點)fseek(文件指針,位移量,起始點)解析:本題考查函數(shù)fseek的用法。fseek函數(shù)的調(diào)用形式為:

fseek(文件指針,位移量,起始點)

“起始點”用0,1或2代替,其中,0代表“文件開始”;1為“當前位置”;2為“文件末尾”。“位移量”指以“起始點”為基點,向前移動的字節(jié)數(shù)。ANSIC和大多數(shù)C版本要求位移量是long型數(shù)據(jù),這樣當文件的長度大于64k時不致出現(xiàn)問題。ANSIC標準規(guī)定在數(shù)字的末尾加一個字母L,就表示long型。

41.C解析:C語句必須以分號結(jié)束,選項A是正確的。復合語句在語法上被看作一條語句,選項B也是正確的??照Z句也算是一條語句,因此如果空語句出現(xiàn)在條件或者循環(huán)語句中,一樣會被當作條件子句或者循環(huán)體來看待,所以選項c是錯誤的。賦值表達式末尾加分號就構(gòu)成賦值語句,選項D正確。故本題應該選擇C。

42.D解析:選項D)為兩條語句。

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

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

44.D

45.B解析:選項A)定義的是長度為5的數(shù)組元素,但初值有6個元素,所以錯誤;選項C)不符合數(shù)組定義形式,數(shù)組名后應加上“[];選項D)的類型說明符錯誤,應改為char;選項B)中的0,1,2,3,4,5分別表示對應字符的ASCII碼,所以正確。

46.B解析:本題中使用do-while循環(huán),每執(zhí)行一次循環(huán)體輸出x的值后將x減1。當x=23,執(zhí)行循環(huán)體輸出x為23,X=X-1=23-1=22,判斷循環(huán)條件是否成立,因為x=22,!x的值為0,終止循環(huán),因此只輸出23。

47.D解析:因為二叉樹有左、右子樹之分,所以有3個結(jié)點的二叉樹具有5種不同的形態(tài)。

48.C解析:本題考查循環(huán)和continue語句,continue語句的功能是結(jié)束本次循環(huán)。n從0開始循環(huán),判斷n%3!=0是否成立,如果成立,結(jié)束本次循環(huán),繼續(xù)下一次for循環(huán);否則執(zhí)行k--,并繼續(xù)下一次for循環(huán),直至循環(huán)結(jié)束。在程序中,當n取1,2時,不執(zhí)行k--,當n取3時,執(zhí)行k--,k變?yōu)?,循環(huán)結(jié)束,輸出k,n的值分別為3,3。

49.B該函數(shù)用于數(shù)據(jù)類型和變量。注意:sizeof操作符不能用于函數(shù)、不完全類型或位字段。不完全類型指具有未知存儲大小的數(shù)據(jù)類型,如未知存儲大小的數(shù)組類型、void類型等。

50.A解析:i++是先取值后判斷,再自加,循環(huán)體輸出自加后的值,循環(huán)體執(zhí)行3次,控制符\\t是移動水平制表位。

51.A解析:數(shù)據(jù)結(jié)構(gòu)作為計算機的一門學科,主要研究和討論以下三個方面的問題:①數(shù)據(jù)集合中各數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);②在對數(shù)據(jù)進行處理時,各數(shù)據(jù)元素在計算機中的存儲關(guān)系,即數(shù)據(jù)的存儲結(jié)構(gòu);③對各種數(shù)據(jù)結(jié)構(gòu)進行的運算。

52.D解析:每個C程序有且只有一個主函數(shù)(main),且程序必須從main()函數(shù)開始執(zhí)行,而且main()函數(shù)可以放在程序中的任意位置。

53.C

\n題中整型指針變量P存放的是變量C的地址。所以本題答案為C。

\n

54.D解析:當i為0,內(nèi)循環(huán)在j為0時,執(zhí)行n[j]=n[i]-1;,即n[0]=n[0]-1,n[0]值變?yōu)?1:在j為1時,執(zhí)行n[j]=n[i]-1;,即n[1]=n[0]-1,將-2賦給n[1]。當i為1時,內(nèi)循環(huán)在j為0時,執(zhí)行n[j]=n[i]-1;,即n[0]=n[1]-1,n[0]值變?yōu)?3;在j為1時,執(zhí)行n[j]=n[i]-1;,即n[1]=n[1]-1,將-3賦給n[1];最后n[0]和n[1]的值均為-3。

55.D解析:選項A)是一個合法的賦值表達式,但結(jié)尾沒加分號,所以它不是一個賦值語句;選項B)是一個逗號表達式,也因為結(jié)尾沒有加分號而不是合法的賦值語句,選項C)是一個算術(shù)表達式,雖然有分號,但這個表達式?jīng)]有賦值操作,因此,也不是一條賦值語句。

56.A解析:本題考查函數(shù)調(diào)用時的參數(shù)傳遞。函數(shù)reverse將數(shù)組b進行了逆置,此時的b[10]={10,9,8,7,6,5,4,3,2,1},后面for語句的功能是將b中的前3個數(shù)累加,將結(jié)果放在s中,最后將s輸出,結(jié)果s=10+9+8=27。

57.A解析:函數(shù)定義時如果數(shù)據(jù)類型默認,則默認為int。函數(shù)中如果有“retum(表達式):”語句,表達式的類型可能與函數(shù)的類型不一致,但它并不能改變函數(shù)的類型,實際情況是把表達式轉(zhuǎn)換為函數(shù)值的類型作為返回值,因此本題的函數(shù)值類型是int。

58.B解析:模塊獨立性是指每個模塊只完成系統(tǒng)要求的獨立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。耦合性與內(nèi)聚性是模塊獨立性的兩個定性標準,耦合與內(nèi)聚是相互關(guān)聯(lián)的。在程序結(jié)構(gòu)中,各模塊的內(nèi)聚性越強,則耦合性越弱。一般較優(yōu)秀的軟件設(shè)計,應盡量做到高內(nèi)聚,低耦合,即減弱模塊之間的耦合性和提高模塊內(nèi)的內(nèi)聚性,有利于提高模塊的獨立性。本題答案為B。

59.A解析:和線性表類似,棧也有兩種存儲方法,一是順序棧,二是鏈式棧。棧的順序存儲結(jié)構(gòu)是利用一組地址連續(xù)的存儲單元一次存儲自棧底到棧頂?shù)臄?shù)據(jù)元素,同時附設(shè)指針top指示棧頂元素的位置,由于棧的操作是線性表操作的特例,相對而言,鏈式棧的操作更易于實現(xiàn)。注意:這3種運算方法在各種存儲結(jié)構(gòu)中的應用。

60.A

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

62.A在函數(shù)point函數(shù)調(diào)用時,系統(tǒng)自動為函數(shù)的形參P分配內(nèi)存空間,并賦值為實參P的值。當執(zhí)行語句P+=3;時,系統(tǒng)操作的是形參P的內(nèi)存空間,更改形參P的內(nèi)容,而實參指針變量P的值未受影響,即指針變量作為函數(shù)參

63.A

64.A本題考查的是指向數(shù)組的指針。本題中定義了一個字符串數(shù)組和指針,并將指針pc指向該數(shù)組的首地址,執(zhí)行輸出語句printf(”%c\n”,*(pc+5));。語句中的

*(pc+5)指的就是pc[5]的值,所以最后輸出的結(jié)果為z。

65.Ddouble*p,a定義了一個指向雙精度型的指針變量P和雙精度型變量a,p=&a表示將變量a的地址賦給指針變量p;scanf("%If",p)表示用鍵盤輸入的數(shù)賦給指針變量P所指向的地址單元中,scanf函數(shù)要求在輸入double型數(shù)據(jù),格式控制符必須用%1f。否則,數(shù)據(jù)不能正確輸入。所以選項D正確。

66.D

67.B解析:a=b=c+2實際上相當于a=(b=c+2),進而可分解為兩個表達式:b=c+2和a=b。注意:選項A)中包含一個不合法的運算符“:=”;選項C)應改為(int)18.5%3;選項D)可理解為兩個表達式:a+7=c+b和a=a+7,其中第一個是錯的,因為C++語言規(guī)定賦值號的左邊只能是單個變量,不能是表達式或常量等。注意:C++語言賦值語句的運用,

68.D解析:本題主要考查關(guān)于if語句的說明,if后面圓括號中的表達式,可是任意合法的C語言表達式(如:邏輯表達式、關(guān)系表達式、算術(shù)表達式、賦值表達式等),也可以是任意類型的數(shù)據(jù)(如:整型、實型、字符型、指針型等。)

69.B

70.A字符數(shù)組不能整體賦值,所以A)錯誤。

71.C數(shù)組名的值即為數(shù)組首地址,所以P->y可得第一個元素的y值,(++P)→x可得第二個元素的X值。

72.C

73.B

74.DA)中>的優(yōu)先級大于!=,所以執(zhí)行順序不一樣;B)中c和d>k都為真,所以整個表達式為真;C)中不用執(zhí)行d=k,因為c就可以確定這個表達式的值。

75.A本題考查結(jié)構(gòu)體變量的定義。按題目給出的定義編譯時會出現(xiàn)以下錯誤:“Toomanytypeindeclarationinfunctonmain”,這是因為右花括號后面缺少了一個分號。

76.Bstrcmp(sl,s2)是字符串比較函數(shù),比較規(guī)則是兩個字符串自左向右逐個字符相比(按照ASCIl碼值大小),-以第一個不相同的字符的大小作為比較結(jié)果。因為。O。<10.,所以strcmp(sl,s2)為負值,只有B選項正確。

77.D本題主要考查位運算?!鞍次蝗》础边\算(~)是單目運算符,運算對象應置于運算符的右邊,其功能是把運算對象的各二進制位求反;“按位異或”運算(^)是雙目運算符,其功能是把參與運算的兩數(shù)各對應的二進制位相異或。該操作通常用來使一個數(shù)中某些指定位翻轉(zhuǎn),而另一些位保持不變。

本題中,首先定義一個字符型變量x,并給出了該變量的二進制表示形式,然后求表達式(2+x)^(~3)的結(jié)果值,在該表達式中,首先運算(~3)和(2+x)部分,3轉(zhuǎn)換為二進制數(shù)的表示為00000011,對它進行取反運算的結(jié)果為11111100,2轉(zhuǎn)換為二進制數(shù)的表示形式為00000010,它與x的值10100111進行加運算后的結(jié)果為10101001(進行這個計算時需要注意:由于變量x是一個符號類型,無負值)。然后對10101001與11111100進行“按位異或”運算,得到結(jié)果01010101。因此本題的正確答案選D。

78.C此題綜合考查多種運算符的使用。首先計算表達式a<=25&&b--<=2&&c的值,很容易看出b--<=2的值為假,因此,表達式為假;根據(jù)三目運算的特點,由于前面的表達式為假,應執(zhí)行printf('###a=%d,b=%d,c=%d\n',a,b,c)。應注意a的值依然為25,b的值經(jīng)過b--運算后改變?yōu)?3,而c的值仍為19。

79.A第一次x為8,輸出8,第二次x為6,輸出5,第三次x為4,輸出4,第四次x為2,輸出2,循環(huán)結(jié)束,所以答案選擇A)

80.C學號是學生表S的主鍵,課號是課程表C的主鍵,所以選課表SC的關(guān)鍵字就應該是與前兩個表能夠直接聯(lián)系且能唯一定義的學號和課號,所以選擇C項。

81.(1)錯誤:voidproc(intarr)

正確:voidproc(int*arr)

(2)錯誤:arrEj]=arr[j+1];

正確:arr[j]=arr[j-1];

【解析】由主函數(shù)ee的函數(shù)調(diào)用可知,函數(shù)proc的形參為整型的指針變量。因此,“voidproc(intarr)”應改為“voidproc(int*arr)”。從“a[j]=a[j+1];”可知,當“j=M-1”

時“a[j+1];”越界了,而程序的思路是把前一個數(shù)放到后一個中,再把最后面的數(shù)放到第一個中,因此把arr[j+1]改為arr[j-1]。

82.

【解析】使數(shù)組左下半三角元素中的值加上n,首先要找出數(shù)組中下半三角元素。數(shù)組中下半三角元素的特點是,其列下標小于等于行下標。根據(jù)這個特點找出所有的下半三角元素再加上n放在原來的位置上。

2021-2022年山東省威海市全國計算機等級考試C語言程序設(shè)計學校:________班級:________姓名:________考號:________

一、單選題(20題)1.

2.在ASC算法team日常開發(fā)中,常常面臨一些數(shù)據(jù)結(jié)構(gòu)的抉擇,令人糾結(jié)。目前大家在策劃一個FBI項目(FastBinaryIndexing),其中用到的詞匯有6200條,詞匯長度在10-15之間,詞匯字符是英文字母,區(qū)分大小寫。請在下面幾個數(shù)據(jù)結(jié)構(gòu)中選擇一個使檢索速度最快的()

A.二叉搜索樹,比較函數(shù)開銷:1次運算/每字符

B.哈希表,hash算法開銷:10次運算/每字符

C.鏈表,比較函數(shù)開銷:1次運算/每字符

D.TRIE樹,尋找子節(jié)點開銷:1次運算/每字符

3.有以下程序main(){chars[]="abcde";s+=2;printf("%d\n",s[0]);}執(zhí)行后的結(jié)果是______。A.輸出字符a的ASCⅡ碼B.輸出字符c的ASCⅡ碼C.輸出字符cD.程序出錯

4.若有定義;intw[3][5];,則以下不能正確表示該數(shù)組元素的表達式是()。A.*(*w+3)B.*(w+1)[4]C.*(*(w+1))D.*(&w[0][0]+1)

5.以下敘述中正確的是()A.當對文件的讀(寫操作完成之后,必須將它關(guān)閉,否則可能導致數(shù)據(jù)丟失

B.打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋

C.在一個程序中當對文件進行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù)

D.語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)

6.有以下程序:程序運行后的輸出結(jié)果是()。A.6B.10C.8D.4

7.下面不正確的字符賦值或賦初值的方式為()。

A.chars[10]=”hello!”

B.chars[10]={‘h’,‘e’,‘l’,‘l’,‘o’,‘!’}

C.chars[10];s=”hello”

D.char[]=”hello!”

8.下列選項中不是字符常量的是()。

A.'\v'B.'\x2a'C.'a'D."\0"

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

A.7B.0C.3D.8

10.從一個長度為100的順序表中刪除第30個元素時需向前移動()個元素

A.70B.71C.69D.30

11.有以下程序

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;

*q=*(p+5);

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

}

程序運行后的輸出結(jié)果是A.運行后報錯B.66C.611D.510

12.有以下程序:#include<stdio.h>main(){FILE*f;f=fopen(“fllea.txt”,“w”);fprintf(f,“abc”);fclose(f);}若文本文件filea.txt中原有內(nèi)容為hello,則運行以上程序后,文件filea.txt中的內(nèi)容為()。

A.abcloB.abcC.helloabcD.abchello

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

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

14.快速排序在已經(jīng)有序的情況下效率最差,復雜度為()

A.O(nlogn)B.O(n^2logn)C.O(n^1.5)D.O(n^2)

15.數(shù)據(jù)庫的故障恢復一般是由()來執(zhí)行恢復

A.電腦用戶B.數(shù)據(jù)庫恢復機制C.數(shù)據(jù)庫管理員D.系統(tǒng)普通用戶

16.

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

main

{inta,b,d=25;

a=d/10%9;

b=a&&(一1);

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

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

17.計算機系統(tǒng)的組成是______。

A.主機、外設(shè)B.運算器、控制器C.硬件系統(tǒng)和軟件系統(tǒng)D.CPU、內(nèi)存儲器

18.下面敘述中錯誤的是()。

A.軟件測試的目的是發(fā)現(xiàn)錯誤并改正錯誤

B.對被調(diào)試的程序進行“錯誤定位”是程序調(diào)試的必要步驟

C.程序調(diào)試通常也稱為Debug

D.軟件測試應嚴格執(zhí)行測試計劃,排除測試的隨意性

19.已定義以下函數(shù)fun(char*p2,char*p1){while((*p2=*p1)!='0'){P1++;p2++;}}函數(shù)的功能是

A.將p1所指字符串復制到p2所指內(nèi)存空間

B.將P1所指字符串的地址賦給指針p2

C.對p1和p2兩個指針所指字符串進行比較

D.檢查P1和p2兩個指針所指字符串中是否有'\0'

20.

二、2.填空題(20題)21.若有程序:

main()

{inti,j;

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

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

}

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

22.閱讀下面程序,則程序的執(zhí)行結(jié)果為【】。

#include"stdio.h"

fun(intk,int*p)

{inta,b;

if(k==1‖k==2)

*p=1;

else{fun(k-1,&a);

fun(k-2,&b);

*p=a+b;}}

main()

{intx;

fun(6,&x);

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

23.己定義charch='$';inti=l,j;,執(zhí)行j=!ch&&ii++以后,i的值為【】。

24.在對文件進行操作的過程中,若要求文件的位置回到文件的開頭,應當調(diào)用的函數(shù)是【】函數(shù)。

25.若a=1,b=2,則表達式!(x=A)‖(y=B)&&0的值是______。

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

27.軟件危機的核心問題是【】和軟件開發(fā)效率低。

28.數(shù)據(jù)庫系統(tǒng)其內(nèi)部分為三級模式,即概念模式、內(nèi)模式和外模式。其中,______是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式。

29.以下程序運行后的輸出結(jié)果是______。

main()

{

chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*p1+k)==*{p2+k))

printf("%c",*(p1+k));

}

30.下面程序運行后的輸出結(jié)果是()。

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6},*k[3],i=1;

while(i<4)

{k[i-1]=&a[2*i-1];

printf("%d",*k[i-1]);

i++;

}

}

31.若有下列定義:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;,則值為3的表達式為:______。

32.在循環(huán)中,continue語句與break語句的區(qū)別是:______語句只是結(jié)束本次循環(huán),然后進行循環(huán)的條件判定。

33.有以下程序:

intf(intn)

{if(n==1)return1;

elsereturnf(n-1)+1;}

main()

{inti,j=0;

for(i=1;i<3;i++)j+t(i);

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

}

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

34.在C語言中,while和do…while循環(huán)的主要區(qū)別是______的循環(huán)至少被執(zhí)行一次。

35.以下程序運行后的輸出結(jié)果是【】。

main()

{chars[]="9876",*p;

for(p=s;p<s+2;p++)printf("%s\n",p);

}

36.設(shè)x、y、z均為int型變量,請寫出描述“x或y中至少有一個小于z”的表達式______。

37.以下程序的功能是:刪去一維數(shù)組中所有相同的數(shù),使相同的數(shù)只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)fun返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。

例如,若一維數(shù)組中的數(shù)據(jù)是:

2223445666677899101010

刪除后,數(shù)組中的內(nèi)容應該是:2345678910。請?zhí)羁铡?/p>

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{inti,j=1;

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

if(a[j-1]【】a[i])a[j++]=a[i];

【】;

}

main()

{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;

printf("Theoriginaldata:\n");

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

n=fun(a,n);

printf("\nThedataafterdeleted:\n");

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

}

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

main()

{intn=0;

while(n++<=1);

printf("%d,",n);

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

}

39.當運行以下程序時,輸入abcd,程序的輸出結(jié)果是【】。

insert(charstr[])

{inti;

i=stolen(str);

while(i>0)

{str[2*i]=str[i];str[2*i-1]='*';i--;}

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

}

main()

{charstr[40];

seanf("%s",str);insert(str);

}

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

三、1.選擇題(20題)41.以下敘述中錯誤的是()。

A.C語句必須以分號結(jié)束

B.復合語句在語法上被看作一條語句

C.空語句出現(xiàn)在任何位置都不會影響程序運行

D.賦值表達式末尾加分號就構(gòu)成賦值語句

42.以下4個選項中,不能看成一條語句的是

A.;B.a=5,b=2.5,c=3.6;C.if(a<5);D.if(b!=5)x=2;y=6;

43.若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

44.以下程序的輸出結(jié)果是______。#includemain(){char*p1,*p2,str[50]="ABCDEFG";p1="abcd";p2="efgh";strcpy(str+1,p2+1);strcpy(str+3,p1+3);printf("%s",str);}

A.AfgdEFGB.AbfhdC.AfghdD.Afgd

45.以下能正確定義一維數(shù)組的選項是______。

A.inta[5]={0,1,2,3,4,5};

B.chara[]={0,1,2,3,4,5};

C.chara={'A','B','C'};

D.inta[5]="0123";

46.有如下程序:main(){intx=23;do{printf("%d",x--);}while(!x);}程序運行后的輸出結(jié)果是()。

A.321B.23C.不輸出任何內(nèi)容D.陷入死循環(huán)

47.具有3個結(jié)點的二叉樹有

A.2種形態(tài)B.4種形態(tài)C.7種形態(tài)D.5種形態(tài)

48.有以下程序:#include<stdio.h>main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k--;}printf("%d,%d\n",k,n);}程序運行后的輸出結(jié)果是()。

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

49.sizeof(float)是()。A.一個雙精度型表達式B.一個整型表達式C.一種函數(shù)調(diào)用D.一個不合法的表達式

50.下列程序段的執(zhí)行結(jié)果是______。inti=0;while(i++<=2)printf("%d\t",i);

A.123B.12C.1D.無結(jié)果

51.數(shù)據(jù)結(jié)構(gòu)作為計算機的一門學科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對各種數(shù)據(jù)結(jié)構(gòu)進行的運算,以及()。A.A.數(shù)據(jù)的存儲結(jié)構(gòu)B.計算方法C.數(shù)據(jù)映象D.邏輯存儲

52.C語言規(guī)定,在一個C程序中,main()函數(shù)的位置()。

A.必須在系統(tǒng)調(diào)用的庫函數(shù)之后B.必須在程序的開始C.必須在程序的最后D.可以在任意位置

53.若在定義語句:inta,b,c,*p=&c;之后,接著執(zhí)行以下選項中的語句,則能正確執(zhí)行的語句是()。

A.scanf("%d",a,b,c);

B.scanf("%d%d%d",a,b,c):

C.scanf("%d",p);

D.scanf("%d",&p);

54.分析下列程序,其最終執(zhí)行結(jié)果是______。main(){intn[3],i,j,k;for(i=0;i<3;i++)n[i]=O;k=2;for(i=0;i<k;i++)for(j=0;j<k;j++)n[j]=n[i]-1;printf("%d\n",n[0]);}

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

55.下列選項中合法的賦值語句是()。

A.a=b=34B.a=34,b=34C.i-1;D.m=(int)(x+y);

56.下列程序中函數(shù)reverse()的功能是將a所指數(shù)組中的內(nèi)容進行逆置。#include<stdio.h>voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;)}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,10);for(i=0;i<3;i++)s+=b[i];printf("%d\n",s);}程序運行后的輸出結(jié)果是()。

A.27B.6C.25D.30

57.以下函數(shù)值的類型是_______。fun(floatx){floaty;y=3*x-4;returny;}

A.intB.不確定C.voidD.float

58.為了使模塊盡可能獨立,要求()。

A.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強

B.模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱

C.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱

D.模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強

59.棧通常采用的兩種存儲結(jié)構(gòu)是()。

A.順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)B.散列方式和索引方式C.鏈表存儲結(jié)構(gòu)和數(shù)組D.線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)

60.下面程序的輸出結(jié)果是()main(){intx=2,y=0,z;x+=3+2;printf("%d",x);x*=y(tǒng)=z=4;printf("%d",x);}

A.728B.無法計算C.7,4D.8,4

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

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

62.有以下程序:

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

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

63.

64.有以下程序:

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

A.zB.0C.元素eh[5]的地址D.字符Y的地址

65.若有說明語句:double*p,a;則通過scanf語句正確給輸入項讀人數(shù)據(jù)的程序段是()。

A.*p=&a;scanf("%1f”,p);

B.*p=&a;scanf("%f",p);

C.p=&a;scanf("%",*p);

D.p=&a;scanf("%1f",p);

66.

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

A.a:=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b

68.以下是if語句的基本形式:

if(表達式.語句

其中“表達式”()。

A.必須是邏輯表達式B.必須是關(guān)系表達式C.必須是邏輯表達式或關(guān)系表達式D.可以是任意合法的表達式

69.

70.設(shè)有定義:

71.有以下程序:

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

A.10,1B.20,1C.10,2D.20,2

72.

73.

74.如果intC=3,d=4,k=0,下列描述正確的是()。A.c>d!=k和c>(d!=k)的執(zhí)行順序是一樣的

B.c&&d>k的結(jié)果為假

C.c||(d=k)執(zhí)行后d的值為0

D.!c!=(d!=k)表達式的值為1

75.若程序中有以下說明和定義。

structabc

{

intx;chary;

}

structabcs1,s2;

則會發(fā)生的情況是

A.編譯時出錯B.程序?qū)㈨樞蚓幾g、連接、執(zhí)行

C.能順序通過編譯、連接,但不能執(zhí)行D.能順序通過編譯,但連接出錯

76.若有定義語句:

char}sl=‘’0K”,:Its2=”ok”;

以下選項中,能夠輸出“OK”的語句是()。

A.if(strcmp(sl,s2)!=0)puts(s2);

B.if(strcmp(sl,s2)!=0)puts(s1);

C.if(strcmp(sl,s2)==1)puts(s1);

D.if(strcmp(sl,s2)==0)puts(s1);

77.設(shè)char型變量x中的值為10100111,則表達式(2+x)^(~3)的值是

A.10101001B.10101000C.11111101D.01010101

78.若已定義inta=25,b=14,c=19;以下三目運算符(?:)所構(gòu)成的語句執(zhí)行后a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序輸出的結(jié)果是

A.***a=25,b=13,c=19B.***a=26,b=14,c=19

C.###a=25,b=13,c=19D.###a=26,b=14,c=19

79.有以下程序程序的運行結(jié)果是()

A.8,5,4,2,B.8,7,5,2C.9,7,6,4,D.7,4,2,

80.設(shè)有表示學生選課的三張表,學生s(學號,姓名,性別,年齡,身份證號),課程c(課號,課名),選課SC(學號,課號,成績),則表sc的關(guān)鍵字(鍵或碼)為()。

A.課號,成績B.學號,成績C.學號,課號D.學號,姓名,成績

五、程序改錯題(1題)81.下列給定程序中,函數(shù)proc()的功能是:給一維數(shù)組arr輸人任意4個整數(shù),并按如下的規(guī)律輸出。例如,若輸入2345,則程序運行后輸出以下矩陣:請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、程序設(shè)計題(1題)82.程序定義了M×M的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)proc(inta[][M],intn),該函數(shù)的功能是使數(shù)組左下半三角元素中的值加上n。例如,a數(shù)組中的值為:

注意:部分源程序給出如下。

請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。

試題程序:

參考答案

1.A

2.D

3.D解析:此題中s是—個字符數(shù)組,而字符數(shù)紐是在編繹時為它分配內(nèi)存單元的,即此字符數(shù)組的地址在編譯時是確定的,所以對此地址變量并不能賦值,故語句“s+=2;”錯誤,故程序出錯。

4.B通過—維數(shù)組名或指向維數(shù)組元素的指針來引用數(shù)組元素有兩種寫法:a[i]和*(a+i),它們是等價的。這是一種運算符之間的等價轉(zhuǎn)換,就好像a-(b-C)等價于a-b+c一樣。知道了這種轉(zhuǎn)換,我們可以將之擴展到二維數(shù)組甚至任意維數(shù)組上來。因為[]運算符的結(jié)合性是從左至右的,所以w[i][j]等價于(w[i][j],此時可以先將任意一個[]運算符轉(zhuǎn)換為指針形式為:(*(w+i)[j]或*(w[i]+j),或者同時轉(zhuǎn)換:*(*(w+i)+j)。上述幾種形式都完全等價于w[i][j]。選項A中,*(*w+3)可以看成*(*(w+0)+3),即w[0][3],是正確的。選項B小,因為[]運算符的優(yōu)先級高于*運算符,所以*(w+1)[4]等價于*((w+1)[4]等價于*(*((w+1)+4)),即*(*(w+5)+0),它等價于w[5][0],很明顯它超過數(shù)組的范圍了,故不正確。選項C等價于w[1][0],是下確的。選項D中,&w[

溫馨提示

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

評論

0/150

提交評論