版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章循環(huán)結(jié)構(gòu)4.1循環(huán)結(jié)構(gòu)的要素4.2循環(huán)語句4.3循環(huán)嵌套4.4流程轉(zhuǎn)移控制語句4.5循環(huán)結(jié)構(gòu)的綜合示例本章小結(jié)
4.1循環(huán)結(jié)構(gòu)的要素
循環(huán)結(jié)構(gòu)就是用來處理需要重復(fù)處理的問題的,所以循環(huán)結(jié)構(gòu)又稱為重復(fù)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)有3個要素:循環(huán)控制變量、循環(huán)體和循環(huán)條件。
1.循環(huán)控制變量
循環(huán)控制變量通常用于控制循環(huán)的次數(shù)和進程。它在循環(huán)開始前被初始化,在循環(huán)過程中會發(fā)生變化,并且循環(huán)條件通常會依賴于這個變量的值。在for循環(huán)中,控制變量的初始化、條件檢查和變量更新通常在循環(huán)語句的頭部明確給出。
2.循環(huán)體
循環(huán)體包含了每次循環(huán)迭代時需要執(zhí)行的代碼塊。只要循環(huán)條件為真,循環(huán)體內(nèi)的代碼就會被執(zhí)行。循環(huán)體可以是一個簡單的語句或一個復(fù)雜的代碼塊,包括更多的控制流語句,如條件判斷、嵌套循環(huán)等。
3.循環(huán)條件
循環(huán)條件是一個邏輯表達式,其結(jié)果決定了循環(huán)是否繼續(xù)執(zhí)行。在每次循環(huán)迭代開始前(while和for循環(huán))或結(jié)束時(do-while循環(huán))檢查這個條件。如果條件為真(即表達式結(jié)果非0),則循環(huán)繼續(xù)執(zhí)行;如果條件為假(即表達式結(jié)果為0),則循環(huán)結(jié)束,控制流轉(zhuǎn)移到循環(huán)結(jié)構(gòu)后的下一條語句。
循環(huán)有兩種:無限循環(huán)和有限循環(huán)。無限循環(huán),如地球繞太陽的轉(zhuǎn)動或晝夜的連續(xù)交替,理論上永無止境。有限循環(huán),在滿足特定條件后便會停止,比如在處理完一個班級里所有50名學(xué)生的績點計算之后循環(huán)停止。
循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、分支結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。因此,熟練掌握循環(huán)結(jié)構(gòu)的概念及使用方法是程序設(shè)計最基本的要求。
4.2循環(huán)語句
循環(huán)語句是一種在編程中使用的語句,它允許程序重復(fù)執(zhí)行一段代碼多次,直到滿足某個條件為止。C語言中提供for、while、do-while這三種循環(huán)控制語句來實現(xiàn)循環(huán)結(jié)構(gòu)。
4.2.1for語句
1.?for語句的一般形式
for語句的一般形式為
for(表達式1;表達式2;表達式3)
循環(huán)體;
循環(huán)體;
其中:表達式1可以是賦值表達式、逗號表達式或函數(shù)調(diào)用表達式,它是循環(huán)控制的初始化部分,為循環(huán)中所使用的變量賦初值,即為循環(huán)作準(zhǔn)備;表達式2通常是關(guān)系表達式或邏輯表達式,它是循環(huán)條件,循環(huán)體反復(fù)執(zhí)行多次,必須在循環(huán)條件滿足的情況下(即表達式2的值非0)才能進行,否則循環(huán)終止;表達式3是賦值表達式或算術(shù)表達式,它使循環(huán)變量的值或循環(huán)條件得到修改,使循環(huán)只能進行有限次;循環(huán)體是循環(huán)結(jié)構(gòu)中反復(fù)執(zhí)行的語句,它可以是空語句(單獨用分號表示的一條語句)、單語句或復(fù)合語句。
2.?for語句的執(zhí)行過程
for語句的執(zhí)行過程如下:
(1)計算表達式1。
(2)判斷表達式2,若其值非0,則執(zhí)行第(3)步;若為0,則執(zhí)行第(6)步。
(3)執(zhí)行循環(huán)體。
(4)計算表達式3。
(5)跳轉(zhuǎn)到第(2)步繼續(xù)執(zhí)行。
(6)終止循環(huán),執(zhí)行for語句后的下一條語句。
for語句的執(zhí)行流程如圖4-1所示。
圖4-1for語句的執(zhí)行流程
3.?for語句的說明
for語句的使用說明如下:
(1)在for語句中3個表達式都可以缺省,但其中的兩個分號不可省。例如,下面的語句是正確的:
for(;;)
①若表達式1缺省,則必須將表達式1作為語句安排在for語句之前。如例4-1中的語句
for(s=0,n=1;n<=100;n++)
可改成
s=0;
n=1;
for(;n<=100;n++)
②若表達式2缺省,則系統(tǒng)默認循環(huán)條件為真(非0值),此時,如果不在循環(huán)體中加其他語句進行控制,循環(huán)將無限制進行下去,即出現(xiàn)死循環(huán)。如將例4-1中的循環(huán)語句改成
for(s=0,n=1;;n++)
s=s+n;
則會出現(xiàn)死循環(huán)。
③若表達式3缺省,可將它的語句放在循環(huán)體的最后。如可將例4-1中的循環(huán)語句改成
for(s=0,n=1;n<=100;)
{
s=s+n;
n++;
}
(2)若循環(huán)體中有多個語句,則循環(huán)體一定要用花括號括起來,以復(fù)合語句形式出現(xiàn),且循環(huán)體中的變量在每一次循環(huán)過程中其值一般來說是不相同的。
如例4-1中,第一次循環(huán),s的值是1,n的值是1;第二次循環(huán),s的值是3,n的值是2。
(3)循環(huán)體可以為空語句,但必須有分號(即循環(huán)為空語句)。
(4)要注意循環(huán)終止后循環(huán)變量的值,一般來講該值是循環(huán)變量最后一次循環(huán)值加步長。如例4-1中循環(huán)變量終止后n的值為100+1,即101。
4.程序舉例
例4-2判斷正整數(shù)x是否為素數(shù)。
解題思路素數(shù)是指除1和本身之外不能被其他數(shù)整除的數(shù)。設(shè)一個標(biāo)志性變量flag,如果其值等于0,則x不為素數(shù);如果其值等于1,則x為素數(shù)。先設(shè)flag?=?1(即假設(shè)x為素數(shù)),另設(shè)變量n由2變化到x?-?1,接著判斷x是否能被n整除,只要有一個n值能使x被整除,則令flag=0。
N-S圖如圖4-2所示圖4-2例4-2的N-S圖
例4-3從鍵盤輸入任意兩個正整數(shù)x和y,求出這兩數(shù)的最大公因子。
解題思路首先輸入兩個正整數(shù),判斷其大小,大的數(shù)放在x中,小的數(shù)放在y中。其次設(shè)r為余數(shù),x與y的關(guān)系可寫為x?=?ky?+?r,由于x與y有公因子f,因此r中必有公因子f。這樣求大的數(shù)x與y的公因子,就可以轉(zhuǎn)化為求小的數(shù)y與r的公因子f。這就是輾轉(zhuǎn)相除法。當(dāng)r?=?0時,y值為最大公因子。
N-S圖如圖4-3所示,
圖4-3例4-3的N-S圖
例4-4輸出斐波那契數(shù)列的前20項之值。
解題思路設(shè)f0、f1、f2是數(shù)列中的3個數(shù),且有如下關(guān)系:f2?=?f1?+?f0。在循環(huán)計算過程中,始終使f1、f0指向兩個相加的相鄰數(shù),f2始終為新計算出的和值。
4.2.2while語句
1.?while語句的一般形式
while語句是一種當(dāng)型循環(huán)語句,即先判斷條件,后執(zhí)行循環(huán)體。while語句的一般形式為
while(表達式)
循環(huán)體;
其中:圓括號中的表達式一般是關(guān)系表達式、邏輯表達式或算術(shù)表達式,運算結(jié)果是一個邏輯值,或為真(非0),或為假(0),它是循環(huán)控制的條件;循環(huán)體是循環(huán)反復(fù)執(zhí)行的語句,它可以是空語句、單語句或復(fù)合語句。
2.?while語句的執(zhí)行過程
首先計算和判斷表達式的值,如果表達式的值為“真”(非0),則執(zhí)行循環(huán)體;然后程序轉(zhuǎn)回去計算和判斷表達式的值,當(dāng)表達式的值為“假”(0)時,終止while循環(huán),繼續(xù)執(zhí)行while語句后的下一條語句。
其N-S圖如圖4-4所示。圖4-4while語句的N-S圖
3.程序舉例
例4-5求10個數(shù)(實數(shù))中的最大數(shù)。
解題思路設(shè)存放最大數(shù)的變量為max。先輸入第一個數(shù),并將其值賦給max。然后輸入第二個數(shù),將其與當(dāng)前max比較,如果輸入的數(shù)大于max,則將max更新為當(dāng)前最大數(shù)。接著輸入第三個數(shù)、第四個數(shù)……
N-S圖如圖4-5所示
圖4-5例4-5的算法N-S圖
例4-6用while語句求s?=?1?+?2?+?3?+?…?+?100。
解題思路首先s賦初值0,被加數(shù)n賦初值1,將n的值(1)累加到s中;然后將n加1后的值(2)累加到s中。這樣,n的值不斷加1并被累加到s中,直到將100也累加到s中為止,此時s中的值即為所求累加和。
4.2.3do-while語句
1.?do-while語句的一般形式
do-while語句的一般形式為
do
{
循環(huán)體;
}while(表達式);
2.?do-while語句的執(zhí)行過程
do-while語句的作用是,首先無條件地執(zhí)行循環(huán)體一次(無論表達式的值是否為0),然后計算和判斷表達式的值,若表達式的值為“真”(非0),則程序轉(zhuǎn)回去反復(fù)執(zhí)行循環(huán)體,直到表達式的值為“假”(0),這時終止do-while語句,繼續(xù)執(zhí)行do-while語句后的下一條語句。do-while語句的N-S圖如圖4-6所示。圖4-6do-while語句的N-S圖
3.程序舉例
例4-7求12?+?22?+?32?+?…?+?n2?≤?10?000的最大n值。
解題思路定義累加和變量s和正整數(shù)n。當(dāng)s小于或等于10?000的值為真時輸出n?-?1。
N-S圖如圖4-7所示圖4-7例4-7的N-S圖
例4-8求一個正整數(shù)(該數(shù)小于65535)的逆序數(shù)。
解題思路對于x的逆序數(shù),按順序分離它的每個數(shù)位t,設(shè)變量newd保存逆序數(shù),初始值為0,按表達式“newd=newd*10+t”將t累加到newd變量中,則可實現(xiàn)轉(zhuǎn)換。
例4-9用牛頓迭代法求方程3x3?-?4x2?+?3x?-?6?=?0在1.5附近的根,要求絕對值誤差小于1E-5,并輸出迭代次數(shù)。
解題思路牛頓迭代法實際上是根據(jù)曲線f(x)的切線與x軸的交點來求非線性方程的近似解,其迭代公式為
x?=?x0?-?f(x0)?/?f1(x0)
其中f1(x0)是f(x)的導(dǎo)函數(shù)在x0點的值。
4.2.4三種循環(huán)的比較
while循環(huán)和do-while循環(huán)由循環(huán)控制變量、循環(huán)條件和循環(huán)體組成,循環(huán)體中包含需要反復(fù)執(zhí)行的操作和循環(huán)控制變量值的修改語句。而for語句則在它的一般形式中有4個固定位置,用4個表達式表示,其結(jié)構(gòu)更加簡潔。
while循環(huán)和for循環(huán)是先判斷循環(huán)條件,后執(zhí)行循環(huán)體,當(dāng)?shù)谝淮闻袛嘌h(huán)條件不滿足時,循環(huán)體一次也不執(zhí)行,稱為當(dāng)型循環(huán);do-while循環(huán)是先執(zhí)行循環(huán)體一次,后判斷循環(huán)條件,所以循環(huán)體至少執(zhí)行一次,稱為直到型循環(huán)。
4.3循環(huán)嵌套
如果一個循環(huán)完全包含在另一個循環(huán)的循環(huán)體中,那么這樣的結(jié)構(gòu)稱為循環(huán)嵌套。內(nèi)嵌的循環(huán)中還可以再嵌套循環(huán),這稱為多重循環(huán)。三種循環(huán)控制語句for、while、do-while可以互相嵌套、自由組合。
例4-10求1~1000中的回文數(shù)(正讀和反讀相同的整數(shù))的個數(shù)。
解題思路回文數(shù)是正讀和反讀相同的整數(shù),即該數(shù)和它的逆序數(shù)相等。
例4-11求2~1000中所有素數(shù)的個數(shù)及這些素數(shù)的和。
解題思路判斷一個數(shù)x是否為素數(shù),在例4-2中有詳細做法,這里只需要遍歷判斷2~1000的每個數(shù)是否為素數(shù)即可。
二重循環(huán)的執(zhí)行過程是:外循環(huán)執(zhí)行一次,內(nèi)循環(huán)執(zhí)行一遍,之后,跳轉(zhuǎn)到外循環(huán),若外循環(huán)條件滿足,則重復(fù)執(zhí)行一遍內(nèi)循環(huán),如此反復(fù);當(dāng)外循環(huán)條件不滿足時,結(jié)束整個循環(huán)。通俗地說,執(zhí)行時由外循環(huán)進入內(nèi)循環(huán),退出則相反,由內(nèi)循環(huán)退至外循環(huán),直到外循環(huán)結(jié)束時才結(jié)束整個循環(huán)嵌套。
循環(huán)嵌套可以有效解決復(fù)雜問題,但在使用循環(huán)嵌套時,要注意以下幾點:
(1)使用花括號明確定義每個循環(huán)體。
(2)區(qū)分各層循環(huán)的控制變量名。
(3)保持清晰的縮進層次。
(4)嚴(yán)格遵守循環(huán)的包含關(guān)系。
(5)循環(huán)要進行初始化
4.4流程轉(zhuǎn)移控制語句
在C語言中,流程轉(zhuǎn)移控制是指通過特定的語句改變程序的執(zhí)行流程。主要的流程轉(zhuǎn)移控制語句有break、continue等語句,這些控制語句允許程序根據(jù)條件跳過某些代碼的執(zhí)行或提前退出循環(huán),使得代碼的邏輯更加靈活。
4.4.1break語句
break語句經(jīng)常放在循環(huán)語句的循環(huán)體中,且通常和if語句一起連用。break語句的一般形式為
break;
其作用是:在滿足一定條件時,提前退出本層循環(huán)(不管循環(huán)條件是否成立),使程序流程轉(zhuǎn)向該循環(huán)結(jié)構(gòu)后的下一條語句。break語句示例如圖4-8所示。圖4-8break語句示例
例4-13求2~1000中超級素數(shù)的個數(shù)。
解題思路超級素數(shù)指一個素數(shù)從低位到高位依次去掉一位數(shù)后剩下的數(shù)還是素數(shù)。判斷一個數(shù)x是否為素數(shù),在例4-2中有詳細介紹,若x是素數(shù),則去掉x的一個數(shù)位,繼續(xù)判斷x是否為素數(shù)。
4.4.2continue語句
continue語句的一般形式為
continue;
其作用是:提前結(jié)束本次循環(huán),即跳過循環(huán)體中某些還沒有被執(zhí)行的語句,開始新的一次循環(huán)。continue語句示例如圖4-9所示,執(zhí)行循環(huán)體中的continue時,提前結(jié)束本次循環(huán),即循環(huán)體中continue后的語句不執(zhí)行,接著進行下一次循環(huán)操作。圖4-9continue語句示例
例4-14從鍵盤輸入10個不為0的整數(shù),統(tǒng)計其中負數(shù)的個數(shù),并求所有正數(shù)的平均值。
解題思路程序中定義的變量count用于統(tǒng)計負數(shù)個數(shù);變量avg在循環(huán)結(jié)構(gòu)中用于統(tǒng)計正數(shù)的和,循環(huán)結(jié)束后用于計算平均值,
4.5循環(huán)結(jié)構(gòu)的綜合示例
例4-15祖沖之一生鉆研自然科學(xué),其主要貢獻在數(shù)學(xué)、天文歷法和機械制造三個方面。他在劉徽開創(chuàng)的探索圓周率的精確方法基礎(chǔ)上,首次將圓周率精算到小數(shù)點后第7位,即在3.1415926和3.1415927之間。他提出的“祖率”對數(shù)學(xué)的研究具有重大貢獻。請利用級數(shù)展開式求π的近似值,直到某一項的值小于10-8為止。
解題思路這是一個累加求和問題,但這里的循環(huán)次數(shù)是未知的,只能使用條件控制的循環(huán)來實現(xiàn)。由于控制循環(huán)結(jié)束的條件是累加的最后一項的絕對值小于10-8,因此循環(huán)繼續(xù)的條件是累加的最后一項的絕對值大于或等于10-8。又由于累加項是由分子和分母兩部分組成的,因此累加項的構(gòu)成規(guī)律為
term=sign/n
由于相鄰累加項的符號是正負交替變化的,因此可以令分子sign按+1,-1,+1,-1,…交替變化,這可通過反復(fù)取sign自身的相反數(shù)再重新賦值給自己(即sign=-sign)的方法來實現(xiàn),注意sign需初始化為1。分母n則按1,3,5,7,…即每次遞增2變化,這可通過n=n+2來實現(xiàn),注意n也需初始化為1。此外,還要設(shè)置一個計數(shù)器變量count來統(tǒng)計累加的項數(shù)。count需初始化為0。在循環(huán)體中每累加一項,count的值就增1。
例4-16打印如下大小可變的菱形圖案(下面菱形的大小是7):
解題思路菱形的大小size其實就是中間行中“*”號的個數(shù),也是整個菱形的行數(shù),其值必須是奇數(shù)。問題的關(guān)鍵之一是如何確定每行中“*”號的個數(shù)。經(jīng)過分析得知:當(dāng)行數(shù)i(假設(shè)最上面的一行為第1行)≤(size?+?1)/2時,該行上的“*”號個數(shù)為“n=2*i-1”,否則“n=2*(size-i+1)-1”。問題的關(guān)鍵之二是如何確定每行顯示的第一個“*”號的位置,也就是顯示第一個*號之前應(yīng)顯示多少個空格。經(jīng)過分析得知:每行應(yīng)顯示的空格數(shù)為m=(size-n)/2個。
例4-17我國古代數(shù)學(xué)家張丘建在《算經(jīng)》一書中曾提出過著名的“百錢買百雞”問題。該問題簡述如下:公雞5文錢一只,母雞3文錢一只,小雞3只一文錢,用100文錢買100只雞,其中公雞、母雞、小雞都必須要有。問:公雞、母雞、小雞要買多少只剛好花去100文錢?
解題思路設(shè)公雞、母雞、小雞分別為x、y、z,依題意列出方程組x?+?y?+?z?=?100,5x?+?3y?+?z/3?=?100,此題可采用窮舉法求解。因100文錢買公雞最多可買20只,買母雞最多可買33只,故x從0變化到20,y從0變化到33,而z?=?100?-?x?-?y,只要判斷5x?+?
3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年叉車師傅證考試題庫及答案一套
- 2026年叉車技能培訓(xùn)考試題庫及參考答案1套
- 2026年叉車檢修工考試試題庫及完整答案1套
- 2026年叉車考試題庫模擬理論及完整答案一套
- 2025-2030亞洲光纖光纜技術(shù)領(lǐng)域發(fā)展現(xiàn)狀市場競爭研判與投資潛力分析評估報告
- 2025-2030丹麥醫(yī)學(xué)設(shè)備行業(yè)市場供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030東歐農(nóng)產(chǎn)品出口產(chǎn)業(yè)發(fā)展趨勢與市場需求前瞻研究報告
- 2025-2030丙酸鈣分析儀行業(yè)市場應(yīng)用分析投資前景規(guī)劃研究評估報告
- 中國集裝箱涂料氣候適應(yīng)性研發(fā)及一帶一路沿線港口需求分析報告
- 2026年叉車師傅考試題庫有答案
- 煙臺交通集團有限公司管理培訓(xùn)生招聘參考題庫必考題
- 倉儲安全檢查標(biāo)準(zhǔn)及執(zhí)行流程
- 2025FIGO指南:肝病與妊娠解讀課件
- 法律法規(guī)新勞動法解讀與實務(wù)操作指南
- 惡劣天氣應(yīng)急處理演練方案
- 公安系統(tǒng)心理減壓課件
- 肺癌腫瘤健康宣教
- 辯論賽基礎(chǔ)知識
- 2025年抖音直播年度生態(tài)報告
- 2025年一級造價工程師《建設(shè)工程技術(shù)與計量(土建)》真題及答案解析
- 2026年演出經(jīng)紀(jì)人考試題庫500道新版
評論
0/150
提交評論