1、计算机二级(C)上机考试 29 及答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 请补充 main 函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include main() long int n; clrscr(); printf(“Enter the data;/n“); scanf(【1】); printf
2、(“* the absolute value */n“); if(n_2.改错题 下列给定程序中,函数 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(flo
3、at *s, int n,float *aver) /*found*/ int ave ,t=0; int count=0,k,i; for(k=0;k_3.编程题 请编写一个函数 fun(),它的功能是计算并输出给定整数 n 的所有因子(不包括 1 与自身)的平方和(规定 n 的值不大于 100)。 例如:主函数从键盘给输入 n 的值为 56,则输出为 sum=1113。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include long fun(int n) main() int n; l
4、ong sum; printf(“Input n:“); scanf(“%d“, sum=fun(n); printf(“sum=%ld/n“, sum); (分数:-1.00)_计算机二级(C)上机考试 29 答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 请补充 main 函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #incl
5、ude #include main() long int n; clrscr(); printf(“Enter the data;/n“); scanf(【1】); printf(“* the absolute value */n“); if(n_正确答案:(【1】%ld, 【3】 %ld, n )解析:填空 1:本题考查对标准输入函数 scanf()的调用格式,当输入为长整型数时,格式控制字符串为”%ld”,输入的长整数存于变量 n 中。填空 2:当输入的数是负数时,则取它的相反数,即为它的绝对值。填空 3:本题考查对标准输出函数 printf()的调用格式,当输出为长整型数时,格式控制字符
6、串为”%ld”。2.改错题 下列给定程序中,函数 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) /
7、*found*/ int ave ,t=0; int count=0,k,i; for(k=0;k_正确答案:((1)错误:int ave ,t=0; 正确:float ave ,t=0.0; (2)错误:if(siave) (3)错误:aver=ave; 正确:*aver=ave; )解析:错误 1:ave 和 t 分别用来存放成绩的平均值和总分,应为实型数。 错误 2:根据题意,找出高于平均分的数,所以此处的关系运算符应为“ 错误 3:aver 是指针,而 ave 是一个数,不能将一个数赋值给一个指针,而要用符号*。 3.编程题 请编写一个函数 fun(),它的功能是计算并输出给定整数 n
8、 的所有因子(不包括 1 与自身)的平方和(规定 n 的值不大于 100)。 例如:主函数从键盘给输入 n 的值为 56,则输出为 sum=1113。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include long fun(int n) main() int n; long sum; printf(“Input n:“); scanf(“%d“, sum=fun(n); printf(“sum=%ld/n“, sum); (分数:-1.00)_正确答案:(long fun(int n) int i; long s=0; for(i=2;i=n-1;i+) /*从 2n-1 中找 n 的所有因子*/ if(n%i=0) s+=i*i; /*将所有因子求平方加*/ return s; /*将平方和返回*/ )解析:本题的解题思路是用 n 逐个去除以 2 到 n-1 之间的所有数,如果 n 能被除尽,则把所得到的一个因子的平方累加到 s 中去。