版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章循環(huán)控制第1頁,共31頁,2023年,2月20日,星期三6.1
概述程序經(jīng)常會重復(fù)執(zhí)行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判斷i是否小于等于100
如果i小于等于100,重復(fù)②;
否則,結(jié)束。此類根據(jù)某個條件重復(fù)執(zhí)行相同算法的結(jié)構(gòu),稱為循環(huán)。初始化部分。循環(huán)體。
循環(huán)的條件:循環(huán)應(yīng)在有限次完成。
C語言提供了三類實現(xiàn)循環(huán)的語句:
while,dowhile,for
第2頁,共31頁,2023年,2月20日,星期三6.2goto語句goto語句格式:
gotoLabel/*Label:同一函數(shù)內(nèi)語句前的標號。*/作用:轉(zhuǎn)移到標號對應(yīng)的語句上繼續(xù)執(zhí)行。無條件轉(zhuǎn)向語句.loop:if(i<=100){sum=sum+i;i++;
gotoloop;}語句標號的命名規(guī)則:與變量名相同,即由字母、數(shù)字和下劃線組成,其第一個字符必須為字母或下劃線。不能用整數(shù)來作標號。例如:
gotolabeL1;
gotol23;
這樣寫對嗎?第3頁,共31頁,2023年,2月20日,星期三6.2goto語句注意:結(jié)構(gòu)化程序設(shè)計方法主張限制使用goto語句,因為濫用goto語句將使程序流程無規(guī)律、可讀性差。但也不是絕對禁止使用goto語句。一般來說,可以有兩種用途:與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);
if(……)gotokk;從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外,但在C語言中可以用break語句和continue語句跳出本層循環(huán)和結(jié)束本次循環(huán)。goto語句的使用機會已大大減少,只是需要從多層循環(huán)的內(nèi)層循環(huán)跳到外層循環(huán)外時才用到goto語句。但是這種用法不符合結(jié)構(gòu)化原則,一般不宜采用,只有在不得已時才使用。第4頁,共31頁,2023年,2月20日,星期三6.2goto語句舉例:
用if和goto語句構(gòu)成循環(huán),求1+2+3+…+100main()/*test1.c*/{inti,sum=0;i=1;ll:if(i<=100) {sum=sum+i; i++; gotoll; } printf("sum=%d",sum);}
第5頁,共31頁,2023年,2月20日,星期三6.3while語句⒈while循環(huán)(當(dāng)型循環(huán))格式:
while(expression)
statement;表達式:值非0,表示滿足條件;值為0代表不滿足條件。語句(復(fù)合語句),重復(fù)執(zhí)行部分(循環(huán)體)。流程:e?yesstatement;no第6頁,共31頁,2023年,2月20日,星期三舉例:求1+2+3+…+100#include<stdio.h>/*test2.c*/voidmain(void){ints=0,i=1;
while(i<=100)
{
s=s+i;/*s+=i;*/i++;}
printf(“s=%d\n”,s);}初始化部分循環(huán)體條件測試6.3while語句i=1i<=100Sum=sum+ii=i+10非0注意:
1、循環(huán)體如果包含一個以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。如果不加花括弧,則while語句的范圍只到while后面第一個分號處。2、在循環(huán)體中應(yīng)有使循環(huán)趨向結(jié)束的語句.第7頁,共31頁,2023年,2月20日,星期三6.4do-while語句格式:
do{
statement;}
while
(expression);
流程:statement;e?yesno含有使條件趨假的語句。while循環(huán)與do-while循環(huán)的區(qū)別:while循環(huán)先判條件,后執(zhí)行循環(huán)體;do–while循環(huán)先執(zhí)行循環(huán)體,后判條件。第8頁,共31頁,2023年,2月20日,星期三6.4do-while語句舉例:求:30!#include<stdio.h>voidmain(void){floats=1.0;inti=1;
do{s*=i;i++;}while(i<=30);
printf(“30!=%f”,s);}初始化。循環(huán)體。測試條件。?思考題:1.用do-while實現(xiàn)s=1+2+…+1002.用while實現(xiàn)30!。使條件趨假。第9頁,共31頁,2023年,2月20日,星期三6.4do-while語句舉例:while和do一while循環(huán)的比較1)main()/*test3.c*/2)main()/*test4.c*/
{intsum=0,i;{intsum=0,i;
scanf(”%d”,&i);scanf(”%d”,&i);
while(i<=10)
do{sum=sum十i;{sum=sum十i;i++;i++;}}while(i<=10);printf(“%d”,sum);}printf(“%d”,sum);}Sum=0別忘了第10頁,共31頁,2023年,2月20日,星期三6.5for語句⒊for循環(huán)格式:
for
(e1;e2;e3)
statement;流程:e1e2?yesstatement;e3no使e2趨假。初值表達式。測試表達式。增值表達式。(1)先求解表達式1;(2)求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步,若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達式為真,在執(zhí)行指定的語句后,求解表達式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行FOR語句下面的一個語句。
for語句的形式如下:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句
第11頁,共31頁,2023年,2月20日,星期三6.5for語句for
(e1;e2;e3)在for循環(huán)中,e1、e2、e3都可以省略!1.for語句中表達式1可以省略,其后的分號不能省略。執(zhí)行時,跳過“求解表達式1”這一步,其它不變。
2.如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式2始終為真。
for(i=l;;i++)sum=sum+I它相當(dāng)于:
i=1;while(1){sum=sum+i;i++;}求解表達式1語句求解表達式33.表達式3也可以省略,但此時程序設(shè)計者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。如:
for(sum=0,i=1;i<=100;){sum=sum十1;i++;}4.可以省略表達式1和表達式3,只有表達式2,即只給循環(huán)條件。第12頁,共31頁,2023年,2月20日,星期三6.5for語句如:(省略表達式1和表達式3)for(;i<=100;){sum=sum+i;i++;}相當(dāng)于:while(i<=100){sum=sum+i;i++;}5.三個表達式都可省略,如:
for(;;)語句相當(dāng)于:
while(1)語句即不設(shè)初值,不判斷條件(認為表達式2為真),循環(huán)變量不增值.。無終止地執(zhí)行循環(huán)體。第13頁,共31頁,2023年,2月20日,星期三6.5for語句6.表達式1可以是設(shè)置循環(huán)變量初值的賦值表達式,也可以是與循環(huán)變量無關(guān)的其它表達式。如:
for(sum=0;i<=100;i++)sum=sum+i;表達式3也類似,如:
for(sum=0;i<=100;k++)表達式1和表達式3可以是一個簡單的表這式,也可以是包含一個以上的簡單表達式,中間用逗號間隔。如:
for(sum=0,i=1;i<=100;i++)sum=sum+i;或
for(i=0,j=100;i<=j;i++,j--)k=i+j;
7.表達式2一般是關(guān)系表達式或邏輯表達式,但也可以是數(shù)值表達式或字符表達式,只要其值為非零就執(zhí)行循環(huán)體。
如:
for(;(c=getchar())!=‘\n’;)printf(“%c”,c);
第14頁,共31頁,2023年,2月20日,星期三6.5for語句舉例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints,i;
for(s=0,i=1;i<=100;i++)
{s=s+i;
}
printf(“s=%d”,s);}在for循環(huán)中,e1、e2、e3都可以省略!e1省略s=0,i=1;e3省略i++;第15頁,共31頁,2023年,2月20日,星期三概念:在一個循環(huán)的循環(huán)體內(nèi)又包含一個完整的循環(huán)稱為循環(huán)的嵌套。打印99乘法表。#include<stdio.h>/*test5.c*/voidmain(void){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++){printf(“%4d“,i*j);}printf(“\n“);}}外層循環(huán)內(nèi)層循環(huán)說明:⒈內(nèi)外層循環(huán)采用縮進形式。⒉while和do-while和for可以相互嵌套。
⒊執(zhí)行次數(shù)為內(nèi)層次數(shù)和外存次數(shù)的乘積。如何打印乘法表的一半?6.6循環(huán)的嵌套第16頁,共31頁,2023年,2月20日,星期三①循環(huán)的中斷:break語句概念:循環(huán)體中可以加分支,判斷是否繼續(xù)執(zhí)行循環(huán),break語句可以提前結(jié)束循環(huán)。舉例:求:s=1+2+3+…+100voidmain(void)/*test13.c*/{ints,i;
for(s=0,i=1;;i++)
{s=s+i;if(i>??)break;}
printf(“s=%d”,s);}滿足條件,則退出循環(huán)。6.7循環(huán)的中斷(break)和繼續(xù)(continue)voidmain(void)/*test14.c*/{ints=0,i=1;
for(;;
)
{s=s+i;i++;if(i>??)break;}
printf(“s=%d”,s);}用goto語句如何實現(xiàn)?第17頁,共31頁,2023年,2月20日,星期三舉例:求:r=1—10的圓的面積,如圓面積大于100則中斷。for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;printf(“\n%f“,area);}
滿足條件,則退出循環(huán)。②繼續(xù)循環(huán):continue語句
continue語句的作用是跳過本次循環(huán)剩余的循環(huán)體內(nèi)容,執(zhí)行下次循環(huán)。舉例:求1—100內(nèi)的偶數(shù)和。
s=0;for(n=1;n<=100;n++){if(n%2!=0)continue;s+=n;}滿足條件,跳過循環(huán)體,繼續(xù)循環(huán)。6.7循環(huán)的中斷(break)和繼續(xù)(continue)如果不使用continue語句,如何來實現(xiàn)?第18頁,共31頁,2023年,2月20日,星期三①條件為恒真的循環(huán)——無限循環(huán)while(1){…}do{…}while(1);for(;;){…}靠條件控制的break語句退出循環(huán)。例:程序等待直到輸入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循環(huán)體為空語句的循環(huán)——空循環(huán)for(i=1;i<=MAX;t++);作用:程序延時??照Z句6.7循環(huán)的中斷(break)和繼續(xù)(continue)⑶無限循環(huán)和空循環(huán)第19頁,共31頁,2023年,2月20日,星期三輸入10個自然數(shù)統(tǒng)計其中偶數(shù)的個數(shù)及偶數(shù)值和。算法框圖:start定義變量初始化循環(huán)?yes輸入偶數(shù)?yes統(tǒng)計累加nono輸出結(jié)果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;
for(i=1;i<=10;i++){
scanf(“%d\n”,&ix);
if(ix%2==0){iSum+=ix;iCount++;}
}printf(“Num=%d\nSum=%d”,iCount,iSum);}循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)輸入負數(shù)?do{if(ix<=0)printf(“dateerror”);}while(ix<=0);算法的健壯性6.8循環(huán)和分支相互嵌套第20頁,共31頁,2023年,2月20日,星期三⒈求100到200之間的所有素數(shù)(只能被1和自身整除的數(shù))。對于自然數(shù)n,判斷其是否為素數(shù)有以下三種方法:①判斷n是否能被從2到n-1范圍內(nèi)的數(shù)整除;②判斷n是否能被從2到(int)(n/2)范圍的數(shù)整除;③判斷n是否能被從2到(int)sqrt(n)范圍的數(shù)整除;在程序設(shè)計中,經(jīng)常要記錄一些狀態(tài),作為判斷的條件。因此需要在程序中設(shè)置一些標志,通常標志是整型變量。程序設(shè)計中標志技術(shù)的使用:如:設(shè)置變量iFlag用于記錄是否世素數(shù),
iFlag==1是素數(shù);
iFlag==0不是素數(shù)。比較一下各種方法的優(yōu)越性?6.9程序舉例第21頁,共31頁,2023年,2月20日,星期三s=sqrt(n);iFlag=1;i從2循環(huán)到sn%i==0iFlag=0;break;繼續(xù)循環(huán)直到退出iFlag==0?判斷某自然數(shù)n是否是素數(shù)的算法第22頁,共31頁,2023年,2月20日,星期三#include<stdio.h>/*test7.c*/#include<math.h>voidmain(void){intn,j,s,iFlag;
for(n=101;n<200;n+=2)
{
s=sqrt(n);iFlag=1;for(j=2;j<=s;j++){if(n%j==0){iFlag=0;break;}}if(iFlag)printf(“\n%d”,n);
}}0不是素數(shù);1是素數(shù)。枚舉所有數(shù)構(gòu)造,測試條件假定n是素數(shù)。如果n能被2到s的任意數(shù)整除,設(shè)標志退出循環(huán)。如果n是素數(shù),輸出n。程序如下:第23頁,共31頁,2023年,2月20日,星期三n為枚舉變量,枚舉初值100,枚舉終值999。測試是否滿足條件,滿足條件輸出n。#include<stdio.h>voidmain(void){intn,a,b,c;
for(n=100;n<=999;n++){
a=n/100;b=n%100/10;c=n%10;
if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);
}}枚舉所有三位數(shù)構(gòu)造條件測試條件取n的百位a、十位b、個位c。
⒉求水仙花數(shù)(條件:三位數(shù)的個、十、百位的立方和等于該數(shù)。153==13+53+33)。第24頁,共31頁,2023年,2月20日,星期三36人一次搬36塊磚,男搬4,女搬2,兩個小孩抬一塊。要一次搬完。問:男、女、小孩要多少?(要求輸出所有的方案)思考題:第25頁,共31頁,2023年,2月20日,星期三3.求ex=1+x+x2/2!+…+xn/n!前n+1項之和。迭代次數(shù)i:012…n迭代公式t=t*x/i迭代初值exp=1,t=1,(i=1~n)#include<stdio.h>voidmain(void){floatexp,x,t;inti,n;
scanf(“%f,%d”,&x,&n);t=1.0;
exp=1.0;
for(i=1;i<=n;i++){
t*=x/i;
exp+=t;
}
printf(“\n%f”,exp);}迭代初值。迭代公式。迭代過程附加條件:當(dāng)|t|<10-5,結(jié)束運算。if(fabs(t)<1e-5)break;第26頁,共31頁,2023年,2月20日,星期三(0,0)yxf(x)ab面積hx迭代求積分的方法①將[a,b]分為n等份,h=(b-a)/n;②求n個梯形面積之和,第i小面積x=x+hf1=f(x)下底s=s+(f0+f1)*h/2f0=f1迭代x初值為as初值為0f0初值為f(a)
次數(shù)為n4.用梯形法求定積分第27頁,共31頁,2023年,2月20日,星期三#include<stdio.h>/*test10.c*/voidmain(void){floata,b,f0,f1,h,x,s=0.0;intn,i;scanf(“%f,%f,%d”,&a,&b,&n);h=(b-a)/n;
x=a;f0=x*x+12.0*x+4.0;
for(i=0;i<n;i++){
x=x+h;f1=x*x+12.0*x+4.0;s=s+(f0+f1)*h/2.0;f0=f1;
}
printf(“%f”,s);}迭代初值。迭代循環(huán)程序如下:第28頁,共31頁,2023年,2月20日,星期三迭代次數(shù):i=1~n迭代初值:s=0.0,t=a迭代公式:t=t*10+a#include<stdio.h>voidmain(void){floats,t;inti,a,n;
do{scanf(“%d,%d”,&a,&n);
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)魚技巧與知識培訓(xùn)課件
- 2025年度海洋動物運輸與供應(yīng)鏈管理合同3篇
- 綠森鋼化中空玻璃遷擴建項目可行性研究報告模板-立項拿地
- 全國清華版信息技術(shù)小學(xué)四年級下冊新授課 第4課 獨特景觀-在幻燈片中插入文本框 說課稿
- Unit7 Grammar Focus 說課稿 2024-2025學(xué)年人教版英語七年級上冊
- 貴州省安順市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版競賽題(下學(xué)期)試卷及答案
- 安徽省合肥市新站區(qū)2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試卷(含答案)
- 二零二五年度周轉(zhuǎn)材料租賃與施工現(xiàn)場安全生產(chǎn)合同3篇
- 陜西省商洛市(2024年-2025年小學(xué)六年級語文)部編版小升初真題(上學(xué)期)試卷及答案
- 貴州黔南經(jīng)濟學(xué)院《手繪表現(xiàn)技法景觀》2023-2024學(xué)年第一學(xué)期期末試卷
- 事業(yè)單位公開招聘工作人員政審表
- GB/T 35199-2017土方機械輪胎式裝載機技術(shù)條件
- GB/T 28591-2012風(fēng)力等級
- 思博安根測儀熱凝牙膠尖-說明書
- 信息學(xué)奧賽-計算機基礎(chǔ)知識(完整版)資料
- 數(shù)字信號處理(課件)
- 出院小結(jié)模板
- HITACHI (日立)存儲操作說明書
- (新版教材)蘇教版二年級下冊科學(xué)全冊教案(教學(xué)設(shè)計)
- 61850基礎(chǔ)技術(shù)介紹0001
- 電鏡基本知識培訓(xùn)
評論
0/150
提交評論