




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021-2022学年广东省广州市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.x>0||y==5的相反表达式为()。
A.x<=0||y!=5B.x<=0&&y!=5C.x>0||y!=5D.x>0&&y==5
2.有以下程序:#include<stdio.h>main(){inta;scanf("%d",&a);if(a++<9)printf("%d\n",a);clscprintf("%d\n",a--);}程序运行时从键盘输入9<回车>,则输出结果是()。A.10B.11C.9D.8
3.程序中对fun函数有如下说明
void*fun();
此说明的含义是:A.fun了数无返回值
B.fun函数的返回值可以是任意的数据类型
C.fun函数的返回值是无值型的指针类型
D.指针fun指向一个函数,该函数无返回值
4.设变量已正确定义,则以下能正确计算f=n!的程序是()。A.f=0:for(i=1;i<=n;i++)f*=i:
B.F=1:for(i=1;i<2n;i++)f*=i:
C.f=1:for(i=n;i>1;i++)f*=i:
D.f=1;for(i=n;i>=2;i--)f*=i:
5.下列选项中非法的字符常量是()。
A.'\t'B.'\039'C.','D.'\n'
6.以下选项中,非法的字符常量是______。
A.'t\'B.'\17'C.\nD.'\xaa'
7.下列能正确进行字符串赋值的是()。
A.chars[5]={"ABCDE"};
B.chars[5]={A,B,C,D,E};
C.char*S;S="ABCDE";
D.char*s;printf("%《",s);
8.有以下程序:#include<stdio.h>main(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*p,*q);}程序的运行结果是()。
A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,1
9.下列描述中不正确的是()。
A.字符型数组中可能存放字符串。
B.可以对字符型数组进行整体输入、输出。
C.可以对整型数组进行整体输入、输出。
D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
10.有以下程序函数fun只对下标为偶数的元素进行操作.:
程序运行后的输出结果是()。A.A.7,2,5,4,3,6,1,
B.1,6,3,4,5,2,7,
C.7,6,5,4,3,2,1,
D.1,7,3,5,6,2,1,
11.在进行单元测试时,常用的方法是
A.采用白盒测试,辅之以黑盒测试B.采用黑盒测试,辅之以白盒测试C.只使用白盒测试D.只使用黑盒测试
12.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是()。
A.7B.8C.6D.2
二、2.填空题(12题)13.以下函数用来求出2个整数之和,并通过形参将结果传回。
voidfunc(intx,inty,【】z)
{*z=x+y;}
14.以下程序运行后的输出结果是【】。
main()
{chars[]="9876",*p;
for(p=s;p<s+2;p++)printf("%s\n",p);
}
15.下面程序的运行结果是:【】。
#defineN10
#defines(x)x*x
#definef(x)(x*x)
main()
{inti1,i2;
i1=1000/s(N);i2=1000/f(N);
printf(“%d%d\n”,i1,i2);
}
16.数据的逻辑结构有线性结构和______两大类。
17.以下程序运行后的输出结果是【】。
#include<stdio.h>
main()
{intp[7]={11,13,14,15,16,17,18};
inti=0,j=0;
while(i<7&&p[i]%2==1)j+=p[i++];
prinff("%d\n",j);
18.若有以下程序:
main()
{intp,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
执行后的输出结果是【】。
19.以下scanf函数调用语句中对结构体变量成员的引用不正确的是{charname[20];}pup[5],*p;
20.函数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【】;
}
21.仅依据规格说明书描述的程序功能来设计测试实例的方法称为【】。
22.下面程序运行后的输出结果是()。
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6},*k[3],i=1;
while(i<4)
{k[i-1]=&a[2*i-1];
printf("%d",*k[i-1]);
i++;
}
}
23.有以下程序:
#include<stdio.h>
main()
{intn=0,m=1,x=2;
if(!n)x-=1;
if(m)x-=2;
if(x)x-=3;
printf("%d\n",x);
}
执行后的输出结果是【】。
24.函数fun的功能是计算xn
doublefun(doublex,intn)
{inti;doubley=1;
for(i=1;i<=n;i++)y=y*x;
returny;
}
主函数中已正确定义m、a、b变量并赋值,并调用fun函数计算:m=a4+b4-(a+b)3。实现这一计算的函数调节器用语句为______。
三、3.程序设计题(10题)25.请编写一个函数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");
}
26.请编写函数fun,其功能是:计算并输出
例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。
注意:要求n的值大于1但不大于100。
部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
27.请编写函数fun(),其功能是:计算并输出下列多项式值。
S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)
例如,若主函数从键盘给n输入12后,则输出为S=3.775958。
n的值要求大于1但不大于100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
doublefun(intn)
{
}
main()
{
intn;
doubles;
printf("\nlnputn:");
scanf("%d",&n);
s=fun(n);
printf("\ns=%f\n",s);
}
28.请编写函数fun(),其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。
注意:部分源程序给出如下。
请勿改动主函数main口其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*s,chart[])
{
}
main()
chars[l00],t[l00];
clrscr();
printf("%nPleaseenterstringS:");
scanf("%s",s);
fun(s,t);
prlntf("\nTheresultis:%s\n",t);
}
29.请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intx,intpp[],int*n)
{
}
main()
{
intx,aa[1000],n,i;
clrscr();
printf("\nPleaseenteraninteger
number:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d",aa[i]);
printf("\n");
}
30.编写一个函数fun(),它的功能是:实现两个字符串的连接(不使用库函数strcat,即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString
SecondString
则程序输出:
FirstStringSecondString
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号小填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
voidfun(charpi[],charp2[])
{
}
main()
{
chars1[80],s2[40];
clrscr();
printf("Enters1ands2:\n");
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
printf("Invokefun(s1,s2):\n");
fun(s1,s2);
printf("Afterinvoking:\n");
printf("%s\n",s1);
}
31.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32.学生的记录由学号和成绩组成,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);
}
33.请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-2
|<0.000001为止。
例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
34.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#defineN80
voidfun(int*w,intp,intn)
{
}
main()
{
inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("Theoriginaldata:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\n");
}
四、单选题(0题)35.判断char型变量c1是否为小写字母的正确表达式为()。
A.'a'<=c1<='Z'
B.(c1>=A)‖c1<=z)
C.('a'=>c1‖("z"<=c1)
D.(c1>='a')&&(c1<='z')
五、单选题(0题)36.有以下程序:#include<stdio.h>voidmain(){doublex=3.14159;printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);}程序运行后的输出结果是()。
A.3.142000B.3.141000C.3.143000D.3.140000
六、单选题(0题)37.数据的存储结构是指______。
A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据
参考答案
1.B
2.A本题考查简单的运算符操作.当输入9时,(a++<9)为假,所以执行else语句中的printf("%d\n",a--),在执行时此时a经过a++操作a=10,所以答案为A。
3.D解析:返回指针的函数定义为:返回值类型,函数名(\u3000\u3000),而指向函数的指针定义为:返回值类型(*变量名)(\u3000\u3000)。本题中函数fun返回一个无类型的指针。
4.D由i"11的数字定义可知n!=n*(n-1)*(n-2)*…*1。在选项A中,由于f的初值为0,在for循环语句中,f依次乘以1,2,3,…,n,最后计算得到f=n!一0,所以选项A不正确。在选项B中,f的初值为1,在for循环语句中,f依次乘以1,2,3,…,(n-1),最后计算得到f=(n-1)!,所以选项B不正确。在选项C中,f的初值为1,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项c不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。
5.B水平制表符中,'\t'表示的是横向跳若干格;选项B中,'\039'错误,'\039'是八进制形式表的字符,最大数为7,但其中出现'9',','是字符逗号;选项D中,'\n'表示的是换行。
6.C解析:C语言中字符常量是以单引号括起来的单个字符,或以“\\”与三位八进制数值或两位十六进制数值代替单个字符。
7.C选项A、B的空间不够;字符串存储要有结束符\0,且要占用一个空间,printf用来输出字符,不能输入字符串。
8.D执行语句“intm=1,n=2,*p=&m,*q=&n,*r;”,即指针变量p指向m,指针变量q指向n。执行语句“r=p;p=q;q=r;”,即通过指针变量r,将指针p和指针q的指向交换。因此最后输出1,2,2,1。故本题答案为D选项。
9.C
10.A由函数fun(int*a,intn)中语句if(a[j]>a[k])k=j;可知当前k是记录数组中较大数据值所在位置的下标变量,所以该函数的作用是对数组a中的下标为偶数位置的数据进行从大到小的排序,即对a[0],a[2],a[4],a[6]中的数据1,3,5,7进行从大到小的排序,其他位置的数据不变,所以答案为A)。
11.A解析:单元测试的步骤如下:
①理解需求和设计。清楚被测试模块在整个软件中所处的位置。一个原则是:好的设计,各模块只负责完成自己的事情,层次与分工明确。单元测试时,可以不测试不属于被测模块所负责的功能,以减少测试用例的冗余。
②概览源代码。浏览源代码,初步检查源代码的编码风格与规范,大致估算测试工作量,确定模块的复杂程度,初步制定测试的优先级等。
③精读源代码。认真阅读和分析代码,理解代码的业务逻辑,检查代码与设计是否相符,仔细研究逻辑复杂的模块,可采用一些检查列表来检查程序可能会出现的问题。
④设计测试用例。综合运用白盒测试方法(并结合黑盒测试方法)设计测试用例,包括功能测试、性能测试等,要达到一定的测试覆盖率。本题正确答案为选项A。
⑤搭建单元测试环境。这个阶段主要就是写桩模块和驱动模块,然后驱动模块想办法获取被测试模块对数据的处理结果,并判定返回的实际结果与测试用例的预
期结果是否一致,通过测试框架来记录执行的结果,对于出现的错误,还需统计错误的信息,供执行完之后分析。
⑥执行测试。运行写好的驱动模块完成对被测试模块的测试。
⑦补充和完善测试用例。在测试过程中不断补充测试用例,直到满足要求为止。
⑧分析结果,给出评价。根据测试的结果分析、查找错误的原因,并找到解决的办法。测试结束之后,根据测试过程的数据统计,给出被测试对象评价。
12.B
13.int*
14.98768769876\r\n876解析:指针是一种数据类型,这种数据类型的变量用来存放内存中分配的存储单元的首地址。指针的定义:
类型说明符*指针变量名;
15.100010100010解析:首先将程序中的宏替换掉,两处的宏替换后分别为i1=1000/10*10和i2=1000/(10*10),即i1=1000,i2=10,所以最后输出的i1和i2的值分别为1000和10。
16.非线性结构非线性结构
17.2424解析:本题关键是while循环。
当i=0时,满足条件:i<7&&11%2==1,执行j=0+11=11,i++,i为1;
当i=1时,满足条件:i<7&&13%2=1,执行j=11+13=24,i++,i为2;
当i=2时,不满足条件:i<7&&14%2==1,循环结束。输出j的值24。
18.11解析:本题考查C语言中的if-else语句。if语句中的条件表达式p=a!=0是一个赋值语句,将关系表达式a!=0的结果赋值给变量p。因a=5,所以a!=0的结果为1,即p=1,条件为真,所以执行if后面的语句printf('%d\\n',p),输出结果为1。
19.D
20.*s-*t*s-*t解析:两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s>t时,返回正值,当s<t时,返回负值。
21.黑箱法黑箱法
22.246
23.-4-4解析:因为n=0,所以!n为真,执行x-=1;得到x=x=2-1=1;m=1为真,执行x-=2;得到x=x-2=1-2=-1;x=-1为真,执行x-=3;得到x=x-3=-1-3=-4。
24.m=fun(a4)+fun(b4)-fun(a+b3);m=fun(a,4)+fun(b,4)-fun(a+b,3);解析:本题考核的知识点是C程序的简单应用。函数fua(x,n)的作用是求x的n次方,因此a的4次方应该调用函数tim(a,4),b的4次方应该调用函数fun(b,4),a+b的3次方应该调用函数fun(a+b,3),所以题目中的数学表达式,写成C程序中的语句为m=fun(a,4)+fun(b,4)-fun(a+b,3)。
25.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}解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。
26.
解析:该程序功能是对题干中给出的多项式的求解。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
27.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)/*计算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/s=s+(1.0/(2*i-1)+1.0/(2*i));returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)/*计算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/\r\ns=s+(1.0/(2*i-1)+1.0/(2*i));\r\nreturns;\r\n}解析:本题中s=s+(1.0/(2*i-1)+1.0/(2*i));语句是用C程序去表达题目中的每一项,这是关键,其他问题不难理解。
28.voidfun(char*schart[]){intij=0k=strlen(s);/*k为字符串的长度*/for(i=l;i<k;i=i+2)/*将s所指字符串中下标为奇数的字符存入t所指字符串中*/t[j++]=s[ii;t[j]='\0';/*在字符申最后加上结束标志*/}voidfun(char*s,chart[])\r\n{\r\ninti,j=0,k=strlen(s);/*k为字符串的长度*/\r\nfor(i=l;i<k;i=i+2)/*将s所指字符串中下标为奇数的字符存入t所指字符串中*/\r\nt[j++]=s[ii;\r\nt[j]='\\0';/*在字符申最后加上结束标志*/\r\n}解析:本题使用了一种泳远是奇数的循环方法,即for(i=1;i<k;i=i+2),因为开始时的值为1,当i+2循环时,此值永远是奇数。
29.voidfun(intxintpp[]int*n){intij=0;for(i=1;i<x;i=i+2)/*i的初始值为1步长为2确保i为奇数*/if(x%i==0)/*将能整除x的数存入数组pp中*/pp[j++]=i;*n=j;/*传回满足条件的数的个数*/}voidfun(intx,intpp[],int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<x;i=i+2)/*i的初始值为1,步长为2,确保i为奇数*/\r\nif(x%i==0)/*将能整除x的数存入数组pp中*/\r\npp[j++]=i;\r\n*n=j;/*传回满足条件的数的个数*/\r\n}解析:本题题干信息是:能整除x且不是偶数的所有整数。循环语句中i从1开始且每次增2,所以i始终是奇数。
30.voidfun(charp1[]charp2[]){intij;for(i=0;p1[i]!='\0';i++);/*求出的i为p1字符的总长度包括结束标记位*/for(j=0;p2[j]!='\0';j++)p1[i++]=p2[j];/*将p2字符串连在p1字符串的后面*/p1[i]='\0';/*在字符串最后加上结束标记符*/}voidfun(charp1[],charp2[])\r\n{\r\ninti,j;\r\nfor(i=0;p1[i]!='\\0';i++);/*求出的i为p1字符的总长度,包括结束标记位*/\r\nfor(j=0;p2[j]!='\\0';j++)\r\np1[i++]=p2[j];/*将p2字符串连在p1字符串的后面*/\r\np1[i]='\\0';/*在字符串最后加上结束标记符*/\r\n}解析:本题用两个循环,第1个循环的作用是将i走到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。
31.
解析:该程序功能是把分数最低的学生数据放在b所指的数组中。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。然后将最小值与所有值进行比较,求得所有的最小值。
32.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语句返回平均值。
33.
解析:该程序功能是计算并输出当x<0.97时题干中给出的多项式的值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
34.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循环左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*实现循环左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。
35.D解析:C语言规定,字符常量在程序中要用单引号括起来。判断c1是否为小写字母的充要条件c1>='a'和c1<='z',用逻辑与(&&)来表示。A选项的这种形式在C语言中没有,所以选项D)正确.
36.A根据算术表达式和运算符的优先级与结合性。表达式“int(x*1000+0.5)/(double)1000”,首先计算“x*1000”,由于x是double类型,1000是整型,所以“x*1000”的结果默认是double类型,即3141.59,加0.5后再执行int的强制转换,结果为3142。分母“(double)1000”强制转换为double类型,此时计算“3142/(double)1000”,3142需要转换成double类型,然后除以1000,结果为3.142000,默认保留小数点后6位。故本题答案为A选项。
37.B解析:数据元素在计算机存储空间中的位置关系与它们的逻辑关系不一定是相同的,而且一般不可能相同。数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构。2021-2022学年广东省广州市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.x>0||y==5的相反表达式为()。
A.x<=0||y!=5B.x<=0&&y!=5C.x>0||y!=5D.x>0&&y==5
2.有以下程序:#include<stdio.h>main(){inta;scanf("%d",&a);if(a++<9)printf("%d\n",a);clscprintf("%d\n",a--);}程序运行时从键盘输入9<回车>,则输出结果是()。A.10B.11C.9D.8
3.程序中对fun函数有如下说明
void*fun();
此说明的含义是:A.fun了数无返回值
B.fun函数的返回值可以是任意的数据类型
C.fun函数的返回值是无值型的指针类型
D.指针fun指向一个函数,该函数无返回值
4.设变量已正确定义,则以下能正确计算f=n!的程序是()。A.f=0:for(i=1;i<=n;i++)f*=i:
B.F=1:for(i=1;i<2n;i++)f*=i:
C.f=1:for(i=n;i>1;i++)f*=i:
D.f=1;for(i=n;i>=2;i--)f*=i:
5.下列选项中非法的字符常量是()。
A.'\t'B.'\039'C.','D.'\n'
6.以下选项中,非法的字符常量是______。
A.'t\'B.'\17'C.\nD.'\xaa'
7.下列能正确进行字符串赋值的是()。
A.chars[5]={"ABCDE"};
B.chars[5]={A,B,C,D,E};
C.char*S;S="ABCDE";
D.char*s;printf("%《",s);
8.有以下程序:#include<stdio.h>main(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*p,*q);}程序的运行结果是()。
A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,1
9.下列描述中不正确的是()。
A.字符型数组中可能存放字符串。
B.可以对字符型数组进行整体输入、输出。
C.可以对整型数组进行整体输入、输出。
D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
10.有以下程序函数fun只对下标为偶数的元素进行操作.:
程序运行后的输出结果是()。A.A.7,2,5,4,3,6,1,
B.1,6,3,4,5,2,7,
C.7,6,5,4,3,2,1,
D.1,7,3,5,6,2,1,
11.在进行单元测试时,常用的方法是
A.采用白盒测试,辅之以黑盒测试B.采用黑盒测试,辅之以白盒测试C.只使用白盒测试D.只使用黑盒测试
12.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是()。
A.7B.8C.6D.2
二、2.填空题(12题)13.以下函数用来求出2个整数之和,并通过形参将结果传回。
voidfunc(intx,inty,【】z)
{*z=x+y;}
14.以下程序运行后的输出结果是【】。
main()
{chars[]="9876",*p;
for(p=s;p<s+2;p++)printf("%s\n",p);
}
15.下面程序的运行结果是:【】。
#defineN10
#defines(x)x*x
#definef(x)(x*x)
main()
{inti1,i2;
i1=1000/s(N);i2=1000/f(N);
printf(“%d%d\n”,i1,i2);
}
16.数据的逻辑结构有线性结构和______两大类。
17.以下程序运行后的输出结果是【】。
#include<stdio.h>
main()
{intp[7]={11,13,14,15,16,17,18};
inti=0,j=0;
while(i<7&&p[i]%2==1)j+=p[i++];
prinff("%d\n",j);
18.若有以下程序:
main()
{intp,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
执行后的输出结果是【】。
19.以下scanf函数调用语句中对结构体变量成员的引用不正确的是{charname[20];}pup[5],*p;
20.函数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【】;
}
21.仅依据规格说明书描述的程序功能来设计测试实例的方法称为【】。
22.下面程序运行后的输出结果是()。
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6},*k[3],i=1;
while(i<4)
{k[i-1]=&a[2*i-1];
printf("%d",*k[i-1]);
i++;
}
}
23.有以下程序:
#include<stdio.h>
main()
{intn=0,m=1,x=2;
if(!n)x-=1;
if(m)x-=2;
if(x)x-=3;
printf("%d\n",x);
}
执行后的输出结果是【】。
24.函数fun的功能是计算xn
doublefun(doublex,intn)
{inti;doubley=1;
for(i=1;i<=n;i++)y=y*x;
returny;
}
主函数中已正确定义m、a、b变量并赋值,并调用fun函数计算:m=a4+b4-(a+b)3。实现这一计算的函数调节器用语句为______。
三、3.程序设计题(10题)25.请编写一个函数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");
}
26.请编写函数fun,其功能是:计算并输出
例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。
注意:要求n的值大于1但不大于100。
部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
27.请编写函数fun(),其功能是:计算并输出下列多项式值。
S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)
例如,若主函数从键盘给n输入12后,则输出为S=3.775958。
n的值要求大于1但不大于100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
doublefun(intn)
{
}
main()
{
intn;
doubles;
printf("\nlnputn:");
scanf("%d",&n);
s=fun(n);
printf("\ns=%f\n",s);
}
28.请编写函数fun(),其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。
注意:部分源程序给出如下。
请勿改动主函数main口其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*s,chart[])
{
}
main()
chars[l00],t[l00];
clrscr();
printf("%nPleaseenterstringS:");
scanf("%s",s);
fun(s,t);
prlntf("\nTheresultis:%s\n",t);
}
29.请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intx,intpp[],int*n)
{
}
main()
{
intx,aa[1000],n,i;
clrscr();
printf("\nPleaseenteraninteger
number:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d",aa[i]);
printf("\n");
}
30.编写一个函数fun(),它的功能是:实现两个字符串的连接(不使用库函数strcat,即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString
SecondString
则程序输出:
FirstStringSecondString
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号小填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
voidfun(charpi[],charp2[])
{
}
main()
{
chars1[80],s2[40];
clrscr();
printf("Enters1ands2:\n");
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
printf("Invokefun(s1,s2):\n");
fun(s1,s2);
printf("Afterinvoking:\n");
printf("%s\n",s1);
}
31.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32.学生的记录由学号和成绩组成,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);
}
33.请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-2
|<0.000001为止。
例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
34.请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#defineN80
voidfun(int*w,intp,intn)
{
}
main()
{
inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("Theoriginaldata:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\n");
}
四、单选题(0题)35.判断char型变量c1是否为小写字母的正确表达式为()。
A.'a'<=c1<='Z'
B.(c1>=A)‖c1<=z)
C.('a'=>c1‖("z"<=c1)
D.(c1>='a')&&(c1<='z')
五、单选题(0题)36.有以下程序:#include<stdio.h>voidmain(){doublex=3.14159;printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);}程序运行后的输出结果是()。
A.3.142000B.3.141000C.3.143000D.3.140000
六、单选题(0题)37.数据的存储结构是指______。
A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据
参考答案
1.B
2.A本题考查简单的运算符操作.当输入9时,(a++<9)为假,所以执行else语句中的printf("%d\n",a--),在执行时此时a经过a++操作a=10,所以答案为A。
3.D解析:返回指针的函数定义为:返回值类型,函数名(\u3000\u3000),而指向函数的指针定义为:返回值类型(*变量名)(\u3000\u3000)。本题中函数fun返回一个无类型的指针。
4.D由i"11的数字定义可知n!=n*(n-1)*(n-2)*…*1。在选项A中,由于f的初值为0,在for循环语句中,f依次乘以1,2,3,…,n,最后计算得到f=n!一0,所以选项A不正确。在选项B中,f的初值为1,在for循环语句中,f依次乘以1,2,3,…,(n-1),最后计算得到f=(n-1)!,所以选项B不正确。在选项C中,f的初值为1,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项c不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。
5.B水平制表符中,'\t'表示的是横向跳若干格;选项B中,'\039'错误,'\039'是八进制形式表的字符,最大数为7,但其中出现'9',','是字符逗号;选项D中,'\n'表示的是换行。
6.C解析:C语言中字符常量是以单引号括起来的单个字符,或以“\\”与三位八进制数值或两位十六进制数值代替单个字符。
7.C选项A、B的空间不够;字符串存储要有结束符\0,且要占用一个空间,printf用来输出字符,不能输入字符串。
8.D执行语句“intm=1,n=2,*p=&m,*q=&n,*r;”,即指针变量p指向m,指针变量q指向n。执行语句“r=p;p=q;q=r;”,即通过指针变量r,将指针p和指针q的指向交换。因此最后输出1,2,2,1。故本题答案为D选项。
9.C
10.A由函数fun(int*a,intn)中语句if(a[j]>a[k])k=j;可知当前k是记录数组中较大数据值所在位置的下标变量,所以该函数的作用是对数组a中的下标为偶数位置的数据进行从大到小的排序,即对a[0],a[2],a[4],a[6]中的数据1,3,5,7进行从大到小的排序,其他位置的数据不变,所以答案为A)。
11.A解析:单元测试的步骤如下:
①理解需求和设计。清楚被测试模块在整个软件中所处的位置。一个原则是:好的设计,各模块只负责完成自己的事情,层次与分工明确。单元测试时,可以不测试不属于被测模块所负责的功能,以减少测试用例的冗余。
②概览源代码。浏览源代码,初步检查源代码的编码风格与规范,大致估算测试工作量,确定模块的复杂程度,初步制定测试的优先级等。
③精读源代码。认真阅读和分析代码,理解代码的业务逻辑,检查代码与设计是否相符,仔细研究逻辑复杂的模块,可采用一些检查列表来检查程序可能会出现的问题。
④设计测试用例。综合运用白盒测试方法(并结合黑盒测试方法)设计测试用例,包括功能测试、性能测试等,要达到一定的测试覆盖率。本题正确答案为选项A。
⑤搭建单元测试环境。这个阶段主要就是写桩模块和驱动模块,然后驱动模块想办法获取被测试模块对数据的处理结果,并判定返回的实际结果与测试用例的预
期结果是否一致,通过测试框架来记录执行的结果,对于出现的错误,还需统计错误的信息,供执行完之后分析。
⑥执行测试。运行写好的驱动模块完成对被测试模块的测试。
⑦补充和完善测试用例。在测试过程中不断补充测试用例,直到满足要求为止。
⑧分析结果,给出评价。根据测试的结果分析、查找错误的原因,并找到解决的办法。测试结束之后,根据测试过程的数据统计,给出被测试对象评价。
12.B
13.int*
14.98768769876\r\n876解析:指针是一种数据类型,这种数据类型的变量用来存放内存中分配的存储单元的首地址。指针的定义:
类型说明符*指针变量名;
15.100010100010解析:首先将程序中的宏替换掉,两处的宏替换后分别为i1=1000/10*10和i2=1000/(10*10),即i1=1000,i2=10,所以最后输出的i1和i2的值分别为1000和10。
16.非线性结构非线性结构
17.2424解析:本题关键是while循环。
当i=0时,满足条件:i<7&&11%2==1,执行j=0+11=11,i++,i为1;
当i=1时,满足条件:i<7&&13%2=1,执行j=11+13=24,i++,i为2;
当i=2时,不满足条件:i<7&&14%2==1,循环结束。输出j的值24。
18.11解析:本题考查C语言中的if-else语句。if语句中的条件表达式p=a!=0是一个赋值语句,将关系表达式a!=0的结果赋值给变量p。因a=5,所以a!=0的结果为1,即p=1,条件为真,所以执行if后面的语句printf('%d\\n',p),输出结果为1。
19.D
20.*s-*t*s-*t解析:两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s>t时,返回正值,当s<t时,返回负值。
21.黑箱法黑箱法
22.246
23.-4-4解析:因为n=0,所以!n为真,执行x-=1;得到x=x=2-1=1;m=1为真,执行x-=2;得到x=x-2=1-2=-1;x=-1为真,执行x-=3;得到x=x-3=-1-3=-4。
24.m=fun(a4)+fun(b4)-fun(a+b3);m=fun(a,4)+fun(b,4)-fun(a+b,3);解析:本题考核的知识点是C程序的简单应用。函数fua(x,n)的作用是求x的n次方,因此a的4次方应该调用函数tim(a,4),b的4次方应该调用函数fun(b,4),a+b的3次方应该调用函数fun(a+b,3),所以题目中的数学表达式,写成C程序中的语句为m=fun(a,4)+fun(b,4)-fun(a+b,3)。
25.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}解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。
26.
解析:该程序功能是对题干中给出的多项式的求解。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
27.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)/*计算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/s=s+(1.0/(2*i-1)+1.0/(2*i));returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)/*计算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/\r\ns=s+(1.0/(2*i-1)+1.0/(2*i));\r\nreturns;\r\n}解析:本题中s=s+(1.0/(2*i-1)+1.0/(2*i));语句是用C程序去表达题目中的每一项,这是关键,其他问题不难理解。
28.voidfun(char*schart[]){intij=0k=strlen(s);/*k为字符串的长度*/for(i=l;i<k;i=i+2)/*将s所指字符串中下标为奇数的字符存入t所指字符串中*/t[j++]=s[ii;t[j]='\0';/*在字符申最后加上结束标志*/}void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论