问答题
下列程序的功能是:计算500~800区间内素数的个数cnt,并按所求素数的值从大到小的顺序排列,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat(),把结果cnt和sum输出到OUT.DAT文件中。
注意:部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include<stdio.h>
int cnt,sum;
void countValue()
void writeDat()
FILE *fp;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d/n%d/n",cnt,sum);
fclose(fp);
void main()
cnt=sum=0;
countValue();
printf("素数的个数=%d/n",cnt);
printf("按要求计算的值=%d/n",sum);
writeDat();
【正确答案】void countValue()
int i,j,half,yy[100];
for(i=800;i>=500;i--)
{ /*循环递减遍历800~500之间的数*/
half=i/2;
/*判断当前数是否素数*/
for(j=2;j<half;j++)
if(i%j==0)
break;
if(j>=half)
{ /*如果是素数则将该数保存到数组yy,并让计数值cnt增1*/
yy[cnt]=i;
cnt++;
}
}
for(i=0,j-i;i<cnt;i++)
{ /*循环计算数组yy中前cnt个数的间隔加、减之和*/
sum+=j*yy[i];
j=j*-1;
}
}
【答案解析】