




已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章控制結構,返回總目錄,目錄,3.1程序結構框圖,3.2二分支結構,3.3多分支結構,3.6習題三,3.4循環(huán)結構,3.5break與continue語句,返回總目錄,基本要求:)熟悉C語言的程序結構框圖;)熟悉C語言的二分支結構、多分支結構和循環(huán)結構;)熟練掌握結構化程序設計方法。學習重點:)流程圖、N-S圖、循環(huán)結構;)結構化程序設計方法。,3.1程序結構框圖,3.1.1自然語言描述,程序設計的關鍵是算法。算法是實際問題求解步驟的描述。有了正確有效的算法,就可以用任何一種計算機語言編寫程序,解決各種問題。算法可采用自然語言、流程圖或N-S圖等進行描述。自然語言描述:用人們日常所使用的語言(如英語、漢語)進行算法的描述。,返回目錄,3.1程序結構框圖,3.1.1自然語言描述,例3.2求s=1+2+3+100之和。解題思路要將1100累加到s變量上去,如果采用先初始化變量s=0,然后用語句序列s=s+1;s=s+2;則要重復寫100個加法賦值語句,很顯然,這種算法不可取。改用下述算法。算法步驟:(1)設s=0,n=0;(2)變量n值加1,即n=n+1;(3)將n加到變量s中,即s=s+n;(4)如果n值小于100,返回去執(zhí)行第2步。否則執(zhí)行第5步;(5)輸出s變量的值。,3.1程序結構框圖,3.1.2流程圖,流程圖是一種傳統的算法描述方法,它用幾種不同的幾何圖來代表不同性質的操作;用流程線來指示算法的執(zhí)行方向.用流程圖表示的算法簡單直觀,容易轉化成相應的語言程序。,3.1程序結構框圖,3.1.2流程圖,表示算法的開始或結束;,表示數據的輸入和輸出;在實際中輸入輸出也常用矩形框表示。,用來對給定的條件進行判斷,根據條件成立與否來決定其后的操作,它有一個入口和兩個出口;,用來表示一般的數據處理;,表示算法執(zhí)行流程;,用來鏈接畫在不同地點的流程圖。,常用流程圖符號,3.1程序結構框圖,3.1.2流程圖,例3.4將例3.2中的算法用流程圖表示,如下圖所示。,3.1程序結構框圖,3.1.3NS圖,N-S圖是程序算法的另一種圖形表示,它是由美國人I.Nassi和B.Shneiderman共同提出來的,其依據是:因為任何算法都是由順序結構、分支(選擇)結構、循環(huán)結構這三種結構所組成,所以可以不需要各結構之間的流程線,全部算法寫在一個矩形框內,矩形框內由順序、選擇、循環(huán)三種結構組成。,3.1程序結構框圖,3.1.3NS圖,3種基本結構的NS圖,順序結構:它是按照語句出現的先后順序依次執(zhí)行的。如上圖所示,先執(zhí)行A模塊,再執(zhí)行B模塊。,分支結構:它是根據給定條件進行判斷,選擇其中的一個分支執(zhí)行。如上圖所示,P表示條件,當P成立時執(zhí)行分支A模塊,否則執(zhí)行分支B模塊。,當型循環(huán):當條件滿足時,重復執(zhí)行某一操作。如上圖所示,當條件P為“真”時,反復執(zhí)行A模塊操作,直到P為“假”時才終止循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句。,直到型循環(huán):它是先執(zhí)行循環(huán)體操作,再判斷條件,如果條件滿足,則繼續(xù)執(zhí)行循環(huán)體操作,直到條件不滿足時,才退出循環(huán)。如上圖所示,首先執(zhí)行A模塊操作,然后再判斷給定的條件P是否成立,如果成立,反復執(zhí)行A模塊操作,直到條件P不成立。,3.1程序結構框圖,3.1.3NS圖,例3.6將例3.2中的算法用N-S圖表示,如下圖所示。,3.1程序結構框圖,3.1.4結構化程序設計,結構化程序設計的基本思想是:任何程序都由順序結構、分支結構和循環(huán)結構這三種基本結構組成。結構化程序:由3種基本結構經過反復組合、嵌套構成的程序。結構化程序設計方法:自頂向下,逐步細化模塊化設計結構化編碼,3.1程序結構框圖,3.1.4結構化程序設計,結構化程序設計具有以下特點:一個程序單元由順序、分支、循環(huán)這3種基本結構組成。3種基本結構經過反復嵌套,可以表示任何復雜的算法。一個大的程序由若干個不同功能的小模塊組成。每個小模塊只有一個入口和一個出口。程序中不能有無窮循環(huán)(死循環(huán))。程序中不能有在任何條件下都執(zhí)行不到的語句(死語句)。用結構化思想設計出來的計算機程序,具有清晰的模塊界面,因此,在書寫程序時,我們應根據邏輯結構和層次深度的不同,采用縮進對齊的方式,將程序模塊寫在不同的位置,這樣可以提高程序的可讀性,有助于調試程序,找出程序的邏輯錯誤。,3.1程序結構框圖,3.1.5結構化程序的語句,表達式語句:由“表達式分號”構成。如賦值語句、函數調用語句??照Z句:只由一個分號構成。空語句執(zhí)行不產生任何動作,常用于循環(huán)體中。控制語句:完成一定的程序流程控制功能。如if-else,switch-case,for,while,do-while,break,continue,goto,return。復合語句:由一對大括號括起來的一條或多條語句。被括起來的語句可以是這4類的任何一類語句,常用于函數體或循環(huán)體。,3.2二分支結構,3.2.1二分支if語句,基本形式:if(表達式)語句1;else語句2;例如:if(xy)printf(“max=%d”,x);elseprintf(“max=%d”,y);,返回目錄,3.2二分支結構,3.2.1二分支if語句,例3.7求兩個整數x、y中較大的數,并賦給變量max。解題思路x、y值由輸入函數輸入,根據其大小判斷,大的賦給max變量。其N-S圖如圖3.8所示,可以編寫如下程序。#includemain()intx,y,max;printf(Inputx,y=);scanf(%d,%d,3.2二分支結構,3.2.2不平衡if語句,基本形式:if(表達式)語句;例如:if(xy)printf(“max=%d”,x);,3.2二分支結構,3.2.2不平衡if語句,例3.8設計一個程序,從鍵盤輸入3個整數,按由小到大的順序輸出。解題思路三個整數x、y、z,兩兩比較,始終保持x的值最小,z的值最大,不滿足此條件,則其值進行交換?;鵑-S圖如圖3.10所示,可以編寫出程序如下:#includemain()intx,y,z,temp;printf(Inputx,y,z=);scanf(%d,%d,%d,3.2二分支結構,3.2.3if語句的嵌套,嵌套的一般形式,3.2二分支結構,3.2.3if語句的嵌套,例3.11計算分段函數的值:,3.2二分支結構,3.2.3if語句的嵌套,#include#includemain()floatx,y;scanf(%f,例3.11計算分段函數的值:,ifelse配對原則:缺省時,else總是和它上面離它最近的未配對的if配對,3.2二分支結構,3.2.3if語句的嵌套,通過“if語句的嵌套”可實現“多分支結構”,3.2二分支結構,3.2.3if語句的嵌套,示例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,實現ifelse正確配對方法:加,3.3多分支結構,3.3.1多分支switch語句,if語句的嵌套實現多分支:如果分支較多,則嵌套的if語句層數就越多,程序不但冗長而且理解也比較困難。因此,C語言又提供了一種專門用于處理多分支結構的條件選擇語句,稱為switch語句,又稱開關語句。,返回目錄,3.3多分支結構,3.3.1多分支switch語句,switch語句(開關語句)一般形式:,switch(表達式)case常量表達式1:語句組1;break;case常量表達式2:語句組2;break;.case常量表達式n:語句組n;break;default:語句組n+1;break;,3.3多分支結構,3.3.1多分支switch語句,switch語句(開關語句)執(zhí)行過程:,說明:switch后面的表達式的值類型可以是整型、字符型或枚舉型。當表達式的值與某個case中的常量表達式的值相等時,就執(zhí)行相應的case后的語句序列,直到遇到break語句或到達switch結構末尾。多個連續(xù)的case語句可以共用一個語句序列。case后的不同常量表達式的值不能相等。break的作用是改變程序在switch結構中的執(zhí)行流程,將程序流程跳出switch語句,轉到switch語句后的下一條語句去執(zhí)行。switch語句中允許嵌套switch語句。,3.3多分支結構,3.3.1多分支switch語句,例3.14從鍵盤輸入一學生成績,判斷學生成績等級。如果成績在90100分,等級為“A”,成績在8089分,等級為“B”,成績在7079分,等級為“C”,成績在6069分,等級為“D”,成績小于60分,等級為“E”。main()intscore;chargrade;printf(“Inputstudentsscore:”);scanf(“%d”,n=100;n+)s=s+n;,for語句的執(zhí)行過程(1)計算表達式1;(2)計算表達式2,若其值為非0,則執(zhí)行第3步;若為0,則轉向第6步執(zhí)行;(3)執(zhí)行循環(huán)體;(4)計算表達式3;(5)跳轉到第2步繼續(xù)執(zhí)行;(6)終止循環(huán),執(zhí)行for語句后的下一條語句。,3.4循環(huán)結構,3.4.1for語句,例3.17例3.16用for語句實現,程序如下:#includemain()ints,n;for(s=0,n=1;n=100;n+)s=s+n;printf(“s=%dn”,s);,3.4循環(huán)結構,3.4.1for語句,for語句的說明,3.4循環(huán)結構,(1)在for語句中,若表達式1缺省,則必須將表達式1作為語句安排在for語句之前。,例3.17例3.16用for語句實現,可以編寫如下程序:#includemain()ints,n;s=0;n=1;for(;n100)break;s=s+n;printf(“s=%dn”,s);,3.4.1for語句,for語句的說明,3.4循環(huán)結構,(3)在for語句中,若表達式3缺省,可將它的語句放在循環(huán)體的最后。,例3.17例3.16用for語句實現,可以編寫如下程序:#includemain()ints,n;for(s=0,n=1;n100)break;printf(“s=%dn”,s);,3.4.1for語句,for語句的說明,3.4循環(huán)結構,(5)循環(huán)體可以為空語句,但必須有分號(即循環(huán)為空語句),例3.17例3.16用for語句實現,可以編寫如下程序:#includemain()ints,n;for(s=0,n=1;n=100;s=s+n,n+);printf(“s=%dn”,s);,3.4.1for語句,思考與練習:例3.16用for語句實現,相應的程序在前面已經例舉了多種方法,請同學們試用其他可能的方法編寫程序。另外,例3.16還可以用while語句、do-while語句、if+goto等方法實現。這說明,對于某個實際的編程問題,可以編寫出很多種程序來解決同一問題。所以,對我們初學者來說,關鍵是要多學習、勤練習,熟則能生巧,到時,編寫起程序來就游刃有余了!加油吧!,3.4循環(huán)結構,3.4.1for語句,3.4循環(huán)結構,3.4.2while語句,while語句的一般形式while(表達式)循環(huán)體;例如:intn,s;n=1;s=0;while(n=100)s=s+n;n+;,3.4循環(huán)結構,3.4.2while語句,while語句的執(zhí)行過程首先計算和判斷表達式的值,如果表達式的值為“真”(非0),則執(zhí)行循環(huán)體,然后程序轉回去再計算和判斷表達式的值,直到表達式的值為“假”(0),終止while循環(huán),繼續(xù)執(zhí)行while語句后的下一語句。,3.4循環(huán)結構,3.4.2while語句,示例例3.16用while語句實現,可以編寫如下程序:#includemain()ints,n;s=0;n=1;while(n=100)s=s+n;n+;printf(“s=%dn”,s);,3.4循環(huán)結構,3.4.3dowhile語句,dowhile語句的一般形式do循環(huán)體;while(表達式)例如:intn=1,s=0;dos=s+n;n+;while(n=100);,3.4循環(huán)結構,3.4.3dowhile語句,dowhile語句的執(zhí)行過程dowhile語句的作用是無條件地先執(zhí)行循環(huán)體一次(無論表達式的值是否為0或非0),所以又稱為“直到型循環(huán)”。循環(huán)體執(zhí)行一次后,計算和判斷表達式的值,若表達式的值為“真”(非0),則程序轉回去反復執(zhí)行循環(huán)體,直到表達式的值為“假”(0),終止dowhile語句,繼續(xù)執(zhí)行dowhile語句后的下一條語句。,3.4循環(huán)結構,3.4.3dowhile語句,示例例3.16用do-while語句實現,可以編寫如下程序:#includemain()ints,n;s=0;n=1;dos=s+n;n+;while(n=100);printf(“s=%dn”,s);,3.4循環(huán)結構,3.4.4循環(huán)嵌套,循環(huán)嵌套:指一個循環(huán)完全包含在另一個循環(huán)的循環(huán)體中。while循環(huán)、dowhile循環(huán)和for循環(huán)都可以互相嵌套。二重循環(huán)的執(zhí)行過程是外循環(huán)執(zhí)行一次,內循環(huán)執(zhí)行一遍,直至內循環(huán)結束后,才能再進行一次外循環(huán),如此反復,直到外循環(huán)結束。內、外循環(huán)控制變量一般不能相同.,示例下面是for語句的二重循環(huán)嵌套程序,試分析其功能:#includemain()inti,j;for(i=1;i100時,即退出循環(huán)。,3.5break、continue及goto語句,3.5.2continue語句,continue語句的一般形式continue;continue語句經常放在循環(huán)語句的循環(huán)體中。作用:是結束本次循環(huán),即跳過循環(huán)體中某些還沒有被執(zhí)行的語句,開始新的一次循環(huán)。與break比較:continue僅結束本次循環(huán),而break是結束整個循環(huán)語句的執(zhí)行。,3.5break、continue及goto語句,3.5.2continue語句,continue語句的示例,例3.30從鍵盤輸入10個不為0的整數,統計其中負數的個數,并求所有正數的平均值。解題思路程序中count用于統計負數個數,avg在循環(huán)結構中用于統計正數和,循環(huán)結束后用于計算平均值.,#includemain()intn,count=0,x;floatavg=0;for(n=0;n0)avg=avg+x;continue;count+;if(count!=10)avg/=10-count;printf(“Count=%d,average=%fn”,count,avg);,3.5break、continue及goto語句,3.5break、continue及goto語句,3.5.3goto語句,goto語句的一般形式goto語句標號;作用:使程序的流程無條件轉移到相應語句標號處。goto語句一般和if語句一起使用,構成循環(huán)。語句標號是對語句的標識,應是合法的標識符,即只能由字母、數字和下劃線組成,且第一字符必須是字母或下劃線。注意:不能用一個整數作為語句標號。goto語句是非結構化語句,大量使用會造成程序流向混亂,可讀性差,因此結構化程序設計一般不用goto語句.,3.5break、continue及goto語句,3.5.3goto語句,goto語句的示例,構造當型循環(huán)(先判斷循環(huán)控制條件),程序如下:#includemain()intn=1,s=0;loop:if(n=0)m=a;,B,C,D,返回目錄,3.6習題三,單項選擇題,4)若i,j均為整型變量,則以下循環(huán).for(i=0,j=2;j=1;i+,j-)printf(%5d,%dn,i,j);A)循環(huán)體只執(zhí)行一次B)循環(huán)體執(zhí)行二次C)是無限循環(huán)D)循環(huán)條件不合法5)以下程序段,執(zhí)行結果為.a=1;doa=a*a;while(!a);A)循環(huán)體只執(zhí)行一次B)循環(huán)體執(zhí)行二次C)是無限循環(huán)D)循環(huán)條件不合法,C,A,3.6習題三,單項選擇題,6)C語言中while與dowhile語句的主要區(qū)別是.A)dowhile的循環(huán)體至少無條件執(zhí)行一次B)dowhile允許從外部跳到循環(huán)體內C)while的循環(huán)體至少無條件執(zhí)行一次D)while的循環(huán)控制條件比dowhile的嚴格7)語句while(!a);中條件等價于.A)a!=0B)aC)a=1D)a=0,A,D,3.6習題三,單項選擇題,8)以下程序的運行結果為.#includemain()inti=1,sum=0;while(i=0,score0.00001,-fz*x,3.6習題三,程序填空題,4下面的程序完成兩個數的四則運算。用戶輸入一個實現兩個數的四則運算的表達式,程序采用switch語句對其運算進行判定后執(zhí)行相應的運算并給出結果。#includemain()floatx,y;charop;printf(PleaseinputExpression:);scanf(%f%c%f,switch(op),x,op,y,x+y,break,3.6習題三,程序填空題,case-:printf(%g%c%g=%gn,x,op,y,x-y);break;case*:printf(%g%c%g=%gn,x,op,y,x*y);break;case/:if(_)printf(DivisionError!n);elseprintf(%g%c%g=%gn,x,op,y,x/y);break;default:printf(ExpressionError!n);,(y=-1e-6)x2=(-b-sqrt(d)/(2*a);printf(Theequationsrootis);printf(x1=%f,x2=%fn,x1,x2);elsex1=-b/(2*a);x2=sqrt(-d)/(2*a);printf(Theequationsrootis%f+Ifn,x1,x2);printf(Theequationsrootis%f-I%fn,x1,x2);,3.6習題三,編程題,4輸入一元二次方程的三個系數a、b、c,求出該方程所有可能的根。,3.6習題三,編程題,5編程求s=1-1/2+1/3-1/4+-1/100。,#includemain()intn,flag=1;floats=0;for(n=1;n=100;n+)s=s+1.0*flag/n;flag=-flag;printf(fn,s);,3.6習題三,編程題,6編程求1!+2!+3!+10!之和。,#includemain()longints=0,p=1;intn;for(n=1;n=10;n+)p=p*n;s=s+p;printf(%ldn,s);,3.6習題三,編程題,7一個燈塔有8層,共有765盞燈,其中每一層的燈數都是其相鄰上層的兩倍,求最底層的燈數。,#includemain()ints=1,n,p=1;for(n=1;n=7;n+)p=p*2;s=s+p;printf(%dn,765/s*p);,3.6習題三,編程題,8一張10元票面的紙鈔兌換成1元、2元或5元的票面,問共有多少種不同的兌換方法?,#includemain()inta,b,c,sum=0;for(a=0;a=10;a+)for(b=0;b=5;b+)for(c=0;c=2;c+)if(a+2*b+5*c=10)printf(%d,%d,%dn,a,b,c);sum+;printf(%dn,sum);,3.6習題三,編程題,9編程打印出所有的“水仙花數”。所謂水仙花數:是指一個三位數,其各位數字的立方之和等于該數。,#includemain()intn,a,b,c;for(n=100;n1000;n+)a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(水仙花數有:%5dn,n);,10如果一個數等于其所有真因子(不包括其本身)之和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年桂林理工大學自考英語(二)練習題(附答案解析)
- 2022年上海交通大學自考英語(二)練習題(附答案解析) (一)
- 《高等數學》上冊課件04-04有理函數的積分
- 幼兒園小班數學活動教案變魔術
- 《高級商務英語口語第二版》課件unit12Crossboarderecommerce
- 《婚姻家庭繼承法第六版》課件婚姻家庭法第四章
- 2025年公共衛(wèi)生檢驗員考試試卷及答案
- 油管投資項目可行性研究報告(立項備案模板)undefinedundefined
- 2025年工程倫理與法律課程考試試卷及答案
- 四川省瀘縣2025屆八年級英語第二學期期末學業(yè)水平測試試題含答案
- 2025年中學教師資格考試《綜合素質》教育法律法規(guī)經典案例分析及強化試題集(含答案)
- 2025年小學語文期末考試試題及答案
- 發(fā)改委立項用-超薄玻璃項目可行性研究報告
- 2024年浙江省《輔警招聘考試必刷500題》考試題庫附答案【綜合題】
- 中國熔融粘合環(huán)氧粉末涂料項目商業(yè)計劃書
- 200以內加減法-2000題(帶答案)
- 上海市閔行區(qū)2024-2025學年八年級上學期期末考試物理試題(解析版)
- 閱讀認知策略的跨學科研究框架構建
- 先天性甲狀腺功能減退癥診治指南(2025)解讀
- 廣東省廣州市越秀區(qū)2022-2023學年七年級下學期期末考試英語試題(含答案)
- 《心血管系統超聲檢查》課件
評論
0/150
提交評論