版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)概述while語(yǔ)句
do-while語(yǔ)句
for語(yǔ)句
幾種循環(huán)結(jié)構(gòu)的比較
循環(huán)的嵌套
循環(huán)控制語(yǔ)句
算法及其表示方法簡(jiǎn)介
循環(huán)算法的設(shè)計(jì)與實(shí)現(xiàn)
小結(jié)
循環(huán)結(jié)構(gòu):按照某測(cè)試條件,對(duì)某一操作序列進(jìn)行重復(fù)性操作的一種計(jì)算結(jié)構(gòu)。其中:“測(cè)試條件”稱(chēng)為循環(huán)條件,重復(fù)的操作序列稱(chēng)為循環(huán)體。
C語(yǔ)言中循環(huán)語(yǔ)句,具有實(shí)現(xiàn)這種重復(fù)性的功能。循環(huán)程序設(shè)計(jì)
按照循環(huán)結(jié)構(gòu)思想進(jìn)行程序設(shè)計(jì)的方法。本章主要介紹:用if語(yǔ)句和goto語(yǔ)句構(gòu)成循環(huán);用while語(yǔ)句構(gòu)成循環(huán);用do-while語(yǔ)句構(gòu)成循環(huán);用for語(yǔ)句構(gòu)成循環(huán);循環(huán)的嵌套;循環(huán)控制語(yǔ)句;(break語(yǔ)句、continue語(yǔ)句)循環(huán)算法的設(shè)計(jì)和實(shí)現(xiàn);簡(jiǎn)要介紹算法及其表示方法。循環(huán)語(yǔ)句概述C語(yǔ)言可實(shí)現(xiàn)循環(huán)的語(yǔ)句:用goto
和if構(gòu)成循環(huán)while語(yǔ)句do~while語(yǔ)句for語(yǔ)句goto語(yǔ)句及用goto構(gòu)成循環(huán)goto語(yǔ)句一般格式:
goto
語(yǔ)句標(biāo)號(hào);
….…..標(biāo)號(hào):語(yǔ)句;5.2
goto語(yǔ)句與循環(huán)goto語(yǔ)句(無(wú)條件轉(zhuǎn)移語(yǔ)句)goto語(yǔ)句為無(wú)條件控制轉(zhuǎn)向語(yǔ)句,它會(huì)導(dǎo)致程序執(zhí)行流程的一個(gè)無(wú)條件的跳轉(zhuǎn),從而控制程序執(zhí)行直接跳轉(zhuǎn)到一個(gè)帶有標(biāo)號(hào)語(yǔ)句的位置。帶有標(biāo)號(hào)的語(yǔ)句的一般形式為:標(biāo)號(hào):語(yǔ)句(用標(biāo)識(shí)符來(lái)定義標(biāo)號(hào))例5.1用if語(yǔ)句和goto語(yǔ)句構(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功能:無(wú)條件轉(zhuǎn)移語(yǔ)句說(shuō)明:不能用整數(shù)作標(biāo)號(hào);標(biāo)號(hào)只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一;標(biāo)號(hào)只能加在可執(zhí)行語(yǔ)句前面限制使用goto語(yǔ)句/*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語(yǔ)句構(gòu)成循環(huán)體會(huì)程序設(shè)計(jì)思想累加器:用于累加求和計(jì)數(shù)器:用于提供加數(shù)一般形式:while(表達(dá)式)
語(yǔ)句;執(zhí)行流程:expr循環(huán)體假(0)真(非0)while5.3
while語(yǔ)句
循環(huán)體(復(fù)合語(yǔ)句)循環(huán)控制條件特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體說(shuō)明:循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類(lèi)型語(yǔ)句下列情況,退出while循環(huán)條件表達(dá)式不成立(為零)循環(huán)體內(nèi)遇break,return,goto無(wú)限循環(huán):while(1)
循環(huán)體;While語(yǔ)句特點(diǎn)和說(shuō)明用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++;}}運(yùn)行結(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
語(yǔ)句;
while(表達(dá)式);執(zhí)行流程:do循環(huán)體expr假(0)真(非0)while5.4
do_while語(yǔ)句循環(huán)體(復(fù)合語(yǔ)句)循環(huán)控制條件特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式說(shuō)明:至少執(zhí)行一次循環(huán)體do~while可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)do~while語(yǔ)句特點(diǎn)和說(shuō)明例5.3
用do-while語(yǔ)句實(shí)現(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])
語(yǔ)句;執(zhí)行流程:expr2循環(huán)體假(0)真(非0)forexpr1expr35.5for語(yǔ)句循環(huán)體(復(fù)合語(yǔ)句):for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){
語(yǔ)句;}說(shuō)明:for語(yǔ)句中expr1,expr2,expr3類(lèi)型任意,都可省略,但分號(hào);不可省無(wú)限循環(huán):for(;;)for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu)expr1;while(expr2){
循環(huán)體語(yǔ)句;
expr3;}for語(yǔ)句一般應(yīng)用形式例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)
putchar(‘a(chǎn)’+i);}運(yùn)行結(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)化程序設(shè)計(jì),不提倡用if語(yǔ)句和goto語(yǔ)句構(gòu)成循環(huán)。(2)用while語(yǔ)句和do-while語(yǔ)句組成循環(huán)結(jié)構(gòu)時(shí),循環(huán)變量初始化應(yīng)在while語(yǔ)句和do-while語(yǔ)句之前。在while后指定循環(huán)繼續(xù)的條件;循環(huán)體語(yǔ)句中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句。(3)循環(huán)次數(shù)無(wú)法確定,但循環(huán)條件可以確定時(shí),用while語(yǔ)句和do-while語(yǔ)句組成循環(huán)結(jié)構(gòu)。循環(huán)次數(shù)可以確定時(shí),用for語(yǔ)句組成循環(huán)結(jié)構(gòu)。(4)在while語(yǔ)句、dowhile語(yǔ)句和for語(yǔ)句的循環(huán)體中,都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)(break語(yǔ)句和continue語(yǔ)句見(jiàn)5.8節(jié))。而在if語(yǔ)句和goto語(yǔ)句構(gòu)成的循環(huán)體中不能用“循環(huán)控制語(yǔ)句”。三種循環(huán)可互相嵌套,層數(shù)不限外層循環(huán)可包含兩個(gè)以上內(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)控制語(yǔ)句break語(yǔ)句功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體或開(kāi)關(guān)體說(shuō)明:break只能終止并跳出break所在層的結(jié)構(gòu)break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中。循環(huán)語(yǔ)句里,break只可出現(xiàn)在循環(huán)體中。循環(huán)控制語(yǔ)句(圖解1)expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr語(yǔ)句組1break;語(yǔ)句組2break;語(yǔ)句組nbreak;語(yǔ)句組break;…...const1const2constndefaultcase
循環(huán)控制語(yǔ)句(圖解2)例5.6從鍵盤(pán)上輸入一整數(shù),如果該整數(shù)是素?cái)?shù),則輸出1,否則輸出零。#include<stdio.h>#include<math.h>voidmain(){
int
num,k,i,flag;
printf("請(qǐng)輸入一整型數(shù):");
scanf("%d",&num);k=sqrt(num);/*此處也可為num/2*/
for(i=2;i<=k;i++)
if(num%i==0)break;/*若num被某i整除,則num不是素?cái)?shù),退出循環(huán)*/
if(i==k+1)/*for循環(huán)若正常結(jié)束,說(shuō)明所有的i不滿(mǎn)足num%i==0*/flag=1;/*若num不被2~k整除,則num是素?cái)?shù),退出循環(huán)*/elseflag=0;
printf("%d----->%d\n",num,flag);} 功能:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語(yǔ)句中expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3continue語(yǔ)句例5.7輸出1~100之間不能被3或5或7整除的數(shù),且每行輸出5個(gè)#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中的任一個(gè)數(shù)整除,結(jié)束本次循環(huán),繼續(xù)下一個(gè)數(shù)的測(cè)試*/ n++;/*n為計(jì)數(shù)器變量,用于累計(jì)滿(mǎn)足條件數(shù)的個(gè)數(shù)*/ printf("%10d",num); if(n%5==0)printf("\n");/*若每行輸出5個(gè)數(shù),則產(chǎn)生換行*/ }
printf("\n");}5.9
算法及其表示方法簡(jiǎn)介
一個(gè)程序應(yīng)包括兩個(gè)方面內(nèi)容:對(duì)數(shù)據(jù)的描述。即在程序中要指定加工(運(yùn)算)對(duì)象的數(shù)據(jù)類(lèi)型和組織形式,也就是數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)實(shí)質(zhì)上解決的是加工對(duì)象(數(shù)據(jù))在內(nèi)存中的物理結(jié)構(gòu)(存儲(chǔ)形式)與邏輯結(jié)構(gòu)(組織形式),它屬于復(fù)雜的研究課題。在高級(jí)語(yǔ)言中將這一復(fù)雜的課題轉(zhuǎn)換為簡(jiǎn)單、易為人們所接受的形式,即數(shù)據(jù)類(lèi)型。
對(duì)操作的描述。即解決問(wèn)題的方法、步驟的描述,即算法。算法是設(shè)計(jì)程序進(jìn)行問(wèn)題求解的關(guān)鍵
數(shù)據(jù):加工(運(yùn)算)的對(duì)象;
算法(操作):對(duì)數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。
程序設(shè)計(jì):“數(shù)據(jù)結(jié)構(gòu)”和“操作步驟(即算法)”是設(shè)計(jì)程序的關(guān)鍵。數(shù)據(jù)結(jié)構(gòu)與算法相互影響:同一問(wèn)題所設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)不同,可能會(huì)導(dǎo)致不同的算法,將對(duì)程序的執(zhí)行效率產(chǎn)生深遠(yuǎn)影響。因此,著名計(jì)算機(jī)科學(xué)家沃思(NikiklausWirth)提出一個(gè)公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序算法——設(shè)計(jì)程序的關(guān)鍵程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語(yǔ)言工具和環(huán)境算法:設(shè)計(jì)程序的關(guān)鍵,解決“做什么”和“怎么做”的問(wèn)題。數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類(lèi)型):解決加工對(duì)象在內(nèi)存的存儲(chǔ)形式、組織形式;程序設(shè)計(jì)方法:以操作語(yǔ)句對(duì)算法進(jìn)行具體描述的方法;
語(yǔ)言:描述算法的工具,編程需要采用合適的語(yǔ)言。5.9.1算法及其特性一個(gè)算法應(yīng)該具有以下特點(diǎn):(1)有窮性:一個(gè)算法應(yīng)該包含有限的操作步驟,而不是無(wú)限的。如循環(huán)語(yǔ)句中必須有使循環(huán)趨于結(jié)束的語(yǔ)句,不能出現(xiàn)無(wú)限循環(huán)(2)確定性:算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的,而不應(yīng)產(chǎn)生歧義(3)有零個(gè)或多個(gè)輸入:一個(gè)算法在執(zhí)行時(shí)需要從外部獲取必要的信息,這個(gè)過(guò)程是通過(guò)輸入實(shí)現(xiàn)的。一個(gè)算法也可以沒(méi)有輸入。(4)有一個(gè)或多個(gè)輸出:算法的目的就是為了解決問(wèn)題,“解”就是輸出。算法的輸出不一定就是計(jì)算機(jī)的屏幕輸出或打印輸出,算法得到的結(jié)果就是算法的輸出。沒(méi)有輸出的算法是沒(méi)有意義的。(5)有效性:算法中的每一個(gè)步驟都應(yīng)當(dāng)能有效的執(zhí)行,并能得到確定的結(jié)果。例如,若a、b為實(shí)型數(shù)據(jù)類(lèi)型,則a%b就不能有效執(zhí)行。5.9.2
算法表示方法用自然語(yǔ)言描述用流程圖表示算法用N-S流程圖描述算法用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)算法流程圖、N-S圖描述算法求2000-2500年中的閏年流程圖和N-S圖非0y=y+1y>2500結(jié)束00非0非0非000y是閏年y%400==0y%4==0y%100!=0開(kāi)始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用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)算法例5.11
用C語(yǔ)言實(shí)現(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開(kāi)始y=2000y不是閏年5.10
循環(huán)算法的設(shè)計(jì)與實(shí)現(xiàn)
窮舉算法
對(duì)求解問(wèn)題的所有可能性的解,逐個(gè)用解的條件進(jìn)行測(cè)試,若一組解滿(mǎn)足測(cè)試條件,就找到一組答案。重復(fù)該過(guò)程,直到所有的可能性測(cè)試完畢。窮舉算法也稱(chēng)“試湊法”。迭代算法
由已知解(初值),依據(jù)遞推規(guī)律,不斷得到新解的過(guò)程。迭代算法涉及到兩個(gè)關(guān)鍵要素:迭代初值和迭代公式(規(guī)律)。例5.13找100以?xún)?nèi)的素?cái)?shù)。#include<stdio.h>#include<math.h>voidmain(){
int
i,j,isprime,n=0;
for(i=3;i<100;i+=2)/*由于偶數(shù)不可能是素?cái)?shù),所以從3開(kāi)始,每步長(zhǎng)加2*/ {
isprime=1;/*isprime為標(biāo)志變量,先假定i為素?cái)?shù)*/
for(j=2;j<i;j++)/*本循環(huán)用于窮舉j是否為i的因子,窮舉范圍:2~i-1*/
if(i%j==0)/*如果j是i的因子,將標(biāo)志變量置零,說(shuō)明i不是素?cái)?shù)*/ {
isprime=0; break;}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 去健身房鍛煉身體的說(shuō)說(shuō)范文
- 2025年粵教新版九年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年華師大新版八年級(jí)物理下冊(cè)月考試卷含答案
- 2025年新世紀(jì)版選擇性必修二化學(xué)下冊(cè)月考試卷
- 2025年滬科新版九年級(jí)地理下冊(cè)月考試卷含答案
- 2025年湘師大新版必修2歷史上冊(cè)階段測(cè)試試卷
- 2025年華東師大版九年級(jí)科學(xué)上冊(cè)階段測(cè)試試卷含答案
- 2025年外研版八年級(jí)歷史上冊(cè)階段測(cè)試試卷
- 2025年粵教版必修1語(yǔ)文上冊(cè)階段測(cè)試試卷
- 2025年北師大版選修2地理上冊(cè)月考試卷含答案
- 醫(yī)院醫(yī)療質(zhì)量管理委員會(huì)會(huì)議記錄五篇
- 《中國(guó)高考評(píng)價(jià)體系》解讀(化學(xué)學(xué)科)
- 公司發(fā)展能力提升方案
- 電梯安全守則及乘客須知
- IT硬件系統(tǒng)集成項(xiàng)目質(zhì)量管理方案
- 《容幼穎悟》2020年江蘇泰州中考文言文閱讀真題(含答案與翻譯)
- 水上水下作業(yè)應(yīng)急預(yù)案
- API520-安全閥計(jì)算PART1(中文版)
- 2023年廣東省廣州地鐵城際鐵路崗位招聘筆試參考題庫(kù)附帶答案詳解
- 商務(wù)提成辦法
- 直流電機(jī)電樞繞組簡(jiǎn)介
評(píng)論
0/150
提交評(píng)論