求助:哪一个是正确答案!!!!!!!!!!!!!!!!!!!!!!!
下列程序的功能是:计算500~800之间素数的个数cnt,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件OUT66.DAT中。#include<stdio.h>
int cnt,sum;
void countValue()
{
int i,j,half,yy[100];
for(i=500;i<800;i++)
{
half=i/2;
for(j=2;j<=half;j++)
if(i%j==0) break; /*如果该数不是素数,则退出此层循环*/
if(j>=half) /*如果该数是素数,则将该数存入数组yy中*/
{
yy[cnt]=i;
cnt++; /*统计素数的个数*/
}
}
for(i=0,j=-1;i<cnt;i++) /*计算这些素数的间隔加、减之和*/
{
j=j*-1;
sum+=j*yy[i];
}
}
void main()
{
cnt=sum=0;
countValue();
printf("素数的个数=%d\n",cnt);
printf("按要求计算得值=%d\n",sum );
writeDAT();
}
writeDAT()
{
FILE *fp;
fp=fopen("OUT66.DAT","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}
答案2:void countValue()
{
int i,j,k=1;
for(i=800;i>=500;i--)
{for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
{cnt++;
sum+=k*i;
k=-1*k;
}
}
}
[[it] 本帖最后由 cbullet 于 2008-4-9 18:52 编辑 [/it]]