鄭英姿
摘要:目前,在很多高校, 對(duì)于計(jì)算機(jī)專業(yè)來(lái)說(shuō),《C語(yǔ)言》是一門非常重要的專業(yè)基礎(chǔ)課程,學(xué)習(xí)它的好壞,直接關(guān)系到后續(xù)課程的學(xué)習(xí)效果。C語(yǔ)言都被列為程序設(shè)計(jì)的入門語(yǔ)言,也是很多計(jì)算機(jī)專業(yè)學(xué)生學(xué)好《數(shù)據(jù)結(jié)構(gòu)》、《c++程序設(shè)計(jì)》等專業(yè)課的前提條件。而循環(huán)語(yǔ)句又是C語(yǔ)言學(xué)習(xí)中的一個(gè)重點(diǎn)與難點(diǎn)。根據(jù)本人的體會(huì),淺談一下C語(yǔ)言循環(huán)語(yǔ)句的格式、執(zhí)行過(guò)程以及在學(xué)習(xí)、生活中的一些應(yīng)用。
關(guān)鍵字:while語(yǔ)句;do……While語(yǔ)句;for語(yǔ)句
一、引言
C語(yǔ)言是目前最受歡迎的語(yǔ)言之一,它具有強(qiáng)大的功能,語(yǔ)言簡(jiǎn)潔,結(jié)構(gòu)緊湊,使用方便、靈活。在解決實(shí)際問(wèn)題的過(guò)程中,常常會(huì)遇到一些需要重復(fù)處理的問(wèn)題,循環(huán)結(jié)構(gòu)可用來(lái)處理需要重復(fù)處理的問(wèn)題。在C語(yǔ)言中,有三種類型的循環(huán)語(yǔ)句: while語(yǔ)句、do……While語(yǔ)句和for語(yǔ)句。前兩個(gè)是條件循環(huán),即根據(jù)條件是否為真來(lái)判斷是否繼續(xù)循環(huán),后一個(gè)是計(jì)數(shù)循環(huán),即根據(jù)設(shè)定的循環(huán)次數(shù)來(lái)執(zhí)行循環(huán)。
一個(gè)完整的循環(huán)結(jié)構(gòu)一般由四部分組成:循環(huán)變量的初始化、循環(huán)控制條件、循環(huán)體、循環(huán)變量的增值,其中,循環(huán)變量的初始化是指在進(jìn)入循環(huán)前,給循環(huán)變量賦初值,否則首次進(jìn)入循環(huán)時(shí),無(wú)法確定循環(huán)控制條件是否成立;循環(huán)控制條件是重復(fù)執(zhí)行循環(huán)體所需的條件,即當(dāng)條件成立時(shí)執(zhí)行循環(huán)體,否則結(jié)束循環(huán);循環(huán)體是需要重復(fù)執(zhí)行的操作序列;循環(huán)變量是決定循環(huán)條件是否成立的變量;循環(huán)變量的增值反映了循環(huán)變量的改變規(guī)律,它使循環(huán)變量的值向著使循環(huán)結(jié)束的方向改變。
二、三種循環(huán)語(yǔ)句的格式及執(zhí)行過(guò)程
1、While 語(yǔ)句格式及執(zhí)行過(guò)程
while( 表達(dá)式)
循環(huán)體語(yǔ)句
while語(yǔ)句的執(zhí)行過(guò)程為:① 計(jì)算while后條件表達(dá)式的值。② 若表達(dá)式的值為真,則執(zhí)行循環(huán)體語(yǔ)句,然后判斷條件是否為真;如果為真,繼續(xù)循環(huán),如果為假,退出循環(huán),即結(jié)束while語(yǔ)句。
在使用while語(yǔ)句時(shí),應(yīng)注意以下幾個(gè)問(wèn)題:①循環(huán)體語(yǔ)句可以是簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句或空語(yǔ)句。當(dāng)循環(huán)體是一組語(yǔ)句時(shí),必須用花括號(hào)括起來(lái),組成復(fù)合語(yǔ)句。②while語(yǔ)句中的循環(huán)條件表達(dá)式可以是任何類型的表達(dá)式。③循環(huán)體內(nèi)一定要有使表達(dá)式的值變?yōu)?(假)的操作,否則循環(huán)將無(wú)限進(jìn)行。④while語(yǔ)句的特點(diǎn)是“先判斷,后執(zhí)行”,如果循環(huán)條件表達(dá)式的值一開(kāi)始就為0,則循環(huán)體語(yǔ)句一次也不執(zhí)行。
2、do……While 語(yǔ)句格式及執(zhí)行過(guò)程
do
{ 語(yǔ)句 }while(表達(dá)式);
其中,表達(dá)式是循環(huán)控制條件,語(yǔ)句是循環(huán)體,可以是簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句或空語(yǔ)句。通常用復(fù)合語(yǔ)句,使得結(jié)構(gòu)更清楚。特別注意:該語(yǔ)句while(表達(dá)式)后加分號(hào)。
do_while語(yǔ)句的特點(diǎn)是“先執(zhí)行循環(huán)體,后判斷循環(huán)條件”,當(dāng)條件成立時(shí)繼續(xù)執(zhí)行循環(huán)體,條件不成立時(shí)結(jié)束循環(huán)。因此,do_while循環(huán)常用來(lái)實(shí)現(xiàn)類似“直到型”循環(huán)的“當(dāng)型”循環(huán)結(jié)構(gòu)。
for 語(yǔ)句格式及執(zhí)行過(guò)程
for 語(yǔ)句較前兩種循環(huán)語(yǔ)句更簡(jiǎn)潔、更靈活,不僅用于計(jì)數(shù)型循環(huán),而且可以用于條件型循環(huán),特別是處理循環(huán)次數(shù)確定的問(wèn)題。
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語(yǔ)句
其中,表達(dá)式1為賦初值表達(dá)式,表達(dá)式2為條件表達(dá)式,表達(dá)式3為循環(huán)變量增值表達(dá)式
該語(yǔ)句執(zhí)行過(guò)程: ①先對(duì)表達(dá)式1賦初值; ②判別表達(dá)式2是否滿足給定條件,若其值為真,滿足循環(huán)條件,則執(zhí)行循環(huán)體內(nèi)語(yǔ)句,然后執(zhí)行表達(dá)式3,進(jìn)入第二次循環(huán),再判別表達(dá)式2,如此反復(fù),直到判斷表達(dá)式2的值為假,不滿足條件,就終止for循環(huán),執(zhí)行循環(huán)體外語(yǔ)句。
使用for循環(huán)時(shí),for語(yǔ)句的表達(dá)式可以部分或全部省略,但兩個(gè)“;”是不可以省略。①省略表達(dá)式1,這時(shí)沒(méi)有了給循環(huán)變量賦初值的操作,則應(yīng)該在for語(yǔ)句之前給循環(huán)變量賦初值。②省略表達(dá)式2,相當(dāng)于缺少條件判斷,循環(huán)無(wú)限進(jìn)行。③省略表達(dá)式3,則可以把循環(huán)變量的修改部分放到循環(huán)體中進(jìn)行。④3個(gè)表達(dá)式全部省略,則for(;;)相當(dāng)于while(1)。
三、break和continue語(yǔ)句
在C語(yǔ)言中,為了使循環(huán)控制更加靈活,C語(yǔ)言允許在特定條件成立時(shí),使用break或continue語(yǔ)句跳過(guò)循環(huán)體其余語(yǔ)句,轉(zhuǎn)向循環(huán)條件的判定語(yǔ)句。
1、break語(yǔ)句
break語(yǔ)句的一般形式為:break;
break語(yǔ)句有兩個(gè)作用:用于switch語(yǔ)句時(shí),退出switch語(yǔ)句,程序轉(zhuǎn)至switch語(yǔ)句下面的語(yǔ)句;用于循環(huán)語(yǔ)句時(shí),退出包含它的循環(huán)體,程序轉(zhuǎn)至循環(huán)體下面的語(yǔ)句。
2、continue語(yǔ)句
continue語(yǔ)句的一般形式為:continue;
continue語(yǔ)句作用是:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。在while語(yǔ)句、do……While語(yǔ)句中,continue語(yǔ)句把程序控制轉(zhuǎn)到while后面的表達(dá)式處,在for語(yǔ)句中,continue語(yǔ)句把程序控制轉(zhuǎn)到表達(dá)式3處。
break和continue的區(qū)別:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,break語(yǔ)句則是結(jié)束循環(huán),不再進(jìn)行條件判斷。
四、循環(huán)語(yǔ)句的應(yīng)用分析
循環(huán)語(yǔ)句在學(xué)習(xí)、生活中有廣泛的應(yīng)用,我們通過(guò)例題進(jìn)行分析說(shuō)明循環(huán)語(yǔ)句的重要作用。
4.1例如輸入某班一門課的成績(jī)并計(jì)算其平均成績(jī)。(人數(shù)不定,當(dāng)輸入成績(jī)?yōu)?1時(shí)結(jié)束)。
分析:本例的特點(diǎn)是“循環(huán)次數(shù)不確定”,而是已知循環(huán)結(jié)束的條件。循環(huán)的組成:①循環(huán)體:將有效成績(jī)score 加入部分和sum;輸入下一個(gè)成績(jī)score;
②循環(huán)控制條件:score!=-1;③ 循環(huán)變量的改變:用戶輸入;④循環(huán)變量的初值: 鍵盤輸入。
程序如下:
main()
{ float score,sum=0;
int n=0;
printf(" enter a score(-1 for end):");
scanf("%f",&score;);
while(score!=-1)
{ sum+=score;
n++;
printf(" enter a score(-1 for end):");
scanf(“%f”,&score;);
}
printf(" n=%d,aver=%f",n,sum/n);
}
例4.2 百錢買百雞:一百錢,買一百只雞,其中公雞3錢/只、母雞1錢/只、小雞3只/錢,問(wèn)可買公雞、母雞、小雞個(gè)多少只?
分析:使用窮舉法求解。cock 在[0,33]的范圍內(nèi)取值,hen 在[0,100]的范圍內(nèi)取值,chick 在[0,100]的范圍內(nèi)取值,且只能取能被3整除的數(shù)。在以上的范圍內(nèi)找出所有滿足百錢買百雞的組合方式輸出出來(lái)即可。
#include
main()
{
int cock,hen,chick,n=0;
for(cock=0;cock<=33;cock++)
for(hen=0;hen<=100;hen++)
for(chick=0;chick<=100;chick+=3)
if(cock+hen+chick==100&&cock;*3+hen+chick/3==100)
printf("Answer %d:cock %d,hen %d,chick %d! ",++n,cock,hen,chick);
}
五、總結(jié)
絕大多數(shù)情況下,三種語(yǔ)句是通用的,并且代碼的差異不大。循環(huán)次數(shù)確定的程序,且組成循環(huán)的四個(gè)部分完整又簡(jiǎn)潔的情況下,多采用for語(yǔ)句。循環(huán)體的語(yǔ)句至少執(zhí)行一次的情況下,多采用do_while語(yǔ)句。