(玩電(dian)子) 電(dian)子技術學習與研(yan)究
當前位置︰开心生肖官网單片機教程網 >> 基(ji)礎教程 >> 瀏覽文章

彩盈彩票官网

作者(zhe):佚名(ming)   來源(yuan):本站(zhan)原創(chuang)   點擊數:x  更新時間︰2007年(nian)07月(yue)14日   【字(zi)體︰ 中(zhong)

循環語句是幾乎每(mei)個(ge)程序(xu)都會用到的,它的作用就是用來實現(xian)zhong)枰 錘唇卸duo)次的操 作。如一個(ge) 12M 的 51 芯片應(ying)用電(dian)路中(zhong)要求實現(xian) 1 毫秒(miao)的延時,那麼就要執行 1000 次空語句 才(cai)能達到延時的目的(當然能使用定時器來做,這(zhe)里就不討論),如果(guo)是寫 1000 條空語 句那是多(duo)麼麻(ma)煩(fan)的事情,再者(zhe)就是要佔(zhan)用很多(duo)的存儲空zhan)洹N頤悄苤 dao)這(zhe) 1000 條空語句, 無(wu)非就是一條空語句重復執行 1000 次,因(yin)此我們就能用循環語句去寫,這(zhe)樣不但使程序(xu)

結構(gou)清晰明了,而且使其(qi)編(bian)譯的效率大大的提(ti)高。在  C  語言中(zhong)構(gou)成循環控制的語句有(you) while,do-while,for 和 goto 語句。同樣都是起到循環作用,但具體的作用和使用方法(fa)又大不一 樣。我們具體來看看。

goto 語句

這(zhe)個(ge)語句在很多(duo)高級(ji)語言中(zhong)都會有(you),記得(de)小時候用 BASIC 時就很喜(xi)歡用這(zhe)個(ge)語句。它是 一個(ge)無(wu)條件的轉向語句,只(zhi)要執行到這(zhe)個(ge)語句,程序(xu)指(zhi)針就會跳轉到 goto 後的標號所在的 程序(xu)段。它的語法(fa)如下︰

goto  語句標號; 其(qi)中(zhong)的語句標號為一個(ge)帶冒(mao)號的標識符。示例如下

void  main(void)

{

unsigned  char  a;

start:  a++;

if  (a==10)  goto  end;

goto  start;

end:;

}

上面(mian)一段程序(xu)只(zhi)是說(shuo)de)饕幌goto 的使用方法(fa),實際編(bian)寫很少(shao)使用這(zhe)樣的手法(fa)。這(zhe)段程序(xu)的意思(si)

是在程序(xu)開始處用標識符“start:”標識,表示程序(xu)這(zhe)是程序(xu)的開始,“end:”標識程序(xu)的 結束,標識符的定義應(ying)遵(zun)循前面(mian)所講的標識符定義原則(ze),不能用 C 的關鍵字(zi)也(ye)不能和其(qi)它變(bian) 量和函數名(ming)相(xiang)同,不然就會出錯了。程序(xu)執行 a++,a 的值加 1,當 a 等(deng)于 10 時程序(xu)會跳到 end 標識處結束程序(xu),不然跳回到 start 標識處繼續 a++,直到 a 等(deng)于 10。上面(mian)的示例說(shuo)de)goto 不但能無(wu)條件的轉向,而且能和 if 語句構(gou)成一個(ge)循環結構(gou),這(zhe)些在 C 程序(xu)員的程 序(xu)中(zhong)都不太(tai)常見,常見的 goto 語句使用方法(fa)是用它來跳出多(duo)重循環,不過它只(zhi)能從內層循環 跳到外層循環,不能從外層循環跳到內層循環。在下面(mian)說(shuo)到 for 循環語句時再略(lue)為提(ti)一提(ti)。 為何(he)大多(duo)數 C 程序(xu)員都不喜(xi)歡用 goto 語句?那是因(yin)為過多(duo)的使用它時會程序(xu)結構(gou)不清晰,

過多(duo)的跳轉就使程序(xu)又zhi)氐攪嘶惚bian)的編(bian)程風(feng)格,使程序(xu)失去了 C 的模塊化(hua)的優點。

while 語句

while  語句的意思(si)很不難理解,在英(ying)語中(zhong)它的意思(si)是“當…的時候…”,在這(zhe)里我們可 以理解為“當條件為真的時候就執行後面(mian)的語句”,它的語法(fa)如下︰

while  (條件表達式)  語句;

使用 while 語句時要注意當條件表達式為真時,它才(cai)執行後面(mian)的語句,執行完後再次回

到 while 執行條件判斷,為真時重復執行語句,為假時退出循環體。當條件一開始就為假時, 那麼 while 後面(mian)的循環體(語句或復合語句)將(jiang)一次都不執行就退出循環。在調試程序(xu)時要


 

注意 while 的判斷條件不能為假而造成的死循環,調試時適當的在 while 處加入(ru)斷點,也(ye)許(xu) 會使你(ni)的調試工作更加順利。當然有(you)時會使用到死循環來等(deng)待中(zhong)斷或 IO 信號等(deng),如在第一 篇(pian)時我們就用了 while(1)來不停的輸出“Hello  World!”。下面(mian)的例子是顯示從 1 到 10 的累 加和,讀者(zhe)能修改(gai)一下 while 中(zhong)的條件看看結果(guo)會如果(guo),從而體會一下 while 的使用方法(fa)。

#include <AT89X51.H>

#include <stdio.h>

void main(void)

{

unsigned int I = 1;

unsigned int SUM = 0; //設初值

SCON = 0x50; //串(chuan)行口方式 1,允許(xu)接收

TMOD = 0x20; //定時器 1 定時方式 2

TCON = 0x40; //設定時器 1 開始計數

TH1 = 0xE8;   //11.0592MHz 1200 波特率

TL1 = 0xE8; TI = 1;

TR1 = 1; //啟動定時器

while(I<=10)

{

SUM = I + SUM; //累加

printf ("%d SUM=%d\n",I,SUM); //顯示

I++;

}

while(1); //這(zhe)句是為了不讓程序(xu)完後,程序(xu)指(zhi)針繼續向下lue)斐沙絛xu)“跑飛”

}

//最後運行結果(guo)是 SUM=55;

do  while 語句

do while 語句能說(shuo)是 while 語句的補充,while 是先判斷條件是否成立再執行循環體,

而 do  while 則(ze)是先執行循環體,再根據條件判斷是否要退出循環。這(zhe)樣就決定了循環體無(wu) 論在任何(he)條件下都會至少(shao)被執行一次。它的語法(fa)如下︰

do  語句  while  (條件表達式)

用 do  while 怎麼寫上面(mian)那個(ge)例程呢(ne)?先想一想,再參考下面(mian)的程序(xu)。

#include  <AT89X51.H>

#include  <stdio.h>

void  main(void)

{


 

unsigned  int  I  =  1;

unsigned  int  SUM  =  0;  //設初值

SCON  =  0x50;  //串(chuan)行口方式 1,允許(xu)接收 TMOD  =  0x20;  //定時器 1 定時方式 2

TCON  =  0x40;  //設定時器 1 開始計數

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //啟動定時器

do

{

SUM  =  I  +  SUM;  //累加

printf  ("%d  SUM=%d\n",I,SUM);  //顯示 I++;

}

while(I<=10);

while(1);

}

在上面(mian)的程序(xu)看來 do  while 語句和 while 語句似乎沒有(you)什麼兩樣,但在實際的應(ying)用中(zhong)要注

意任何(he) do while 的循環體一定會被執行一次。如把上面(mian)兩個(ge)程序(xu)中(zhong) I 的初值設為 11,那麼 前一個(ge)程序(xu)不會得(de)到顯示結果(guo),而後一個(ge)程序(xu)則(ze)會得(de)到 SUM=11。

for  語句

在明確(que)循環次數的情況下,for 語句比以上說(shuo)的循環語句都要方便簡單。它的語法(fa)如下︰ for  ([初值設定表達式];[循環條件表達式];[條件更新表達式])  語句 中(zhong)括號中(zhong)的表達式是可選的,這(zhe)樣 for 語句的變(bian)化(hua)就會很多(duo)樣了。for 語句的執行︰先

代入(ru)初值,再判斷條件是否為真,條件滿足時執行循環體並更新條件,再判斷條件是否為 真……直到條件為假時,退出循環。下面(mian)的例子所要實現(xian)的是和上二個(ge)例子一樣的,對照著 看不難理解幾個(ge)循環語句的差(cha)異(yi)。

#include  <AT89X51.H>

#include  <stdio.h>

void  main(void)

{

unsigned  int  I;

unsigned  int  SUM  =  0;  //設初值

SCON  =  0x50;  //串(chuan)行口方式 1,允許(xu)接收 TMOD  =  0x20;  //定時器 1 定時方式 2

TCON  =  0x40;  //設定時器 1 開始計數


 

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //啟動定時器

for  (I=1;  I<=10;  I++)  //這(zhe)里能設初始值,所以變(bian)量定義時能不設

{

SUM  =  I  +  SUM;  //累加

printf  ("%d  SUM=%d\n",I,SUM);  //顯示

}

while(1);

}

如果(guo)我們把程序(xu)中(zhong)的 for 改(gai)成 for(; I<=10; I++)這(zhe)樣條件的初值會變(bian)成當前 I 變(bian)量的

值。如果(guo)改(gai)成 for(;;)會怎麼樣呢(ne)?試試看。

continue  語句

continue  語句是用于中(zhong)斷的語句,通常使用在循環中(zhong),它的作用是結束本次循環,跳 過循環體中(zhong)沒有(you)執行的語句,跳轉到下一次循環周(zhou)期(qi)。語法(fa)為︰

continue;

continue 同時也(ye)是一個(ge)無(wu)條件跳轉語句,但功(gong)能和前面(mian)說(shuo)到的 break 語句有(you)所不一樣, continue  執行後不是跳出循環,而是跳到循環的開始並執行下一次的循環。在上面(mian)的例子 中(zhong)的循環體加入(ru) if  (I==5)  continue;看看什麼結果(guo)?

return  語句

return 語句是返回語句,不屬于循環語句,是要學習的最後一個(ge)語句所以一並寫下了。 返回語句是用于結束函數的執行,返回到調用函數時的位置。語法(fa)有(you)二種︰

return  (表達式);

return; 語法(fa)中(zhong)因(yin)帶有(you)表達式,返回時先計算表達式,再返回表達式的值。不帶表達式則(ze)返回的

值不確(que)定。

下面(mian)是一個(ge)同樣是計算 1-10 的累加,所不一樣是的用了函數的方式。

#include  <AT89X51.H>

#include  <stdio.h>

int  Count(void);  //聲(sheng)明函數

void  main(void)

{

unsigned  int  temp;


 

SCON  =  0x50;  //串(chuan)行口方式 1,允許(xu)接收 TMOD  =  0x20;  //定時器 1 定時方式 2

TCON  =  0x40;  //設定時器 1 開始計數

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //啟動定時器

temp  =  Count();

printf  ("1-10  SUM=%d\n",temp);  //顯示

while(1);

}

int  Count(void)

{

unsigned  int  I,  SUM;

for  (I=1;  I<=10;  I++)

{

SUM  =  I  +  SUM;  //累加

}

return  (SUM);

}

發表評(ping)論】【告訴好友】【收藏此文】【關閉窗口

彩盈彩票官网

彩盈彩票官网

彩盈彩票官网 | 下一页