版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第五章循環(huán)結(jié)構(gòu)程序設計概述while語句
do-while語句
for語句
幾種循環(huán)結(jié)構(gòu)的比較
循環(huán)的嵌套
循環(huán)控制語句
算法及其表示方法簡介
循環(huán)算法的設計與實現(xiàn)
小結(jié)
循環(huán)結(jié)構(gòu):按照某測試條件,對某一操作序列進行重復性操作的一種計算結(jié)構(gòu)。其中:“測試條件”稱為循環(huán)條件,重復的操作序列稱為循環(huán)體。
C語言中循環(huán)語句,具有實現(xiàn)這種重復性的功能。循環(huán)程序設計
按照循環(huán)結(jié)構(gòu)思想進行程序設計的方法。本章主要介紹:用if語句和goto語句構(gòu)成循環(huán);用while語句構(gòu)成循環(huán);用do-while語句構(gòu)成循環(huán);用for語句構(gòu)成循環(huán);循環(huán)的嵌套;循環(huán)控制語句;(break語句、continue語句)循環(huán)算法的設計和實現(xiàn);簡要介紹算法及其表示方法。循環(huán)語句概述C語言可實現(xiàn)循環(huán)的語句:用goto
和if構(gòu)成循環(huán)while語句do~while語句for語句goto語句及用goto構(gòu)成循環(huán)goto語句一般格式:
goto
語句標號;
….…..標號:語句;5.2
goto語句與循環(huán)goto語句(無條件轉(zhuǎn)移語句)goto語句為無條件控制轉(zhuǎn)向語句,它會導致程序執(zhí)行流程的一個無條件的跳轉(zhuǎn),從而控制程序執(zhí)行直接跳轉(zhuǎn)到一個帶有標號語句的位置。帶有標號的語句的一般形式為:標號:語句(用標識符來定義標號)例5.1用if語句和goto語句構(gòu)成循環(huán),求5!(圖5.1為程序流程圖)main(){inti,result;
i=5;
result=1;
loop:if(i>=1)
{result*=i;
i--;
gotoloop;}
printf("5!=%d\n",result);}goto功能:無條件轉(zhuǎn)移語句說明:不能用整數(shù)作標號;標號只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一;標號只能加在可執(zhí)行語句前面限制使用goto語句/*ch5_1.c*/#include<stdio.h>main(){inti,sum=0;i=1;loop:
if(i<=100){sum+=i; i++;
gotoloop;
}
printf("%d",sum);}sum0+1=1第1次sum1+2=3第2次sum3+3=6第3次sum6+4=10第4次……sum4950+100=5050第100次循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體例:用if和goto語句構(gòu)成循環(huán)體會程序設計思想累加器:用于累加求和計數(shù)器:用于提供加數(shù)一般形式:while(表達式)
語句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)while5.3
while語句
循環(huán)體(復合語句)循環(huán)控制條件特點:先判斷表達式,后執(zhí)行循環(huán)體說明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句下列情況,退出while循環(huán)條件表達式不成立(為零)循環(huán)體內(nèi)遇break,return,goto無限循環(huán):while(1)
循環(huán)體;While語句特點和說明用while循環(huán)求/*ch5_2.c*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}
printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體例:/*ch5_21.c*/#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例:
顯示1~10的平方一般形式:do
語句;
while(表達式);執(zhí)行流程:do循環(huán)體expr假(0)真(非0)while5.4
do_while語句循環(huán)體(復合語句)循環(huán)控制條件特點:先執(zhí)行循環(huán)體,后判斷表達式說明:至少執(zhí)行一次循環(huán)體do~while可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)do~while語句特點和說明例5.3
用do-while語句實現(xiàn)n!的求解#include<stdio.h>voidmain(){
int
n,i;doublep;
printf(“n!,n=?");
scanf("%d",&n);i=1;p=1;do{p=p*i;i++;}
while(i<=n);
printf("%d!=%lf\n",n,p);}一般形式:for([expr1];[expr2];[expr3])
語句;執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr35.5for語句循環(huán)體(復合語句):for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){
語句;}說明:for語句中expr1,expr2,expr3類型任意,都可省略,但分號;不可省無限循環(huán):for(;;)for語句可以轉(zhuǎn)換成while結(jié)構(gòu)expr1;while(expr2){
循環(huán)體語句;
expr3;}for語句一般應用形式例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)
putchar(‘a(chǎn)’+i);}運行結(jié)果:abcdefghij例:#include<stdio.h>main(){inti=0;
for(;i<10;i++)
putchar(‘a(chǎn)’+i);}例:#include<stdio.h>main(){inti=0;
for(;i<10;)
putchar(‘a(chǎn)’+(i++));}例:#include<stdio.h>main(){inti=0;
for(;i<10;putchar(‘a(chǎn)’+i),i++)
;}例子0yxaa+ha+iha+(i+1)hbf(x)例(for)梯形法求數(shù)值積分5.6
幾種循環(huán)結(jié)構(gòu)的比較(1)結(jié)構(gòu)化程序設計,不提倡用if語句和goto語句構(gòu)成循環(huán)。(2)用while語句和do-while語句組成循環(huán)結(jié)構(gòu)時,循環(huán)變量初始化應在while語句和do-while語句之前。在while后指定循環(huán)繼續(xù)的條件;循環(huán)體語句中應包含使循環(huán)趨于結(jié)束的語句。(3)循環(huán)次數(shù)無法確定,但循環(huán)條件可以確定時,用while語句和do-while語句組成循環(huán)結(jié)構(gòu)。循環(huán)次數(shù)可以確定時,用for語句組成循環(huán)結(jié)構(gòu)。(4)在while語句、dowhile語句和for語句的循環(huán)體中,都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)(break語句和continue語句見5.8節(jié))。而在if語句和goto語句構(gòu)成的循環(huán)體中不能用“循環(huán)控制語句”。三種循環(huán)可互相嵌套,層數(shù)不限外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)嵌套循環(huán)的跳轉(zhuǎn)禁止:從外層跳入內(nèi)層跳入同層的另一循環(huán)向上跳轉(zhuǎn)5.7
循環(huán)的嵌套i<10printf假(0)真(非0)i=1j++j=1j<10真(非0)假(0)i++for(i=1;i<10;i++)
for(j=1;j<10;j++)
printf((j==9)?"%4d\n":"%4d",i*j);外循環(huán)內(nèi)循環(huán)循環(huán)的嵌套(圖解)
5.8
循環(huán)控制語句break語句功能:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)體說明:break只能終止并跳出break所在層的結(jié)構(gòu)break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。循環(huán)語句里,break只可出現(xiàn)在循環(huán)體中。循環(huán)控制語句(圖解1)expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;…...const1const2constndefaultcase
循環(huán)控制語句(圖解2)例5.6從鍵盤上輸入一整數(shù),如果該整數(shù)是素數(shù),則輸出1,否則輸出零。#include<stdio.h>#include<math.h>voidmain(){
int
num,k,i,flag;
printf("請輸入一整型數(shù):");
scanf("%d",&num);k=sqrt(num);/*此處也可為num/2*/
for(i=2;i<=k;i++)
if(num%i==0)break;/*若num被某i整除,則num不是素數(shù),退出循環(huán)*/
if(i==k+1)/*for循環(huán)若正常結(jié)束,說明所有的i不滿足num%i==0*/flag=1;/*若num不被2~k整除,則num是素數(shù),退出循環(huán)*/elseflag=0;
printf("%d----->%d\n",num,flag);} 功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語句中expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3continue語句例5.7輸出1~100之間不能被3或5或7整除的數(shù),且每行輸出5個#include<stdio.h>voidmain(){
int
num,n; n=0;
for(num=1;num<=100;num++) { if(num%3==0||num%5==0||num%7==0)continue;/*若num能被3、5、7中的任一個數(shù)整除,結(jié)束本次循環(huán),繼續(xù)下一個數(shù)的測試*/ n++;/*n為計數(shù)器變量,用于累計滿足條件數(shù)的個數(shù)*/ printf("%10d",num); if(n%5==0)printf("\n");/*若每行輸出5個數(shù),則產(chǎn)生換行*/ }
printf("\n");}5.9
算法及其表示方法簡介
一個程序應包括兩個方面內(nèi)容:對數(shù)據(jù)的描述。即在程序中要指定加工(運算)對象的數(shù)據(jù)類型和組織形式,也就是數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)實質(zhì)上解決的是加工對象(數(shù)據(jù))在內(nèi)存中的物理結(jié)構(gòu)(存儲形式)與邏輯結(jié)構(gòu)(組織形式),它屬于復雜的研究課題。在高級語言中將這一復雜的課題轉(zhuǎn)換為簡單、易為人們所接受的形式,即數(shù)據(jù)類型。
對操作的描述。即解決問題的方法、步驟的描述,即算法。算法是設計程序進行問題求解的關(guān)鍵
數(shù)據(jù):加工(運算)的對象;
算法(操作):對數(shù)據(jù)進行加工處理,以得到期望的結(jié)果。
程序設計:“數(shù)據(jù)結(jié)構(gòu)”和“操作步驟(即算法)”是設計程序的關(guān)鍵。數(shù)據(jù)結(jié)構(gòu)與算法相互影響:同一問題所設計的數(shù)據(jù)結(jié)構(gòu)不同,可能會導致不同的算法,將對程序的執(zhí)行效率產(chǎn)生深遠影響。因此,著名計算機科學家沃思(NikiklausWirth)提出一個公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序算法——設計程序的關(guān)鍵程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設計方法+語言工具和環(huán)境算法:設計程序的關(guān)鍵,解決“做什么”和“怎么做”的問題。數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型):解決加工對象在內(nèi)存的存儲形式、組織形式;程序設計方法:以操作語句對算法進行具體描述的方法;
語言:描述算法的工具,編程需要采用合適的語言。5.9.1算法及其特性一個算法應該具有以下特點:(1)有窮性:一個算法應該包含有限的操作步驟,而不是無限的。如循環(huán)語句中必須有使循環(huán)趨于結(jié)束的語句,不能出現(xiàn)無限循環(huán)(2)確定性:算法中的每一個步驟都應當是確定的,而不應產(chǎn)生歧義(3)有零個或多個輸入:一個算法在執(zhí)行時需要從外部獲取必要的信息,這個過程是通過輸入實現(xiàn)的。一個算法也可以沒有輸入。(4)有一個或多個輸出:算法的目的就是為了解決問題,“解”就是輸出。算法的輸出不一定就是計算機的屏幕輸出或打印輸出,算法得到的結(jié)果就是算法的輸出。沒有輸出的算法是沒有意義的。(5)有效性:算法中的每一個步驟都應當能有效的執(zhí)行,并能得到確定的結(jié)果。例如,若a、b為實型數(shù)據(jù)類型,則a%b就不能有效執(zhí)行。5.9.2
算法表示方法用自然語言描述用流程圖表示算法用N-S流程圖描述算法用程序設計語言實現(xiàn)算法流程圖、N-S圖描述算法求2000-2500年中的閏年流程圖和N-S圖非0y=y+1y>2500結(jié)束00非0非0非000y是閏年y%400==0y%4==0y%100!=0開始y=2000y不是閏年y是閏年y不是閏年Y不是閏年Y是閏年Y=2000
y%4==00非0直到y(tǒng)>2500y=y+1
y%100!=0非00y%400!=0
0非0算法:(1)能被4整除,但不能被100整除的年份。
(2)能被100整除,又能被400整除的年份5.9.3用程序設計語言實現(xiàn)算法例5.11
用C語言實現(xiàn)例5.9中求閏年的算法。#include<stdio.h>voidmain(){
inty;y=2000;do{if(y%4==0)if(y%100!=0)
printf("%d
是閏年!\n",y);elseif(y%400==0)
printf("%d
是閏年!\n",y);elseprintf("%d
非閏年!\n",y);elseprintf("%d
非閏年!\n",y);y=y+1;}while(y<=2500);}非0y=y+1y>2500結(jié)束00非0非0非000y是閏年y%400==0y%4==0y%100!=0開始y=2000y不是閏年5.10
循環(huán)算法的設計與實現(xiàn)
窮舉算法
對求解問題的所有可能性的解,逐個用解的條件進行測試,若一組解滿足測試條件,就找到一組答案。重復該過程,直到所有的可能性測試完畢。窮舉算法也稱“試湊法”。迭代算法
由已知解(初值),依據(jù)遞推規(guī)律,不斷得到新解的過程。迭代算法涉及到兩個關(guān)鍵要素:迭代初值和迭代公式(規(guī)律)。例5.13找100以內(nèi)的素數(shù)。#include<stdio.h>#include<math.h>voidmain(){
int
i,j,isprime,n=0;
for(i=3;i<100;i+=2)/*由于偶數(shù)不可能是素數(shù),所以從3開始,每步長加2*/ {
isprime=1;/*isprime為標志變量,先假定i為素數(shù)*/
for(j=2;j<i;j++)/*本循環(huán)用于窮舉j是否為i的因子,窮舉范圍:2~i-1*/
if(i%j==0)/*如果j是i的因子,將標志變量置零,說明i不是素數(shù)*/ {
isprime=0; break;}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度2025版木材行業(yè)標準制定合作合同2篇
- 福建省泉州市南安市2024-2025學年八年級上學期期末英語試題(無答案)
- 創(chuàng)新創(chuàng)業(yè)-職業(yè)核心能力課件
- 絲印精加工在微型電子設備制造領(lǐng)域的應用考核試卷
- 二零二五年度墓地陵園土地租賃與使用權(quán)轉(zhuǎn)讓合同4篇
- 母嬰行業(yè)2025年度母嬰用品環(huán)保認證服務合同2篇
- 二零二五版鋼材貨物流動銀行托管運輸合同3篇
- 二零二五年度木制品生產(chǎn)與銷售承包合同3篇
- 2025年公司內(nèi)部競業(yè)保密協(xié)議
- 2025年太陽能光伏電站智能監(jiān)控工程施工合同
- 2024年高純氮化鋁粉體項目可行性分析報告
- 安檢人員培訓
- 山東省濰坊市2024-2025學年高三上學期1月期末 英語試題
- 危險性較大分部分項工程及施工現(xiàn)場易發(fā)生重大事故的部位、環(huán)節(jié)的預防監(jiān)控措施
- 《榜樣9》觀后感心得體會四
- 2023事業(yè)單位筆試《公共基礎(chǔ)知識》備考題庫(含答案)
- 化學-廣東省廣州市2024-2025學年高一上學期期末檢測卷(一)試題和答案
- 2025四川中煙招聘高頻重點提升(共500題)附帶答案詳解
- EHS工程師招聘筆試題與參考答案(某大型央企)2024年
- 營銷策劃 -麗亭酒店品牌年度傳播規(guī)劃方案
- 2025年中國蛋糕行業(yè)市場規(guī)模及發(fā)展前景研究報告(智研咨詢發(fā)布)
評論
0/150
提交評論