c语言关于if语句和break语句的问题

这题是输入一个数,判断是否是素数

main()
{
int m,i,k;
scanf("%d",&m); //输入的数赋给m
k=sqrt(m); //求m的平方根,赋给k
for(i=2;i<=k;i++) //从2到m的平方根,依次检验能否被m整除
if(m%i==0)
break;
if(i>=k+1)
printf("%d is a prime number\n",m);
else
printf("%d is not a prime number\n",m);
}

这是函数的主体部分,从for语句开始就有点看不明白了
两个疑问:
1,函数中有两个if,一个else,应该是属于嵌套的,那个else是跟后边的if是一对还是跟前边的if是一对?
2,break语句是强制跳出循环,可是这个语句我看了之后觉得应该是跳出if语句,从而执行下一个for循环。。。可是从输出结果上看来,它是跳转到else语句中了,从而输出“XX is not a prime number”。。。这到底是怎么回事?

最后,求关于这个循环的全部详细步骤和解释(因为我是在linux下搞的,还不会用于debug的工具,所以只好来提问了。。。)

如果能讲明白,我会追加20分

基本点就搞错了..for里面只嵌套第一个if..然后break之后不是执行下一个for.而是中断for循环..
把上面的结构写的清楚点..就是这样了...
for(i=2;i<=k;i++) //从2到m的平方根,依次检验能否被m整除
{
if(m%i==0)
break;
}
if(i>=k+1)
{
printf("%d is a prime number\n",m);
}
else
{
printf("%d is not a prime number\n",m);
}
这样应应该不会搞错结构了吧..
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-15
基本点就搞错了..for里面只嵌套第一个if..然后break之后不是执行下一个for.而是中断for循环..
把上面的结构写的清楚点..就是这样了...
for(i=2;i<=k;i++)
//从2到m的平方根,依次检验能否被m整除
{
if(m%i==0)
break;
}
if(i>=k+1)
{
printf("%d
is
a
prime
number\n",m);
}
else
{
printf("%d
is
not
a
prime
number\n",m);
}
这样应应该不会搞错结构了吧..
相似回答