C程序解析,望高人给予解答

来源:百度知道 编辑:UC知道 时间:2024/05/06 02:14:32
#include<stdio.h>
#include<math.h>
void main()
{
int i,n,m,a[101];
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;i<=sqrt(100);i++)
for(n=i+1;n<=100;n++)
{
if(a[n]%a[i]==0)
a[n]=0; }
printf("\n");
for(i=1,m=0;i<=100;i++)
{if(a[i]!=0)
{ printf("%5d",a[i]);
m++; }
if(n%10==0)
{ printf("\n");
m=0; }
}
printf("\n");
}这么程序运行是 就提示divide error
可是在第二个FOR 的扩里里先加上if(a[i}!=0 %% a[n}!=0)后就OK
i 和你 在循环时已经被赋值 不会等于0 为什么if必须有

#include<stdio.h>
#include<math.h>
void main()
{
int i,n,m,a[101];
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;i<=sqrt(100);i++)
for(n=i+1;n<=100;n++)
{ //if(a[i]==0)break;这是我添加的一句。
if(a[n]%a[i]==0)a[n]=0; //比如n=4,而i=2;运行这步后,a[4]=0;然后当i=4时,由于a[4]=0,所以不能作为除数。
} //因此需要对a[i]的值进行限定——不等于0;
printf("\n");
for(i=1,m=0;i<=100;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
m++;
}
if(m%10==0)
{
printf("\n");
m=0;
}
}
printf("\n");
}