还是新手,这个程序结果正确,可是运行会非法操作(关于数组),

sunustjpu 2009-10-23 03:56:24
用筛选法求100以内的素数

#include "stdio.h"
#include "math.h"
void main()
{
int a[101],i,j,c;
for(i=0,j=0;i<=100;)
{
a[i]=j;
i++;
j++;
}
/*-------------------------------------------a[0]=0,数字全部自动输入完毕*/
i=1;
while(1)
{
i++;j=i+1;
/*-------------------------*/
while(j<101)
{
for(;a[j]%i==0;)
{a[j]=0;j++;}
j++;
}
if(i>=10) break;
}
/*-------------------------------一循环结束*/
while(c<=100)
{
while(a[c]!=0)
{printf("%d\t",a[c]);
c++;
}
c++;
}
printf("end");
}

运行检查没事,可是结果出来以后会非法操作
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunustjpu 2009-10-23
  • 打赏
  • 举报
回复
经过验证,应该是了
或者把上边那个while(j<101)
改为while(j<105) 也可以解决问题,
可是为什么最小要是105呢? 102,103,104还是非法操作.
sunustjpu 2009-10-23
  • 打赏
  • 举报
回复
楼上正解!
是因为
当i=99,j=100时, 再执行次
for(;a[j]%i==0;)
{a[j]=0;j++;}
j++;
之后j会变为101,已经不符合上面一个while的条件,可是却仍然在执行for循环么?
walkersfaint 2009-10-23
  • 打赏
  • 举报
回复
int c = 0;
zbing0203 2009-10-23
  • 打赏
  • 举报
回复
for(;a[j]%i==0;)
---->for(;a[j]%i==0 && j<101;)
zbing0203 2009-10-23
  • 打赏
  • 举报
回复
内存越界了
blingpro 2009-10-23
  • 打赏
  • 举报
回复
int a[101],i(0),j(0),c(0);
树先生 2009-10-23
  • 打赏
  • 举报
回复
c 么有初始化

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧