亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 478|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

第4章 C語言基礎(chǔ)以及流水燈的實現(xiàn)4.4 4.5 4.6

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1167894 發(fā)表于 2026-3-23 09:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
4.4  for循環(huán)語句
for語句是C語言編程的一個常用的語句,這個語句必須得學(xué)會其用法,它不僅僅可以用來做延時,更重要的是用來做一些循環(huán)運算。for語句的一般形式如下:
        for (表達式1; 表達式2; 表達式3)
        {
            (需要執(zhí)行的語句);
        }
其執(zhí)行過程是:表達式1首先執(zhí)行且只執(zhí)行一次;然后執(zhí)行表達式2,通常都是一個用于判定條件的表達式,如果表達式2條件成立,就執(zhí)行(需要執(zhí)行的語句);然后再執(zhí)行表達式3;再判斷表達式2,執(zhí)行(需要執(zhí)行的語句);再執(zhí)行表達式3.....一直到表達式2不成立時,跳出循環(huán)繼續(xù)執(zhí)行循環(huán)后面的語句。舉個例子:
        for (i=0; i<2; i++)
        {
            j++;
        }
這里有一個符號++剛剛講過了。假如j最開始初值是0,首先執(zhí)行表達式1的i=0,然后判斷i小于2這個條件成立,就執(zhí)行一次j++,j的值就是1了,然后經(jīng)過表達式3后,i的值也變成1了,再判斷條件2,還是符合,j再加一次,j變成2了,再經(jīng)過表達式3后i也變成2了,再判斷條件2,發(fā)現(xiàn)2<2這個條件不成立了,所以就不會再執(zhí)行j++這個語句了。所以執(zhí)行完畢后,j的值就是2。
for語句除了這種標(biāo)準(zhǔn)用法,還有幾種特殊用法,比如前面的閃爍小燈對for語句的用法for(i=0; i<30000; i++) ;沒有加(需要執(zhí)行的語句),就是什么都不操作。但是什么都不操作的話,這個for語句循環(huán)判斷了30000次,程序執(zhí)行是會用掉時間的,所以就起到了延時的作用。比如把30000改成20000,會發(fā)現(xiàn)燈的閃爍速度加快了,因為延時時間短了,當(dāng)然,改成40000后會發(fā)現(xiàn),閃爍慢了。但是有一點特別注意,C語言的延時時間是不能通過程序看出來的,也不會成比例,比如這個for循環(huán)里邊的表達式2使用30000時延時是3秒的話,那么改成40000的時候,可能并不一定是4秒。
還有一種寫法for( ; ; ),這樣寫后,這個for循環(huán)就變成了死循環(huán)了,就不停的執(zhí)行(需要執(zhí)行的語句),和前邊講的while(1)的意思是一樣的了。那while這個語法是如何用的呢?
4.5  while循環(huán)語句
在單片機C語言編程的時候,每個程序都會固定的加一句while(1),這條語句就可以起到死循環(huán)的作用。對于while語句來說,他的一般形式是:
        while (表達式)
        {
            循環(huán)體語句;
        }
在C語言里,通常“表達式”符合條件叫做真,不符合條件,叫做假。比如前邊i<30000,當(dāng)i等于0的時候,那這個條件成立,就是真;如果i大于30000的時候,i<30000條件不成立,就叫做假。
while(表達式)這個括號里的表達式,為真的時候,就會執(zhí)行循環(huán)體語句,當(dāng)為假的時候,就不執(zhí)行。
還有另外一種情況,就是C語言里邊,除了表達式外,還有常數(shù),習(xí)慣上,把非0的常數(shù)都認為是真,只有0認為是假,所以程序中使用了while(1),這個數(shù)字1,可以改成2、3、4......等等都可以,都是一個死循環(huán),不停的執(zhí)行循環(huán)體的語句,但是如果把這個數(shù)字改成0,那么就不會執(zhí)行循環(huán)體的語句了。
通過學(xué)習(xí)for循環(huán)和while循環(huán),是不是會產(chǎn)生一個疑問?為何有的循環(huán)加上{},而有的循環(huán)卻沒加呢?什么時候需要加,什么時候不需要加呢?
前邊講過,在C語言中,分號表示語句的結(jié)束,而在循環(huán)語句里{}表示的是循環(huán)體的所有語句,如果不加大括號,則只循環(huán)執(zhí)行一條語句,即第一個分號之前的語句,而加上大括號后,則會執(zhí)行大括號中所有的語句,舉個例子看一下,上節(jié)課的閃爍小燈程序如下所示。
        程序(1):                   程序(2):
        while (1)                               while (1)
        {                                         LED = 0;
            LED = 0;                            for(i=0;i<30000;i++);
            for(i=0;i<30000;i++);             LED = 1;
            LED = 1;                            for(i=0;i<30000;i++);
            for(i=0;i<30000;i++);
        }
程序(1)可以實現(xiàn)閃爍功能。而程序(2)沒有加大括號,從語法上來看是沒有任何錯誤的,寫到Keil里編譯一下也不會報錯。但是從邏輯上來講,程序(2)只會不停的循環(huán)“LED = 0;”這條語句,實際上和程序(3)效果是相同的。
        程序(3):
        while(1)
        {
            LED = 0;
        }
        for(i=0;i<30000;i++);
        LED = 1;
        for(i=0;i<30000;i++);
程序執(zhí)行到while(1)已經(jīng)進入死循環(huán)了,所以后邊三條語句是一輩子也執(zhí)行不到的。因此為了防止出類似的邏輯錯誤,推薦不管循環(huán)語句后邊是一條還是多條語句,都加上{}以防出錯。
4.6  函數(shù)的簡單介紹
函數(shù)定義的一般形式如下:
        函數(shù)值類型 函數(shù)名 (形式參數(shù)列表)
        {
            函數(shù)體
        }
1、函數(shù)值類型,就是函數(shù)返回值的類型。在后邊章節(jié)的部分例程中,會有很多函數(shù)中有return x這條語句,這個返回值也就是函數(shù)本身的類型。還有一種情況,就是這個函數(shù)只執(zhí)行操作,不需要返回任何值,那么這個時候它的類型就是空類型void,這個void按道理來說是可以省略的,但是一旦省略,Keil軟件會報一個警告,所以通常也不省。
2、函數(shù)名,可以由任意的字母、數(shù)字和下劃線組成,但數(shù)字不能作為開頭。函數(shù)名不能與其他函數(shù)或者變量重名,也不能是關(guān)鍵字。什么是關(guān)鍵字呢,后邊慢慢接觸,比如char這類,都是關(guān)鍵字,是程序中具備特殊功能的標(biāo)志符,這種東西不可以命名函數(shù)。
3、形式參數(shù)列表,也叫做形參列表,這個是函數(shù)調(diào)用的時候,相互傳遞數(shù)據(jù)用的。有的函數(shù)不需要傳遞參數(shù)給它,那么可以用void來替代,void同樣可以省略,但是那個括號是不能省略的。
4、函數(shù)體,包含了聲明語句部分和執(zhí)行語句部分。聲明語句部分主要用于聲明函數(shù)內(nèi)部所使用的變量,執(zhí)行語句部分主要是一些函數(shù)需要執(zhí)行的語句。特別注意,所有的聲明語句部分必須放在執(zhí)行語句之前,否則編譯的時候會報錯。
5、一個工程文件必須有且僅有一個main函數(shù),程序執(zhí)行的時候,都是從main函數(shù)開始的。
6、關(guān)于形參和實參的概念,后邊再總結(jié),如果遇到程序里有,大家再跟著抄一段時間。先用,后講解,這樣更有利于理解。
來回顧一下閃爍LED程序中的主函數(shù),根據(jù)注釋再認真分析一遍,是不是對函數(shù)的認識就清楚多了。
void main()  //void即函數(shù)類型
{
    //以下為聲明語句部分
    unsigned int i = 0;  //定義一個無符號整型變量i,并賦初值0
   
    //以下為執(zhí)行語句部分
    ENLED = 0;   //U3、U4兩片74HC138總使能
    ADDR3 = 1;   //使能U3使之正常輸出
    ADDR2 = 1;   //經(jīng)U3的Y6輸出開啟三極管Q16
    ADDR1 = 1;
    ADDR0 = 0;
    while (1)
    {
        LED = 0;                     //點亮小燈
        for (i=0; i<30000; i++);  //延時一段時間
        LED = 1;                     //熄滅小燈
        for (i=0; i<30000; i++);  //延時一段時間
    }
}
代碼中的“//”是注釋符,意思是說在這之后的內(nèi)容都是注釋。注釋是給程序員自己或其他人看的,用于對程序代碼做一些補充說明,對程序的編譯和執(zhí)行沒有任何影響。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表