标题: 新手学51单片机弄不懂for嵌套循环的流程,请各位大神们帮我分析分析!感谢了! [打印本页]

作者: tanghao8887    时间: 2018-10-1 14:56
标题: 新手学51单片机弄不懂for嵌套循环的流程,请各位大神们帮我分析分析!感谢了!
这是一个延时的子函数,我就搞不懂两个for组成的嵌套循环的流程是怎么执行的,我的理解是,当a=200,a<0时,那么a-1,那么a=199了,由于第一个for后面没有分号,那么第二个for也会跟着执行,也就是b-1,还有1999,相当于a要减去200次,b要减去2000次,那么这样的话用两个for就没有意义了呀,何必只用一个for,设为for(a=2200;a<0;a--);    为何还要用两个for呢?我知道我的理解有错误,郭天祥解释的是当a减一次,那么b就要减2000,他说相当于200*2000次这么多,为什么会这样?让我非常不能理解,请教各位帮我分析一下嵌套for循环的执行流程,小弟是新手,望各位说得通俗易懂一点,谢谢

Screenshot_20181001-145459.png (19.96 KB, 下载次数: 64)

Screenshot_20181001-145459.png

作者: HC6800-ES-V2.0    时间: 2018-10-1 18:28
你的程序,相当于这样:
vid delay
{
    unsigned int a,b;
    for (a=200;a>0;a--)
    {
        for (b=2000;b>0;b--)
        {
        }
    }
}
你的程序中,循环条件错了!!!!!
作者: 文凤轩    时间: 2018-10-1 18:55
小的数值容易计算,太大的数值不容易计算个人理解
作者: le51    时间: 2018-10-1 20:08
1.实际的执行就是20*2000次,第一个for循环执行一次之后第二个for循环执行2000次。
2.当第一个for循环a-1之后,后面没有分号,程序接着向下执行第二个for循环,执行完一次b-1之后,b=1999仍然满足条件则继续执行b-1的操作,直至减到b=0结束第二个for循环然后继续执行第一个for循环。
3.还有你的for循环应该是for(a=200;a>0;a--)for(b=2000;b>0;b--);
4.你的for循环相当于for(a=200;a>0;a--)这样。
                             {
                                for(b=2000;b>0;b--);
                              }
作者: devcang    时间: 2018-10-1 20:46
执行的次数,就是a 的初值x b的初值


这是C语言的知识
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: sxhwdz    时间: 2018-10-1 20:50
第一个for语句后面没有分号,所以紧接在下面的语句就是上面一句的循环体。
如果写完整加上花括弧就好理解了:(a<0,b<0是错的,应该是 a>0,  b>0))

     for(a=200; a>0; a--)
    {
        for(b=2000; b>0; b--)
        {
            ;
        }
    }
作者: grizzly    时间: 2018-10-1 21:02
是200个2000次也就是40w次
作者: zqy181818    时间: 2018-10-1 22:51
实在不懂用这软件试试,方便好用。不懂的可以加我。

单片机精灵.zip

678.43 KB, 下载次数: 11


作者: tanghao8887    时间: 2018-10-2 07:16
HC6800-ES-V2.0 发表于 2018-10-1 18:28
你的程序,相当于这样:
vid delay
{

谢谢纠正!
作者: tanghao8887    时间: 2018-10-2 07:18
le51 发表于 2018-10-1 20:08
1.实际的执行就是20*2000次,第一个for循环执行一次之后第二个for循环执行2000次。
2.当第一个for循环a-1 ...

谢谢你的指导,我弄懂了!
作者: tanghao8887    时间: 2018-10-2 07:18
zqy181818 发表于 2018-10-1 22:51
实在不懂用这软件试试,方便好用。不懂的可以加我。

感谢你的分享!
作者: tanghao8887    时间: 2018-10-2 07:19
grizzly 发表于 2018-10-1 21:02
是200个2000次也就是40w次

谢谢你
作者: tanghao8887    时间: 2018-10-2 07:19
sxhwdz 发表于 2018-10-1 20:50
第一个for语句后面没有分号,所以紧接在下面的语句就是上面一句的循环体。
如果写完整加上花括弧就好理解 ...

谢谢你
作者: 黎黎黎黎黎黎    时间: 2018-10-2 09:45
for循环:
a;
for(1 .参数初始化;2 .条件判断;3. 更新循环变量(对参数进行操作))
{ 循环操作;}
b;

for语句的执行流程:
    先计算 1 的值.
    再计算 2 的值,判读:为真(1),继续执行循环操作;为假(0),跳出循环执行 b.
    循环语句执行后,计算 3 的值,再计算 2 的值,判读:为真(1),继续执行循环操作;为假(0),跳出循环执行 b.

a->1->2->循环操作->3->2->循环操作->3->2->……->循环操作->3->2(为假,不成立(0))->b……
作者: panrulong    时间: 2018-10-2 11:39
先学c语言了解for循环




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1