初學(xué)C語(yǔ)言程序設(shè)計(jì)的基本方法和技巧
處理數(shù)據(jù)是對(duì)于初學(xué)者來(lái)說(shuō)最難的一部分,也就是把我們剛才分析過(guò)程轉(zhuǎn)換成語(yǔ)句。
這需要學(xué)好C語(yǔ)言的三種程序結(jié)構(gòu)。(1)順序結(jié)構(gòu);順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,不過(guò)大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語(yǔ)句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。(2)選擇結(jié)構(gòu);對(duì)于要先做判斷再選擇的問(wèn)題就要使用分支結(jié)構(gòu)。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)條件的結(jié)果選擇對(duì)應(yīng)的分支語(yǔ)句。選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的
計(jì)算,設(shè)計(jì)這類程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計(jì)分析與語(yǔ)言分開(kāi),使得問(wèn)題簡(jiǎn)單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
例如上例中,把我們頭腦中很快閃過(guò)的這些判斷過(guò)程畫成流程圖,根據(jù)流程圖再寫出對(duì)應(yīng)的語(yǔ)句就比較容易了。如下所示:
min=a;
if(min>b)min=b;
if(min>c)min=c;
學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的部分,嵌套結(jié)構(gòu)也就不難了。嵌套只不過(guò)是分支中又包括分支語(yǔ)句而已,不是新知識(shí),只要對(duì)雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結(jié)構(gòu)。
①if(條件)
{分支體
}
這種分支結(jié)構(gòu)中的分支體可以是一條語(yǔ)句,此時(shí)“{}”可以省略,也可以是多條語(yǔ)句即復(fù)合語(yǔ)句。它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過(guò)分支體,這時(shí)分支體就不會(huì)執(zhí)行。如:要計(jì)算x的絕對(duì)值,根據(jù)絕對(duì)值定義,我們知道,當(dāng)x>=0時(shí),其絕對(duì)值不變,而x0時(shí)其絕對(duì)值是為x的反號(hào),因此程序段為:if(x0)x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語(yǔ)句構(gòu)成。如:求某年的年號(hào)是否是閏年。分析:因?yàn)楫?dāng)某年號(hào)能被4整除 但不能被100整除,則這一年是閏年;或者這一年號(hào)能被4 0 0整除也是閏年。即year%4==0year%100!=0||year%400==0其程序段如下:
i f(y e a r%4==0y e a r%1 0 0!=0||year%400==0)
printf“(%d is leap year!”,year);
else
printf“(%d is not leap year!”,year);}
③嵌套分支語(yǔ)句:其語(yǔ)句格式為:
if(條件1){分支1};
else if(條件2){分支2}
else if(條件3){分支3}
……
else if(條件n){分支n}
else{分支n+1}
嵌套分支語(yǔ)句雖可解決多個(gè)入口和出口的問(wèn)題,但超過(guò)3重嵌套后,語(yǔ)句結(jié)構(gòu)變得非常復(fù)雜,對(duì)于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過(guò)3重可以用switch語(yǔ)句。
④switch開(kāi)關(guān)語(yǔ)句:該語(yǔ)句也是多分支選擇語(yǔ)句,到底執(zhí)行哪一塊,取決于開(kāi)關(guān)設(shè)置,也就是表達(dá)式的值與常量表達(dá)式相匹配的那一路,它不同if…else語(yǔ)句,它的所有分支都是并列的,程序執(zhí)行時(shí),由第一分支開(kāi)始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語(yǔ)句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語(yǔ)句在應(yīng)用時(shí)要特別注意開(kāi)關(guān)條件的合理設(shè)置以及break語(yǔ)句的合理應(yīng)用。
(3)循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供三種循環(huán),即while循環(huán)、dowhile循環(huán)和for循環(huán)。三種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,另外還有一種goto循環(huán)語(yǔ)句,因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來(lái)不可預(yù)料的錯(cuò)誤,所以不提倡使用。
常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,就能更好地理解它們的作用。在分析循環(huán)結(jié)構(gòu)的語(yǔ)句時(shí)要開(kāi)清楚,什么時(shí)候開(kāi)始循環(huán)(即循環(huán)的初始值);什么時(shí)候結(jié)束循環(huán)(即循環(huán)的終止條件);循環(huán)的時(shí)候都做哪些操作(即循環(huán)體的執(zhí)行部分);特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見(jiàn)錯(cuò)誤。
在學(xué)完這三個(gè)循環(huán)后,應(yīng)明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而d o…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說(shuō)do…while的循環(huán)體最少被執(zhí)行一次,而while循環(huán)和for就可能一次都不執(zhí)行。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評(píng)論