標(biāo)題: 新手學(xué)51單片機(jī)弄不懂for嵌套循環(huán)的流程,請各位大神們幫我分析分析!感謝了! [打印本頁]

作者: tanghao8887    時間: 2018-10-1 14:56
標(biāo)題: 新手學(xué)51單片機(jī)弄不懂for嵌套循環(huán)的流程,請各位大神們幫我分析分析!感謝了!
這是一個延時的子函數(shù),我就搞不懂兩個for組成的嵌套循環(huán)的流程是怎么執(zhí)行的,我的理解是,當(dāng)a=200,a<0時,那么a-1,那么a=199了,由于第一個for后面沒有分號,那么第二個for也會跟著執(zhí)行,也就是b-1,還有1999,相當(dāng)于a要減去200次,b要減去2000次,那么這樣的話用兩個for就沒有意義了呀,何必只用一個for,設(shè)為for(a=2200;a<0;a--);    為何還要用兩個for呢?我知道我的理解有錯誤,郭天祥解釋的是當(dāng)a減一次,那么b就要減2000,他說相當(dāng)于200*2000次這么多,為什么會這樣?讓我非常不能理解,請教各位幫我分析一下嵌套for循環(huán)的執(zhí)行流程,小弟是新手,望各位說得通俗易懂一點,謝謝

Screenshot_20181001-145459.png (19.96 KB, 下載次數(shù): 64)

Screenshot_20181001-145459.png

作者: HC6800-ES-V2.0    時間: 2018-10-1 18:28
你的程序,相當(dāng)于這樣:
vid delay
{
    unsigned int a,b;
    for (a=200;a>0;a--)
    {
        for (b=2000;b>0;b--)
        {
        }
    }
}
你的程序中,循環(huán)條件錯了!。。。
作者: 文鳳軒    時間: 2018-10-1 18:55
小的數(shù)值容易計算,太大的數(shù)值不容易計算個人理解
作者: le51    時間: 2018-10-1 20:08
1.實際的執(zhí)行就是20*2000次,第一個for循環(huán)執(zhí)行一次之后第二個for循環(huán)執(zhí)行2000次。
2.當(dāng)?shù)谝粋for循環(huán)a-1之后,后面沒有分號,程序接著向下執(zhí)行第二個for循環(huán),執(zhí)行完一次b-1之后,b=1999仍然滿足條件則繼續(xù)執(zhí)行b-1的操作,直至減到b=0結(jié)束第二個for循環(huán)然后繼續(xù)執(zhí)行第一個for循環(huán)。
3.還有你的for循環(huán)應(yīng)該是for(a=200;a>0;a--)for(b=2000;b>0;b--);
4.你的for循環(huán)相當(dāng)于for(a=200;a>0;a--)這樣。
                             {
                                for(b=2000;b>0;b--);
                              }
作者: devcang    時間: 2018-10-1 20:46
執(zhí)行的次數(shù),就是a 的初值x b的初值


這是C語言的知識
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: sxhwdz    時間: 2018-10-1 20:50
第一個for語句后面沒有分號,所以緊接在下面的語句就是上面一句的循環(huán)體。
如果寫完整加上花括弧就好理解了:(a<0,b<0是錯的,應(yīng)該是 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
實在不懂用這軟件試試,方便好用。不懂的可以加我。

單片機(jī)精靈.zip

678.43 KB, 下載次數(shù): 11


作者: tanghao8887    時間: 2018-10-2 07:16
HC6800-ES-V2.0 發(fā)表于 2018-10-1 18:28
你的程序,相當(dāng)于這樣:
vid delay
{

謝謝糾正!
作者: tanghao8887    時間: 2018-10-2 07:18
le51 發(fā)表于 2018-10-1 20:08
1.實際的執(zhí)行就是20*2000次,第一個for循環(huán)執(zhí)行一次之后第二個for循環(huán)執(zhí)行2000次。
2.當(dāng)?shù)谝粋for循環(huán)a-1 ...

謝謝你的指導(dǎo),我弄懂了!
作者: tanghao8887    時間: 2018-10-2 07:18
zqy181818 發(fā)表于 2018-10-1 22:51
實在不懂用這軟件試試,方便好用。不懂的可以加我。

感謝你的分享!
作者: tanghao8887    時間: 2018-10-2 07:19
grizzly 發(fā)表于 2018-10-1 21:02
是200個2000次也就是40w次

謝謝你
作者: tanghao8887    時間: 2018-10-2 07:19
sxhwdz 發(fā)表于 2018-10-1 20:50
第一個for語句后面沒有分號,所以緊接在下面的語句就是上面一句的循環(huán)體。
如果寫完整加上花括弧就好理解 ...

謝謝你
作者: 黎黎黎黎黎黎    時間: 2018-10-2 09:45
for循環(huán):
a;
for(1 .參數(shù)初始化;2 .條件判斷;3. 更新循環(huán)變量(對參數(shù)進(jìn)行操作))
{ 循環(huán)操作;}
b;

for語句的執(zhí)行流程:
    先計算 1 的值.
    再計算 2 的值,判讀:為真(1),繼續(xù)執(zhí)行循環(huán)操作;為假(0),跳出循環(huán)執(zhí)行 b.
    循環(huán)語句執(zhí)行后,計算 3 的值,再計算 2 的值,判讀:為真(1),繼續(xù)執(zhí)行循環(huán)操作;為假(0),跳出循環(huán)執(zhí)行 b.

a->1->2->循環(huán)操作->3->2->循環(huán)操作->3->2->……->循環(huán)操作->3->2(為假,不成立(0))->b……
作者: panrulong    時間: 2018-10-2 11:39
先學(xué)c語言了解for循環(huán)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1