一道C语言题目,为什么我的答案运行不出来。。。帮帮忙看看问题。。

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:54:35
我的答案只可以运行到3,但是是求100内所有素数。。
我的答案:
#include<stdio.h>
#include<math.h>
void main()
{
int a[100];
int i=2,w=0,j;
for(j=2;j<=100;j++)
{
for(i=2;(i<=(sqrt(j)))&&(!w);)
{
if(j%i)
i++;
else w=1;
}
if(!w)
{
a[j]=j;
printf("素数为%d\n",a[j]);
}

}
}

for(i=2;(i<=(sqrt(j)))&&(!w);)
在这里的时候,当你j=3的时候,出现了3%2!=0;现在w=1;
然后继续执行下去的时候,始终不满足(!w)的条件为真,所以后面的数字都只mod2了,无论mod2是不是等于0,w都是1,了 内循环只执行一次
然后对于if(!w)的条件始终为假,所以没有输出
至于怎么改 ,楼上的提供了解答 我都不贴代码了
另外从效率上讲他们的代码都不是好,一楼是时间复杂度长期,
//另外你的代码定义了个数组来存储,其实不用,这样可以节约空间,
我还是把代码贴上吧

#include<stdio.h>
#include<math.h>
void main()
{
int i=2,j;
for(j=2;j<=100;j++)
{
for(i=2;i<=sqrt(j);i++)
{
if(j%i==0)
break;
}
if (i>sqrt(j))
printf("%d\n",j);
}
}
有兴趣可以一起交流 我也初学,
加我百度好友

#include<stdio.h>
#include <math.h>

#include<stdio.h>
#include<math.h>
void main()
{
int a[100];
int i=2,w=0,j;
for(j=2;j<=100;j++)
{
w=0;//加入这一句
for(i=2;(i<=(sqrt(j)))&&(!w);)
{
if(j%i)
{
i++;
}
else w=