1、计算机二级(C)上机考试 1及答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 从键盘输入一组无符号整数并保存在数组 xxN中,以整数结束输入,要求这些数的最大位数不超过位,其元素的个数通过变量 num传入函数 fun()。请补充函数 fun(),该函数的功能是:从数组 xx中找出个位和十位的数字之和大于的所有无符号整数,结果保存在数组 yy中,其个数由函数fun()返回。 例如:当 xx8=123,11,25,222,42,333,14,5451时, bb4=25,42,333,5451。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 f
2、un的横线上填入所编写的若干表达式或语句。 试题程序: #include #define N 1000 int fun(int xx,int bb,int num) int i, n=0; int g, s; for(i=0;i5) 【2】; return【3】; main() int xxN; int yyN; int num=0,n=0,i=0; printf(“Input number :/n“); do scanf(“%u“, while(xxnum+!=0); n=fun(xx,yy,num); printf(“/nyy=“); for(i=0;i_2.改错题 下列给定程序中,函数
3、fun()的功能是:从 n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参 aver所指的存储单元中。例如输入 8名学生的成绩: 85 65.5 69 95.5 87 55 62.5 75 则高于平均分的学生人数为 4(平均分为 74.312500)。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include #define N 20 int fun(float *s, int n,float *aver) /*found*/ int ave ,t=0; int co
4、unt=0,k,i; for(k=0;k_3.编程题 编写函数 fun(),它的功能是求 n以内(不包括 n)同时能被 5与 11整除的所有自然数之和的平方根 s,并作为函数值返回。 例如:n 为 1000时,函数值应为 s=96.979379。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include double fun(int n) main() clrscr(); printf(“s=%f/n“, fun(1000); (分数:-1.00)_计算机二级(
5、C)上机考试 1答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 从键盘输入一组无符号整数并保存在数组 xxN中,以整数结束输入,要求这些数的最大位数不超过位,其元素的个数通过变量 num传入函数 fun()。请补充函数 fun(),该函数的功能是:从数组 xx中找出个位和十位的数字之和大于的所有无符号整数,结果保存在数组 yy中,其个数由函数fun()返回。 例如:当 xx8=123,11,25,222,42,333,14,5451时, bb4=25,42,333,5451。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填
6、入所编写的若干表达式或语句。 试题程序: #include #define N 1000 int fun(int xx,int bb,int num) int i, n=0; int g, s; for(i=0;i5) 【2】; return【3】; main() int xxN; int yyN; int num=0,n=0,i=0; printf(“Input number :/n“); do scanf(“%u“, while(xxnum+!=0); n=fun(xx,yy,num); printf(“/nyy=“); for(i=0;i_正确答案:(【1】xxi%10 【2】bbn+=
7、xxi 【3】n )解析:填空 1:将一个整数对 10取余,则得到这个整数的个位数,将一个整数除以 10再对 10取余,则得到这个整数的十位数。由程序可以看出,变量 s保存了整数的十位数,所以应该将整数的个位数保存于变量 g中。填空 2:当整数的个位与十位的数字之和大于 5时,则将这个整数存于数组 bb中,同时,变量 n记录了满足条件的无符号整数的个数。填空 3:题目要求满足条件的无符号整数的个数由 fun函数返回,所以函数返回 n。2.改错题 下列给定程序中,函数 fun()的功能是:从 n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参 aver所指的存储单元中
8、。例如输入 8名学生的成绩: 85 65.5 69 95.5 87 55 62.5 75 则高于平均分的学生人数为 4(平均分为 74.312500)。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include #include #define N 20 int fun(float *s, int n,float *aver) /*found*/ int ave ,t=0; int count=0,k,i; for(k=0;k_正确答案:((1)错误:int ave ,t=0; 正确:float ave ,t=0
9、.0; (2)错误:if(siave) (3)错误:aver=ave; 正确:*aver=ave; )解析:错误 1:ave 和 t分别用来存放成绩的平均值和总分,应为实型数。 错误 2:根据题意,找出高于平均分的数,所以此处的关系运算符应为“ 错误 3:aver 是指针,而 ave是一个数,不能将一个数赋值给一个指针,而要用符号*。 3.编程题 编写函数 fun(),它的功能是求 n以内(不包括 n)同时能被 5与 11整除的所有自然数之和的平方根 s,并作为函数值返回。 例如:n 为 1000时,函数值应为 s=96.979379。 注意:部分源程序给出如下。 请勿改动主函数 main和其
10、他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include double fun(int n) main() clrscr(); printf(“s=%f/n“, fun(1000); (分数:-1.00)_正确答案:(double fun(int n) double s=0.0; int i; for(i=0; i解析:本题的解题思路是逐个取得从 0n 之间的所有数,对每次取得的数进行条件判断,条件是既能被5整除同时又能被 11整除,注意:这两个条件要求同时成立,因此用到了“&“运算符。满足条件,该数就被累加到 s中去,求出所有符合条件的数后,用 sqrt()函数(包含于头文件中)对 s求平方根。