循环时i总是3 ,是不是(double)i 导致的?

来源:百度知道 编辑:UC知道 时间:2024/05/27 21:55:50
我输入n 的值为100

#include "stdafx.h"
#include "stdio.h"
#include "math.h"

double fun(int n)
{
double sum=0.0;
int i;
for(i=3;i<=n;i++)
{

int j;
for(j=2;j<sqrt((double)i);j++);
{
if(i%j==0)
break;
}

if(j>=sqrt((double)i))
sum+=sqrt((double)i);
}
return sum;
}

int _tmain(int argc, _TCHAR* argv[])
{
int n;
double s;
FILE *out;
printf("nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
out=fopen("out.dat","w");
for(n=0;n<10;n++)
{
fprintf(out,"%f\n",fun(n+20));
}
fclose(out);
return 0;
}

晕死,原因在这里
for(j=2;j<sqrt((double)i);j++); //最后这个分号,不应该有,否则这个for循环就没有意义了
{
if(i%j==0)
break; //i为4的时候,执行了这个break,而由于上面多了个分号,这里的break,break的是外层那个for循环
}

(double) i,问题不是太大,关键是这个for语句:
for(j=2;j<sqrt((double)i);j++); ,注意你这个for语句,后面多了一个分号,那么它就是一个独立的语句了,