2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

2022年浙江省衢州市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.有说明语句“inta,b;”,如果输入111222333,使得a的值为111,b的值为333,则以下正确的语句是()。A.scanf("%3d%*3d%3d",&a,&b);

B.scanf("%*3d%3d%3d",&a,&b);

C.scanf("%3d%3d%*3d",&a,&b);

D.scanf("%3d%*2d%3d",&a,&b);

2.

3.软件生命周期是指()。A.软件产品从提出、实现、使用维护到停止使用退役的过程

B.软件从需求分析、设计、实现到测试完成的过程

C.软件的开发过程

D.软件的运行维护过程

4.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是()。

A.xYB.x<=YC.x‖y+zy-zD.!((x

5.有下列程序:

intfunl(doublea){returna*=a;}

intfun2(doublex,doubley)

{doublea=0,b=0;

a=funl(x);b=funl(y);return(int)(a+b);

}

main()

{doublew;w=fun2(1.1,2.0),……}

程序执行后变量w中的值是()。、

A.5.21B.5C.5.0D.0.0

6.判断一包含n个整数的数组a[]中是否存在i、j、k满足a[i]+a[j]+a[k]=0的时间复杂度需要()

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

7.下列关于效率的说法不正确的是()

A.效率是一个性能要求,其目标应该在需求分析时给出

B.提高程序效率的根本途径在于选择良好的设计方法,数据结构与算法

C.效率主要指处理机时间和存储器容量两个方面

D.程序的效率与程序的简单性无关

8.选出任何情况下都不引起二义性的宏定义()。

A.#definePOWER(x)x*x

B.#definePOWER(x)((x)*(x))

C.#definePOWER(x)(x*x)

D.#definePOWER(x)(x)*(x)

9.有以下程序:#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf(“m=%d\n”,m);}程序运行后的输出结果是()A.m=4B.m=2C.m=6D.m=5

10.设有以下语句:intx=10;x+=3+x%(3),则x的值是()。

A.14B.15C.11D.12

11.下列程序段的时间复杂度为()。A.O(n)B.O(log2n)C.O(n3)D.O(n2)

12.若函数中有定义语句:inta;,则()。

A.系统将自动给a赋初值0B.这时a中的值是和随机数C.系统将自动给a赋初值-1D.这a中无任何值

二、2.填空题(12题)13.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性维护。

14.阅读下面程序段,则执行后输出的结果是【】。

#include"stdio.h"

main()

{charfun(char,int);

chara=′A′;

intb=13;

a=fun(a,b);

putchar(a);}

charfun(chara,intb)

{chark;

k=a+b;

returnk;}

15.数据库理论中,数据的独立性一般可分为物理独立性和______。

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

17.在宏定义#definePI3.14159中,用宏名PI代替一个______。

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

fun(intx,inty,intz)

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

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

19.数据库的逻辑模型设计阶段的任务是将______转换成关系模式。

20.以下程序运行后的输出结果是【】。

intf(inta[],intn)

{

if(n>=1)

returnf(a,n-1)+a[n-1];

else

return0;

}

main()

{

intaa[5]={1,2,3,4,5},s;

s=f(aa,5);

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

}

21.需求分析的最终结果是产生【】。

22.若输入3、4、5,程序的输出结果为【】。

#include"math.h"

main()

{floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);

s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f",a,b,c,s);

printf("area=%7.2f\n",area);

}

23.在关系运算中,查找满足一定条件的元组的运算称之为【】。

24.若输入字符串:abcde,则以下while循环体将执行【】次。

while((ch=getchar())=='e')printf("*");

三、3.程序设计题(10题)25.请编写一个函数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));

}

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

例如,若输入“abc4EFg”,则应输出“aBc4EFg”。

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

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

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

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

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

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

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;k<n;k++)

if(k+1)%10==0)

{

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

printf("\n");

}

else

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

}

29.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

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

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

30.编写函数fun(),函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

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

例如:若n的值为11时,函数的值为1.833333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

{

}

main()

{

intn;

floats;

clrscr();

printf("\nPleaseenterN:");

scanf("%d",&n);

s=fun(n);

printf("Theresultis:%f\n",s);

}

31.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asdasasdfgasdaszx67asdmklo,子字符串为as,则应当输出6。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*str,char*substr)

{

}

main()

{

charstr[81],substr[3];

intn;

clrscr();

printf("输入主字符串");

gets(str);

printf("输入子字符串");

gets(substr);

puts(str);

puts(substr);

n=fun(shr,substr);

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

}

32.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写一个函数fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组a中的值为

01279

1112155

2216111

979102

54141

则返回主程序后s的值应为310。

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

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

[试题源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1);

inti,j;

ints;

clrscr()

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

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

{

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

{

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

}

printf("\n");

}

s=fun(a);

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

printf("Thesumis:%d\n",s);

}

33.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是;找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定义结构体*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}},m;

inti;

clrscr();

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

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

printf("Thetop:%s,%d\n",m.num,m.s);

}

34.N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。

注童:部分源程序给出如下.

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)/*创建链表*/

{

STREC*h,*p,*q;

inti=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i<N)

{q=(STREC*)malloc(sizeof(STREC));

q->s=sIi];i++;p->next=q;p=q;

}

p->next=0;

returnh;

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%4.if",p->s);

p=p->next;/*输出各成绩*/

}

while(p!=0)

}

main()

{

doubles[N]={85,76,69,85,91,72,64,

87},ave;

STREC*h;

h=creat(s);

outlist(h);

ave=fun(h);

printf("ave=%6.3f\n",ave);

}

四、单选题(0题)35.

五、单选题(0题)36.有以下程序:#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf(“m=%d\n”,m);}程序运行后的输出结果是()A.m=4B.m=2C.m=6D.m=5

六、单选题(0题)37.以下选项中,能用作用户标识符的是()。

A._0_B.8_8C.voidD.unsigned

参考答案

1.A根据题意,要使a的值为111,b的值为333,必须在读入时指定a的读入宽度为3,b的读入宽度为3,且a和b的控制字符之间必须额外增加%*控制符,用于跳过中间的3位输入数字,选项A正确。本题答案为A选项。

2.A

3.A通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。

4.D本题考查逻辑运算符的使用。当“”的两个运算对象都是逻辑l时,表达式返回值才是1;“‖”的两个运算对象至少有一个是逻辑1时,表达式返回值也是l,x<y为1,!z为0,10为1,0‖为1,因此,!l为0。

5.C子函数funl(doublea)的功能是返回a的平方值的整数部分。子函数fun2(doubleX,doubley)的功能是返回X的平方值的整数部分与Y的平方值的整数部分的和。又因为题中变量W的定义为double型,函数fun(2)的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量w的值为5.0。

6.A

7.D

8.B解析:引起带参数宏的二义性主要有两个方面:一是,参数之间因运算符优先级不确定而带来的二义性。例如本题的选项A),若程序中使用POWER(a+b),会展开为a+b*a+b,这样就会先计算b*a的值,然后再加一个a和一个b,产生二义性。杜绝这种二义性的方法是在宏定义的每个参数外加上圆括号以保证总是先计算每个参数的值,就好像本题的选项D)那样。另一个是,整个宏所代表的表达式因运算符优先级不确定而带来的二义性。例如本题的选项D),若程序中使用a/POWER(b),会展开为a/(b)*(b),这样就会先计算a/b的值,然后再乘以b,产生二义性。杜绝这种二义性的方法是对整个宏定义加一个圆括号,就好像本题的选项B)那样。故选项B)在任何情况下都不会引起二义性,应该选B。

9.C第一次外循环的值为1,第一次内循环j的值为3,不满足条件执行m*=i*j即m的值为3;第二次j的值为2。不满足条件执行m*=i*j,即的值为6;第三次j的值为1,不满足条件执行m*=i*j,即m的值仍为6。第二次外循环的值2,j的值为3,满足条件执行break语句跳出循环。

10.A

11.A

12.B本题考查变量赋值基本概念。在声明一个变量后,如果未显式的对其进行赋值,则它的值是一个随机值。

13.完善性软件维护活动包括以下几类:改正性维护,适应性维护、完善性维护和预防性维护,完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。

14.NN解析:函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符'A'的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。

15.逻辑独立性逻辑独立性解析:数据的独立性一般可分为物理独立性和逻辑独立性。

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

17.字符串字符串解析:本题考查字符替换格式:#define标识符字符串。

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

19.E-R图E-R图解析:数据库逻辑设计的任务是将概念模型进一步转化成相应的数据模型。而E-R图是主要的概念模型,因此数据库的逻辑设计的主要工作是将E-R图转换成关系模式。

20.1515解析:在函数f()中只有一条if语句,如果n不小于1,则返回f(a,n-1)+a[n-1];否则返回0。所以f(aa,5)返回f(aa,4)+aa[4],而f(aa,4)返回f(aa,3)+aa[3],……直到f(aa,0)返回0。故f(aa,5)实际返回值是0+aa[1]+aa[2]+aa[3]+aa[4]+aa[5],所以本题最终输出15。

21.需求规格说明书需求规格说明书解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。需求规格说明书包括正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性等。

22.a=3.00b=4.00c=5.00s=6.00area=6.00

23.选择选择解析:在关系数据库中,选择运算也是一个元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由R中的那些满足逻辑条件的元组所组成。

24.00解析:函数getchar()是从键盘得用户输入的一个字符。用户输入的第1个字符a,不管后面输入的是什么ch的值都是'a',因此条件(ch=getchar())=='e'为假,这个循环不会被执行。

25.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存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

26.

解析:该程序功能是将字符串中所有下标为奇数位置上的字母转换为大写。其中,同一英文字母的大写和小写的ASCII码值相差32,因此,要将小写字母转换为大写字母,只要将其对应的ASCII码值减去32即可。

27.

解析:该程序功能是将两个正整数合并形成一个整数的题型。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

28.voidfun(int*aint*n){intij=0;for(i=1;i<=1000;i++)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++)\r\nif((i%7=0||i%11==0)&&i%77!=0)\r\na[j++]=i;\r\n*n=j;\r\n}解析:本题的关键是if条件语句及参数传递。本题的设计思路是:(1)利用循环遍历1到1000之内的整数;(2)利用if语句判断,把查找到的整数保存到形参数组a中;(3)把数组a中数组元素的个数赋值到形参指针n所指的内存。注意程序中if语句的判断条件,本题是找出能被7或11整除但不能同时被7和11整除的所有整数。能同时被7和11整除的数一定能被77整除,且不能被7整除的数不一定就是能被7或11整除的数。所以,可得出程序中的if语句。

29.

解析:该程序功能是将字符串尾部的“*”号全部删除,前面和中间的“*”号不删除。本题的解题过程首先确定由串尾开始的第一个非“*”位置,将由头开始到此位置的字符拷贝到字符串。

30.floatfun(intn){intis1=0;floats=0.0;for(i=1;i<=n;i++){s1=s1+i;/*求每一项的分母*/s=s+1.0/s1;/*求多项式的值*/}returns;}floatfun(intn)\r\n{\r\ninti,s1=0;\r\nfloats=0.0;\r\nfor(i=1;i<=n;i++)\r\n{s1=s1+i;/*求每一项的分母*/\r\ns=s+1.0/s1;/*求多项式的值*/\r\n}\r\nreturns;\r\n}解析:本题中用s1来表示式中每一项的分母,而每一项的分母都是其前一项分母加项数。注意由于s1定义成一个整型,所以在s=s+1.0/s1中不能把1.0写成1。

31.intfun(char*strchar*substr){intij=0;for(i=0;str[i+1]!='\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次则j+1如此循环*/if(str[i]==substr[0]&&str[i+1]==substr[1])j++;returnj;/*返回子字符串在主字符串中出现的次数*/}intfun(char*str,char*substr)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i+1]!='\\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次,则j+1,如此\r\n循环*/\r\nif(str[i]==substr[0]&&str[i+1]==substr[1])\r\nj++;\r\nreturnj;/*返回子字符串在主字符串中出现的次数*/\r\n}解析:该题中subsu只有两个字符,所以可以用if语句来直接进行判断。要注意if())中str组的下标为i和i+1,即比较当前字符及其以后的一个字符是否分别与substr中的字符对应相同,若都相同则表示出现了一次。

32.intfun(intw[][N]){intijk=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1){s=s+w[i][j]*w[i][j];}returns;}intfun(intw[][N])\r\n{\r\ninti,j,k=0;\r\nints=0;\r\nfor(i=0;i<N;i++)\r

温馨提示

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

评论

0/150

提交评论