我正在尝试计算0到100之间的所有素数而且我得到一个浮点异常,有谁可以告诉我为什么? (如果它有助于我使用gcc)
#include <stdio.h>
int main(void)
{
int nums[100], i;
for(i=0;i<100;i++)
nums[i] = i;
int j,k,l,z;
for(i=1;i<100;i++)
for(j=2;j<100;j++)
if((nums[i] % nums[j]) == 0)
{
nums[j] = 0;
}
for(i=0;i<100;i++)
if(nums[i] != 0)
break;
for(z=0;z<100;z++)
{
for(k=i;k<100;k++)
for(l = (k+2);l < 100;l++)
if((nums[k] % nums[l]) == 0)
nums[k] = 0;
}
for(i=0;i<100;i++)
if(nums[i] != 0)
printf("%d,",nums[i]);
printf("\n");
return 0;
}
答案 0 :(得分:5)
嗯,很难理解你的代码在做什么。但仍然
for(i=1;i<100;i++)
for(j=2;j<100;j++)
if((nums[i] % nums[j]) == 0)
{
nums[j] = 0;
}
在此之后,nums
的许多值将为0
。(您可以打印并检查)
所以,稍后你做的时候
for(z=0;z<100;z++)
{
for(k=i;k<100;k++)
for(l = (k+2);l < 100;l++)
if((nums[k] % nums[l]) == 0) //Part where division by 0 occurs
nums[k] = 0;
}
0
将进行划分,即floating point exception
<强>被修改强>
事实上,前两个floating point exception
循环中只有for
..当i=2
和j=2
时,nums[2]
会更新为值0
。然后是i=4
和j=2
。会有division by 0
,因为num[2]
已经0
,从而导致floating point exception