2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)_第1頁
2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)_第2頁
2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)_第3頁
2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)_第4頁
2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022-2023學年貴州省貴陽市全國計算機等級考試C語言程序設計真題一卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序:#include<stdio.h>#defineS(x)x*x/xmain(){intk=6,j=3;printf(“%d,%d\n”,S(k+j+2),S(j+k+2);}程序運行后的輸出結果是()。

A.11,11B.29,29C.26,29D.121,121

2.

3.若有宏定義“#defineA_RECT(W,H)W*H”和以下程序段:intx=5,y=6,area1,area2;area1=A_RECT((x-1),(y+1));area2=A_RECT(x+3,y-1);執行上述程序段后,變量area1和area2的值分別是()。

A.022B.2840C.2822D.040

4.順序查找不論在順序線性表中還是在鏈式線性表中的時間復雜度為()。

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

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

A.一個C語言程序只能實現一種算法

B.c程序可以由多個程序文件組成

C.C程序可以由一個或多個函數組成

D.一個c函數可以單獨作為一個C程序文件存在

6.當執行下面的程序時,如果輸入ABC,則輸出結果是()#include<stdio.h>#include<string.h>main(){charss[10]="12345";gets(ss);strcat(ss"6789");printf("%s\n",ss);}

A.ABC6789B.ABC67C.12345ABC6D.ABC456789

7.下列關于棧敘述正確的是A.棧頂元素最先能被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠不能被刪除D.上述三種說法都不對

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

A.將函數內的局部變量說明為static存儲類是為了限制其他編譯單位的引用

B.—個變量作用域的開始位置完全取決于變量定義語句的位置

C.全局變量可以在函數以外的任何部位進行定義

D.局部變量的“生存期”只限于本次函數調用,因此不能將局部變量的運算結果保存至下一次調用

9.若有定義語句:“intyear=2009,*p=&year;”,以下不能使變量year中的值增至2010的語句是()。

A.*p+=1;B.(*p)++;C.++(*p);D.*++P

10.語句int(*ptr)的含義是()。

A.ptr是一個返回值為int的函數

B.ptr是指向int型數據的指針變量

C.ptr是指向函數的指針,該函數返回一個int型數據

D.ptr是一個函數名,該函數的返回值是指向int型數據的指針

11.數組A[0...4,-1...-3,5...7]中含有的元素個數是()。A.A.55B.45C.36D.16

12.執行下列程序后的輸出結果是______。main(){inty=10;do{y--;}while(--y);printf("%d\n",y--);}

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

二、2.填空題(12題)13.有以下程序

intfa(intx){returnx*x;}

intfb(intx){returnx*x*x;}

intf(int(*fl)(),int(*f2)(),intx}

{returnf2(x)-f1(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);}

程序運行后,輸出結果是【】。

14.與表達式a+=b等價的另一書寫形式是______。

15.以下程序中函數fun的功能是求出能整除x且不是偶數的務正整數,并按從小到大的順序放在pp所指的數組中,這些除數的個數通過形參n返回。

例如,若x中的值為30,則有4個數符合要求,它們是1,3,5,15。

請按題意,完成填空。

試題程序:

#include<stdio.h>

voidfun(intx,intpp[],int*n)

{inti,j=0;

【】;

if(x%i==0)pp[j++]=i;

【】;

}

main()

{intx,aa[1000],n,i;

printf("\nPleaseenteranintegernumber:\n");

scanf("%d",&x);

fun(x,aa,&n);

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

printf("\n");

}

16.下列程序段的輸出結果是______。

intn='c';

switch(n++)

{default:printf("error");break;

case'a':printf("good");break;

case'c':printf("morning");

case'd':printf("class");

}

17.若有以下定義,則不移動指針p,且通過指針p引用值為98的數組元素的表達式是______。

intw[10]={23,54,10,33,47,98,72,80,61},*p=w;

18.設有以下程序,為使之正確運行,請在橫線中填入應包含的命令行。(注:try_me()函數在a:\myfile.txt中有定義。)

______

main()

{printf("\n");

try_me();

printf("\n");}

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

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

#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++;

}

}

21.可以把具有相同屬性的一些不同對象歸類,稱為【】。

22.常用的黑箱測試有等價分類法、【】、因果圖法和錯誤推測法4種。

23.一個模塊直接訪問另一個模塊的內容,稱為【】藕合。

24.x和y都是double型變量,x的初值為4.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為______。

三、3.程序設計題(10題)25.程序定義了NxN的二維數組,并在主函數中自動賦值。請編寫函數fun,函數的功能是:使數組右上三角元素中的值乘以m。

例如:若m的值為2,a數組中的值為:

注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

26.請編寫一個函數voidfun(chara[],charb[],intn),其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數組中,n中存放指定的下標。

例如,輸入一個字符串:World,然后輸入3。則調用該函數后的結果為:Word。

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

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

27.請編寫函數fun(),其功能是:將s所指字符串中除了下標為偶數、同時ASCII值也為偶數的字符外,其余的全部刪除,串中剩余字符所形成的一個新中放在t所指的數組中。

例如,若s所指字符串中的內容為ABCDEFG123456,其中字符A的ASCII碼值為奇數,因此應當刪除;其中字符B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字符2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最后t所指的數組中的內容應是246。

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

請勿改動主函數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);

}

28.請編寫函數fun(),它的功能是:求出1到1000之內能被7或11整除、但不能同時被7和11整除的所有整數并將它們放在a所指的數組中,通過n返回這些數的個數。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;kif((k+1)%10==0)

{printf("%5d",aa[k]);

printf("\n");}/*一行寫9個數*/

else

printf("%5d",aa[k]);

}

29.請編寫函數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);

}

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

{

}

main()

chars[l00],t[l00];

clrscr();

printf("%nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

31.請編寫函數fun,其功能是:計算并輸出下列多項式的值:

例如,在主函數中從鍵盤給n輸入15,則輸出為:s=2.718282。

注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

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

32.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。

其中

例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。

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

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

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

33.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。

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

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

34.下列程序定義了NXN的二維數組,并在主函數中自動賦值。請編寫函數fun(inta[][N]),該函數的功能是使數組右上半三角元素中的值全部置成0。例如a數組中的值為

a=456

179

326,

則返回主程序后a數組中的值應為

000

100

320

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*產生—個隨機的5*5矩陣*/

{for(j=0;j<N;j++)

{a[i][j]=rand()%10;

printf(“%4d”,a[i][j]);

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

printf(“%4d”,a[i][j]);

printf(“\n”);

}

}

四、單選題(0題)35.一個有n個頂點的連通無向圖至少有()條邊。

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

五、單選題(0題)36.以下程序的功能是()。#include<stdio.h>main(){FILE*fPl;*fp2;fp1:fopen("file1","r");fp2:fopen("file2","w");while(!Feof(fP1))fputc(fgetc(fP1),fp2);fclose(fP1);fclose(fp2);}

A.將磁盤文件的內容顯示在屏幕上

B.將兩個磁盤文件合為一個

C.將一個磁盤文件復制到另一個磁盤文件中

D.將兩個磁盤文件合并后送屏幕

六、單選題(0題)37.軟件需求規格說明書的作用不包括()。

A.軟件設計的依據B.軟件可行性研究的依據C.軟件驗收的依據D.用戶與開發人員對軟件要做什么的共同理解

參考答案

1.B#define命令是C語言中的一個宏定義命令,為了區分其他標識符,標識符一般使用大寫。將標識符定義為一個字符串,該標識符被稱為宏名,被定義的字符串稱為替換文本。宏定義不進行其他操作,僅僅只是替換標識符。題目中的S(k+j+2)=k+j+2*k+j+2/k+j+2”,經計算可得29。“S(j+k+2)=j+k+2*k+j+2/j+k+2”,經計算可得29。因此輸出為29,29。故本題答案為B選項。

2.A

3.C帶參數的宏定義的替換過程是:用宏調用提供的實參字符串,直接置換宏定義命令行中相應的形參字符串,非形參字符串保持不變。題干中,“area1=A_RECT((x-1),(y+1));”宏替換后為“area1=(x-1)*(y+1);”,“area2=A_RECT(x+3,y-1);”宏替換后為“area2=x+3*y-1;”。所以area1=4*7=28,area2=5+3*6-1=22。故本題答案為C選項。

4.A

5.A答案A

解析:一個C程序可以有一個或多個程序文件,也可以有一個或多個函數,所以一個C語言程序可以實現多種算法。

6.A

7.A解析:在棧中,允許插人與刪除的一端稱為棧頂,而不允許插入與刪除的另一端稱為棧底。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。故本題選A。

8.A將函數內的局部變量說明為static存儲類,第1次調用該函數時才對其初始化,后續調用時使用上一次調用結束后的值;函數體內的局部變量無論是否聲明為stat\x1fic,外部編譯單位都不能引用,選項A錯誤,其他選項正確。本題答案為A選項。

9.D

10.C本題考查的是指向函數的指針。函數指針定義的基本格式為:類型標識符(*指針變量名)()。“類型標識符”為函數返回值的類型。

11.A

12.D

13.44解析:在主函數中調用函數f,函數f有三個參數,形參f1與f2分別是兩個指向函數的指針。在f中執行f2(x)-f1(x),實際上是執行了fb(2)-fa(2),故執行i=(fa,fb,2)后i的齜23-22=4。

14.a=a+ba=a+b解析:a+=b與a=a+b等價,作用是把變量a的值加b后再賦給變量a。

15.for(i=1;i<=x;i+=2)*n=jfor(i=1;i<=x;i+=2)*n=j解析:本題題干信息是求能整除x且不是偶數的所有正整數。循環語句中i從1開始且每次增2,所以i始終是奇數,語句,n=j;是記錄符合題意的整數的個數。

16.morningclassmorningclass解析:本題考查了兩個知識點:①“++,--”運算后綴形式是先使用變量原來的值,使用完后再使其增1或減1;②在switch語句中,當n='c'時,執行“case'c'”,輸出morning;因為此句中沒有break語句,因此接著執行“case'd':”,輸出class,最終輸出結果為morningclass。

17.*(p+5)或p[5]*(p+5)或p[5]

18.#include<a:\myfile.txt>#include<a:\\myfile.txt>解析:本題考查了函數的存儲分類的概念。如果沒有特別說明,函數的存儲范圍是從定義函數的位置到文件的結尾,如果其他文件想使用這個函數,需要用ginclude文件包含命令將定義函數的文件包含進來。

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

20.246

21.對象類

22.邊值分析法邊值分析法解析:本題考查了黑箱測試的方法。黑箱測試方法完全不考慮程序的內部結構和內部特征,而只是根據程序功能導出測試用例。常用的黑箱測試有等價分類法、邊值分析法、因果圖法和錯誤推測法。

23.內容內容

24.1616解析:函數運算不改變數據類型,所以結果也是double型,fabs(x)是對x取絕對值,pow(y,fabs(x))是y的labs(x)次冪,即2.04。0=16.000000(注意;結果為double型)。

25.

解析:該程序功能是使數組右上半三角元素中的值乘以m。本題中首先要確定右上角半角元素的特點,然后對元素逐個進行乘以m的操作。其中,右上角的元素是行下標小于等于列下標的元素。

26.

解析:(1)該程序功能是刪除一個字符串中指定下標的字符。它的解題思路,可以分解為以下兩步:逐個判斷字符串中的下標是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。

(2)從已給部分源程序的main主函數開始入手,核心函數“fun(str1,str2,n);”中的參數由題目可知,str1存放著原始字符串,str2存放刪除了下標為n的字符的結果字符串,注意下標是從“0”開始的。

27.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數的字符放入數組t中*/t[j++]=s[i];/*在字符串最后加上結束標志位*/t[j]='\0';}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數的字符放入數組t中*/\r\nt[j++]=s[i];/*在字符串最后加上結束標志位*/\r\nt[j]='\\0';\r\n}解析:本題要求除了下標為偶數同時ASCII值也為偶數的字符之外,其他字符都刪除。題目要求留下下標為偶數同時ASCII值也為偶數的字符。

C語言中并沒有直接刪除字符的算法,請大家在做題的時候注意。

28.voidfun(int*aint*n){intij=0;for(i=1;i<=1000;i++)/*求1到1000之內能被7或11整除、但不能同時被7和11整除的所有整數并放入數組a中*/if((i%7==0||i%11==0)&&i%77!=0)a[j++]=i;*n=j;/*傳回滿足條件的數的個數*/}voidfun(int*a,int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<=1000;i++)/*求1到1000之內能被7或11整除、但不能同時被7和11整除的所有整數,并放入數組a中*/\r\nif((i%7==0||i%11==0)&&i%77!=0)\r\na[j++]=i;\r\n*n=j;/*傳回滿足條件的數的個數*/\r\n}解析:注意本題題目應是找出能被7或11整除但不能同時被7和11整除的所有整數。能同時被7和11整除的整數一定能被77整除,且不能被77整除的數不一定就是能被7或11整除的數。所以可得出程序中的if()。按運算優先級可知(i%7==0||i%11==0),注意,兩邊必須要有小括號。

29.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循環時,此值永遠是偶數。

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

31.

解析:該程序功能是計算并輸出多項式的值。該題的解題思路是。根據題干中給出的數列,首先推出每一項的表達式,然后再對多項式進行累加求和。

32.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl

溫馨提示

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

評論

0/150

提交評論