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

下载本文档

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

文档简介

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

一、单选题(12题)1.

2.以下说法错误的是()。

A.由3种基本结构组成的结构化程序不能解决过于复杂的问题

B.由3种基本结构组成的结构化程序能解决一些简单的问题

C.由3种基本结构组成的结构化程序能解决递归问题

D.由3种基本结构组成的结构化程序能解决数学上有解析解的问题

3.有以下程序:#include<stdio.h>main(){inta=1,b=0;if(--a)b++;elseif(a==0)b+=2;elseb+=3:print[("%d\n",b);}程序运行后的输出结果是()。A.0B.1C.2D.3

4.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a1,1为第一个元素,其存储地址为1,每个元素占1个地址空间,则a8,5的地址为()。

A.13B.33C.18D.40

5.若要用函数fopen打开一个新的二进制文件,该文件要既能读也能写,则应以哪种方式打开文件()。

A.wbB.wb+C.rb+D.rb

6.以下程序的输出结果是______。main(){inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1];a[3][0]);}

A.650B.1470C.5430D.输出值不定

7.

8.

9.C语言提供的合法关键字是()

A.switchB.cherC.caseD.default

10.已定义c为字符型变量,则下列语句中正确的是()。

A.c='97'B.c="97"C.c=97D.c="a"

11.下列叙述中正确的是______。

A.线性表是线性结构B.栈与队列是非线性结构C.线性列表是非线性性结构D.二叉树是线性结构

12.以下程序的运行结果是______。#include<stdio.h>main(){inta[]:{1,2,3,4,5,6,7,8,9,10,11,12):int*p=a+5,*q=NULL:*q=*(p+5):printf("%d%d\n",*p,*q);}

A.运行后报错B.66C.612D.55

二、2.填空题(12题)13.若想通过以下输入语句给a赋值1,给b赋值2.则输入数据的形式应该是【】。

inta,b;

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

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

#defineLEN5

inta[LEN],k;

main()

{fun1();

fun2();

}

fun1()

{for(k=0;k<LEN;k++)

a[k]=k;

}

fun2()

{intk;

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

printf("%d",*(a+k));

}

15.以下定义的结构体类型包含两个成员,其中成员变量info用来存放整型数据;成员变量link是指向自身结构体的指针。请将定义补充完整。

structnode

{intinfo;

【】Link;

};

16.某二义树中度为2的结点有18个,则该二叉树中有______个叶子结点。

17.常用的黑箱测试有等价类划分法、【】和错误推测法3种。

18.有以下程序

intf(intn)

{if(n==1)return1;

elsereturnf(n-1)+1;}

main()

{inti,j=0;

for(i=1;i<3;i++)j+=f(i);

printf("%d\n"j);}

程序运行后的输出结果是______。

19.数据库保护分为:安全性控制、______、并发性控制和数据的恢复。

20.下面程序的运行结果是【】。

voidswap(int*a,int*b)

{

int*tp;

t=a;a=b;b=t;

}

main()

{

intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

printf("%d%d\n",*p,*q);

}

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

main()

{inti;

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

{if(i>4)

{printf("%d\n",i);

break;}

printf("%d\n",i++);}}

22.有以下程序:

#include<stdio.h>

intsub(intn)

{return(n/10+n%10);}

main()

{intx,y;

seanf("%d",&x);y=sub(sub(sub(x)));

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

}

若运行时输入:1234<回车>,程序的输出结果是【】。

23.下面程序的功能是从键盘输入一行字符,统计有多少个单词,单词间用空格分隔。补充所缺语句。

#include<stdio.h>

main()

{charss[80],c1,c2='';

inti=0,num=0;

gets(s);

while(s[i]!='\0')

{c1=s[i];

if(i==0)c2='';

elsec2=s[i-1];

if(【】)num++;

i++;

}

printf("Thereare%dwords,\n",num);

}

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

main()

{intp=30;

printf("%dkn",(p/3>0?p/10:p%3));

}

三、3.程序设计题(10题)25.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。

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

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

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

26.请编写函数fun,其功能是:计算并输出下列多项式的值:

例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。

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

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

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

例如,若输入15,5,则应输出16,18,20,21,22。

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

请勿改动主函数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=0;m<n;m++)

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

printf("\n");

}

28.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

例如,输入beijingshah曲aj(为回车键),函数将返回shanghai。

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

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

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

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

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

30.请编写一个函数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");

}

31.请编写函数fun,其功能是:计算并输出下列多项式的值:

例如,在主函数中从键盘给n输入50后,输出为:s=1.718282。

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

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

32.编写函数fun(),它的功能是;根据以下公式求p的值,结果由函数值带回。m与n为两个正数且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8时,运行结果为495.000000。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

33.编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。

例如:n为1000时,函数值应为s=96.979379。

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

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

试题程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

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

}

34.某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。

例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。

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

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

试题程序:

#include<stdio.h>

#defineN8

typedefstruct

{charnum[10];

doubles[N];

doubleave;

}STREC;

voidfun()

{

}

main()

{

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);

inti;

fun(&s);

printf("The%s'sstudentdata:\n",s.num)//*输出学号*/

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

printf("%4.1f\n",s.s[i]);

/*输出各科成绩*/

printf("\nave=%7.3f\n",s.ave);

/*输出平均分*/

}

四、单选题(0题)35.C语言的逻辑表达式在特定情况下会产生“短路”现象。若有逻辑表达式“x++&&y++,”则以下叙述中正确的是()。

A.若x的值为0,则“y++”操作被“短路”,y值不变

B.若x的值为1,则“y++”操作被“短路”,y值不变

C.若y的值为0,则“&&”运算被“短路”,y值不变

D.若y或x的值为0,则表达式值为0,“x++”和“y++”均不执行

五、单选题(0题)36.设n、m为一棵二叉树上的两个结点,在中序遍历时,n在m之前的条件是_____________。

A.n在m右方B.n是m的祖先C.n在m左方D.n是m子孙

六、单选题(0题)37.稀疏矩阵一般的压缩存储方式有两种,即()。

A.二维数组和三维数组B.三元组和散列C.三元组和十字链表D.散列和十字链表

参考答案

1.A

2.A顺序结构、选择结构、循环结构是3种基本结构,由3种基本结构构成的程序称为结构化程序,由3种基本结构组成的算法可以解决任何复杂的问题,选项A错误。本题答案为A选项。

3.D

4.B

5.B解析:本题考查文件使用方式标识符。方式“wb”为输出打开一个二进制文件;方式“wb+”为读写建立一个新的二进制文件;方式“rb+”为读写打开一个二进制文件:方式“rb”为输入打开一个二进制文件。

6.A解析:对未给出初始值的整数数组元素,被默认初始化为零。

7.B

8.D

9.C

10.C解析:本题考核的知识点是字符型变量的基本概念。用单引号括起来的一个字符称为字符常量,而选项B和选项D中用的是双引号,而用双引号括起来的字符为字符串常量,故选项B和选项D不正确。因为在C语言中,字符常量在存储时,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中,所以C语言使字符型数据和整形数据之间可以通用,选项C正确.而选项A中,给字符型变量赋值时只能赋一个字符,而9,7作为字符时为两个字符且必须分别为单引号括起来,故选项A不正确,所以,4个选项中选项C符合题意。

11.A解析:一般将数据结构分为两大类型:线性结构与非线性结构。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

12.A

13.a=1b=2

14.01234。01234。解析:函数fun1给数组a的每个元素赋值,fun2则输出结果。

15.structnode*structnode*解析:link是指向结构体自身的指针,因此link是指针,指向strictnode类型的数据,可定义成“stmctnode*link”。

16.1919解析:二叉树具有如下性质:在任意一棵二叉树中,度为。的结点(即叶子结点)总是比度为2的结点多一个。根据题意,度为2的节点为18个,那么,叶子结点就应当是19个。

17.边界值分析法边界值分析法解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分、边界值分析法和错误推测法3种。

18.3

19.完整性控制完整性控制

20.3535解析:在主函数中通过定义和赋初值使p和q分别指向了x和y,执行函数调用“swap(p,q)”,把p和q中的地址值传给了形参指针.变量a和b,a和b分别指向了实参x和y。在函数swap()中交换了指针变量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回后x和y依旧是原来的值。

21.1351\r\n3\r\n5解析:本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf('%d\\n',i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf('%d\\n',i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf('%d\\n',i),输出5,然后break语句跳出了for循环。

22.1010解析:函数sub递归调用的返回值被作为再次调用sub函数的实参传给函数sub的形参,共进行3次递归调用。第1次调用sub(1234)的返回值为1234/10+1234%10=127;第2次调用sub(127)的返回值为127/10+127%10=19;第3次调用sub(19)的返回值为19/10+19%10=10。所以程序的输出为10。

23.c1!==''&&c2==''

24.33本试题中,先判断表达式p/3>0,该值为真,所以此表达式等于p/10的值3,故最后输出的值为3。

25.*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。

26.

解析:该程序功能是计算并输出多项式的值。该题的解题思路是。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

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

28.

解析:该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。

29.

解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。

30.voidfun(intmint*aint*n){intij=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0)/*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/a[j++]=i;*n=j;/*返回这些数的个数*/}voidfun(intm,int*a,int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<=m;i++)\r\nif(i%7==0||i%11==0)/*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/\r\na[j++]=i;\r\n*n=j;/*返回这些数的个数*/\r\n}解析:本题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。

31.

解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

32.floatfun(intmintn){inti;doublep=1.0;for(i=1;i<=m;i++)p=p*i;/*求m!*/for(i=1;i<=n;i++)p=p/i;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}floatfun(intm,intn)\r\n{\r\ninti;\r\ndoublep=1.0;\r\nfor(i=1;i<=m;i++)p=p*i;/*求m!*/\r\nfor(i=1;i<=n;i++)p=p/i;/*求m!/n!*/\r\nfor(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/\r\nreturnp;\r\n}解析:本题中,欲求P的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。注意阶乘值应当是double类型,若定义x,y,z为整型变量,则p=x/(y*z)中的除法为整数除法。

33.doublefun(intn){doubles=0.0;inti;for

温馨提示

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

评论

0/150

提交评论