2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)_第1页
2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)_第2页
2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)_第3页
2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)_第4页
2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021年福建省南平市全国计算机等级考试C语言程序设计测试卷一(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是A.10B.8C.6D.4

2.栈和队列的共同点是()。

A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点

3.若要求从键盘读入含有空格字符的字符串,应使用函数

A.getc()B.gets()C.getehar()D.scanf()

4.以下不合法的数值常量是()。

A.8.0E0.5B.1e1C.011D.0xabcd

5.在下述论述中,正确的是()。①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的顺序二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③B.②③④C.②④D.①④

6.命令“DIRA:*.*/W”的功能是()

A.宽行显示A盘当前目录的所有文件

B.宽行显示A盘所有目录的所有文件

C.宽行显示A盘的所有目录

D.显示A盘中的文件名,每满一屏后停顿一下

7.有以下程序

#include<stdio.h>

main()

{intx=1,y=2,z=3;

if(x>y)

if(y<z)printf("%d",++z);

elseprintf("%d",++y);

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

}

程序的运行结果是

A.A.331

B.41

C.2

D.1

8.下列数据结构中,能用二分法进行查找的是()

A.无序线性表B.线性链表C.二叉链表D.顺序存储的有序表

9.以下叙述中正确的是()。

A.C语言函数可以嵌套调用,例如:fim(fun(X))

B.C语言程序是由过程和函数组成的

C.C语言函数不可以单独编译

D.C语言中除了main函数外,其他函数不可作为单独文件形式存在

10.有以下程序:#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(“%d”,y[i]);printf(“\n”);}程序的运行结果是()。

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

11.有以下程序:#include<stdio.h>main(){intx=3,y=5,z1,z2;z1=y^x^y;z2=x^y^x;printf(“%d,%d\n”,z1,z2);}程序运行后的输出结果是()。

A.7,7B.5,3C.8,8D.3,5

12.采用深度优先搜索或拓扑排序算法可以判断出一个有向图中是否有环(回路)()

A.对B.错

二、2.填空题(12题)13.把数学表达式改写成C语言的表达式是【】。

14.对存储器按字节进行编址,若某存储器芯片共有8根地址线,则该存储器芯片的存储容量为【】字节。

15.软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试属于【】阶段。

16.子程序通常分为两类:【】和函数,前者是命令的抽象,后者是为了求值。

17.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度。请填空。

FILE*myf;longf1;

myf=【】("test,t","rb");

fseek(myf,0,SEEK_END);f1=ftell(myf);

fclose(myf);

printf("%1d\n",f1);

18.若a是血型变量,且a的初值为4,则计算a+=a-=a*a表达式后a的值为______。

19.下面程序中函数creat用于建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾,单向链表的头指针作为函数值返回。将程序补充完整。

#include<stdiao.h>

structlist

{chardata;structlist*next;};

structlist*creat()

{

structlist*h,*p,*q;charch;

h=【】malloc(sizeof(structlist));

p=q=h;ch=getchar();

while(ch!='?')

{

p=【】malloc(sizeof(structlist));

p->data=ch;q->next=p;q=p;ch=getchar();

}

p->next='\0';

【】;

}

20.与表达式a+=b等价的另一书写形式是______。

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

intx=0,y=0;

while(x<15)y++,x+=++y;

pfintf("%d,%d",y,x);

22.以下程序的输出结果是【】。

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

23.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【】的设计来实现。

24.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。

strcen(chara[],charb[])

{intnum=0,n=0;

while(*(a+num)!=【】)num++;

while(b[n]){*(a+num)=b[n];num++;【】;

return(num);

}

三、3.程序设计题(10题)25.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

876675896101301401980431451777

则输出结果为6,980。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

{

}

main()

{

inta[10]={876,675,896,101,301,401,

980,431,451,777},k;

clrscr();

fun(a,10,&k);

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

}

26.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。

例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。

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

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

27.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为:10、20、30、40。

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

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

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

例如,当a=16,b=35,调用该函数后,c=5361。

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

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

试题程序:

#include<stdio.h>

voidfun(inta,intb/long*c)

{

}

main()

{

inta,b;

longc;

clrscr();

printf("Inputa,b;");

scanf("%d%d",&a,&b);

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

}

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

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

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

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

30.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。

例如,若输入17,5,则应输出19,23,29,3l,37。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,intk,intxx[])

{

}

main()

{

intm,n,zz[1000];

clrscr();

printf("\nPleaseentertwointegers:");

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

fun(m,n,zz);

for(m=O;m<n;m++)

printf("%d",zz[m]);

printf("\n");

}

31.请编写一个函数voidfun(char*ss),其功能是:将字符串ss中所有下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。

例如,若输入abc4Efg,则应输出AbC4EfG。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*ss)

{

}

main()

{

chartt[51];

clrscr();

printf("Pleaseenterancharacterstring

within50characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

%s",tt);

fun(tt);

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

}

32.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1+x+x2/2!3/3!+…/xn/n!

例如,当n=10,x=0.3时,函数值为1349859。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0,3,10));

}

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.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*a;intn,inth,inte)

{

}

main()

{

chars[81],*t,*f;

intm=0,tn=0,fn=0;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

{t++;m++;}/*m为字符串的长度*/

t--;/*指针t指身字符串尾部*/

while(*t=='*')

{t--;tn++;}

/*指针t指向最后一个字母,tn统计尾部'*'的个数*/

while(*f=='*')

{f++;fn++;}

/*指针f指向第一个字母,tn统计导'*'的个数*/

fun(s,m,fn,tn);

printf("Thestringafterdeleted:\n");

puts(s);

}

四、单选题(0题)35.有以下程序

#include<stdio.h>

voidfun(intx)

{if(x/2>1)fun(x/2);

printf(”%d”,x);

}

main()

{fun(7);printf(”\n”);}

程序运行后的输出结果是()。A.137B.731C.73D.37

五、单选题(0题)36.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为()。

A.CB.BasicC.DDLD.DML

六、单选题(0题)37.

参考答案

1.C根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。

2.C解析:栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”(或“先进后出”)的线性表;而队列只允许在表的一端进行插入操作,在另一端:进行删除操作,是一种“先进先出”(或“后进后出”)的线性表。因此栈和队列的共同点是只允许在端点处插入和删除元素。

3.B解析:scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。

4.AA选项中E后面的指数必须为整数,所以不合法。C选项中的011表示的是八进制常量,D选项中的0xabcd表示的是十六进制常量。故本题答案为A选项。

5.D

6.A

7.D本题考查if-else语句的使用。if-else语句可以在条件为“真”或为“假”时执行指定的动作,由if引导条件为“真”时执行的操作;由else引导条件为“假”时执行的操作。else语句要与上面最近的if语句进行匹配,如果要嵌套调用if-else语句,需要将嵌套部分用{}括起来,避免程序报错。题目中给出了一个if语句和一个if-else语句,if-else语句为第一个if语句的子语句。首先执行外层if语句,执行条件为x>y,由于x=1,y=2,故该条件为假,不执行if的子语句,直接执行语句printf("%d\\n",x++);,该语句先输出x的值,然后进行x++操作。x的初始值为1,输出结果为1。

8.DD)【解析】二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。

9.AC语言程序是由函数组成的,所以B选项错误。C语言函数可以单独进行编译,所以C选项错误。每个C语言程序必须包含一个main函数,但不是每个C语言程序文件都必须有一个main函数,用户单独编写的某个函数也可以存储为一个C语言程序文件,所以D选项错误。故本题答案为A选项。

10.A本题由fun函数可知,执行for循环,当i=0时,b[0]=a[0][0]-a[0][3]=1-4=-3;当i=1时,b[1]=a[1][1]-a[1][2]=6-7=-1;当i=2时,b[2]=a[2][2]-a[2][1]=11-10=1;当i=3时,b[3]=a[3][3]-a[3][0]=16-13=3。主函数中输出y数组元素的值为:-3,-1,1,3。故本题答案为A选项。

11.D是按位异或运算,其功能是参与运算的两个数,按位异或,如果两个相应位相同,结果为0,否则为1。接位异或运算满足如下规则:①满足交换律;②一个数与0异或的结果仍是原数;③一个数与1异或的结果是原数按位取反。所以题干中,“y^x^y”等价于等价于“y^y^x”,等价于“0^x”,等价于x,即“z1=x”;“x^y^x”等价于“x^x^y”,等价于“0^y”,等价于y,即“z2=y”,输出结果为:3,5。故本题答案为D选项。

12.A

13.(cosx)*(cosx)*(m+n)/(m-n)

14.256256解析:本题考查对存储器按字节进行编址的规则及其寻址范围(2n),其中n为存储器芯片中地址线的条数。

15.开发开发解析:软件生命周期(SDLC,软件生存周期)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,其中的编码和测试属于开发阶段。

16.过程过程

17.fopen

18.-24-24解析:本题考查赋值运算符a+=b等价于a=a+b;a-=a*a等价于a-a-a*a=4-4*4=-12:a+=a,即a=a+a=-24。

19.(structlist*)(structlist*)return(h)

20.a=a+ba=a+b解析:a+=b与a=a+b等价,作用是把变量a的值加b后再赋给变量a。

21.8208,20解析:本题考查while循环和++运算符的运用。x=0符合条件x<15,则执行y++,x+=++y后,y=1,x=0+2=2后y=2,符合条件继续循环,y=3,x=x+4=6后y=4,再循环y=5,x=x+6=6+6=12后,y=6,继续循环y=7,x=x+8=12+8=20,此时y=8。

22.3131解析:在函数调用时,形参值和改变,不会改变实参的值。

23.测试实例测试实例解析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。

24.\0'n++\\0'\r\nn++解析:第1个循环是求字符串a的长度,并存储在变量num中,循环条件要控制是否取到字符串末尾的'\\0'。第2个循环通过两个变量num和n的改变,将b字符串连接到a字符串后面,并将新的字符串长度记录到num中。

25.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])*k=i;/*找到数组的最大元素,把该元素的下标赋给k所指的数*/\r\nreturns[*k];/*返回数组的最大元素*/\r\n}解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。

26.

解析:该程序功能是计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。在循环中,首先确定相邻元素之间的关系,然后对其进行平均值平方根之和的操作。

27.

解析:(1)该程序功能是返回低于平均分的人数。它的解题思路可以分解为以下几步:求总分一求平均分一逐个元素与平均分比较一统计低于平均分的人数。

(2)从已给部分源程序的main主函数开始入手,核心函数fun(score,9,below)中的参数由题目可知,score存放着m个人的成绩,below存放低于平均分的分数。另外,根据score的定义,可知9为score数组中元素的个数,传给函数fun中的参数m。

28.voidfun(intaintblong*c){*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;}voidfun(inta,intb,long*c)\r\n{\r\n*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;\r\n}解析:语句“*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;”是将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。注意“/”和“%”的用法。

29.*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合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

30.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的素数循环k次即找出紧靠m的k个素数*/{for(j=2;j<i;j++)/*判断一个数是否为素数如果不是跳出此循环判断下一个数*/if(i%j==O)break;if(j>=i)/*如果是素数放入数组xx中*/xx[n++]=i;}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的素数,循环k次,即找出紧靠m的k个素数*/\r\n{for(j=2;j<i;j++)/*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/\r\nif(i%j==O)break;\r\nif(j>=i)/*如果是素数,放入数组xx中*/\r\nxx[n++]=i;\r\n}\r\n}解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。

31.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++){if(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*将ss所指字符串中所有下标为偶数位置的字母转换成大写*/ss[i]==ss[i]-32;}/*大写字母比相应的小写字母的ASCII码值小32*/}voidfun(char*ss)\r\n{inti;\r\nfor(i=0;ss[i]!='\\0';i++){\r\nif(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*将ss所指字符串中所有下标为偶数位置的字母转换成大写*/\r\nss[i]==ss[i]-32;}/*大写字母比相应的小写字母的ASCII码值小32*/\r\n}解析:从C语言的学习中我们知道,只要将小写字母减去32则转换成大写字母,将大写字母加上32则转成小写字母,该程序使用if语句实现该功能转换的。

32.doublefun(doublexintn){inti;doubles=1.0.s1=1.0;for(i=1;i<=n;i++){s1=s1*i;/*各项中的阶乘*/s=s+pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti;\r\ndoubles=1.0.s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{s1=s1*i;/*各项中的阶乘*/\r\ns=s+pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。

33.intfun

温馨提示

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

评论

0/150

提交评论