A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

周兵

初级黑马

  • 黑马币:10

  • 帖子:5

  • 精华:0

© 周兵 初级黑马   /  2014-5-14 23:51  /  1555 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>  void main()  {  int a,b,c,d=0;  for(a=1;a<5;a++)  for(b=1;b<5;b++)  for(c=1;c<5;c++)  if(a!=b&&b!=c&&a!=c)  {  d++;  printf(\"%d%d%d \",a,b,c);  }  printf(\"\\n\");  printf(\"共有这样的数%d个\\n\",d);  }  这其中的3层FOR循环,是怎么样一个关系,我刚接触FOR循环,搞不清楚,很郁闷!按照书上写的,执行完第2步之后,该执行语句了,但是第一个循环下面又一个循环,这样的话,第一个FOR循环的第2步完了,之后该执行哪一步了?还是第一个判断完之后发现没有语句就执行第2个?高手指点一下吧!

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

8 个回复

倒序浏览
读嵌套循环,一定要从内部循环开始读,给你举个例子:

  1. #include <stdio.h>


  2. int main()
  3. {
  4.     int i,j;          // 定义两个循环控制变量
  5.    
  6.     for(i = 1;i<5;i++)      // 这是外循环
  7.     {
  8.         for(j = 1;j<5;j++)   // 这是内循环
  9.         {
  10.             printf("第%d次外,第%d次内\n",i,j);
  11.         }
  12.         printf("----------------------------------\n");
  13.     }
  14.     return 0;
  15. }
复制代码

运行结果如下




可以看出,每进行一次外循环,内循环就会整个循环一遍,也就是说 i 的值每增加 1,内循环执行 4 次( j从1开始 )

不管多少重循环,原理都是一样的,好好理解上述代码,肯定会对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

回复 使用道具 举报 2 0
本帖最后由 ios风痕 于 2014-5-15 01:34 编辑
  1. </blockquote></div><div class="blockcode"><blockquote>#include <stdio.h>
  2. void main()
  3. {  int a,b,c,d=0;
  4.   for(a=1;a<5;a++)//第一层
  5.     for(b=1;b<5;b++)//第二层
  6.       for(c=1;c<5;c++)//第三层
  7.         if(a!=b&&b!=c&&a!=c)
  8.           {  d++;  printf(\"%d%d%d \",a,b,c);  }

  9. printf("\\n");

  10. printf(\"共有这样的数%d个\\n\",d);

  11. }  
复制代码



是这样进行循环的,满足第一层的循环条件,则执行第二层,满足第三层的条件则执行if语句
如果if语句中的判断语句为真,则执行if下面花括号里的语句,否则执行第三层++,直到第三层循环条件不在满足,继续执行第二层++,同理一直循环到第一层循环条件不在满足,执行最后两个输出。程序寿命就终结了。

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

回复 使用道具 举报
{:2_36:}嵌套循环,最外层的时间尺度要大一些,越往里,循环尺度就越小
回复 使用道具 举报
给你举个for循环嵌套的列子  这是输出九九乘法表
#include <stdio.h>
main()
{
    int m,n;
    for(m=1;m<=9;m++)     
        {
            for(n=1;n<=m;n++)  /*当m为1的时候,for循环执行完整个语句,又跳回第一个for循环第2次,                    当m变为2的时候 。第二个for循环又从头开始执行完整个循环,即第一个for循环执行一次第二个for循环就要执行整个循环。*/
                {
                     printf("%d*%d=%d",m,n,m*n);
                     printf(",");
                 }
            printf("\n");
        }
}
回复 使用道具 举报
看了看,学到了不少东西,支持各位一下
回复 使用道具 举报
这个循环语句要实现的功能就是a、b、c、都是1-4的数,结果输出的是他们三个数都不相等,有几组这样的数,每组数都是什么。你这段程序共嵌套了三层,一共执行的次数为4*4*4=64次,就是说共有64种组合,最后的if循环是从这64组数中去掉不符合条件的。具体怎样看嵌套关系,你可以一步一步的看,首先进入第一个循环a=1,然后进入第二层循环b=1,然后进入第三层循环c=1,通过if检查这组数据是否符合输出。然后根据程序下一步应该c=2,c=3,c=4逐个验证,c=5不符合后跳出第三层循环,跳回第二层循环b++为2,再往下执行跳入第三层循环1-4逐个验证,后面的同理。
回复 使用道具 举报
ios风痕 发表于 2014-5-15 01:32
是这样进行循环的,满足第一层的循环条件,则执行第二层,满足第三层的条件则执行if语句
如果if语句中的 ...

支持一下
回复 使用道具 举报
楼主呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马