C语言问题 求100~200间所有素数 为什么这么做输出的是所有的数 在线等

#include<stdio.h>
#include<math.h>
int main()
{
int a=100,i=1,k;
for(;a<=200;a++)
{
k=sqrt(a);
while(i<=k)
{
i++;
if(a%i==0) break;
}
if(i>k) printf("%d\t",a);
}
return 0;
}

第1个回答  2011-11-16
先说为什么会输出所有数
i=1;是在for循环前定义,就是说每次循环i的值不会恢复到1
while循环里面,循环条件是i<=k;
最后一次循环,当i=k;时,i++;
也就是最后一次循环后i==k+1;
……所以每次循环后i>k,每次都执行printf……
第2个回答  2011-11-16
i 的值一直在增加,后面都不能整除了。
改了一下:

int main()
{
for(int a=100;a<=200;a++)
{
int k=sqrt(a);
for (int i = 2; i <= k; i ++)
{
if (a%i==0)
break;
}
if (i>k)
printf("%d\t",a);
}
return 0;
}

另外,很多代码可以自己先单步调试一下,查看一下局部变量,很容易就定位的。本回答被提问者采纳
第3个回答  2011-11-16
//******************************************************************************
// C语言问题 求100~200间所有素数
//******************************************************************************
#include<stdio.h>
#include<math.h>
int main()
{
int a = 100, i , k;
for(; a <= 200; a++)
{
i=1; //每循环一次,i应该重新赋值为 1
k = sqrt(a);
while(i <= k)
{
i++;
if(a % i == 0) break;
}
if(i > k) printf("%d\t", a);
}
return 0;
}
//祝你学习进步,更上一层楼!(*^__^*)
第4个回答  2011-11-16
已有两人回答了,我就不置喙了,呵呵
相似回答