摘要:C語言程序設(shè)計中循環(huán)結(jié)構(gòu)是順序、選擇、循環(huán)三大基本結(jié)構(gòu)之一,功能強大,使用靈活方便,但是學(xué)生學(xué)習(xí)難度比較大。該文以累加和為切入點深入分析循環(huán)結(jié)構(gòu)特點,總結(jié)出循環(huán)結(jié)構(gòu)“四要素學(xué)習(xí)法”,用for、while、do-while等循環(huán)語句分別實現(xiàn)其循環(huán)算法,并舉例加以深入解讀,使循環(huán)結(jié)構(gòu)學(xué)習(xí)思路清晰,重點突出,對于學(xué)生掌握并靈活使用循環(huán)結(jié)構(gòu)非常有幫助。
關(guān)鍵詞:C語言程序設(shè)計;循環(huán)結(jié)構(gòu);四要素學(xué)習(xí)法
中圖分類號:TP311 文獻標(biāo)識碼:A
文章編號:1009-3044(2020)29-0121-03
1 背景
C語言是面向過程的高級程序設(shè)計語言之一,它具有數(shù)據(jù)類型豐富、靈活高效和結(jié)構(gòu)化等特征[1]。C語言程序設(shè)計是自動化等工科專業(yè)非常重要的專業(yè)課程,尤其后期學(xué)習(xí)單片機時進行編程也是使用C語言。循環(huán)指事物周而復(fù)始地運動或變化。在計算機程序設(shè)計中,“循環(huán)”這一術(shù)語指的是一種專門的控制結(jié)構(gòu)。特征是重復(fù)執(zhí)行循環(huán)體中的語句,比一般情況下的順序執(zhí)行復(fù)雜一些,需要跳轉(zhuǎn)命令和條件判斷組合實現(xiàn)[2]。循環(huán)結(jié)構(gòu)是C語言程序設(shè)計中三大基本結(jié)構(gòu)之一[3],也是最為重要、使用頻率較高的結(jié)構(gòu),其特點是,在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。循環(huán)結(jié)構(gòu)一直是學(xué)生學(xué)習(xí)程序設(shè)計的一個難點,下面筆者就以循環(huán)結(jié)構(gòu)中的累加和問題S= 1+2+3+…+100為切人點,談一下自己的授課經(jīng)驗。
累加和的實現(xiàn)有2種方案。
解決方案1:考慮順序結(jié)構(gòu)來完成,雖然可以實現(xiàn),但是比較煩瑣,費工,計算機智能化快速化優(yōu)勢并沒有體現(xiàn)出來,同時順序結(jié)構(gòu)算法的通用性太差,題目稍有變化如從1加到1000等,就不能解決了。也就是說,順序結(jié)構(gòu)來解決重復(fù)才做問題,只能具體問題具體分析,不能解決此類問題。
解決方案2:使用循環(huán)結(jié)構(gòu)實現(xiàn),程序代碼簡單,邏輯清晰,而且通用性強,可以推廣到類似的其他問題。
比較兩種方案,循環(huán)結(jié)構(gòu)用來解決重復(fù)性操作問題優(yōu)勢明顯,但是循環(huán)結(jié)構(gòu)算法相對來說比較難掌握。筆者也就此算法進行了深入的課堂教學(xué)研究,從操作過程拆解、循環(huán)結(jié)構(gòu)流程圖和循環(huán)語句實現(xiàn)三方面來進行分析講解,提出了循環(huán)結(jié)構(gòu)的“四要素學(xué)習(xí)法”。
2 循環(huán)結(jié)構(gòu)教學(xué)過程
2.1 操作過程拆解
對于累加和問題,本質(zhì)上是相加操作的重復(fù),所以其共性為:和=操作數(shù)1+操作數(shù)2,重復(fù)若干次;重復(fù)性相加操作的不同之處在于:每次參與相加的操作數(shù)1和操作數(shù)2是不同的,操作數(shù)1為上次相加之和,稱為舊和,操作數(shù)2為上次操作數(shù)2加l之后的值。對比重復(fù)性操作的共性和不同之處,累加和操作問題的通式可寫為:新和=舊和+操作數(shù)2。所以累加和問題就變?yōu)椋涸O(shè)置好初值,利用變量值可變的特性重復(fù)求和,直到加到100,累加結(jié)束。在此過程中,設(shè)累加和存放在變量sum中,操作數(shù)2為變量i,則初值設(shè)定為sum=0,i=1,重復(fù)相加通式為:sum=sum+i,累加完成后i值增1,此后進行下一次累加操作,知道i值超過100,累加結(jié)束,共重復(fù)100次,此過程即為循環(huán)結(jié)構(gòu)。
對于程序設(shè)計當(dāng)中涉及重復(fù)性問題,都可按照這個分析過程來進行初步分析。
2.2 循環(huán)結(jié)構(gòu)四要素
以上分析內(nèi)容用程序流程圖表示如下圖1。通過對循環(huán)結(jié)構(gòu)流程圖的分析可以看出,循環(huán)結(jié)構(gòu)的實現(xiàn)需要注意四個關(guān)鍵點:1)初值設(shè)定,是循環(huán)正確開始的基礎(chǔ);2)循環(huán)條件,限定重復(fù)性操作重復(fù)執(zhí)行的條件,也是循環(huán)能適時終止的保證,避免循環(huán)陷入死循環(huán);3)循環(huán)體,是循環(huán)重復(fù)性操作的具體體現(xiàn);4)循環(huán)變量的調(diào)整,是循環(huán)體正確執(zhí)行或者循環(huán)次數(shù)控制的重要環(huán)節(jié)。在使用循環(huán)結(jié)構(gòu)時,這四點必須予以重視。
由累加和問題推廣到一般重復(fù)性問題,流程圖如圖2所示。在分析一般的具有重復(fù)性操作的問題時,都可以歸結(jié)為以上四要素的分析推理過程,所以在C語言程序設(shè)計中循環(huán)結(jié)構(gòu)這一環(huán)節(jié)的授課過程中,筆者提出了“四要素學(xué)習(xí)法”,結(jié)合重復(fù)性操作問題的特點,找出重復(fù)過程中的四個方面,即起始特點、重復(fù)操作條件、重復(fù)操作本身以及每次重復(fù)操作的細微調(diào)整,對應(yīng)以上講解的循環(huán)結(jié)構(gòu)實現(xiàn)過程中的初值設(shè)定、循環(huán)是否執(zhí)行的判斷條件、循環(huán)體及循環(huán)變量調(diào)整四個要素,循環(huán)結(jié)構(gòu)算法即可實現(xiàn)。
2.3 循環(huán)語句實現(xiàn)
循環(huán)結(jié)構(gòu)的實現(xiàn)語句包括三種:for、while、do-while,三種語句雖然語法規(guī)則不同,但都可實現(xiàn)上面的循環(huán)結(jié)構(gòu),而且按照四要素法來分析這三種循環(huán)語句,都包含前面所分析的循環(huán)初值設(shè)定、循環(huán)判斷條件、循環(huán)體及循環(huán)變量調(diào)整四個要素其中。
1)for語句實現(xiàn)
for語句使用十分靈活,變化多端,可以通過for語句培養(yǎng)靈活使用C語言的能力[2],故我們首先以for語句為例來設(shè)計循環(huán)結(jié)構(gòu)程序代碼。
for語句的基本格式為:
for(表達式1;表達式2;表達式3)
循環(huán)體語句;
其執(zhí)行過程為:先執(zhí)行表達式1,再判斷循環(huán)條件表達式2是否成立,如果條件成立則執(zhí)行循環(huán)體語句,執(zhí)行完循環(huán)體語句后執(zhí)行表達式3;之后再次判斷循環(huán)條件是否成立,若條件還成立,則繼續(xù)重復(fù)循環(huán)體語句,當(dāng)條件不成立時則跳出for循環(huán)。
累加和for語句實現(xiàn)的程序為:
for(i=l,sum=O;i<=lOO;i++)
sum=sum+i;
用四要素學(xué)習(xí)法分析for語句程序段:
i=1.sum=0;為循環(huán)初始條件;i<=100為循環(huán)判斷條件;sum=sum+i;為循環(huán)體語句;i++;為循環(huán)調(diào)整語句。
2)while語句實現(xiàn)
while語句在單片機程序設(shè)計中常會使用,基本格式為:
while(循環(huán)條件)
(循環(huán)體語句;)
其執(zhí)行過程為:先判斷循環(huán)條件是否成立,如果成立就執(zhí)行循環(huán)體語句,執(zhí)行完畢后再回來判斷循環(huán)條件是否滿足,如此重復(fù);直到條件不成立時,跳出循環(huán),執(zhí)行while循環(huán)后邊的語句。在使用while的循環(huán)語句時一定要包括能最后判斷出while循環(huán)語句條件的真假性的操作過程Ⅲ。
用while語句實現(xiàn)累加和問題:
i=l.sum=0;
while(i
(
sum=sum+l;
i++;
)
同樣用四要素法分析while語句程序段:
i=1,sum=0;為循環(huán)初始條件;i<=100為循環(huán)判斷條件;sum=sum+i;為循環(huán)體語句;i++;為循環(huán)調(diào)整語句。
3) do-while語句實現(xiàn)
do-while語句的特點:
do-while語句的一般形式為:
do
循環(huán)體語句;
while(循環(huán)條件);
其執(zhí)行過程為:首先無條件地執(zhí)行一次循環(huán)體,然后判斷循環(huán)條件是否成立,成立則繼續(xù)循環(huán),否則退出循環(huán)。因此,與while循環(huán)相比,do-while循環(huán)要無條件執(zhí)行一次循環(huán)語句,實現(xiàn)相同算法時要注意此區(qū)別。
用do-while語句實現(xiàn)累加和問題:
i=l.sum=0;
do
{
sum=sum+1.
}while(i<=100);
再次用四要素法分析do-while語句程序段:
i=1,sum=0為循環(huán)初始條件;i<=100為循環(huán)判斷條件;sum=sum+i為循環(huán)體語句;i++為循環(huán)調(diào)整語句。
4)三種循環(huán)語句對比
由以上分析可知,不論是什么語句來實現(xiàn)循環(huán)結(jié)構(gòu),都離不開循環(huán)結(jié)構(gòu)的四要素:循環(huán)初值設(shè)定、循環(huán)判斷條件、循環(huán)體和循環(huán)變量調(diào)整,循環(huán)算法才能正常實現(xiàn),否則循環(huán)有可能出現(xiàn)起始條件不正確,或者陷入死循環(huán)等難以發(fā)現(xiàn)的邏輯問題。三種語句的區(qū)別只在于四要素在循環(huán)算法中的位置不同。所以,可以把循環(huán)四要素法推廣應(yīng)用到重復(fù)性操作所有問題中。在設(shè)計循環(huán)結(jié)構(gòu)的算法時,關(guān)鍵在于設(shè)置好循環(huán)四要素,循環(huán)算法才能成功實現(xiàn)。同時也可以利用四要素法來驗證循環(huán)算法是否能成功實現(xiàn)要求。
3 循環(huán)結(jié)構(gòu)四要素學(xué)習(xí)法應(yīng)用
接下來進行應(yīng)用循環(huán)四要素學(xué)習(xí)法來實現(xiàn)其他循環(huán)問題案例分析。
例題1:求費波那西(Fibonacci)數(shù)列的前40個數(shù)。這個數(shù)列同時也是一個有趣的數(shù)學(xué)問題,可把數(shù)列問題描述為:最開始有一對兔子,從出生后第3個月起每個月都能生一對兔子。小兔子長到第3個月后又可以每個月生一對兔子。假設(shè)所有兔子都不死,則每個月的兔子總數(shù)滿足費波那西數(shù)列的規(guī)律。
根據(jù)前面分析信息可總結(jié)出這個數(shù)列有如下特點:第1、2兩個數(shù)為1、1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:
用程序的思想來解讀這個數(shù)學(xué)問題,用循環(huán)結(jié)構(gòu)實現(xiàn)最為恰當(dāng)。其思路為:設(shè)置兩個數(shù)列變量fl和f2用來暫存數(shù)列當(dāng)中的某兩個數(shù),設(shè)置一個循環(huán)調(diào)整變量i,從數(shù)列第一個數(shù)到數(shù)列中的第40個數(shù)。由式1可知當(dāng)i=1和i=2時,f1=1,f2=1。本問題中i的值每變化一次,F(xiàn)。就要重新賦一次值,故重復(fù)性操作為Fn=Fn-1+Fn-2(n≥3)并輸出顯示。在數(shù)列前兩個數(shù)都為1的基礎(chǔ)上,循環(huán)變量的值從i=1到i=38才能把數(shù)列前40個數(shù)計算卅來。所以用循環(huán)四要素法來解讀:循環(huán)初值為f1=1,f2=1,i=1;循環(huán)判斷條件為i≤38;循環(huán)體語句為Fn=Fn+1,+Fn-2(n≥3)和顯示語句,并且要為下次Fn的賦值做準(zhǔn)備,即進行fl和f2值的調(diào)整;循環(huán)變量調(diào)整則為i值每次增1。算法流程圖如下圖3所示。
用for語句實現(xiàn)費波那西數(shù)列循環(huán)結(jié)構(gòu),其程序代碼為:
#include
int main0
f int fl=l,f2=l,f3; int i;
printf(”%12d\n%12d\n”,f1,f2);
for(i=l;i<=38;i++)
f f3=fl+f2;
printf(”o-/012d\n”,f3);
fl=f2;
f2=f3:
)
return 0:
)
接下來進行案例二的分析。
例2:用;π/4≈1-1/3+1/5-1/7+…公式求仃的近似值,直到某一項的絕對值小于10-6為止(該項不累計加)。
由題十信息可知,公式有無窮項相加減,明顯可考慮用循環(huán)結(jié)構(gòu)來實現(xiàn)。分析題中所給公式的特點可總結(jié)為:
1)每一項的分子都是1,后一項的分母是前一項的分母加2;
2)相鄰兩項項分?jǐn)?shù)的符號正負交替;
故相鄰兩項數(shù)據(jù)的關(guān)系為:1/n=>1/n+2
在設(shè)計程序時,需要用到幾個變量:flag:符號變量,用以進行每次加減運算時符號的替換;pi:π變量;n:參與運算的每一項的分母值;t:由符號變量除以沒意向的分母值得到參與運算的當(dāng)前項。用循環(huán)四要素法來解讀:循環(huán)初值為flag=l,pi=0,n=1,t=1;循環(huán)結(jié)束條件為某一項的絕對值小于l0-6,故判斷條件為t≥l0-6;循環(huán)體:計算pi值;循環(huán)變量調(diào)整:n=n+2,flag取反以及t的新值計算。程序流程圖如圖4所示。
程序清單如下:
#include
#include
int main0
{ int flag=l; double pi=O,n=l,t=l;
while(fabs(t)>=le-6)
( pi=pi+t;
n=n+2:
flag=-flag;
t=flag/n;
)
pi=pi*4;
printf(”pi= o-/010.8f\n”,pi);
return O:
)
4 結(jié)束語
由以上分析可知,重復(fù)操作性問題利用循環(huán)結(jié)構(gòu)可使程序結(jié)構(gòu)清晰,語句簡潔。循環(huán)結(jié)構(gòu)設(shè)計過程中一定需要注意四要素:初值設(shè)定、循環(huán)判斷條件、循環(huán)體、循環(huán)變量調(diào)整,只要把握住這四個要素,循環(huán)結(jié)構(gòu)設(shè)計就可實現(xiàn),并且也可易用循環(huán)四要素查找循環(huán)結(jié)構(gòu)是否存在漏洞。同時在算法設(shè)計好之后,程序?qū)崿F(xiàn)時也應(yīng)注意for、while、do-while等循環(huán)語句的使用特點,在合適的位置上設(shè)置合適的四要素。所以利用“四要素學(xué)習(xí)法”來講解循環(huán)結(jié)構(gòu),簡單易懂,重點突出,對學(xué)生熟練掌握和應(yīng)用循環(huán)結(jié)構(gòu)解決程序問題可起到事半功倍的效果,循環(huán)類問題就可輕松解決。
參考文獻:
[1]姚立新,梁宏濤.C語言程序設(shè)計[M].北京:電子T業(yè)出版社,2013:1.
[2]方悅.循環(huán)、迭代與遞歸[J].電腦知識與技術(shù),2020,16(6):55-57,66.
[3]譚浩強.C程序設(shè)計[M].北京:清華大學(xué)出版社,2010:124.
[4]高茂嬋,呂雪,彭星星,等.淺談C語言中循環(huán)結(jié)構(gòu)程序設(shè)計[J].電腦知識與技術(shù),2020,16(6):58-60.
【通聯(lián)編輯:謝媛媛】
作者簡介:陳麗敏(1982-),女,河南許昌人,講師,碩士,研究方向為檢測技術(shù)與自動化裝置。