2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)_第1頁
2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)_第2頁
2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)_第3頁
2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)_第4頁
2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022學年黑龍江省黑河市全國計算機等級考試C語言程序設計真題二卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.有下列程序:#include<stdio.h>voidfun(char*a,char*B){while(*a=='*')a++;while(*b=*A){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);程序的運行結果是()。A.*****a*bB.a*bC.a*b****D.ab

2.有以下程序:structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};structstc[2]={10,a,20,b};pt=c;以下選項中表達式值為11的是()。

A.++p->xB.pt->xC.*pt->yD.(pt++)->x

3.下列程序的輸出結果是()。

#include<stdio.h>

intb=2;

intfunc(int*A)

{b+=*a;retumb;}

main()

{inta=1,t=2;

t+=func(&A);

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

}

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

4.下列程序的輸出結果是()。#include<stdio.h>intb=2:intfunc(int*a){b+=*a;returnb;}main{inta=1,t=2;t+=func(&a):printf("%d\n",t);}A.4B.5C.6D.8

5.

6.若有定義“int*p[3];”,則以下敘述中正確的是()。A.定義了一個指針數組p,該數組含有3個元素,每個元素都是基類型為int的指針

B.定義了一個基類型為int的指針變量p,該變量具有3個指針

C.定義了一個名為*p的整型數組,該數組含有3個int類型元素

D.定義了一個可指向一維數組的指針變量p,所指一維數組應具有3個int類型元素

7.若已包括頭文件<string.h>且已有定義chars1[18],s2={"ABCDE"}和inti,現要將字符串"ABCDE"賦給s1,下列語句錯誤的是()。

A.strcpy(s1,s2)

B.strcpy(s1,"ABCDE");

C.s1="ABCDE";

D.for(i=0;i<6;i++)s1[i]=s2[i];

8.由兩個棧共享一個向量空間的好處是______。

A.減少存取時間,降低下溢發生的機率

B.節省存儲空間,降低上溢發生的機率

C.減少存取時間,降低上溢發生的機率

D.節省存儲空間,降低下溢發生的機率

9.有以下程序:#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile,dat","");{puts("abe",ip);fclose(fp);fp=fopen("myfile.dat","a*");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%S",str);puts(str);fclose(fp);}程序運行后的輸出結果是()。A.abcB.28cC.abc28D.內類型不一致而出錯

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

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

11.給定數列(541,132,984,746,518,181,946,314,205,827)按照從小到大的順序排列,采用直接選擇大值開始排序時,第一趟掃描結果是()

A.(541,132,827,746,518,181,946,314,205,984)

B.(205,132,314,181,518,746,946,984,541,827)

C.(132,541,746,984,181,518,314,946,205,827)

D.(132,541,746,518,181,946,314,205,827,984)

12.一個二維數組的定義語句為“inta[3][4]={{3,4},{2,8,6}};”,則元素a[1][2]的值為()。

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

二、2.填空題(12題)13.下述函數統計一個字符串中的單詞個數,單詞是指處在空格之間的字符序列,請填空。

intword(char*s)

{intnum=0,flag=0;

while(*s)

{if(【】=='')flag=0;

elseif(【】){flag=1;num++}

}

return【】;}

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

main()

{

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

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

switch(i/10)

{

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

case10:n++;;break;

default:k++;n++;

}

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

}

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

main()

{inta=10;

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

}

16.若x和y都是double型變量,且x的初值為3.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為【】。

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

#include<string.h>

main()

{chara[]={'\1','\2','\3','\4','\0'};

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

}

18.若變量n中的值為24,則函數共輸出【】行,最后一行有【】個數。

voidprint(intn,intaa)

{inti;

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

{printf("%6d,aa[i]);

if(!(i%5))printf("\n");

}

printf("\n");

}

19.設當前盤為A盤,當前系統提示符為“>”在不改變當前盤情況下,顯示C盤的當前目錄路徑,應使用命令【】。

20.對長度為10的線性表進行冒泡排序,對壞情況下需要比較的次數為______

21.在ER圖中,矩形表示【】。

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

structSIRU

{inta,b;charc:doubled;

structSTRU*p1,*p2;

};

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

【】t[20]

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

main()

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

for(p=s+1;p<s+4;p++)printf("%s\n",p);}

24.數據結構分為邏輯結構和存儲結構,循環隊列屬于______結構。

三、3.程序設計題(10題)25.請編寫一個函數,函數的功能是刪除字符串中的所有空格。

例如,主函數中輸入“asdafaaz67”,則輸出為“asdafaaz67”。

注意:部分源程序在文件PROGl.C中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

26.編寫函數fun,其功能是:根據以下公式求P的值,結果由函數值帶回。m與n為兩個正整數且要求m>n。

例如:m=12,n=8時,運行結果為495.000000。

注意:部分源程序在文件PROGl.C文件中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

27.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:按分數的高低排列學生的記錄,高分在前。

注意:部分源程序在文件PROGl.C文件中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

28.請編寫函數fun(),其功能是:將s所指字符串中下標為奇數的字符刪除,串中剩余字符形成的新串放在t所指數組中。

例如,當s所指字符串中的內容為siegAHdied,則在t所指數組中的內容應是seAde。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*S,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%S",S);

fun(S,t);

printf("\nTheresultis:%s\n",t);

}

29.請編寫函數fun(),其功能是;計算井輸出下列多項式值。

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

例如,若主函數從鍵盤給n輸入8后,則輸出為S-0.662872。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序;

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nInputn:");

scanf("%d",&n);

s=fun(n);

printf("\ns=%f\n",s);

}

30.編寫函數fun,函數的功能是求出小于或等于lim的所有素數并放在aa數組中,函數返回所求出的素數的個數。

注意:部分源程序在文件PROGl.C中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

31.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),它的功能是:函數返回指定成績的學生數據,指定的成績在主函數中輸入。若沒找到指定的成績,在結構體變量中給學號置空串,給成績置-1,作為函數值返回。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<stdlib.h>

#defineN16

typedefstruct

{charnum[l0];

ints;

}STREC;

STRECfun(STREC*a,intb)

{

}

main()

{

STRECs[N)={{“GA005”,76},{“GA003”,89},

{“GA002”,64},{“GA004”,75},{“GA001”,88},

{“GA007”,65},{“CA008”,96},{“GA006”,69},

{“GA015”,85},{“GA013”,78},{“GA012”,62},

{“GA014”,60},{“GA011”,73},{“GA017”,72},

{“GA018”,98},{“GA016”,94}};

STRECh;

intm;

inti,n;

FILE*out;

printf(“Theoriginaldata:\n”);

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

{if(i%4==0)

printf(“\n”);

/*每行輸出4個學生記錄*/

printf(“%s%3d”,s[i].num,s[i].s);

}

printf(“\n\nEnterthescore:”);

scanf(“%d”,&m);

h=fun(S,m);

printf(“Thedata:”);

printf(“\n%s%4d\n”,h.mum,h.S);

printf(“\n”);

ut=fopen(“out24.dat",“W”);

h=fun(s,85);

fprintf(out,“%S%4d\n”,h.num,h.S);

fclose(out);

}

32.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的千位和十位上,b中的十位和個位數依次放在變量c的個位和百位上。

例如,當a=45,b=12。調用該函數后,c=4251。

注意:部分源程序存在文件PROGl.C中。數據文件IN.DAT中的數據不得修改。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

33.請編寫一個函數intfun(int*s,intt,int*k),用來求出數組的最小元素在數組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數:

234345753134436458100321135760

則輸出結果為6,100。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

}

34.學生的記錄由學號和成績組成,N名學生的數據己在主函數中放入結構體數組s中,請編寫函數fun(),它的功能是:把分數最低的學生數據放在h所指的數組中。注意:分數低的學生可能不只一個,函數返回分數最低學生的人數。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b)

{

}

main()

{

STRECs[N]={{“GA005”,82},{“GA003”,75},

{“GA002”,85},{“GA004”,78},{“GA001”,95},

{“GA007”,62},{“GA008”,60},{“GA006”,85},

{“GA015”,83},{“GA013”,94},{“GA012”,78},

{“GA014”,97},{“GA011”,60},{“GA017”,65},

{“GA018”,60},{“GA016”,74}};

STRECh[N];

inti,n;

FILE*out;

n=fun(S,h);

printf(“The%dlowestscore:\n”,n);

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

printf(“%s%4d\n”,h[i].mum,h[i].s);

/*輸出最低分學生的學號和成績*/

printf(“\n”);

out=fopen("outl9.dat",“w”);

fprintf(out,“%d\n”,n);

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

fprintf(out,“%4d\n”,h[i].s);

fclose(out);

}

四、單選題(0題)35.檢查軟件產品是否符合需求定義的過程稱為______。

A.確認測試B.集成測試C.驗證測試D.驗收測試

五、單選題(0題)36.標準庫函數fgets(s,n,file)的功能是()。

A.從文件file中讀取長度為n的字符串存入字符數組s中

B.從文件file中讀取長度不超過n-1個字符的字符串放到字符數組s中

C.從文件file中讀取n個字符串存入字符數組s中

D.從文件file中讀取長度為n-1個字符的字符串存入字符數組s中

六、單選題(0題)37.

參考答案

1.C解析:主函數main()定義了指向字符串的指針和一個字符數組,接著調用fun(s,t)函數,進行實參向形參傳遞,函數fun()第一個while語句判斷*a中的值為“*”時繼續掃描,當遇到不是“*”時結束,接著第二個while循環語句,將*a中從“a”開始的后續所有字符都賦予*b,也就是t[80]中的內容為“a*b****”,所以此題的運行結果為選項C)。

2.A題目中定義了一個結構體數組c并初始化,指針pt指向c的第1個元素。則“++pt->x”為11,“pt->x”為10,“*pt->y”為1,“(pt++)->x”為20。故本題答案為A選項。

3.B解析:本題考查函數調用時的參數傳遞。在執行函數func時,由于全局定義了一個變量b,所以在函數體中執行時b=2+1=3,最終t=2+3=5。

4.B本題考查函數調用時的參數傳遞。在執行函數func時,由于全局定義了一個變量b,所以在函數體中執行b=2+1=3,最終t=2+3=5。

5.D

6.Aint*p[3]含義是定義一個指針數組p,數組中包含3個元素,每個元素都是int*類型的指針。本題答案為A選項。

7.C解析:數組名s1是代表s1數組首地址的地址常量,而不是變量,因為“=”左邊不能出現常量,因此sl='ABCDE'的方法是錯誤的。

8.B

9.C本題考查文件的操作,首先打開文件,進行寫操作,把“abc”寫入“myfile”文件,再打開“myfile.data"文件,輸入28,在鍵盤上接收字符,輸出并關閉文件。本題結果為abc28。

10.C

11.A

12.C

13.*s++flag==0或*(s-1)==''num*s++\r\nflag==0或*(s-1)==''\r\nnum解析:在統計字符串單詞個數的算法中,本題的flag是為了記錄一個單詞是否結束。第18空應填*s++;如果某個字符不是空格,則必需判斷它是否是單詞,如是,則使得flag的標志為1,num的值加1。本題判斷方法是:先判斷s所指向的字符是否為空格,如果是則使得flag=0,否則判斷前一個字符是否是空格,如果是則說明這個字符是一個單詞的開始,將flag標志為1,num的值加1,如果不是,則不必記錄。故第19空應flag==0或*(s-1)=='';最后一個空格需填寫的是返回的單詞的個數,即num。

14.132132解析:本題考核的知識點是for循環與switch語句的綜合運用。主函數中用了一個for循環,for循環里嵌套了一個switch語句,for循環了三次,當i=9時,i/10=0,執行switch語句中case0分支,m和n的值各加1,變為1和1,然后遇到breake語句,退出switch語句;當i=10,i/10=1,執行switch語句中default分支,使k和n的值各加1,變為1和1,退出switch語句:當i=11時,i/10=1,執行switch語句中default分支,k和n的值各加1變,為2和3,退出switch語句,循環結束。故該空格處應該填132。

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

16.88解析:fabs函數功能是求x的絕對值,計算結果為double型。pow功能是計算x的y次方的值,計算結果同樣為double型。所以本題表達式相當于2.0的3.0次方,結果為8.000000。

17.545\u3000\u30004解析:字符串處理函數strlen()返回的是字符數組的實際長度,不包括字符申結束標志‘\\\u30000’。而sizeof運算符則計算的是字符數組的總長度,包括串末尾的結束標志。

18.54

19.CDC:(CD與C:中間至少要有一個空格)CDC:(CD與C:中間至少要有一個空格)

20.在最壞情況下冒泡排序法需要比較的次數為n(n-1)/2。

21.實體實體解析:在E-R圖中用矩形表示實體;橢圓形表示屬性;菱形表示聯系。

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

結構體類型的定義:

struct結構體類型名

{

成員項表;

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

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

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

23.BCDCDDBCD\r\nCD\r\nD解析:本題考查指向字符串的指針的運算方法。指針變量p首先指向字符串中的第一個字符A,執行p=s+1后,p指向字符串中的第二個字符B,然后輸出值'BCD'并換行,依次執行循環語句。

24.存儲或物理或存儲結構或物理結構存儲或物理或存儲結構或物理結構解析:數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的存儲結構(也稱數據的物理結構)。所謂循環隊列,就是將隊列存儲空間的最后一個位置繞到第一個位置,形成邏輯上的環狀空間。供隊列循環使用。可知,循環隊列應當是物理結構。

25.

解析:該程序功能是刪除字符串中的所有空格。本題的解題思路是首先利用一個指向字符串的指針,查找不是空格的字符,然后將不是空格的字符賦值到字符串,如果是空格,則跳過該字符,這樣就實現了空格字符的刪除。

26.

解析:(1)該程序功能是對組合數公式求值。它的解題思路,可以分解為以下幾步:求m!→求n!→求(m-n)!→求組合數的值。

(2)從已給部分源程序的main主函數開始入手,主函數中的“printf(“P=%f\n”,fun(12,8));”語句中“fun(12,8)”將12、8傳遞給fun中的m與n,fun函數實現對組合數的求佰。

27.

解析:該程序功能是按分數的高低排列學生的記錄。首先從數組中挑選一個最大的元素,把它和第一元素交換,接著從剩下的n-1個元素中再挑出一個最大的元素,把它和第二個元素交換,不斷重復以上過程,直到比較完最后兩個元素。

28.voidfun(char*Schart[]){intij=0k=strlen(s);/*k為字符串的長度*/for(i=0;i<k;i=i+2)/*將s所指字符串中下標為偶數的字符存入t所指字符串中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上結束標志*/}voidfun(char*S,chart[])\r\n{\r\ninti,j=0,k=strlen(s);/*k為字符串的長度*/\r\nfor(i=0;i<k;i=i+2)/*將s所指字符串中下標為偶數的字符存入t所指字符串中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上結束標志*/\r\n}解析:本題使用了一種i永遠是偶數的循環方法,即for(i=0;i<k;i=i+2),因為開始時i的值為0,當i+2循環時,此值永遠是偶數。

29.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)s=s+(1.0/(2*i-1)-1.0/(2*i));/*計算S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-l/2n)*/returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)\r\ns=s+(1.0/(2*i-1)-1.0/(2*i));/*計算S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-l/2n)*/returns;\r\n}解析:本題中s=s+(1.0/(2*i-1)-1,O/(2*i));語句是用C程序去表達題目中的每一項,這是關鍵,其他問題不難理解。

30.

解析:該程序功能是求一定范圍內的素數。素數是只能被1和自身除盡的數。判斷i是不是素數最簡單的方法就是用2~(i/2)去除i,只要能除盡就不是素數。

31.STRECfun(STREC*aintb){inti;STRECstr={“\0”-1);/*若沒找到指定的成績在結構體變量中給學號置空串給成績置-1*/for(i=0;i<N;i++)if(a[i].s==b)/*找到指定成績的學生記錄*/str=a[i];returnstr;/*返回學生記錄*/}STRECfun(STREC*a,intb)\r\n{\r\ninti;\r\nSTRECstr={“\\0”,-1);/*若沒找到指定的成績,在結構體變量中給學號置空串,給成績置-1*/\r\nfor(i=0;i<N;i++)\r\nif(a[i].s==b)/*找到指定成績的學生記錄*/\r\nstr=a[i];\r\nreturnstr;/*返回學生記錄*/\r\n}解析:本程序一開始先使結構休變量str的學號為空出,成績為-1。題中循環體的功能是搜索所有學生的成績并判斷是否有成績與b所指定的成績相同(即找到),若找到則給str重新賦值(str=a[i]),若沒找到則str成員的值還是原有值(即未找到時學號返回空串,成績返回-1)。

32.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:該程序功能是將正整數a、b合并形成一個新整數。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

33.intfun(int*sinttint*k){inti;*k=0/*k所指的數是數組的下標值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到數組的最小元素把該元素的下標賦給k所指的數*/returns[*k];/*返回數組的最小元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0/*k所指的數是數組的下標值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]>s[i])\r\n*k=i;/*找到數組的最小元素,把該元素的下標賦給k所指的數*/\r\nreturns[*k];/*返回數組的最小元素*/\r\n}解析:本題中直接使用指針變量k,但在使用時要注意對k的指針運算,此外,一開始應讓*k的值為數組中的某一下標值勤,即*k=0。

34.intfun(STRE

溫馨提示

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

評論

0/150

提交評論