计算机等级考试二级C语言上机试题及答案11
第一题
请补充fun函数,该函数的功能是:求1~100(不包括100)以内所有素数的平均值。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。
#include <stdio.h>
main()
{
int i, j, n = 0, flag;
float aver = 0;
for (j=2; j<100; j++)
{
flag = 1;
for (i=2; i<j; i++)
if (___1___)
{
flag = 0;
break;
}
if (___2___)
{
n++;
aver += j;
}
}
printf("\n\n average=%4.2f", ___3___);
}
参考答案:
第1处填空:j%i==0或!(j%i)或0==j%i
第2处填空:flag==1或flag或1==flag
第3处填空:aver/n
第二题
数列中,第一项值为3,后一项的值增5;下列给定程序中,函数fun的功能是:计算前n(4<n<50)项的累加和;在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数。例如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。符合此条件的累加值应为42,126,366,570,1010。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 20
int fun(int n, int *a)
{
/********found********/
int i, j, k, sum;
sum = 0;
for (k=3, i=0; i<n; i++, k+=5)
{
sum = sum+k;
/********found********/
if (sum%4 = 2)
a[j++] = sum;
}
return j;
}
main()
{
int a[N], d, n, i;
printf("\nEnter n (4<n<=50); ");
scanf("%d", &n);
d = fun(n, a);
printf("\n\nThe result :\n");
for (i=0; i<d; i++)
printf("%6d", a[i]);
printf("\n\n");
}
参考答案:
第1处:int i,j,k,sum; 应改为int i,j=0,k,sum;
第2处:if(sum%4=2) 应改为if(sum%4==2)
第三题
请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。
例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。
#include <math.h>
#include <stdio.h>
double fun(int n)
{
}
main() 考试大论坛
{
int n;
double sum;
FILE *out;
printf("\n\nInput n: ");
scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
out=fopen("out.dat","w");
for (n = 0; n < 10; n++)
fprintf(out, "%f\n", fun(n+80));
fclose(out);
}
参考答案:
double fun(int n)
{
int m,k ,i;
double s=0.0;
for(m=3;m<=n;m++)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
s+=sqrt(m);
}
return s;
}