2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021年陕西省安康市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是()。

A.G中有弧

B.G中有一条从Vi到Vj的路径

C.G中没有弧

D.G中有一条从Vj到Vi的路径

2.已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是A.scanf("%2d%2d%2d",&i,&j,&k);

B.scanf("%d%d%d",&i,&j,&k);

C.scanf("%d,%d,%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);

3.若输入“abcdef”“abdef”,下述程序的输出结果为()。#include<stdio.h>#include<string.h>main{intn;chars1[20],s2[20],*p1,*p2;scanf("%s",s1);scanf("%S",s2);p1=s1;p2=s2;n=strcmp(p1,p2);printf("Vood\n",n);}A.-1B.0C."abcdef"D."abdef"

4.有以下程序main(){intx,y,z;x=y=1;z=x++,y++,++y;printf("%d,%d,%d\n",x,y,z);}程序运行后的输出结果是______。A.2,3,3B.2,3,2C.2,3,1D.2,2,1

5.下列算法中,()算法用来求图中某顶点到其他顶点所有顶点之间的最短路径。

A.DijkstraB.FloyedC.PrimD.Kruskal

6.

7.

8.已知inta=2,b=3;则执行表达式a=a<b后,变量a的值为()。

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

9.

10.设二叉树的中序序列为BCDA,前序序列为ABCD,则后序序列为()。

A.CBDAB.DCBAC.BCDAD.ACDB

11.下述程序向文件输出的结果是______。#include<stdio.h>voidmain(){FILE*fp=fopen("TESY","wb");fprintf(fp,"%d%5.0f%c%d",58,76273.0,'-',2278);fclose(fp);}

A.5876273-2278

B.5876273.000000-2278

C.5876273-2278

D.因文件为二进制文件而不可读

12.若有以下程序

则程序的输出结果是

A.3B.7C.6D.10

二、2.填空题(12题)13.若变量n中的值为24,则print函数共输出【】行,最后一行有【】个数。

voidprint(intn,intaa[])

{inti;

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

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

if(!(i%5))

printf("\n");

}

printf("\n");

}

14.下面程序的输出是【】

main()

{enumem{eml=3,em2=1,em3};

char*aa[]={"AA',"BB","CC","DD"}

printf("%s%s%\n",aa[em1],aa[em2],aa[em3]);

}

15.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于【】测试。

16.以下程序运行后的输出结果是______。

main()

{

intx=1,y=0,a=0,b=0;

switch(x)

{

case1:

switch(y)

{

case0:a++;break;

case1:b++;break;

case2:a++;b++;break;

}

printf("%d%d\n",a,B);

}

17.下列程序的运行结果是______。

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

18.以下程序运行后,若输入:3,abcde<回车>,则输出结果是【】。

#include<stdio.h>

#include<string.h>

move(char*str,intn)

{chartemp;inti;

temp=str[n-1];

for(i=n-1;i>0;i--)str[i]=str[i-1];

str[0]=temp;

}

main()

{chars[50];intn,i,z;

scanf("%d,%s",&n,s);

z=strlen(s);

for(i=1;i<=n;i++)move(s,z);

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

}

19.栈中允许进行插入和删除的一端叫做______。

20.下列程序的输出结果【】。

#definePR(ar)printf("ar=%d",ar)

main()

{intj,a[]={1,3,5,7,9,1l,13,1},*p=a+5;

for(j=3;j;j--)

switch(j)

{case1:

case2:PR(*p++);break;

case3:PR(*(--p));}}

21.下列程序的输出结果是______。

main()

{inti,sum;

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

sum+=i;

printf("%d",sum);

}

22.函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,s<t时返回负值。请填空。

My_cmp(char*s,char*t)

{while(*s==*t)

{if(*s==′\0)return0;

++s;++t;

}return【】;

}

23.Jackson方法是一种面向【】的结构化方法。

24.以下程序中,fun函数的功能足求3行4列二维数组每行尢素中的最大值。请填空。voidfun(int,int,int(*)[4],int*);main(){inta[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;fun(3,4,a,B);for(i=0;j<3;i++)printf("%4d",b[i]);printf("\n");}voidfun(intm,intn,intar[][4],int*br){inti,j,x;for(i=0;i<m;i++){x=ar[i][0];for(j=0;j<n;j++)if(())x=ar[i][j];br[i]=x;}}

三、3.程序设计题(10题)25.请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按J顷序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为

AAAA

BBBBBBB

CC

则合并后的字符串内容应该是AAAABBBBBBBCC

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#defineM3

#defineN20

voidfun(chara[M][N],char*b)

{

}

main()

{

charw[M][N]={"AAAA","BBBBBBB","CC"},i;

chara[100]={"####################"};

printf("Thestring:\n");

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

puts(w[i]);

printf("\n");

fun(w,a);

printf("TheAstring:\n");

printf("%s",a);

printf("\n\n");

}

26.请编写一个函数,用来删除字符串中的所有空格。

例如:输入asdafaaz67,则输出为asdafaz67。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

intfun(char*str)

{

}

main()

{

charstr[81];

intn;

clrscr();

printf("Inputastring:");

gets(str);

puts(str);

fun(str);

printf("***Str:%s\n",str);

}

27.编写程序,实现矩阵(3行3列)的转置(即行列互换)。

例如,若输入下面的矩阵:

100200300

400500600

700800900

则程序输出:

100400700

200500800

300600900

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(intarray[3][3])

{

}

main()

{

inti,j;

intarray[3][3]={{100,200,300},{400,

500,600},{700,800,900}};

clrscr();

for(i-0;i<3;i++)

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

printf("%7d",array[i][j]);

printf("\n");

}

fun(array);

printf("Convertedarray:\n");

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

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

printf("%7d",array[i][j]);

printf("\n");

}

}

28.请编写一个函数fun(),它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fan的花括号中填入所编写的若干语句。

试题程序:

#defineM4

#include<stdio.h>

fun(inta[][M])

{

}

main()

{

intarr[2][M]={5,8,3,45,76,-4,12,82};

printf("max=%d\n",fun(arr));

}

29.请编写函数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。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+l到最后的字符移到字符串的前部。

例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABC。

注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,,仅在函数fun的花括号中填入你编写的若干语句。

31.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。

例如,当a=45,b=12。调用该函数后,c=4251。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

32.请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include<stdiO.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{in[a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theodginaldata:\n");

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

printf("\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

}

33.请编写一个函数fun(),它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若传给m的值为50,则程序输出:

7111421X283335424449

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM100

voidfun(intm,int*a,int*n)

{

}

main()

{

intaa[M],n,k;

clrscr();

fun(50,aa,&n);

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

if((k+1)%20==0)/*每行输出20个数*/

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

printf("\n");

}

else

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

printf("\n");

}

34.请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把O至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1],把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

四、单选题(0题)35.程序流程图中有箭头的线段表示的是()。

A.图元关系B.数据流C.控制流D.调用关系

五、单选题(0题)36.

六、单选题(0题)37.下列4个关于C语言的结论中错误的是()。

A.可以用do…while语句实现的循环一定可以用while语句实现

B.可以用for语句实现的循环一定可以用while语句实现

C.可以用while语句实现的循环一定可以用for语句实现

D.do…while语句与while语句的区别仅是关键字“while”出现的位置不同

参考答案

1.D若G中有一条从Vj到Vi的路径,则图的拓扑序列中顶点Vj在顶点Vi之前。设G(V,E)是一个具有n个顶点的有向图,V中顶点的序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点满足下列条件:若在有向图G中,从顶点vi在vj有一条路径,则在拓扑序列中顶点vi必须排在顶点vj之前。

2.C

3.D本题考查字符串比较函数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s1<s2,则返回-1。字符串依次比较的是它们字符的ASCIl码值。

4.C解析:x++:表示在使用x之后,使x的值加1;y++:表示在使用y之后,使y的值加1;++y:表示在使用y之前,使\u3000y的值加1。此题中执行z=x++,是将x的值先赋给z,所以z=1,接下来x自行加1,其结果为2:执行y++后,y=2,执行++后,y=3;故答案选C。

5.A

6.D

7.C

8.B解析:先计算关系表达式a<b=2<3为真(表达式为真时,如果变量为int型变量则真用1表示,假用0表示),即a=1。

9.D

10.B二叉树的前序序列为ABCD,由于前序遍历首先访问根节点,可以确定该二叉树的根节点是A。再由中序序列为BCDA,可知以A为根节点的该二叉树只存在左子树,不存在右子树,故后序序列为DCBA。本题答案为B选项。

11.C解析:fprintf函数工作时,多个数据间不会自珈口分隔符,选项A错误;浮点数的输出格式是“%5.0f”表明其小数部分输出0位,即没有输出,所以选项B也是错误的。

12.D第—个if语句a!=1条件为假,所以执行dse后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个讧条件,d==4条件成立,执行r+=4操作,结果为10。

13.54

14.DDBBCCDDBBCC解析:C语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上—个元素存在并有明确值的情况下,这个牧举元素的值为其上一个元素的值+1。在本题中,没有明确说明枚举元素em3的值,则em3=cm2+1=1+1=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为'DDBBCC'。

15.黑箱或黑盒黑箱或黑盒解析:黑箱测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜测以及因果图等。

16.2121解析:本题考核的知识点是switch语句的嵌套应用。外层switch语句后面括号里的x的值为1,所以执行从case1:后面的语句开始执行,而case1:后面语句也为switch语句,这个switch语句后面括号里的y的值为0,所以从该switch语句里的case():开始执行即执行a++,这时a的值变为1,执行完毕,遇到break语句,退出内层switch语句,又回到外层switch语句,继续执行case1:下面的语句即case2:执行完毕后,a自加1变为2,b自加1变1。所以最后输出的a和b的值为21。

17.2525解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。

18.cdeabcdeab解析:程序中的move函数的作用是保存输入数组中的最后一个元素,然后从最后一个数组元素开始,依次向后移动一个位置,再把保存的最后一个元素置于首位,循环次数由n控制。输入3,abcde<回车>后主函数开始执行,其中n=3,s[50]={'abcde'},z=5。第一次循环,i=1时,调用move(s,5)函数,temp=str[4]语句把数组中最后一个元素\'e\'保存在temp中,然后i从4开始循环,将str[3](字符\'d\')赋给str[4],str[2](字符\'c\')赋给str[3],……,循环结束时str所指字符串为'aabcd',再将保存在temp中的\'e\'置于首位,字符串变为'eabcd';i=2时,调用move函数,字符串为'deabc';i=3时,调用move函数,字符串为'cdeab'。最后输出结果为'cdeab'。

19.栈顶栈顶解析:栈是限定在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端叫做“栈底”。

20.ar=9ar=9ar=11ar=9ar=9ar=11解析:本题综合考查了for循环,switch语句及宏替换等几个知识点。j=3时,执行PR(*(--p));输出数组元素a[4]的值;j=2时,执行PR(*p++);取出p所指位置的元素a[4],然后p++;当j=1时,执行PR(*p++);取得是数组元素a[6]的值11。

21.无定值无定值解析:for(i=1;i<7;i++)决定了循环次数为6次,每次执行的操作是sum+=i,但由于sum没有初始化,并不知道sum的初值是多少,所以结果无定值。

22.*s-*t*s-*t解析:两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s>t时,返回正值,当s<t时,返回负值。

23.数据结构数据结构解析:Jackson方法是—‘种面向数据结构的结构化方法。

24.x<ar[i][j]x<ar[i][j]解析:本题考查的是循环的嵌套。本题定义了二维数组a,存放3行4列的数组元素,定义了,一维数组b用于存放每行的最大数。存函数fun中,通过二重for循环求每行的最大数,外层for循环用于控制行数,内层for循环用于控制列数。当外层循环执行一次时,内层循环则执行4次,并求出了这一行的最大值x,最后将每一行求出最大值x赋值给存放最大值的数组br,故本题答案为x<ar[i][j]。

25.voidfun(chara[M][N]char*b){intijk=0;for(i=0;i<M;i++)/*将字符串数组中的M个字符串按顺序存入一个新的字符串*/for(j=0;a[i][j]!='\0';j++)b[k++]=a[i][j];b[k]='\0';/*在字符串最后加上结束标志符*/}voidfun(chara[M][N],char*b)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<M;i++)/*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/\r\nfor(j=0;a[i][j]!='\\0';j++)\r\nb[k++]=a[i][j];\r\nb[k]='\\0';/*在字符串最后加上结束标志符*/\r\n}解析:本程序中for(i=0;i<M;i++)循环的作用是用于对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。

26.intfun(char*str){intij=0;for(i=0;str[i]!='\0';i++)if(str[i]!='')/*将字符串中的空格删去*/str[j++]=str[i];/*注意该程序中空格字符的表达方法*/str[j]='\0';/*在字符串最后加上结束标记符*/}intfun(char*str)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i]!='\\0';i++)\r\nif(str[i]!='')/*将字符串中的空格删去*/\r\nstr[j++]=str[i];/*注意该程序中空格字符的表达方法*/\r\nstr[j]='\\0';/*在字符串最后加上结束标记符*/\r\n}解析:前面我们接触到的题是删除字符,但本题要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用“留下”字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意j的下标变化、初值及最后加串结束符'\\0'。

27.intfun(intarray[3][3]){intijt;for(i=0;i<3;i++)/*将右上三角和左下三角对换实现行列互换*/for(j=i+1;j<3;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}intfun(intarray[3][3])\r\n{\r\ninti,j,t;\r\nfor(i=0;i<3;i++)/*将右上三角和左下三角对换,实现行列互换*/\r\nfor(j=i+1;j<3;j++)\r\n{t=array[i][j];\r\narray[i][j]=array[j][i];\r\narray[j][i]=t;\r\n}\r\n}解析:注意对矩阵转置后仍然存回其本身时,只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循环中写成for(j=0;j<i;j++),若要控制所有元素在第2个循环要写成for(j=0;j<3;j++)。

28.fun(inta[][M]){intijmax=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];/*求出二维数组的最大值*/returnmax;}fun(inta[][M])\r\n{\r\ninti,j,max=a[0][0];\r\nfor(i=0;i<2;i++)\r\nfor(j=0;j<M;j++)\r\nif(max<a[i][j])\r\nmax=a[i][j];/*求出二维数组的最大值*/\r\nreturnmax;\r\n}解析:此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使max存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

29.

解析:该程序功能是计算并输出给定10个数的方差。解题思路是,根据题干中给出的方差公式首先计算出x’的值,然后计算根号里面的值,最后求其平方根。

30.

解析:该程序功能是移动字符串中的内容,第一个字符移动到最后,后面的字符往前移动一位,形成循环左移。移动m个字符的就是循

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论