找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4868|回复: 14
打印 上一主题 下一主题
收起左侧

新手学51单片机弄不懂for嵌套循环的流程,请各位大神们帮我分析分析!感谢了!

  [复制链接]
跳转到指定楼层
楼主
ID:404479 发表于 2018-10-1 14:56 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个延时的子函数,我就搞不懂两个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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2018-10-1 18:28 | 只看该作者
你的程序,相当于这样:
vid delay
{
    unsigned int a,b;
    for (a=200;a>0;a--)
    {
        for (b=2000;b>0;b--)
        {
        }
    }
}
你的程序中,循环条件错了!!!!!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:386381 发表于 2018-10-1 18:55 来自手机 | 只看该作者
小的数值容易计算,太大的数值不容易计算个人理解

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:157238 发表于 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--);
                              }

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:277550 发表于 2018-10-1 20:46 | 只看该作者
执行的次数,就是a 的初值x b的初值


这是C语言的知识
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:387733 发表于 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--)
        {
            ;
        }
    }

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:398663 发表于 2018-10-1 21:02 | 只看该作者
是200个2000次也就是40w次

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:130231 发表于 2018-10-1 22:51 | 只看该作者
实在不懂用这软件试试,方便好用。不懂的可以加我。

单片机精灵.zip

678.43 KB, 下载次数: 11

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:404479 发表于 2018-10-2 07:16 来自手机 | 只看该作者
HC6800-ES-V2.0 发表于 2018-10-1 18:28
你的程序,相当于这样:
vid delay
{

谢谢纠正!
回复

使用道具 举报

10#
ID:404479 发表于 2018-10-2 07:18 来自手机 | 只看该作者
le51 发表于 2018-10-1 20:08
1.实际的执行就是20*2000次,第一个for循环执行一次之后第二个for循环执行2000次。
2.当第一个for循环a-1 ...

谢谢你的指导,我弄懂了!
回复

使用道具 举报

11#
ID:404479 发表于 2018-10-2 07:18 来自手机 | 只看该作者
zqy181818 发表于 2018-10-1 22:51
实在不懂用这软件试试,方便好用。不懂的可以加我。

感谢你的分享!
回复

使用道具 举报

12#
ID:404479 发表于 2018-10-2 07:19 来自手机 | 只看该作者
grizzly 发表于 2018-10-1 21:02
是200个2000次也就是40w次

谢谢你
回复

使用道具 举报

13#
ID:404479 发表于 2018-10-2 07:19 来自手机 | 只看该作者
sxhwdz 发表于 2018-10-1 20:50
第一个for语句后面没有分号,所以紧接在下面的语句就是上面一句的循环体。
如果写完整加上花括弧就好理解 ...

谢谢你
回复

使用道具 举报

14#
ID:402431 发表于 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……

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

15#
ID:404820 发表于 2018-10-2 11:39 | 只看该作者
先学c语言了解for循环

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表