2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩47页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.

2.有如下程序main(){inty=3,x=3,z=1;printf("%d%d\n",(++x,y++),z+2);}运行该程序的输出结果是______。

A.34B.42C.43D.33

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

4.在“文件包含,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是()。

A.直接按系统设定的标准方式搜索目录

B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

C.仅仅搜索源程序所在目录

D.仅仅搜索当前目录

5.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。

A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.没有任何关系

6.下面程序输出的结果是main(){intx;x=-3+4*5-6;printf("%d",x);x=3+4%5-6;printf("%d",x);x=-3+4%6/5;printf("%d",x);x=(7+6)%5/2;printf("%d",x);}

A.111-31B.11-321C.12-321D.11121

7.树最适合用来表示()。

A.有序数据元素B.无序数据元素C.元素之间具有分层次关系的数据D.元素间无联系的数据

8.广义表((a),a)的表头是()。

A.aB.(a)C.((a))D.()

9.设有函数说明语句:intfun(int,int);以及函数指针定义语句:int(*f)(int,int);若要使函数指针指向函数fun的入口地址,以下选项中正确的是()。

A.f=fun();B.*f=fun;C.f=fun;D.*f=fun();

10.下列程序的执行结果是______。#include<stdio.h>unionun{inti;charc[2};};voidmain(){unionunx;x.c[0]=10;x.c[1]=1;printf("\n%d",x.i);}

A.266B.11C.265D.138

11.设计软件结构是在软件生命周期的()。

A.软件定义期B.软件开发期C.软件维护期D.以上3个都不是

12.

二、2.填空题(12题)13.若a=10,b=20,则表达式!(a<b)的值是【】。

14.执行下列语句段后,x的值是______。

int*p,x;

x=100;

p=&x;

x=*p+50;

15.若按功能划分,软件测试的方法通常分为______测试方法和黑盒测试方法。

16.函数voidfun(float*sn,intn)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;}

【】=s;}

17.要求使下列程序输出5个整数,请填空。

for(i=0;i<=______;printf("%d\n",i+=2));

18.源程序文档化要求程序应加注释。注释一般分为序言性注释和【】注释。

19.以下程序的输出结果是()。#include<stdio.h>main(){inti=10,j=0;do{j=j+i;i--;}while(i>5);printf("%d\n",j);}

20.下列程序的功能是对输入的一行字符中的数字字符的字面值累加,输出此累加和,请填空。

#include<stdio.h>

#include<ctype.h>

main()

{charc;

inta,s=0;

while(______)

if(isdigit(C))

{a=c-'0';s+=a;}

printf("s=%d",s);

}

21.[]的任务是诊断和改正程序中的错误。

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

23.测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。

24.在C语言中,while和do…while循环的主要区别是______的循环至少被执行一次。

三、3.程序设计题(10题)25.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。

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

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

26.请编写函数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);

}

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

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,1l,2l,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;i++)

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

printf("\n");

}

s=fun(a);

printf(“*****THERESULT*****\n”);

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

}

28.编写函数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);

}

29.请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;若w值为923,则函数返回23。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

30.请编写函数fun(),该函数的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCⅡ码值为偶数、…、字符2的ASCⅡ码值为偶数、…,都应当删除,其他依次类推。最后t所指的数组中的内容应是ACEGl35。

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

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

试题程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

31.下列程序定义了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);

}

32.请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

例如,输入下面的矩阵:其转置矩阵为:

123147

456258

789369

程序输出:

2610

61014

101418

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

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

33.学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

[试题源程序]

#include<stdio.h>

#defineN8

typedefstruct

{

charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

voidmain()

{

STRECs[N]={{"GA05",85},

{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},

{"GA06",87}};

STRECh[N],t;FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);

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

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

printf("\n");

ut=fopen("out.dat","W");

fprintf(out,"%d\n%7.3f\n",n,ave);

for(i=0;2<n-1;i++)

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

if(h[i].s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

for(i=0;2<n;i++)

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

34.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为****A*BC*DEF*G*******,若n的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(charAa,intn)

{

}

main()

{chars[81];intn;

printf("Enterastring:\n");gets(s);

printf("Entern:");scanf("%d",&n);

fun(s,n);

printf("Thestringafterdeleted:\n");

puts(s);

}

四、单选题(0题)35.递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的大小为()

A.O(logn)B.O(nlogn)C.O(n)D.O(d)

五、单选题(0题)36.以下程序执行后的输出结果是()。

A.5,5

B.5,11

C.11,11

D.11,5

六、单选题(0题)37.若要求从键盘读入含有空格字符的字符串,应使用函数()。

A.getcharB.getcC.getsD.scanf

参考答案

1.D

2.D解析:逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。

3.B

4.B#include”文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。

5.C(10)C)解析:DB即数据库(Database),是统一管理的相关数据的集合;DBMS即数据库管理系统(DatabaseManagementSystem),是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法;DBS即数据库系统(DatabaseSystem)由如下5部分组成,数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。

6.A解析:本题考查的是算术运算符的各种运算,x=-3+4*5-6=-3+20-6=11;x=3+4%5-6=3+4-6=1;x=-3+4%6/5=-3+4/5=-3+0=-3;x=(7+6)%5/2=13%5/2=3/2=1。故正确答案为选项A)。

7.C

8.B

9.CC语言中,函数名也是一个指针,是函数的人口地址。使函数指针f指向函数fun的入口地址,直接将函数名fun赋给指针f即可。故本题答案为C选项。

10.A解析:由于本题定义的是共用体,所以成员表列中的整型变量x与字符数组c共占用同一个存储单元,且此存储单元为2个字节,通常c[0]位于低字节,c[1]位于高字节,所以x.i的值为266。

11.BB。【解析】设计软件结构,是在软件概要设计阶段进行的,而概要设计属于软件开发期。

12.D

13.00解析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

14.150150解析:本题先给变量x赋初始值100,然后将指针p指向变量x,*p是取指针p所指地址的内容,即100,所以x=100+50=150。

15.白盒白盒解析:软件测试的方法分为白盒测试方法和黑盒测试方法.

16.=-1*sn=-1\r\n*sn解析:C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。指针变量作函数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

17.88解析:本题考查基本的for循环条件,i+=2表示i每次递增2,从0开始,输出5个整数则需要的条件是i<=8。

18.功能性功能性

19.4040解析:分析程序,初始时i=10,j=0,这时do循环中的“i=j+i”

20.(c=getchar())!='\n'(c=getchar())!='\\n'解析:分析题目可知,程序中运用函数c=getchar()从标准输入设备读取下一个字符,而且是一行的字符(即没有换行),所以条件为(c=getchar())!='\\n'。

21.程序调试程序调试解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。

22.指针P指向数组a的首地址,执行语句p++;后p指向数组a的第2个元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

23.调试调试

24.do…whiledo…while解析:考查while和do…while循环的主要区别。while循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体;在do…while构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。

25.

解析:该程序功能是计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。解题过程首先求出能被5或9整除的所有自然数,然后在此基础上求得这些数的倒数之和。

26.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10个数的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10个数的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的方差*/\r\n}解析:又是一道算式表达题,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。

27.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)/*只要下标中有一个为0或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\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/\r\n{s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/\r\n}\r\nreturns;/+返回周边元素的平方和*/\r\n}解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。

28.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。

29.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整数w的后n-1位的数*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整数w的后n-1位的数*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我们首先应该明白无符号整数的定义形式,若它大于10000(5位)时,将10000对它求余则结果为后4位;当它大于1000(4位)时,将1000对它求余则结果为后3位,花此类推。特别注意这里所有if()的顺序不能颠倒。

30.voidfun(char*schart[]){inti=0;for(;*s!='\0';s++)/*找出ASCII值为奇数的字符依次存入数组t中*/if(*s%2==1)t[i++]=*s;t[i]='\0';/*在字符串的末尾口上串结束符*/}voidfun(char*s,chart[])\r\n{\r\ninti=0;\r\nfor(;*s!='\\0';s++)/*找出ASCII值为奇数的字符依次存入数组t中*/\r\nif(*s%2==1)\r\nt[i++]=*s;\r\nt[i]='\\0';/*在字符串的末尾口上串结束符*/\r\n}解析:要删除ASCH值为偶数的字符,也就是要留下ASCH值为奇数的字符,由于最终是要求求出剩余字符(BPASCⅡ值为奇数)形成的新串,所以本题程序的算法是从原字符串的头到尾扫描并找出ASCⅡ值为奇数的字符依次存入数组冲。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]州的作用是先使用t[i]然后再使自增1。任何字符串的末尾都要有串结束符。这种算法在很多题中都要用到,学习者可以举一反三地找一些其他相关习题练习一下。

31.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\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)\r\n{\r\ns=s+w[i][j]*w[i][j];\r\n}\r\nreturns;\r\n}

32.

解析:该程序功能是实现B=A+Aˊ,即把矩阵A加上A的转置。其中,所谓矩阵的转置,是把行中的数据与列中的数据进行对调。解题过程中首先求得已给的矩阵的转置,然后在循环过程中对矩阵与该矩阵的转置对应元素求和。

33.intfun(STREC*aSTREC*bint*n){doubleave=0.0;intij=0;*n=0;for(i=0;i<N;i++)ave+=a[i].s;ave/=N;for(i=0;i<N;i++)if(a[i].s<ave){b[j]=a[i];(*n)++;j++;}returnave;}intfun(STREC*a,STREC*b,int*n)\r\n{\r\ndoubleave=0.0;\r\ninti,j=0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nave+=a[i].s;\r\nave/=N;\r\nfor(i=0;i<N;i++)\r\nif(a[i].s<ave)\r\n{\r\nb[j]=a[i];\r\n(*n)++;\r\nj++;\r\n}\r\nreturnave;\r\n}解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

34.voidfun(char*aintn){inti=0k=0;char*p*t;p=t=a;/*开始时p与t同时指向数组的首地址*/while(*t==‘*’)/*用k来统计前部星号的个数*/{k++;t++;}if(k>n)/*如果k大于n则佼p的前部保留n个星号其后的字符依次存入数组a中*/{while(*P){a[i]=*(p+k-n);i++p++;}a[i]=‘\0’;/*在字符串最后加上结束标志位*/}}voidfun(char*a,intn)\r\n{\r\ninti=0,k=0;\r\nchar*p,*t;\r\np=t=a;/*开始时,p与t同时指向数组的首地址*/\r\nwhile(*t==‘*’)/*用k来统计前部星号的个数*/\r\n{k++;t++;}\r\nif(k>n)/*如果k大于n,则佼p的前部保留n个星号,其后的字符依次存入数组a中*/\r\n{while(*P)\r\n{a[i]=*(p+k-n);\r\ni++\r\np++;\r\n}\r\na[i]=‘\\0’;/*在字符串最后加上结束标志位*/\r\n}\r\n}解析:while()循环的作用是计算出前部星号的个数;if()的作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后记得在字符串最后加上结束标志位。

35.D

36.Bmain函数中的局部变量m与fun函数中的静态局部变量m同名,因此main访问的是其局部变量m,所以main中的两次函数调用,实际上都是调用fun(1,1)。

第一次调用时,i=i+(m+1)=2+(0+1)=3,m=i+x+y=3+1+1=5。

第二次调用时,i=i+(m+1)=3+(5+1)=9,m=i+x+y=9+1+l=11。

所以程序输出5,11。

37.C当输入字符串时,函数scanf用“空格”间隔不同的字符串,scanf函数不能输入空格。getchar函数用于输入字符,其调用形式为ch=getchar(),getehar函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户按<Enter>键时,读入才开始执行。gets函数的调用形式为getS(Str_adr),其中“str_adr”是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc函数的调用形式为ch=getc(Pf),其中“pf”是文件指针,函数的功能是从“pf”指定的文件中读入一个字符,并把它作为函数值返回。故本题答案为C选项。2021-2022学年广东省肇庆市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.

2.有如下程序main(){inty=3,x=3,z=1;printf("%d%d\n",(++x,y++),z+2);}运行该程序的输出结果是______。

A.34B.42C.43D.33

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

4.在“文件包含,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是()。

A.直接按系统设定的标准方式搜索目录

B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

C.仅仅搜索源程序所在目录

D.仅仅搜索当前目录

5.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。

A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.没有任何关系

6.下面程序输出的结果是main(){intx;x=-3+4*5-6;printf("%d",x);x=3+4%5-6;printf("%d",x);x=-3+4%6/5;printf("%d",x);x=(7+6)%5/2;printf("%d",x);}

A.111-31B.11-321C.12-321D.11121

7.树最适合用来表示()。

A.有序数据元素B.无序数据元素C.元素之间具有分层次关系的数据D.元素间无联系的数据

8.广义表((a),a)的表头是()。

A.aB.(a)C.((a))D.()

9.设有函数说明语句:intfun(int,int);以及函数指针定义语句:int(*f)(int,int);若要使函数指针指向函数fun的入口地址,以下选项中正确的是()。

A.f=fun();B.*f=fun;C.f=fun;D.*f=fun();

10.下列程序的执行结果是______。#include<stdio.h>unionun{inti;charc[2};};voidmain(){unionunx;x.c[0]=10;x.c[1]=1;printf("\n%d",x.i);}

A.266B.11C.265D.138

11.设计软件结构是在软件生命周期的()。

A.软件定义期B.软件开发期C.软件维护期D.以上3个都不是

12.

二、2.填空题(12题)13.若a=10,b=20,则表达式!(a<b)的值是【】。

14.执行下列语句段后,x的值是______。

int*p,x;

x=100;

p=&x;

x=*p+50;

15.若按功能划分,软件测试的方法通常分为______测试方法和黑盒测试方法。

16.函数voidfun(float*sn,intn)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;}

【】=s;}

17.要求使下列程序输出5个整数,请填空。

for(i=0;i<=______;printf("%d\n",i+=2));

18.源程序文档化要求程序应加注释。注释一般分为序言性注释和【】注释。

19.以下程序的输出结果是()。#include<stdio.h>main(){inti=10,j=0;do{j=j+i;i--;}while(i>5);printf("%d\n",j);}

20.下列程序的功能是对输入的一行字符中的数字字符的字面值累加,输出此累加和,请填空。

#include<stdio.h>

#include<ctype.h>

main()

{charc;

inta,s=0;

while(______)

if(isdigit(C))

{a=c-'0';s+=a;}

printf("s=%d",s);

}

21.[]的任务是诊断和改正程序中的错误。

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

23.测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。

24.在C语言中,while和do…while循环的主要区别是______的循环至少被执行一次。

三、3.程序设计题(10题)25.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。

例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。

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

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

26.请编写函数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);

}

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

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,1l,2l,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;i++)

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

printf("\n");

}

s=fun(a);

printf(“*****THERESULT*****\n”);

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

}

28.编写函数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);

}

29.请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;若w值为923,则函数返回23。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

30.请编写函数fun(),该函数的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCⅡ码值为偶数、…、字符2的ASCⅡ码值为偶数、…,都应当删除,其他依次类推。最后t所指的数组中的内容应是ACEGl35。

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

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

试题程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

31.下列程序定义了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);

}

32.请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

例如,输入下面的矩阵:其转置矩阵为:

123147

456258

789369

程序输出:

2610

61014

101418

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

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

33.学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

[试题源程序]

#include<stdio.h>

#defineN8

typedefstruct

{

charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

voidmain()

{

STRECs[N]={{"GA05",85},

{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},

{"GA06",87}};

STRECh[N],t;FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);

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

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

printf("\n");

ut=fopen("out.dat","W");

fprintf(out,"%d\n%7.3f\n",n,ave);

for(i=0;2<n-1;i++)

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

if(h[i].s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

for(i=0;2<n;i++)

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

34.假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为****A*BC*DEF*G*******,若n的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(charAa,intn)

{

}

main()

{chars[81];intn;

printf("Enterastring:\n");gets(s);

printf("Entern:");scanf("%d",&n);

fun(s,n);

printf("Thestringafterdeleted:\n");

puts(s);

}

四、单选题(0题)35.递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的大小为()

A.O(logn)B.O(nlogn)C.O(n)D.O(d)

五、单选题(0题)36.以下程序执行后的输出结果是()。

A.5,5

B.5,11

C.11,11

D.11,5

六、单选题(0题)37.若要求从键盘读入含有空格字符的字符串,应使用函数()。

A.getcharB.getcC.getsD.scanf

参考答案

1.D

2.D解析:逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。

3.B

4.B#include”文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。

5.C(10)C)解析:DB即数据库(Database),是统一管理的相关数据的集合;DBMS即数据库管理系统(DatabaseManagementSystem),是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法;DBS即数据库系统(DatabaseSystem)由如下5部分组成,数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。

6.A解析:本题考查的是算术运算符的各种运算,x=-3+4*5-6=-3+20-6=11;x=3+4%5-6=3+4-6=1;x=-3+4%6/5=-3+4/5=-3+0=-3;x=(7+6)%5/2=13%5/2=3/2=1。故正确答案为选项A)。

7.C

8.B

9.CC语言中,函数名也是一个指针,是函数的人口地址。使函数指针f指向函数fun的入口地址,直接将函数名fun赋给指针f即可。故本题答案为C选项。

10.A解析:由于本题定义的是共用体,所以成员表列中的整型变量x与字符数组c共占用同一个存储单元,且此存储单元为2个字节,通常c[0]位于低字节,c[1]位于高字节,所以x.i的值为266。

11.BB。【解析】设计软件结构,是在软件概要设计阶段进行的,而概要设计属于软件开发期。

12.D

13.00解析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

14.150150解析:本题先给变量x赋初始值100,然后将指针p指向变量x,*p是取指针p所指地址的内容,即100,所以x=100+50=150。

15.白盒白盒解析:软件测试的方法分为白盒测试方法和黑盒测试方法.

16.=-1*sn=-1\r\n*sn解析:C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。指针变量作函数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

17.88解析:本题考查基本的for循环条件,i+=2表示i每次递增2,从0开始,输出5个整数则需要的条件是i<=8。

18.功能性功能性

19.4040解析:分析程序,初始时i=10,j=0,这时do循环中的“i=j+i”

20.(c=getchar())!='\n'(c=getchar())!='\\n'解析:分析题目可知,程序中运用函数c=getchar()从标准输入设备读取下一个字符,而且是一行的字符(即没有换行),所以条件为(c=getchar())!='\\n'。

21.程序调试程序调试解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。

22.指针P指向数组a的首地址,执行语句p++;后p指向数组a的第2个元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

23.调试调试

24.do…whiledo…while解析:考查while和do…while循环的主要区别。while循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体;在do…while构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。

25.

解析:该程序功能是计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。解题过程首先求出能被5或9整除的所有自然数,然后在此基础上求得这些数的倒数之和。

26.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10个数的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10个数的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的方差*/\r\n}解析:又是一道算式表达题,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。

27.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)/*只要下标中有一个为0或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\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/\r\n{s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/\r\n}\r\nreturns;/+返回周边元素的平方和*/\r\n}解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。

28.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。

29.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整数w的后n-1位的数*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整数w的后n-1位的数*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我们首先应该明白无符号整数的定义形式,若它大于10000(5位)时,将10000对它求余则结果为后4位;当它大于1000(4位)时,将1000对它求余则结果为后3位,花此类推。特别注意这里所有if()的顺

温馨提示

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

评论

0/150

提交评论