版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序控制結(jié)構(gòu)3.1順序結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4其他控制語(yǔ)句本章小結(jié)
3.1順序結(jié)構(gòu)
順序結(jié)構(gòu)就是程序按照語(yǔ)句出現(xiàn)的先后順序依次執(zhí)行。順序結(jié)構(gòu)流程圖如圖3-1所示,它有一個(gè)入口、一個(gè)出口,依次執(zhí)行語(yǔ)句1和語(yǔ)句2。圖3-1順序結(jié)構(gòu)流程圖
3.1.1表達(dá)式語(yǔ)句
C語(yǔ)言程序由若干條語(yǔ)句組成,每條語(yǔ)句以分號(hào)結(jié)束。表達(dá)式語(yǔ)句是C語(yǔ)言語(yǔ)句中最基本的語(yǔ)句,在表達(dá)式后面加一個(gè)分號(hào),就構(gòu)成了表達(dá)式語(yǔ)句。其形式為:
表達(dá)式;
最典型的例子是由賦值表達(dá)式構(gòu)成的賦值語(yǔ)句。如:
x=3 /*賦值表達(dá)式*/
x=3; /*一個(gè)賦值語(yǔ)句*/
3.1.2空語(yǔ)句
空語(yǔ)句是一個(gè)只由分號(hào)組成的語(yǔ)句。其形式為:
;
空語(yǔ)句什么都不做,當(dāng)程序中某個(gè)位置在語(yǔ)法上需要一條語(yǔ)句,但在語(yǔ)義上又不要求執(zhí)行任何操作時(shí),可在此處使用一條空語(yǔ)句。空語(yǔ)句常用于循環(huán)語(yǔ)句中的循環(huán)體,表示循環(huán)體什么都不做。如:
for(i=1;i<=1000;i++); /*表示循環(huán)空轉(zhuǎn)1000次,可用來延時(shí)*/
3.1.3復(fù)合語(yǔ)句
復(fù)合語(yǔ)句是用花括號(hào)括起來的、由若干條語(yǔ)句組成的語(yǔ)句塊,又稱為分程序,在語(yǔ)法上等價(jià)于一條語(yǔ)句?;ɡㄌ?hào)內(nèi)的語(yǔ)句組可以由任何合法的C語(yǔ)言語(yǔ)句組成,可以是說明語(yǔ)句、表達(dá)式語(yǔ)句,也可以是復(fù)合語(yǔ)句,若有說明語(yǔ)句,應(yīng)該寫在可執(zhí)行語(yǔ)句的前面。復(fù)合語(yǔ)句的形式為:
{
[說明語(yǔ)句]
語(yǔ)句組;
}
3.2選擇結(jié)構(gòu)
3.2.1if語(yǔ)句 C語(yǔ)言的if語(yǔ)句有三種形式:?jiǎn)畏种f語(yǔ)句、雙分支if-else語(yǔ)句和多分支if-elseif語(yǔ)句。1.單分支if語(yǔ)句 單分支if語(yǔ)句的基本形式為: if(條件表達(dá)式) 語(yǔ)句
其中:
(1)條件表達(dá)式可以是任意的數(shù)值、字符、關(guān)系表達(dá)式或邏輯表達(dá)式,非0表示真,0表示假。條件表達(dá)式必須用圓括號(hào)括起來。
(2)語(yǔ)句可以是一條簡(jiǎn)單語(yǔ)句或一條復(fù)合語(yǔ)句。
單分支if語(yǔ)句的執(zhí)行流程是:先計(jì)算條件表達(dá)式,若表達(dá)式結(jié)果為真(非0),則執(zhí)行語(yǔ)句;否則,不執(zhí)行語(yǔ)句,而執(zhí)行if語(yǔ)句后面的下一條語(yǔ)句。其流程圖如圖3-2所示。圖3-2單分支if語(yǔ)句流程圖
【例3-1】從鍵盤上輸入兩個(gè)整數(shù),將它們從小到大排列,即若第一個(gè)數(shù)大于第二個(gè)數(shù),則交換順序。
分析:由于計(jì)算機(jī)內(nèi)存有易覆蓋的特點(diǎn),因此計(jì)算機(jī)中交換兩個(gè)變量的值只能采取通過第三個(gè)變量間接交換的方法來實(shí)現(xiàn),如圖3-3所示。圖3-3兩個(gè)數(shù)交換的過程
2.雙分支if語(yǔ)句
雙分支if語(yǔ)句的基本形式為:
if(條件表達(dá)式)
語(yǔ)句1
else
語(yǔ)句2
雙分支if語(yǔ)句的執(zhí)行流程是:先計(jì)算條件表達(dá)式,若表達(dá)式結(jié)果為真(非0),則執(zhí)行語(yǔ)句1;否則,執(zhí)行語(yǔ)句2。其流程圖如圖3-4所示。圖3-4雙分支if語(yǔ)句流程圖
【例3-2】從鍵盤上輸入兩個(gè)整數(shù),求最大值。
程序代碼如下:
【例3-3】計(jì)算分段函數(shù):
3.多分支if語(yǔ)句
多分支if語(yǔ)句的基本形式為:
if(條件表達(dá)式1)
語(yǔ)句1
elseif(條件表達(dá)式2)
語(yǔ)句2
elseif(條件表達(dá)式n)
語(yǔ)句n
else
語(yǔ)句n+1
多分支if語(yǔ)句的執(zhí)行流程是:先計(jì)算條件表達(dá)式1的值,若該值為真(非0),則執(zhí)行語(yǔ)句1;否則,計(jì)算條件表達(dá)式2的值,若該值為真(非0),就執(zhí)行語(yǔ)句2;依此類推,若各條件表達(dá)式的值都為假(0),則執(zhí)行語(yǔ)句n+1。其流程圖如圖3-5所示。圖3-5多分支if語(yǔ)句流程圖
【例3-4】根據(jù)百分制成績(jī)score,決定對(duì)應(yīng)的五級(jí)制評(píng)定:大于等于90分為A級(jí),80分及以上且90分以下為B級(jí),70分及以上且80分以下為C級(jí),60分及以上且70分以下為D級(jí),60分以下為E級(jí)。
4.if語(yǔ)句的嵌套
【例3-5】計(jì)算分段函數(shù):
思考:下面三個(gè)程序段,是否能實(shí)現(xiàn)上述題目要求?為什么?
3.2.2switch語(yǔ)句
除了多分支if語(yǔ)句,C語(yǔ)言還提供了另外一種多分支選擇結(jié)構(gòu)switch語(yǔ)句,又稱為開關(guān)語(yǔ)句。
switch語(yǔ)句的基本形式為:
switch(表達(dá)式)
{
case常量表達(dá)式1:語(yǔ)句組1;[break;]
case常量表達(dá)式2:語(yǔ)句組2;[break;]
case常量表達(dá)式n:語(yǔ)句組n;[break;]
[default:語(yǔ)句組n+1;]
}
switch語(yǔ)句的執(zhí)行流程是:首先計(jì)算switch后面表達(dá)式的值,逐個(gè)和case子句中的常量表達(dá)式相比較,當(dāng)switch表達(dá)式的值與某個(gè)case后面的常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語(yǔ)句組。如果該語(yǔ)句組中有break子句,則退出switch語(yǔ)句,若沒有,則不再判斷其他常量表達(dá)式的值是否匹配,繼續(xù)執(zhí)行后面其他case語(yǔ)句組。若switch表達(dá)式的值與所有case后面的常量表達(dá)式的值均不相等,且有default子句,則執(zhí)行default后的語(yǔ)句組。其流程圖如圖3-6所示。圖3-6switch語(yǔ)句流程圖
【例3-6】某商場(chǎng)采用購(gòu)物打折的優(yōu)惠辦法促銷,每位顧客一次購(gòu)物:1000元以下不優(yōu)惠;1000元以上,按九五折優(yōu)惠;2000元以上,按九折優(yōu)惠;3000元以上,按八五折優(yōu)惠;5000元以上,按八折優(yōu)惠。編寫程序,輸入顧客的購(gòu)物款,計(jì)算并顯示出顧客的實(shí)際應(yīng)付款。
分析:設(shè)顧客的購(gòu)物款為x,打折后的貨款為y,優(yōu)惠公式為:
因?yàn)閏ase后面的常量表達(dá)式不能寫成一個(gè)表示范圍的邏輯表達(dá)式,因此可以將switch表達(dá)式設(shè)為(int)x/1000,結(jié)果正好是一個(gè)整數(shù);當(dāng)x在3000≤x<5000范圍內(nèi)時(shí),表達(dá)式(int)x/1000的值可能為3,也可能為4,這時(shí)兩個(gè)case子句可以共用同一個(gè)語(yǔ)句組。
思考:若省去程序中的所有break,程序運(yùn)行結(jié)果正確嗎?
3.3循環(huán)結(jié)構(gòu)
3.3.1while語(yǔ)句 while循環(huán)又稱為當(dāng)型循環(huán),先判斷循環(huán)條件再?zèng)Q定是否執(zhí)行循環(huán)體,當(dāng)事先未知循環(huán)的次數(shù)而根據(jù)條件來決定是否循環(huán)時(shí),一般用while語(yǔ)句。while語(yǔ)句的基本形式為: while(條件表達(dá)式) 循環(huán)體語(yǔ)句
其中:
(1)“條件表達(dá)式”稱為循環(huán)條件,可以是任意的數(shù)值、字符、關(guān)系表達(dá)式或邏輯表達(dá)式,非0表示真,0表示假?!皸l件表達(dá)式”必須用圓括號(hào)括起來。
(2)“循環(huán)體語(yǔ)句”可以是一條簡(jiǎn)單語(yǔ)句或一條復(fù)合語(yǔ)句。
while語(yǔ)句的執(zhí)行流程是:先計(jì)算表達(dá)式的值,判斷其是否為真(非0),若為真(非0),表示循環(huán)條件滿足,則執(zhí)行循環(huán)體,如此重復(fù),直至表達(dá)式的值為假(0),表示循環(huán)條件不滿足,退出循環(huán)執(zhí)行后繼語(yǔ)句。其流程圖如圖3-7所示。圖3-7while語(yǔ)句流程圖
【例3-7】編寫程序,求1+2+3+…+100的值。
分析:這是一個(gè)求累加和的問題。加數(shù)從1開始有規(guī)律地變化到100,每次遞增1,可以設(shè)置一個(gè)整型變量i來表示加數(shù),每循環(huán)一次將當(dāng)前加數(shù)累加后,該整型變量增1,表示下一個(gè)加數(shù),用變量sum存放每次累加的和,初始令sum=0。
思考:
(1)若循環(huán)體內(nèi)無語(yǔ)句i++;,則會(huì)出現(xiàn)什么情況?
(2)若將循環(huán)體內(nèi)語(yǔ)句sum=sum+i;?與i++;?調(diào)換一下次序,結(jié)果會(huì)如何?
(3)若循環(huán)體不用復(fù)合語(yǔ)句(即去掉循環(huán)體的花括號(hào)),程序是否正確?
(4)循環(huán)執(zhí)行結(jié)束后,循環(huán)變量i的值為多少?
【例3-8】輸入兩個(gè)自然數(shù),求最大公約數(shù)。
分析:通常采用輾轉(zhuǎn)相除法求兩個(gè)自然數(shù)的最大公約數(shù)。方法如下:
(1)對(duì)于已知的兩個(gè)數(shù)m、n,使得m>n;
(2)?m除以n得余數(shù)r;
(3)若r=0,則n即為最大公約數(shù),算法結(jié)束,否則令n->m,r->n,轉(zhuǎn)到第(2)步繼續(xù)執(zhí)行。
【例3-9】編寫程序?qū)⒁徽麛?shù)按逆序形式輸出。
分析:逆序輸出是指先輸出個(gè)位數(shù),再輸出十位數(shù)、百位數(shù)……,可以先通過n%10求出個(gè)位,然后將n縮小10倍(n=n/10)后求出新的個(gè)位,即原來的十位數(shù),再縮小10倍求得百位數(shù),依此類推,直到n等于0時(shí)為止。
3.3.2do-while語(yǔ)句
do-while語(yǔ)句的基本形式為:
do
循環(huán)體語(yǔ)句
while(條件表達(dá)式);
do-while語(yǔ)句的執(zhí)行流程是:先執(zhí)行循環(huán)體語(yǔ)句一次,然后判斷條件表達(dá)式是否成立,若為真(非?0),表示循環(huán)條件滿足,繼續(xù)執(zhí)行循環(huán)體語(yǔ)句,如此重復(fù),直至表達(dá)式的值為假(0),退出循環(huán)執(zhí)行后繼語(yǔ)句。其流程圖如3-8所示。圖3-8do-while語(yǔ)句流程圖
【例3-10】編寫程序,求1+3+5+…+99的值。
【例3-11】用公式?/4≈1-1/3+1/5-1/7+…求??的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。
分析:本題也是求累加和的問題,因此循環(huán)體中可用sum=sum+t這樣的求和表達(dá)式,其中sum表示累加的和,t是公式的某一項(xiàng)。關(guān)鍵問題是如何求出每一項(xiàng)t?首先考慮1+1/3+1/5+1/7+…相鄰兩項(xiàng)之間的關(guān)系,不難看出它們的分子都是1,分母是1,3,5,7,9…的奇數(shù)序列。若用變量i來存放分母的值,則每求和一次后i應(yīng)增加2;另外,每次累加項(xiàng)不是整數(shù),而是實(shí)數(shù),因此t=1.0/i,其中i=i+2。
下面再考慮每加一項(xiàng)后下一項(xiàng)符號(hào)的變化,可用單獨(dú)一個(gè)變量表示符號(hào),每次求下一項(xiàng)時(shí),原來項(xiàng)的符號(hào)乘?-1來實(shí)現(xiàn)符號(hào)變化。
最后確定循環(huán)條件:從上面求?的公式來看,根據(jù)題目要求可用每一項(xiàng)t的絕對(duì)值大于10-6來作為循環(huán)的條件。
3.3.3for語(yǔ)句
C語(yǔ)言中通常用for語(yǔ)句來實(shí)現(xiàn)已知循環(huán)次數(shù)的循環(huán)結(jié)構(gòu),當(dāng)然它也可以替代while語(yǔ)句或do-while語(yǔ)句實(shí)現(xiàn)循環(huán)次數(shù)不確定的情況。
for語(yǔ)句的基本形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語(yǔ)句
for語(yǔ)句的執(zhí)行流程是:
(1)先計(jì)算“表達(dá)式1”的值。
(2)再計(jì)算“表達(dá)式2”的值,并判斷其是否為真,若為真(非0),則執(zhí)行循環(huán)體語(yǔ)句;若為假(0),則跳出循環(huán),執(zhí)行for語(yǔ)句的后續(xù)語(yǔ)句。
(3)循環(huán)體語(yǔ)句執(zhí)行后,計(jì)算“表達(dá)式3”的值,然后轉(zhuǎn)到步驟(2)重復(fù)執(zhí)行。
其流程圖如圖3-9所示。圖3-9for語(yǔ)句流程圖
【例3-12】求n!,即計(jì)算1*2*3*…*n的值。
分析:求多個(gè)數(shù)累積與累加和的算法思想類似,只是要注意存放累積數(shù)的變量初值應(yīng)該為1。
【例3-13】輸出所有的水仙花數(shù)。水仙花數(shù)是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身,如153是一個(gè)水仙花數(shù),153=13+53+33。
分析:從100到999每個(gè)三位數(shù)依次判斷是否為水仙花數(shù),用一個(gè)循環(huán)變量表示該三位數(shù),每個(gè)三位數(shù)都拆分為個(gè)位、十位和百位三個(gè)數(shù)字,再比較三個(gè)數(shù)字的立方和是否等于該數(shù)本身。
3.3.4循環(huán)語(yǔ)句的嵌套
循環(huán)語(yǔ)句的嵌套是指在一個(gè)循環(huán)體語(yǔ)句內(nèi)又包含了一個(gè)完整的循環(huán)語(yǔ)句,內(nèi)嵌的循環(huán)體還可以再嵌套循環(huán),形成多重循環(huán)。在實(shí)際應(yīng)用中,三種循環(huán)語(yǔ)句可以自身嵌套,也可相互嵌套。但無論哪種嵌套形式,都要層次清楚,不能出現(xiàn)交叉。在編程或閱讀程序時(shí),要注意各層的循環(huán)變量的變化。
【例3-14】編寫程序,打印如圖3-10所示的圖形。圖3-10例3-14運(yùn)行結(jié)果圖
分析:這是一個(gè)按照規(guī)則變化的字符圖形,一共有4行,每行由空格和星號(hào)構(gòu)成,空格和星號(hào)的個(gè)數(shù)與行有關(guān):每行前面的空格數(shù)按行減少,每行后面的星號(hào)按行增加。
思考:如何輸出如圖3-11所示的菱形?圖3-11菱形的字符圖形
打印字符圖形的一般方法是:
(1)先分割圖形,將有共同規(guī)律的圖形或上下對(duì)稱的圖形作為一個(gè)兩重循環(huán)可打印的部分,從上到下依次打印各部分圖形。其中外循環(huán)變量代表行,內(nèi)循環(huán)變量代表列。
(2)圖形的每行都是由一組或若干組空格字符、非空格字符和一個(gè)回車組成,重要的是找到字符數(shù)與行號(hào)之間的關(guān)系。
【例3-15】百元買百雞問題。現(xiàn)有100元,要求買100只雞。假定母雞每只3元,公雞每只2元,小雞每只5角。編程列出所有可能的購(gòu)雞方案。
分析:設(shè)母雞、公雞、小雞的數(shù)量分別為x、y、z,根據(jù)題目要求,列出方程組:
其中包括3個(gè)未知數(shù),2個(gè)方程。此題有若干個(gè)解,可采用試湊法(也稱為窮舉法)來實(shí)現(xiàn),將可能出現(xiàn)的各種情況一一羅列測(cè)試,判斷是否滿足條件。
可用如下兩種方法實(shí)現(xiàn):
方法一利用了三重循環(huán)分別表示三只雞的數(shù)量,考慮了所有的購(gòu)雞情況,最內(nèi)層的循環(huán)體一共執(zhí)行了1000000次;而方法二進(jìn)行了優(yōu)化,因?yàn)槿浑u總數(shù)為100只,若已知母雞和公雞的數(shù)量就可以通過100-x-y獲得小雞的數(shù)量,同時(shí)根據(jù)總共價(jià)格只有100元,可以得到母雞的數(shù)量不會(huì)超過33只,公雞的數(shù)量也不會(huì)超過50只,這樣最內(nèi)層循環(huán)體只需執(zhí)行1734次。運(yùn)行結(jié)果如圖3-12所示。圖3-12例3-15運(yùn)行結(jié)果圖
3.4其他控制語(yǔ)句
3.4.1goto語(yǔ)句 goto語(yǔ)句的基本形式為: goto標(biāo)號(hào); … 標(biāo)號(hào):語(yǔ)句其中:“標(biāo)號(hào)”的命名規(guī)則同標(biāo)識(shí)符,表示goto語(yǔ)句的轉(zhuǎn)向入口;“標(biāo)號(hào):”后的語(yǔ)句是任意C語(yǔ)言語(yǔ)句。goto語(yǔ)句通常與if語(yǔ)句一起配合使用,表示滿足條件時(shí)將程序的執(zhí)行流程轉(zhuǎn)到標(biāo)號(hào)所指定的語(yǔ)句處。
【例3-16】用goto語(yǔ)句實(shí)現(xiàn)1+2+3+…+n,n的值從鍵盤輸入。
3.4.2break語(yǔ)句和continue語(yǔ)句
程序中有時(shí)需要在滿足某種條件時(shí)改變循環(huán)的正常流程,因此,C語(yǔ)言提供了break和continue兩種循環(huán)轉(zhuǎn)移語(yǔ)句。
1.break語(yǔ)句
break語(yǔ)句有兩個(gè)作用:一是用于switch語(yǔ)句中,出現(xiàn)在case子句后,強(qiáng)制終止switch語(yǔ)句的執(zhí)行,退出switch結(jié)構(gòu),保證多分支情況的正確執(zhí)行;二是用于循環(huán)語(yǔ)句中,強(qiáng)制終止本層循環(huán),轉(zhuǎn)到循環(huán)的后續(xù)語(yǔ)句執(zhí)行。其流程圖如圖3-13所示。圖3-13break語(yǔ)句流程圖
【例3-17】從鍵盤輸入一個(gè)正整數(shù),判斷它是否為素?cái)?shù)。
分析:素?cái)?shù)是指大于1,且除了1和它本身以外,不能被其他任何數(shù)整除的數(shù)。為了判斷某數(shù)m是否為素?cái)?shù),最簡(jiǎn)單的方法是用2~m-1中的數(shù)逐個(gè)去除m,看是否能整除,只要能被其中某個(gè)數(shù)整除,m就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建師范大學(xué)《社會(huì)學(xué)概論》2021-2022學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《環(huán)境生態(tài)工程》2021-2022學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《地理語(yǔ)言學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 第14章 因子分析1統(tǒng)計(jì)學(xué)原理課件
- 中國(guó)高血壓防治指南關(guān)于高血壓急癥的解讀
- 深度報(bào)文檢測(cè)技術(shù)Comware V7 DPI
- 油田動(dòng)土作業(yè)安全管理實(shí)施細(xì)則
- 教研活動(dòng)記錄(班級(jí)環(huán)創(chuàng)及擺布)
- 2024年太原客運(yùn)駕駛員考試試題答案解析
- 2024年防城港A1客運(yùn)從業(yè)資格證
- 中建八局項(xiàng)目管理策劃方案
- 江西省2022年初中學(xué)業(yè)水平考試語(yǔ)文試題參考答案
- 幼兒園大班科學(xué)《筷子架橋》課件
- 法國(guó)疫情政府措施
- 神話故事燧人鉆木取火
- 兒童心理危機(jī)評(píng)估的特殊考慮
- 少年模擬法庭活動(dòng)方案
- 食品加工與檢驗(yàn)實(shí)訓(xùn)室建設(shè)方案
- 酶制劑行業(yè)發(fā)展趨勢(shì)報(bào)告
- 廚房安全協(xié)議書
- 延續(xù)性護(hù)理干預(yù)在神經(jīng)外科患者中的應(yīng)用效果觀察
評(píng)論
0/150
提交評(píng)論