姜研艷
摘 要:C語言簡潔緊湊,靈活方便,是一種廣泛使用的程序設(shè)計(jì)語言,它具有功能豐富、表達(dá)能力強(qiáng),使用靈活方便等特點(diǎn)。像許多計(jì)算機(jī)語言一樣,C語言有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。而循環(huán)結(jié)構(gòu)是重點(diǎn)也是難點(diǎn)。本文對C語言中的三種循環(huán)做了分析和比較,讓學(xué)生更容易理解和掌握C語言。
關(guān)鍵詞:C語言;while循環(huán);do..while循環(huán);for循環(huán)
C語言簡潔緊湊,靈活方便。成為最受歡迎的語言之一,同時也是中職計(jì)算機(jī)學(xué)校必學(xué)的一門語言課。在程序設(shè)計(jì)中對于那些需要重復(fù)執(zhí)行的操作應(yīng)該采用循環(huán)結(jié)構(gòu)來完成,循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu)。利用循環(huán)結(jié)構(gòu)處理各類重復(fù)操作既簡單又方便。循環(huán)程序設(shè)計(jì)是C語言的重點(diǎn)也是難點(diǎn)。循環(huán)程序主要有三種類型。while循環(huán),do…while循環(huán)。for循環(huán)。因此,掌握三種類型之間的區(qū)別和聯(lián)系則顯得尤為重要。它們?nèi)叩膮^(qū)別和聯(lián)系主要體現(xiàn)在以下幾個方面:
一、一般形式:
1、while循環(huán):
while(條件表達(dá)式)
{語句序列;}
2、do…while循環(huán)
do
{語句序列;}
while(條件表達(dá)式);
3、for循環(huán)
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{語句序列;}
二、執(zhí)行過程:
while循環(huán):
當(dāng)條件表達(dá)式語句的返回的值為真的時候,程序就會執(zhí)行下面大括號里的語句序列中的語句,當(dāng)程序執(zhí)行完這個執(zhí)行語句序列中的語句的時候,程序就會再一次的回來執(zhí)行這個條件表達(dá)式語句,當(dāng)程序檢查這個條件表達(dá)式語句的結(jié)果還是真時,程序就會再一次的執(zhí)行這個執(zhí)行語句塊中的語句,當(dāng)程序執(zhí)行完成這個執(zhí)行語句塊中的語句以后,程序就會再一次的回來判斷這個條件表達(dá)式語句,當(dāng)這個條件表達(dá)式語句返回的值還是真的時候,程序就會再一次的去執(zhí)行這個大括號中的執(zhí)行語句塊中的語句,如此往復(fù)直到這個條件表達(dá)式語句返回的結(jié)果為假的時候,程序就會停止循環(huán),而去執(zhí)行整個while循環(huán)語句以外的后面的其他的語句。
do ..while循環(huán)
do… while循環(huán)while后面必須要有分號,不管while條件表達(dá)式語句是否為true,程序要先執(zhí)行一次語句序列中的語句,當(dāng)?shù)谝淮螆?zhí)行完執(zhí)行語句序列中的語句后,程序再去判斷這個條件表達(dá)式語句是否為true,如果為true再進(jìn)行這個while循環(huán),如果為false就跳出這個循環(huán)。
for循環(huán)
1、第一次循環(huán),即初始化循環(huán)。
首先執(zhí)行表達(dá)式1(一般為初始化語句),再執(zhí)行表達(dá)式2(一般為條件判斷語句),判斷表達(dá)式1是否符合表達(dá)式2的條件,如果符合,則執(zhí)行語句序列,否則,停止執(zhí)行,最后執(zhí)行表達(dá)式3。
2、下次的循環(huán):
首先執(zhí)行表達(dá)式2,判斷表達(dá)式3是否符合表達(dá)式2的條件;如果符合,繼續(xù)執(zhí)行語句序列,否則停止執(zhí)行,最后執(zhí)行表達(dá)式3.如此往復(fù),直到表達(dá)式3不再滿足表達(dá)式2的條件。在for循環(huán)中“表達(dá)式1”和“表達(dá)式3”可以是一個簡單的表達(dá)式。
總體來說,while是先判斷再執(zhí)行,do…while是先執(zhí)行再判斷,for循環(huán)的語句顯得更緊湊一些,for語句一般更適合用于循環(huán)次數(shù)比較明確的情況,而while或do…while語句則用于循環(huán)次數(shù)難以判定的情況。
三、循環(huán)次數(shù)
從循環(huán)的執(zhí)行過程不難看出。While循環(huán)是先判斷后執(zhí)行,一旦第一次條件為假,則它的執(zhí)行次數(shù)就為0,最少執(zhí)行0次。for循環(huán)也是一樣的。而do…while則不同。它是先執(zhí)行后判斷,所以不管條件是否為真,它都要執(zhí)行一次。所以它的執(zhí)行次數(shù)最少為1次。
四、while和do...while的區(qū)別比較
下面通過例題比較兩者的區(qū)別
1、 #include
main() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? main()
{char ch; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{char ch;
ch=getchar(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ch=getchar();
do ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?while(ch!=*)
{putchar(ch); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {putchar(ch);
ch=getchar(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ch=getchar();
}while(ch!=*); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
這兩個程序如果同樣都是輸入:*AB*
第一種do..while循環(huán)是先執(zhí)行后判斷,因此不做判斷先輸出。結(jié)果是*AB。
第二種while循環(huán)是先判斷后執(zhí)行,因此它先做判斷,如果是真值再做輸出。結(jié)果是*AB*
五、三種循環(huán)的共同點(diǎn)
while, do-while, for循環(huán)語句,雖然格式不同,但它們有著共同的特點(diǎn),都實(shí)用于循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。在程序設(shè)計(jì)的過程中,都具有如下三個要素:
1、循環(huán)變量賦初值。
2、循環(huán)條件。
3、循環(huán)變量值的調(diào)整。
循環(huán)體語句的正確執(zhí)行,依賴于循環(huán)的條件,循環(huán)的條件依賴循環(huán)入口時的初始化工作,一環(huán)緊扣一環(huán)。
循環(huán)體中安排哪些語句,要從分析具體問題入手,前后呼應(yīng),合乎邏輯。并且能確保循環(huán)能夠終止。而且結(jié)論正確。
循環(huán)體中一定要有能改變循環(huán)繼續(xù)的條件語句,使得循環(huán)趨于結(jié)束,否則循環(huán)將無休止的進(jìn)行下去,而形成“死循環(huán)”。這是我們應(yīng)該避免的。所以為使循環(huán)能夠正確進(jìn)行,一定要做好循環(huán)的準(zhǔn)備工作,在循環(huán)語句開始前,要給循環(huán)條件和循環(huán)初值賦上一定的值。
六、實(shí)際應(yīng)用
理論的學(xué)習(xí)需要實(shí)際的題來檢驗(yàn)。不同的題有最適合它的循環(huán)結(jié)構(gòu)。
有這樣的兩道題。
1、從鍵盤上輸入10個數(shù),求其和。
分析用三類循環(huán)中的哪個呢?不難看出這道題中的循環(huán)次數(shù)比較明確,應(yīng)該最優(yōu)選用for循環(huán)。它的編程如下:
#include
main()
{ int i,num,sum;
sum=0;
for(i=1;i<=10;i++)
{scanf(“%d”,&num);
sum=sum+num;
}
printf(“%d”,sum);
}
2、從鍵盤上輸入若干個數(shù),直到遇到2為止,求它們的和。
分析得出循環(huán)次數(shù)難以判定,排除for。應(yīng)該用while或者do…while。兩個都可以?還是其中一個呢?因?yàn)閣hile是先判定后執(zhí)行;do…while是先執(zhí)行后判定。而本題中要求遇到2就截止。如果用do…while的話,第一個數(shù)就是2,那么這個2也會被加進(jìn)去。將違背我們的題意。所以不能用do…while。while是先判定后執(zhí)行。如果第一個數(shù)是2的話,while會先判斷不合理,不會去執(zhí)行語句序列的。所以本題應(yīng)該選用while循環(huán)。
它的編程如下:
#include
main()
{ int n;
int t=0;
scanf(“%d”,&n);
while(n!=0)
{ t=t+n;
scanf(“%d”,&n);
}
printf(“%d\n”,t);
}
總之,循環(huán)結(jié)構(gòu)是C語言中程序設(shè)計(jì)中的一個重要知識點(diǎn)。教師在教學(xué)過程中,應(yīng)讓學(xué)生掌握三種循環(huán)的區(qū)別和聯(lián)系。盡可能提高學(xué)生的學(xué)習(xí)積極性,點(diǎn)燃學(xué)生學(xué)習(xí)的熱情,讓學(xué)生能輸出正確的程序,輸出快樂的人生。
參考文獻(xiàn):
[1]陳琳.編程語言基礎(chǔ):C語言,高等教育出版社,2016,07
[2]陳琳.C語言學(xué)習(xí)輔導(dǎo)與上機(jī)實(shí)習(xí), 高等教育出版社,2012,01
[3]譚浩強(qiáng).C語言程序設(shè)計(jì)教程,高等教育出版社,2002