楊松清
(懷化工業(yè)學(xué)校,湖南 懷化418000)
51單片機(jī)的應(yīng)用非常廣泛,電子、通信、自動(dòng)控制、汽車、航空、娛樂(lè)等等均涉及到,就業(yè)前景好;因而學(xué)習(xí)者逐年加增。在許多中專、職高、大專、本科等層次的學(xué)?;?qū)W院開(kāi)設(shè)了單片機(jī)這門課程。但是有些學(xué)校沒(méi)有開(kāi)設(shè)C語(yǔ)言課程;還有些是社會(huì)愛(ài)好者或者非專業(yè)愛(ài)好者,因而造成了他們對(duì)其理解存在很大困難。然而,雙重循環(huán)語(yǔ)句本身較為復(fù)雜,許多人雖然能夠應(yīng)用這條語(yǔ)句,但是對(duì)其基本原理無(wú)法正確理解。當(dāng)遇到精確的程序時(shí),則無(wú)從下手。所以,正確理解程序的內(nèi)在運(yùn)行是基礎(chǔ)中的基礎(chǔ)。
雙重循環(huán)語(yǔ)句,在單片機(jī)C語(yǔ)言編程或其它C語(yǔ)言類編程中是比較常見(jiàn)的,也是相當(dāng)重要的語(yǔ)句。雙重循環(huán)是一個(gè)循環(huán)的循環(huán)體內(nèi)包含另一個(gè)循環(huán)(內(nèi)循環(huán))。當(dāng)然,內(nèi)循環(huán)的循環(huán)體內(nèi)也可以包含循環(huán)構(gòu)成多重循環(huán),但本文對(duì)多重循環(huán)不進(jìn)行分析,但可以按雙重循環(huán)的思路進(jìn)行分析。
雙重循環(huán)可由while、do—while、for三種循環(huán)結(jié)構(gòu)進(jìn)行互相嵌套實(shí)現(xiàn)。本文只對(duì)for循環(huán)結(jié)構(gòu)進(jìn)行分析。其語(yǔ)句格式如下:
for(循環(huán)變量初值;循環(huán)條件;修改循環(huán)變量)
for語(yǔ)句循環(huán)的執(zhí)行過(guò)程:
①先執(zhí)行第一個(gè)表達(dá)式,給循環(huán)變量賦初值,通常這是一個(gè)賦值表達(dá)式。
②利用第二個(gè)表達(dá)式判斷循環(huán)條件是否滿足,通常是關(guān)系表達(dá)式或邏輯表達(dá)式,若其值為“真”(非0),則執(zhí)行循環(huán)體“語(yǔ)句組”一次,再執(zhí)行下面的第③步;若為假(為0),則轉(zhuǎn)到第⑤步,結(jié)束循環(huán)。
③計(jì)算第三個(gè)表達(dá)式,修改循環(huán)控制變量,一般也是賦值語(yǔ)句。
④跳到上面的第②步,繼續(xù)執(zhí)行。
⑤循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的貌一個(gè)語(yǔ)句。
這只是一個(gè)循環(huán)結(jié)構(gòu),沒(méi)有雙重循環(huán),當(dāng)要做到雙循環(huán),只要往循環(huán)體中嵌
For循環(huán)語(yǔ)句執(zhí)行圖
套一個(gè)循環(huán)結(jié)構(gòu)即可。那么怎么套?那我們看下面的雙重循環(huán)結(jié)構(gòu)的表達(dá)式組成。
for(循環(huán)變量初值;循環(huán)條件;修改循環(huán)變量)
雙重循環(huán)的每一個(gè)循環(huán)(內(nèi)或外循環(huán))的執(zhí)行步驟與上述圖中相同,其原理也是一樣。只是,先把內(nèi)循環(huán)執(zhí)行完了之后,再去執(zhí)行外循環(huán),如此循環(huán),直到最后跳出循環(huán)為止。
下面是一段雙重循環(huán)程序。
此程序大家都知道是循環(huán)了i×255次,教師上單片機(jī)課時(shí)就會(huì)說(shuō),這是一個(gè)雙重循環(huán),先執(zhí)行內(nèi)循環(huán),再執(zhí)行外循環(huán),總共執(zhí)行了i×255,每次調(diào)用循環(huán)雙重就可以了。書本也是這么寫,看似不錯(cuò),但是對(duì)于一個(gè)中職學(xué)生或者對(duì)C語(yǔ)言初學(xué)者來(lái)說(shuō),恐怕沒(méi)這么順利了。據(jù)了解,有部分大學(xué)生剛開(kāi)始時(shí)也有些迷惑,更何況是中職類學(xué)生。他們就會(huì)問(wèn)為什么會(huì)是這樣?大家回答這樣的問(wèn)題,較多會(huì)趨向這樣說(shuō):先執(zhí)行內(nèi)循環(huán),再執(zhí)行外循環(huán),總共執(zhí)行了i×255,其中有一個(gè)是空語(yǔ)句。學(xué)生們?nèi)圆欢畷r(shí),又不好意思再次問(wèn)老師,于是就去查書,結(jié)果書本上都是這樣寫的,最終還是無(wú)法透徹地理解它,甚至沒(méi)有信心去弄懂它了。最終,還是只知道是這么用,不知其理。
既然存在上述問(wèn)題,我們總應(yīng)拿出解決方案來(lái)。從上文中雙重循環(huán)的原理我們就會(huì)發(fā)現(xiàn),其實(shí),我們的課本,編程者是站在一個(gè)對(duì)C語(yǔ)言相當(dāng)熟練或有一定功底的一個(gè)角度進(jìn)行編寫的。然而,那些中職學(xué)生是在C語(yǔ)言上是零基礎(chǔ)的,再加上,大多數(shù)是初中畢業(yè)生,本身的知識(shí)面還不夠廣、理解能力、自學(xué)能力等等因素造成他們對(duì)單片機(jī)這門學(xué)科學(xué)習(xí)起來(lái)較難。
那么怎么解決雙重循環(huán)這個(gè)問(wèn)題?其實(shí),從原理上講,答案就很明顯了。只要我們寫清楚、寫詳細(xì)問(wèn)題就解決了??聪旅嫘薷暮蟮某绦颍?/p>
從這段程序可以很明顯的看出,是按文中的基本語(yǔ)句格式進(jìn)行編寫的。不難看出,先執(zhí)行for(j=0;j<255;j++){;}完之后再執(zhí)行for(k=0;k
總之,基于中職學(xué)生的特殊性,在編寫單片機(jī)相關(guān)教材或教學(xué)中的編程語(yǔ)言應(yīng)盡量做到詳細(xì),有時(shí)還要把細(xì)節(jié)的東西單獨(dú)進(jìn)行分析或講解。切記為了精煉程序而省略部分程序或某些字符等等,因?yàn)樵诮虒W(xué)中發(fā)現(xiàn)初學(xué)者一開(kāi)始只知道其結(jié)論和運(yùn)用,但其原理能說(shuō)得出來(lái)的人不多,更何況是知識(shí)面還不廣、理解能力相對(duì)較薄弱、信心不是很足的中職學(xué)生。建議,在今后的式作中盡量做到細(xì)化、讓讀者、學(xué)生能夠輕松地學(xué)會(huì)、真正地學(xué)好它。
[1]李亞寧.C語(yǔ)言中計(jì)數(shù)循環(huán)語(yǔ)句幾種形式的處理方法[J].科技資訊,2007,(10).
[2]鄭小樂(lè).C語(yǔ)言中循環(huán)語(yǔ)句的分析[J].硅谷,2010,(3).