#include <stdio.h>
#include <math.h>
int main()
{ int i,j,a,b;
scanf("%d%d",&a,&b);
for(i=a; i<=b; i++)
{ for(j=2;j<=(int)sqrt(i);j++) if(i%j==0)break;
if(j<=(int)sqrt(i))
printf("%d,No!\n",i);
else
printf("%d,Yes!\n",i);
}
}
第二个花括号里面是for循环完再执行if吗 为什么18和20输出的是No!
编写代码时需要注意代码规范,for循环应该加上大括号,如果按照当前代码,第二个for循环仅仅执行了if(i%j==0)break;这一句,下面的都没包含在第二个for循环内。修正后代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,a,b;
scanf("%d%d",&a,&b);
for(i=a; i<=b; i++)
{
for(j=2;j<=(int)sqrt(i);j++)
{
if(i%j==0)
break;
if(j<=(int)sqrt(i))
printf("%d,No!\n",i);
else
printf("%d,Yes!\n",i);
}
}
}
这里有2个for和2个if
第1个if是包在第2个for里面的
而第2个if在第2个for的外面
for和if只作用于它后面的一行代码,除非你用{}块包住多行代码,但是本质上for和if还是只作用于括号这一行代码
不理解这个你就看不懂程序
上面的解释的很清楚了,这下就知道代码规范的重要性了。