C语言菜鸟问题,求知者讲解一下!

#include <stdio.h>
void main()
{
int a,b;
for(a=2;a<=100;a++) //取100以内所有的数
{
for(b=2;b<a;b++) //穷举法判断是否有因子
if(a%b==0) //有则非质数
break; //跳出本次循环
if(b==a) //当条件为真则为质数
printf("%5d",a);
}
}
~~~~~~~~~~~~~~~~~~~
主要是有两个问题;
一;第二个for循环没有大括号,其意思是不是说不管b<a的条件是否成立,都往下执行?

二;a和b的初始都是0;a/b余数等于0,条件为真,因此执行break跳出循环,然后a+1,a就变成3了,此时b还是2;然后a下来a/b,3/2后余1,条件为假,然后执行下面的b==a,可是条件又不成立,为什么把2和3给输出了!非常不懂!望知者解释一下!

一.
for循环(以及其它循环)中,如果执行体只有一条语句,那么可以省略大括号.
第二个for循环中只有一条if语句,所以可以省略大括号.

二.
首先,a和b的初始值(在for开始之前)都不一定是0,它们是一个随机值.

....3/2后余1,所以并没有执行if后面的break;而是会跳过它去执行b++,而执行了b++后b的值就是3,不满足循环继续执行的条件了,所以退出,于是就造成了这个错觉.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-11
首先a和b的初始值都是2,而不是0
第二个for没有大括号是因为if(b==a)是在循环外边的,对于第二个循环跳出的条件有两个,b=a或者b<a并且a%b==0,第一种情况说明小于a的所有数都不能被a整除,也就是说a是质数,则执行printf("%5d",a);第二种情况说明a不是质数,所以也不会执行printf("%5d",a);
相似回答