帮我分析下这个C语言的嵌套是怎么执行的

某地需要搬运砖块,已知男人一人搬3块,女人
一人搬2块,小孩两人搬一块。
问用45人正好搬45块砖,有多少种搬法?

for (men = 0; men <= 45; men++)
for (women = 0; women <= 45; women++)
for (child = 0; child <= 45; child++)
if ((men+women+child==45) && (men*3+women*2+child*0.5==45))
printf("men=%d women=%d child=%d\n", men, women, child);

帮我分析下循环执行的顺序是怎样的,for语句怎么没有{},这3个for连在一起是怎么执行的啊

执行顺序前提说明:
最外层循环是for (men = 0; men <= 45; men++) ,男人数量
中间层循环是for (women = 0; women <= 45; women++) ,女人数量
最内层循环是for (child = 0; child <= 45; child++) ,小孩数量
判断语句是当男人女人小孩加一起是45人,搬砖数量正好是45块的时候,打印男人、女人、小孩的数量。
执行顺序说明:
男人为0、女人为0时,小孩从0循环到小孩为45时,依次是否满足判断条件。
然后进行中间层循环、然后是最外层循环。
等价于:每一次最外层循环,都有45次中间层循环,因此有45*45此最内层循环。
此乃三层循环结构,所执行语句相当多。

for语句没有{}
原因是,for语句后面只有一句执行语句时可以省略大括号。由于for()+执行语句是一个完整的c语句,因此三层循环可以这样写。但是这样的编码规范很不好。

三个for连载一起,相当于:
for (men = 0; men <= 45; men++)
{
for (women = 0; women <= 45; women++)
{
for (child = 0; child <= 45; child++)
if ((men+women+child==45) && (men*3+women*2+child*0.5==45))
{
printf("men=%d women=%d child=%d\n", men, women, child); 、
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-16
for语句和if差不多 只有一个语句(不是一行 是完整语句)时候是不用{}的 说要这个是三层嵌套语句是if语句(包括printf)
另一种理解一个语句就是有没有分号 没在末尾有分号或者{}的都不算一整条语句
第2个回答  2009-04-16
for (men = 0; men <= 45; men++)
{
 for (women = 0; women <= 45; women++)
 {
  for (child = 0; child <= 45; child++)
  {
   if ((men+women+child==45) &&(men*3+women*2+child*0.5==45))
   {
   printf("men=%d women=%d child=%d\n", men, women, child);
   }
  }
 }
}
这样写和以前那样写是一个效果,写程序要注意编码规范,养成良好的习惯。
这个程序就是嵌套for循环,一步步满足已知条件,然后通过if来判断输出。
第3个回答  2009-04-16
过程:首先由第一个for()中的men=0赋值语句开始,判断men<=45成立故进入循环体即下一句第二个for();然后给women赋值0,判断条件成立进入他的循环体即第三个for()语句;同样给child赋值0,判断条件child<=45,故进入其循环体if语句中——按条件判断成立则输出,不成立则进行第三个for内的第三部分:child++。执行完后去判断是否符合条件child<=45,要是符合则继续进入第三个for的循环体中进行if语句的判断,直到条件不再成立为止;此时退出第三个for即第二个for的循环体的一遍执行完毕,此时要将其条件women++,然后判断她的条件成立与否,成立则再一次进入循环体即第三个for语句重复赋值、比较、条件变量的增加的一系列过程...第二个for一遍结束后返回判断第一个for使得变量men++然后判断条件,继续一系列的重复过程

for没有加{}是因为这里的每个for语句循环体只包含一句的缘故。就如这里的if()语句没有加{}一样。第三个for循环体内只有一个if,第二个和第一个for循环体内只包含一个for语句,故{}省略,如果不熟练也可以加上防止语句多的时候出错。

执行过程已经详细写在上边了,这是基础,要加油呀!

另:建议将child++改为child+=2因为不会有半个砖出现也就不会有一个孩子出现,故每次必会增加2个child的,这样可以大大减少循环次数
相似回答