版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章順序與分支結構3.1程序結構框圖3.2順序結構3.3二分支結構3.4多分支結構3.5分支結構的綜合示例本章小結
3.1程序結構框圖
3.1.1算法的表示程序設計的關鍵是算法。那什么是算法?算法就是求解實際問題的步驟。有了正確有效的算法,就可以用計算機語言編寫程序,解決實際問題。算法可采用自然語言、流程圖或N-S圖來描述。
1.自然語言描述
例3-1從鍵盤輸入3個數,按由小到大的順序輸出。
解題思路從鍵盤輸入的3個數值必須用3個變量來保存,設3個變量為x、y、z。3個數按由小到大的順序輸出,則必須將數據兩兩比較,在比較的過程中,始終保持變量x最小,變量z的值最大,如果不滿足此條件,則將比較的兩變量互相交換其值。設中間變量為t。
算法步驟如下:
①輸入3個數,其值分別賦給3個變量x、y、z;
②?x、y進行比較,如果x大于y,通過t交換x、y的值;
③?x、z進行比較,如果x大于z,通過t交換x、z的值;
④?y、z進行比較,如果y大于z,通過t交換y、z的值;
⑤按x、y、z的順序輸出其變量的值。
2.流程圖
流程圖是一種傳統的算法描述方法,它用幾種不同的幾何圖來代表不同性質的操作,用流程線來指示算法的執(zhí)行方向。用流程圖表示的算法簡單直觀,容易轉化成相應的語言
程序。
圖3-1所示為國際標準化組織(InternationalStandardOrganization,ISO)規(guī)定的一些常用流程圖符號。這些符號已為各國普遍采用。圖3-1常用的流程圖符號
例3-2將例3-1中的算法用流程圖表示。
流程圖如圖3-2所示。圖3-2例3-1的算法流程圖
3.?N-S圖
N-S圖是程序算法的另一種圖形表示,它是由美國人I.Nassi和B.Shneiderman共同提出來的,其依據是:因為任何算法都是由順序結構、分支結構、循環(huán)結構這3種結構所組成的,所以可以不需要各結構之間的流程線,全部算法寫在一個矩形框內,矩形框內由順序、分支、循環(huán)3種結構組成。三種基本結構的N-S圖如圖3-3所示。圖3-33種基本結構的N-S圖
例3-3將例3-1中的算法用N-S圖表示。
N-S圖如圖3-4所示。圖3-4例3-1的N-S圖
3.1.2結構化程序設計
結構化程序設計的基本思想是:任何程序都由3種基本結構組成,這3種基本結構如下:
(1)順序結構:按照語句出現的先后順序依次執(zhí)行的。
(2)分支結構:根據給定條件進行判斷,選擇其中的一個分支執(zhí)行。
(3)循環(huán)結構:根據某一個條件成立與否來決定是否重復執(zhí)行某一部分操作,反復執(zhí)行的部分稱為循環(huán)體。
循環(huán)結構有以下兩種類型:
①當型(while型)循環(huán)結構:當條件滿足時,重復執(zhí)行某一操作。
②直到型循環(huán)結構:先執(zhí)行循環(huán)體操作,再判斷條件,如果條件滿足,則繼續(xù)執(zhí)行循環(huán)體操作,直到條件不滿足時,才退出循環(huán),繼續(xù)執(zhí)行循環(huán)體后面的語句。
由上面3種基本結構,可以看出結構化程序設計具有以下特點:
①只有一個入口和一個出口;
②程序中不能有無窮循環(huán)(死循環(huán));
③程序中不能有在任何條件下都執(zhí)行不到的語句(死語句)。
3.1.3復合語句
將若干語句用一對花括號括起來的語句,稱為復合語句。如
{
y=x++;
printf("%d%d",x,y);
}
復合語句在邏輯上相當于一個單一語句,在流程控制結構,如if結構、for結構、while結構中經常用到。復合語句在書寫時采用向右縮進的方式,語句組相對于花括號向右縮進一個制表位。
3.2順序結構
順序結構是最基本、最簡單的程序結構。順序結構中,各語句按照代碼的書寫順序,自上而下地逐條執(zhí)行,沒有任何條件判斷或循環(huán)操作,每個語句都被執(zhí)行一遍,且只執(zhí)行一次。
例3-4已知長方形的長和寬,計算其周長和面積。
解題思路輸入長方形的長和寬并用兩個變量保存,設兩個變量分別為length、width,然后利用公式計算長方形的周長和面積,周長和面積也分別用兩個變量perimeter、area
表示。
算法步驟如下:
(1)輸入兩個數,其值分別賦給length、width;
(2)根據公式計算長方形的周長,并將其值賦給perimeter;
(3)根據公式計算長方形的面積,并將其值賦給area;
(4)輸出perimeter和area。
3.3二分支結構
二分支結構就是判定給定的條件是否滿足,根據判定的結果(真或假)決定執(zhí)行給出的兩種操作之一。用if語句可以構成分支結構,if語句可以根據不同的條件,選擇不同的執(zhí)行語句。先來看這樣一個問題,計算分段函數:
求解問題的流程如下:
(1)輸入x;
(2)如果x≥0,則y=x?-?5;否則y=5/x;
(3)輸出y的值。
要完成該問題的計算,顯然程序的流程必須由x的值確定。像這樣的流程(根據某個變量或表達式的值做出判定,以決定執(zhí)行某個模塊和跳過某個模塊),就需要選擇語句。
3.3.1if-else二分支選擇語句
若表達式為非0(即條件判斷為真),則執(zhí)行if后面的語句1,而不執(zhí)行語句2;否則(即條件判斷為假),越過語句1,執(zhí)行else后面的語句2。if-else的N-S圖如圖3-5所示。其中的語句1、語句2都是單一的邏輯語句,若語句1、語句2不是單一的邏輯語句,則必須用花括號括起來形成復合語句。
在條件控制語句中,人們習慣把圓括號內的表達式叫作條件,其中if和else是關鍵字。
圖3-5if-else的N-S圖
使用if-else語句時的注意事項如下:
(1)?if語句中的條件一般是條件表達式或邏輯表達式,它們必須放在圓括號內。
(2)因為C語言中沒有邏輯型變量,這里只是測試表達式的值是否為0,所以可以將
if(表達式!=0)
簡化為
if(表達式)
(3)?if或else后的語句可以是一個簡單語句,也可以是由幾個簡單語句組成的復合語句。若是復合語句,則必須用花括號括起來。
(4)要注意賦值運算符(=)與關系運算符(==)的區(qū)別。
幾種常見的if表達式的寫法如下:
①?if(!a):判斷變量a的值是否為0。
②?if(x>=0&&x<=10):當x位于區(qū)間[0,10]上,邏輯表達式為真。
③?if(x>0,y>10):括號內為逗號表達式,故最后一個表達式(y>10)的值是整個條件表達式的值。若表達式y>10成立,則if的條件為真。
④?if(x>0||y<10):只要一個關系表達式成立,if的條件為真。
例3-5求兩個整數x、y中較大的數,并賦給變量max。
解題思路x、y值由輸入函數輸入,根據其大小進行判斷,較大的數賦給max變量。其N-S圖如圖3-6所示。圖3-6例3-5的N-S圖
3.3.2不平衡if結構
缺少else分支的二分支結構,稱為不平衡if結構。不平衡if結構的基本形式如下:
if(表達式)語句;
若表達式為非0(即條件判斷為“真”),則執(zhí)行if后面的語句;否則(即條件判斷為“假”),順序執(zhí)行if語句的下一條語句。不平衡if結構的N-S圖如圖3-7所示。
圖3-7不平衡if結構的N-S圖
例3-6從鍵盤輸入3個整數,按由小到大的順序輸出。
解題思路輸入3個整數x、y、z,兩兩比較,始終保持x的值最小,z的值最大,不滿足此條件,則將其值進行交換。N-S圖如圖3-8所示。圖3-8例3-6的N-S圖
例3-7求一元二次方程ax2?+?bx?+?c?=?0(a不為0)的解。
解題思路對于任意輸入的3個數a、b、c(a不等于0),有這樣3種可能:
(1)若b2?-?4ac>0,則方程有兩個不相等的實根。
(2)若b2?-?4ac=0,則方程有兩個相等的實根。
(3)若b2?-?4ac<0,則方程有兩個復數根。
3.3.3if語句的嵌套
C語言允許if語句嵌套使用。通常,if語句的嵌套有兩種結構:不平衡if嵌套結構和多分支嵌套結構。本小節(jié)介紹不平衡if嵌套結構的內容,多分支嵌套結構的內容將在后面小節(jié)介紹。
在這種形式的if嵌套結構中,若表達式1為“假”,則跳過花括號中的所有語句,去執(zhí)行該復合語句下面的語句;若表達式1為“真”,則進一步去判斷表達式11,若表達式11也為“真”,則執(zhí)行語句11,然后越過else子句,去執(zhí)行該復合語句下面的語句,若表達式11為“假”,則跳過語句11,而去執(zhí)行語句12,然后去執(zhí)行該復合語句下面的語句。
其執(zhí)行流程的N-S圖如圖3-9所示。
圖3-9不平衡if嵌套結構的N-S圖
例3-8從鍵盤接收一整數x,判斷x是否含有因子5的正整數,如有,則輸出“YES”,否則輸出“NO”。
3.4多分支結構
3.4.1if-else多分支語句二分支if語句中,若二分支中的語句1或語句2也是一個分支結構,則整個結構稱為分支嵌套結構。采用多層嵌套可以實現多分支結構。
分支結構中,若表達式1的值不為0,則執(zhí)行語句1,然后越過所有的else子句,去執(zhí)行整個if語句的下一個語句。若表達式1的值為0,則判斷表達式2的值是否為0,若其值不為0,則執(zhí)行語句2,然后越過它下面的所有else子句,去執(zhí)行整個if語句下的語句;若表達式2的值為0,則再判斷下一個if語句的條件表達式。若表達式1,表達式2,…,表達式n的結果都為0,則執(zhí)行語句n+1。其執(zhí)行流程如圖3-12所示。
圖3-10多分支嵌套結構的流程
例3-9計算下列分段函數的值。
N-S圖如圖3-11所示。
圖3-11例3-9的算法N-S圖
在if嵌套語句中,應注意以下兩點。
(1)?else語句要有if語句與之匹配,在同一個模塊內,else總是與其前面最近的、沒有匹配過的if語句相匹配。
(2)?if后的表達式可以是關系表達式、邏輯表達式。if和else關鍵字后的語句可以是單語句,也可以是復合語句,這與單if語句相同。
例3-10從鍵盤輸入一學生成績,判斷學生成績等級。如果成績在90~100,等級為“A”;成績在80~89,等級為“B”;成績在70~79,等級為“C”;成績在60~69,等級為“D”;成績小于60,等級為“E”。
3.4.2switch語句
switch語句將一個表達式的值與多個常量表達式的值一一進行比較,如果相等,則與之相應的語句便會被執(zhí)行。
switch語句的一般形式如下:
其中,語句序列稱為switch語句的子語句;switch語句中的表達式稱為開關控制表達式。方括號內的語句可缺省。
switch語句的執(zhí)行過程如下:
(1)計算switch語句后面表達式的值。
(2)逐個比較表達式的值與case后面常量表達式的值是否相等。
(3)當表達式的值與常量表達式i的值相等時,就轉去執(zhí)行語句序列i的各個語句,若語句序列i后有break語句,則終止switch語句,繼續(xù)執(zhí)行整個switch語句后的下一條語句;當語句序列i后無break語句,則會順序執(zhí)行語句序列i+1,i+2,…,直到遇到break語句或語句序列n+1為止,然后繼續(xù)執(zhí)行整個switch語句后的下一條語句。如果沒有一個常量表達式的值與switch語句表達式的值相等,則執(zhí)行語句n+1后,繼續(xù)執(zhí)行整個switch語句后的下一條語句。
在不考慮break語句的情況下,switch語句一般形式的執(zhí)行流程如圖3-12所示。圖3-12switch語句一般形式的執(zhí)行流程圖
使用switch語句注意事項如下:
(1)?switch后面的表達式的值類型和常量表達式的值類型必須一致,且只能是整型、字符型或枚舉型。
(2)當表達式的值與某個case中的常量表達式的值進行匹配,若相等時,就執(zhí)行相應的case后的語句序列,直到遇到break語句或到達switch語句末尾(無break語句,則入口后的語句序列順序執(zhí)行)。若匹配不成功,則執(zhí)行default后的語句。default語句是可省的,如沒有default語句,所有的匹配不成功,則不執(zhí)行case中任何語句序列,程序繼續(xù)執(zhí)行整個switch語句后的下一條語句。
(3)多個連續(xù)的case語句可以共用一個語句序列。
(4)?case后的常量表達式的值不能相等。
(5)?break的作用是改變程序在switch結構中的執(zhí)行流程,將程序流程跳出switch語句,轉到整個switch語句后的下一條語句去執(zhí)行。
(6)?switch語句中允許嵌套switch語句,這稱為switch嵌套結構。
例3-11用switch語句完成從鍵盤輸入一學生成績,判斷學生成績等級。如果成績在90~100分,等級為A;成績在80~89分,等級為B;成績在70~79分,等級為C;成績在60~69分,等級為D;成績小于60分,等級為E。
3.5分支結構的綜合示例
例3-12從鍵盤輸入3個整數,按從小到大的順序輸出。N-S圖如圖3-13所示。
圖3-13例3-12的算法N-S圖
例3-13計算下面分段函數的值。
下面使用4種不同的方法實現上述計算,以展現C語言多分支結構的風格。
(1)使用不嵌套的if語句編程。
(2)使用嵌套的if語句編程。
(3)使用if-else形式編程。
(4)使用switch語句編程。
本章小結
C語言中,順序結構和分支結構是兩大基本結構。順序結構可確保程序按照既定順序執(zhí)行每條指令,是程序設計的基礎。本章首先介紹了程序結構框圖,如流程圖和N-S圖,然后介紹了順序結構,最后介紹了分支結構。分支結構中常用的if語句和switch語句,可使程序能夠根據不同條件選擇執(zhí)行路徑。if語句靈活,適用于處理復雜的條件判斷,而switch語句在處理多個簡單條件時更為高效。將順序結構和分支結構兩者結合使用,是C語言程序員必須掌握的核心技能。第4章循環(huán)結構4.1循環(huán)結構的要素4.2循環(huán)語句4.3循環(huán)嵌套4.4流程轉移控制語句4.5循環(huán)結構的綜合示例本章小結
4.1循環(huán)結構的要素
循環(huán)結構就是用來處理需要重復處理的問題的,所以循環(huán)結構又稱為重復結構。循環(huán)結構有3個要素:循環(huán)控制變量、循環(huán)體和循環(huán)條件。
1.循環(huán)控制變量
循環(huán)控制變量通常用于控制循環(huán)的次數和進程。它在循環(huán)開始前被初始化,在循環(huán)過程中會發(fā)生變化,并且循環(huán)條件通常會依賴于這個變量的值。在for循環(huán)中,控制變量的初始化、條件檢查和變量更新通常在循環(huán)語句的頭部明確給出。
2.循環(huán)體
循環(huán)體包含了每次循環(huán)迭代時需要執(zhí)行的代碼塊。只要循環(huán)條件為真,循環(huán)體內的代碼就會被執(zhí)行。循環(huán)體可以是一個簡單的語句或一個復雜的代碼塊,包括更多的控制流語句,如條件判斷、嵌套循環(huán)等。
3.循環(huán)條件
循環(huán)條件是一個邏輯表達式,其結果決定了循環(huán)是否繼續(xù)執(zhí)行。在每次循環(huán)迭代開始前(while和for循環(huán))或結束時(do-while循環(huán))檢查這個條件。如果條件為真(即表達式結果非0),則循環(huán)繼續(xù)執(zhí)行;如果條件為假(即表達式結果為0),則循環(huán)結束,控制流轉移到循環(huán)結構后的下一條語句。
循環(huán)有兩種:無限循環(huán)和有限循環(huán)。無限循環(huán),如地球繞太陽的轉動或晝夜的連續(xù)交替,理論上永無止境。有限循環(huán),在滿足特定條件后便會停止,比如在處理完一個班級里所有50名學生的績點計算之后循環(huán)停止。
循環(huán)結構是結構化程序設計的基本結構之一,它和順序結構、分支結構共同作為各種復雜程序的基本構造單元。因此,熟練掌握循環(huán)結構的概念及使用方法是程序設計最基本的要求。
4.2循環(huán)語句
循環(huán)語句是一種在編程中使用的語句,它允許程序重復執(zhí)行一段代碼多次,直到滿足某個條件為止。C語言中提供for、while、do-while這三種循環(huán)控制語句來實現循環(huán)結構。
4.2.1for語句
1.?for語句的一般形式
for語句的一般形式為
for(表達式1;表達式2;表達式3)
循環(huán)體;
循環(huán)體;
其中:表達式1可以是賦值表達式、逗號表達式或函數調用表達式,它是循環(huán)控制的初始化部分,為循環(huán)中所使用的變量賦初值,即為循環(huán)作準備;表達式2通常是關系表達式或邏輯表達式,它是循環(huán)條件,循環(huán)體反復執(zhí)行多次,必須在循環(huán)條件滿足的情況下(即表達式2的值非0)才能進行,否則循環(huán)終止;表達式3是賦值表達式或算術表達式,它使循環(huán)變量的值或循環(huán)條件得到修改,使循環(huán)只能進行有限次;循環(huán)體是循環(huán)結構中反復執(zhí)行的語句,它可以是空語句(單獨用分號表示的一條語句)、單語句或復合語句。
2.?for語句的執(zhí)行過程
for語句的執(zhí)行過程如下:
(1)計算表達式1。
(2)判斷表達式2,若其值非0,則執(zhí)行第(3)步;若為0,則執(zhí)行第(6)步。
(3)執(zhí)行循環(huán)體。
(4)計算表達式3。
(5)跳轉到第(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缺省,則系統默認循環(huán)條件為真(非0值),此時,如果不在循環(huán)體中加其他語句進行控制,循環(huán)將無限制進行下去,即出現死循環(huán)。如將例4-1中的循環(huán)語句改成
for(s=0,n=1;;n++)
s=s+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)體一定要用花括號括起來,以復合語句形式出現,且循環(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判斷正整數x是否為素數。
解題思路素數是指除1和本身之外不能被其他數整除的數。設一個標志性變量flag,如果其值等于0,則x不為素數;如果其值等于1,則x為素數。先設flag?=?1(即假設x為素數),另設變量n由2變化到x?-?1,接著判斷x是否能被n整除,只要有一個n值能使x被整除,則令flag=0。
N-S圖如圖4-2所示圖4-2例4-2的N-S圖
例4-3從鍵盤輸入任意兩個正整數x和y,求出這兩數的最大公因子。
解題思路首先輸入兩個正整數,判斷其大小,大的數放在x中,小的數放在y中。其次設r為余數,x與y的關系可寫為x?=?ky?+?r,由于x與y有公因子f,因此r中必有公因子f。這樣求大的數x與y的公因子,就可以轉化為求小的數y與r的公因子f。這就是輾轉相除法。當r?=?0時,y值為最大公因子。
N-S圖如圖4-3所示,
圖4-3例4-3的N-S圖
例4-4輸出斐波那契數列的前20項之值。
解題思路設f0、f1、f2是數列中的3個數,且有如下關系:f2?=?f1?+?f0。在循環(huán)計算過程中,始終使f1、f0指向兩個相加的相鄰數,f2始終為新計算出的和值。
4.2.2while語句
1.?while語句的一般形式
while語句是一種當型循環(huán)語句,即先判斷條件,后執(zhí)行循環(huán)體。while語句的一般形式為
while(表達式)
循環(huán)體;
其中:圓括號中的表達式一般是關系表達式、邏輯表達式或算術表達式,運算結果是一個邏輯值,或為真(非0),或為假(0),它是循環(huán)控制的條件;循環(huán)體是循環(huán)反復執(zhí)行的語句,它可以是空語句、單語句或復合語句。
2.?while語句的執(zhí)行過程
首先計算和判斷表達式的值,如果表達式的值為“真”(非0),則執(zhí)行循環(huán)體;然后程序轉回去計算和判斷表達式的值,當表達式的值為“假”(0)時,終止while循環(huán),繼續(xù)執(zhí)行while語句后的下一條語句。
其N-S圖如圖4-4所示。圖4-4while語句的N-S圖
3.程序舉例
例4-5求10個數(實數)中的最大數。
解題思路設存放最大數的變量為max。先輸入第一個數,并將其值賦給max。然后輸入第二個數,將其與當前max比較,如果輸入的數大于max,則將max更新為當前最大數。接著輸入第三個數、第四個數……
N-S圖如圖4-5所示
圖4-5例4-5的算法N-S圖
例4-6用while語句求s?=?1?+?2?+?3?+?…?+?100。
解題思路首先s賦初值0,被加數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),則程序轉回去反復執(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和正整數n。當s小于或等于10?000的值為真時輸出n?-?1。
N-S圖如圖4-7所示圖4-7例4-7的N-S圖
例4-8求一個正整數(該數小于65535)的逆序數。
解題思路對于x的逆序數,按順序分離它的每個數位t,設變量newd保存逆序數,初始值為0,按表達式“newd=newd*10+t”將t累加到newd變量中,則可實現轉換。
例4-9用牛頓迭代法求方程3x3?-?4x2?+?3x?-?6?=?0在1.5附近的根,要求絕對值誤差小于1E-5,并輸出迭代次數。
解題思路牛頓迭代法實際上是根據曲線f(x)的切線與x軸的交點來求非線性方程的近似解,其迭代公式為
x?=?x0?-?f(x0)?/?f1(x0)
其中f1(x0)是f(x)的導函數在x0點的值。
4.2.4三種循環(huán)的比較
while循環(huán)和do-while循環(huán)由循環(huán)控制變量、循環(huán)條件和循環(huán)體組成,循環(huán)體中包含需要反復執(zhí)行的操作和循環(huán)控制變量值的修改語句。而for語句則在它的一般形式中有4個固定位置,用4個表達式表示,其結構更加簡潔。
while循環(huán)和for循環(huán)是先判斷循環(huán)條件,后執(zhí)行循環(huán)體,當第一次判斷循環(huán)條件不滿足時,循環(huán)體一次也不執(zhí)行,稱為當型循環(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)體中,那么這樣的結構稱為循環(huán)嵌套。內嵌的循環(huán)中還可以再嵌套循環(huán),這稱為多重循環(huán)。三種循環(huán)控制語句for、while、do-while可以互相嵌套、自由組合。
例4-10求1~1000中的回文數(正讀和反讀相同的整數)的個數。
解題思路回文數是正讀和反讀相同的整數,即該數和它的逆序數相等。
例4-11求2~1000中所有素數的個數及這些素數的和。
解題思路判斷一個數x是否為素數,在例4-2中有詳細做法,這里只需要遍歷判斷2~1000的每個數是否為素數即可。
二重循環(huán)的執(zhí)行過程是:外循環(huán)執(zhí)行一次,內循環(huán)執(zhí)行一遍,之后,跳轉到外循環(huán),若外循環(huán)條件滿足,則重復執(zhí)行一遍內循環(huán),如此反復;當外循環(huán)條件不滿足時,結束整個循環(huán)。通俗地說,執(zhí)行時由外循環(huán)進入內循環(huán),退出則相反,由內循環(huán)退至外循環(huán),直到外循環(huán)結束時才結束整個循環(huán)嵌套。
循環(huán)嵌套可以有效解決復雜問題,但在使用循環(huán)嵌套時,要注意以下幾點:
(1)使用花括號明確定義每個循環(huán)體。
(2)區(qū)分各層循環(huán)的控制變量名。
(3)保持清晰的縮進層次。
(4)嚴格遵守循環(huán)的包含關系。
(5)循環(huán)要進行初始化
4.4流程轉移控制語句
在C語言中,流程轉移控制是指通過特定的語句改變程序的執(zhí)行流程。主要的流程轉移控制語句有break、continue等語句,這些控制語句允許程序根據條件跳過某些代碼的執(zhí)行或提前退出循環(huán),使得代碼的邏輯更加靈活。
4.4.1break語句
break語句經常放在循環(huán)語句的循環(huán)體中,且通常和if語句一起連用。break語句的一般形式為
break;
其作用是:在滿足一定條件時,提前退出本層循環(huán)(不管循環(huán)條件是否成立),使程序流程轉向該循環(huán)結構后的下一條語句。break語句示例如圖4-8所示。圖4-8break語句示例
例4-13求2~1000中超級素數的個數。
解題思路超級素數指一個素數從低位到高位依次去掉一位數后剩下的數還是素數。判斷一個數x是否為素數,在例4-2中有詳細介紹,若x是素數,則去掉x的一個數位,繼續(xù)判斷x是否為素數。
4.4.2continue語句
continue語句的一般形式為
continue;
其作用是:提前結束本次循環(huán),即跳過循環(huán)體中某些還沒有被執(zhí)行的語句,開始新的一次循環(huán)。continue語句示例如圖4-9所示,執(zhí)行循環(huán)體中的continue時,提前結束本次循環(huán),即循環(huán)體中continue后的語句不執(zhí)行,接著進行下一次循環(huán)操作。圖4-9continue語句示例
例4-14從鍵盤輸入10個不為0的整數,統計其中負數的個數,并求所有正數的平均值。
解題思路程序中定義的變量count用于統計負數個數;變量avg在循環(huán)結構中用于統計正數的和,循環(huán)結束后用于計算平均值,
4.5循環(huán)結構的綜合示例
例4-15祖沖之一生鉆研自然科學,其主要貢獻在數學、天文歷法和機械制造三個方面。他在劉徽開創(chuàng)的探索圓周率的精確方法基礎上,首次將圓周率精算到小數點后第7位,即在3.1415926和3.1415927之間。他提出的“祖率”對數學的研究具有重大貢獻。請利用級數展開式求π的近似值,直到某一項的值小于10-8為止。
解題思路這是一個累加求和問題,但這里的循環(huán)次數是未知的,只能使用條件控制的循環(huán)來實現。由于控制循環(huán)結束的條件是累加的最后一項的絕對值小于10-8,因此循環(huán)繼續(xù)的條件是累加的最后一項的絕對值大于或等于10-8。又由于累加項是由分子和分母兩部分組成的,因此累加項的構成規(guī)律為
term=sign/n
由于相鄰累加項的符號是正負交替變化的,因此可以令分子sign按+1,-1,+1,-1,…交替變化,這可通過反復取sign自身的相反數再重新賦值給自己(即sign=-sign)的方法來實現,注意sign需初始化為1。分母n則按1,3,5,7,…即每次遞增2變化,這可通過n=n+2來實現,注意n也需初始化為1。此外,還要設置一個計數器變量count來統計累加的項
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度安全生產標準化咨詢服務及現場指導合同3篇
- 2024生物質鍋爐余熱回收利用項目合作協議3篇
- 2025年度大理石地暖系統設計與施工合同3篇
- 2024軟件系統銷售合同系統購買合同
- 2024物業(yè)企業(yè)服務能力提升與市場拓展合作協議3篇
- 敦煌壁畫與文創(chuàng)知到智慧樹章節(jié)測試課后答案2024年秋酒泉職業(yè)技術學院
- 森林防火施工員聘用協議
- 建筑工程節(jié)能改造合同
- 別墅鋅鋼欄桿安裝施工協議
- 健身中心圍墻施工協議
- 建筑工程施工圖設計文件審查辦法
- 置業(yè)顧問考核方案
- 吉林市2024-2025學年度高三第一次模擬測試 (一模)數學試卷(含答案解析)
- 自考《英語二》高等教育自學考試試題與參考答案(2024年)
- 應急物資智能調配系統解決方案
- 2025年公務員考試時政專項測驗100題及答案
- 《春秋》導讀學習通超星期末考試答案章節(jié)答案2024年
- 2024電力安全工作規(guī)程電力線路部分
- 2024年小學四年級科學考試練習試卷(試卷版)
- 《工業(yè)園區(qū)節(jié)水管理技術規(guī)范(征求意見稿)》編制說明
- GB/T 44186-2024固定式壓縮空氣泡沫滅火系統
評論
0/150
提交評論