循環(huán)結構程序設計_第1頁
循環(huán)結構程序設計_第2頁
循環(huán)結構程序設計_第3頁
循環(huán)結構程序設計_第4頁
循環(huán)結構程序設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

循環(huán)結構程序設計第1頁,課件共39頁,創(chuàng)作于2023年2月5.1循環(huán)的概念計算機解題過程中,經(jīng)常遇到要編制循環(huán)結構,即大量問題均離不開循環(huán)結構,(有人說:沒有循環(huán)結構等于沒有計算機)

如求:1+2+3+….+100

求:sinx=x-x3/3!+x5/5!-x7/7!+……

幾乎所有數(shù)學函數(shù)均需展開成多項式,求其近似值,均離不開循環(huán)結構.第2頁,課件共39頁,創(chuàng)作于2023年2月循環(huán)結構準備部分工作部分控制部分出循環(huán)結束修改部分未結束左邊是先執(zhí)行后判斷右邊是先判斷后執(zhí)行準備部分控制部分工作部分修改部分出循環(huán)未結束結束第3頁,課件共39頁,創(chuàng)作于2023年2月組成作用準備部分完成賦初值,(如累加變量清零,累乘變量置1等),設置循環(huán)次數(shù)工作部分反復多次被執(zhí)行的操作修改部分保證循環(huán)做有規(guī)律的變化控制部分可按已設置的循環(huán)次數(shù)或控制循環(huán)條件結束循環(huán)第4頁,課件共39頁,創(chuàng)作于2023年2月5.2循環(huán)結構的實現(xiàn)5.2.1while語句構成當型循環(huán)格式:while(表達式)語句例求1+2+3+----+100的值(教材例子5.1)#include<stdio.h>voidmain(){inti=1,sum=0;/*準備部分*/while(i<=100)/*控制部分*/{sum=sum+i;/*工作部分*/i=i+1;/*修改部分*/}printf("sum=%d\n",sum);printf("i=%d\n",i);//退出循環(huán)時候i的數(shù)值

}第5頁,課件共39頁,創(chuàng)作于2023年2月5.2.1do..while語句構成直到型循環(huán)格式:do語句while(表達式)

例求1+2+3+----+100的值(教材例子5.1)#include<stdio.h>voidmain(){inti=1,sum=0;/*準備部分*/do{sum=sum+i;/*工作部分*/i=i+1;}/*修改部分*/while(i<=100);/*控制部分*/ printf("sum=%d\n",sum);printf("i=%d\n",i);//退出循環(huán)時候i的數(shù)值}第6頁,課件共39頁,創(chuàng)作于2023年2月while與dowhile區(qū)別voidmain()voidmain(){intsum=0,i;{intsum=0,i;scanf("%d",&i);scanf("%d",&i);while(i<=10)do{sum+=i;{sum+=i;i++;i++;}}while(i<=10);printf("%d\n",sum);printf("%d\n",sum);}}當輸入i=0,二個程序結果相同,求1+2+…..+10的值當輸入i>10,左邊程序循環(huán)一次都不執(zhí)行;

而右邊程序執(zhí)行一次第7頁,課件共39頁,創(chuàng)作于2023年2月循環(huán)語句注意事項循環(huán)體如果包括一個以上的語句需要加{}循環(huán)體中應該有可以使循環(huán)趨于結束的語句注意初始條件的值循環(huán)可以提前預知循環(huán)次數(shù)(例5.1、5.2),有時也無法判斷循環(huán)次數(shù)(例5.4、5.5),需要選取好控制部分。第8頁,課件共39頁,創(chuàng)作于2023年2月例:用0.1mm厚紙對折,問對折多少次后,其厚度超過地球直徑(12742公里)

#include<stdio.h>voidmain(){intn=1;floatans;/*n—對折次數(shù),ans—ans=1e-7;存放對折后的厚度*/while(ans<=12742){n=n+1;ans=ans*2;}printf("n=%d,ans=%f\n",n,ans);}運行結果:n=37,ans=13743.895347第9頁,課件共39頁,創(chuàng)作于2023年2月例:計算T=1+1/2+1/3+…+1/n(教材5.6)#include<stdio.h>voidmain(){floatt=0,a;inti=1,n; scanf("%d",&n);while(i<=n){ a=1.0/I; t=t+a; i++;}printf("t=%f\n",t);}第10頁,課件共39頁,創(chuàng)作于2023年2月逗號運算符及其表達式

逗號運算符:,逗號表達式格式:<表達式1>,<表達式2>,…<表達式n>

計算逗號表達式值是按自左至右的順序,先計算<表達式1>的值,再計算<表達式2>的值,...而逗號表達式值是最后一個<表達式n>的值.示例:a=1,b=2,c=3,d=a+b表達式值為3第11頁,課件共39頁,創(chuàng)作于2023年2月關于逗號表達式的說明1.其優(yōu)先級最低,結合性是自左至右2.注意逗號表達式構成的語句和非逗號表達式構成的語句區(qū)別。a=1;b=2;和a=1,b=2;3.第12頁,課件共39頁,創(chuàng)作于2023年2月#include<stdio.h>voidmain(){inta,b,c,d;a=(c=100,d=200,c+d);//注意有無括號的區(qū)別

b=(c=d=0,c+50);//注意有無括號的區(qū)別

printf("%d,%d,%d,%d\n",a,b,c,d);}運行結果:300,50,0,0第13頁,課件共39頁,創(chuàng)作于2023年2月for語句構成循環(huán)格式:for(<表達式1>;<表達式2>;<表達式3>)語句表達式1稱為初值表達式表達式2稱為控制表達式表達式3稱為步增表達式<表達式1>---<表達式3>均是C的任何一種表達式求表達式1

表達式2值非0?語句求表達式3Yfor語句的下一語句N第14頁,課件共39頁,創(chuàng)作于2023年2月利用for語句改寫例5.1(1)#include<stdio.h>voidmain(){intI,sum=0;for(i=1;i<=100;i++)sum+=i;printf("sum=%d\n",sum);}運行結果:sum=5050第15頁,課件共39頁,創(chuàng)作于2023年2月利用for語句改寫例5.1(2)#include<stdio.h>voidmain(){inti,sum;for(i=1,sum=0;i<=100;i++)sum+=i;printf("sum=%d\n",sum);}第16頁,課件共39頁,創(chuàng)作于2023年2月利用for語句改寫例5.1(3)#include<stdio.h>voidmain(){inti,sum;for(i=1,sum=0;i<=100;sum+=i,i++);printf("sum=%d\n",sum);}第17頁,課件共39頁,創(chuàng)作于2023年2月關于for語句說明1.for語句使用靈活是功能最為強大的循環(huán)語句。它可以構成當型或直到型循環(huán)。2.for語句中任何一個表達式均可省略。3.例如上例省略表達式1i=1,sum=0;for(;i<=100;sum+=i,i++);4.例如上例省略表達式3for(i=1,sum=0;i<=100;) sum+=i,i++;第18頁,課件共39頁,創(chuàng)作于2023年2月關于for語句說明4.省略表達式2for(i=1;;i++)…等價于for(i=1;1;i++)…構成一個判斷條件永遠為真的循環(huán),這樣的循環(huán)是不會結束的,稱為死循環(huán),為了防止死循環(huán)的發(fā)生,要采用別的方式退出循環(huán)。5.for的后面循環(huán)體語句可有可無,可以是一個語句;可以是多個語句,但要用{}括起來。6.for中表達式都可以省略,但括號以及分號不可以省略。第19頁,課件共39頁,創(chuàng)作于2023年2月5.3循環(huán)的嵌套在一個循環(huán)結構中的循環(huán)體中又出現(xiàn)了另外一個循環(huán)結構,稱之為循環(huán)的嵌套。while()//外循環(huán){ …. for(;;)…//內(nèi)循環(huán)

…}第20頁,課件共39頁,創(chuàng)作于2023年2月內(nèi)、外層循環(huán)可由任何循環(huán)語句構成for(;;) do{ … { … while()… for(;;)… … …} }while()循環(huán)只可以嵌套不可以交叉。不允許:第21頁,課件共39頁,創(chuàng)作于2023年2月例:打印輸出九九乘法表(教材例5.8)#include<stdio.h>voidmain(){inti,j;for(i=1;i<=9;i++) { for(j=1;j<=9;j++) {printf("%d*%d=%d",i,j,i*j); } printf("\n"); }}第22頁,課件共39頁,創(chuàng)作于2023年2月例求1!+3!+5!+7!教材例5.9#include<stdio.h>voidmain(){intjc,k,m;floatsum=0.0;for(m=1;m<=7;m=m+2){ jc=1; for(k=1;k<=m;k++) jc=jc*k; sum=sum+jc;}printf("sum=%f\n",sum);}第23頁,課件共39頁,創(chuàng)作于2023年2月例求1!+3!+5!+7!(改寫)#include<stdio.h>voidmain(){intjc,k,m;floatsum=0.0;jc=1;for(m=1;m<=7;m=m+2){ sum=sum+jc; jc=jc*(m+1)*(m+2);}printf("sum=%f\n",sum);}第24頁,課件共39頁,創(chuàng)作于2023年2月5.4break和continuebreak---退出switch語句或循環(huán)(提供一種非正常出口)continue---提早結束本次循環(huán),而不是終止循環(huán).while(表達式1){if(表達式2)continue;if(表達式3)break;}出循環(huán)

break

continue

N表達式1非0?Y第25頁,課件共39頁,創(chuàng)作于2023年2月break和continue示例#include<stdio.h>voidmain(){ intk,sum=0; for(k=1;k<100;k++) { sum=sum+k; if(sum>200)break; } printf("sum=%d",sum);}第26頁,課件共39頁,創(chuàng)作于2023年2月break和continue示例voidmain(){inti;

for(i=1;i<6;i++)

{if(i%2==1) { printf("#");

continue;

} printf("*");

}}第27頁,課件共39頁,創(chuàng)作于2023年2月循環(huán)綜合示例(求解兩個數(shù)字的最大公約數(shù)和最小公倍數(shù))#include<stdio.h>voidmain(){ inta,b,c,m,n; scanf("%d%d",&m,&n); a=m;b=n;while(a%b!=0) { if(b>a){c=a;a=b;b=c} elsea=a-b; } printf("最大公約數(shù)是%d最小公倍數(shù)是%d\n",b,m*n/b);}第28頁,課件共39頁,創(chuàng)作于2023年2月求:A,B,使AB-BA=45成立#include<stdio.h>voidmain(){inta,b,k,ans=45;for(a=1;a<10;a++)for(b=0;b<10;b++){k=(10*a+b)-(b*10+a);if(k==ans)printf("a=%d,b=%d\n",a,b);}}第29頁,課件共39頁,創(chuàng)作于2023年2月例:判斷數(shù)字是否為素數(shù)判斷數(shù)字m為質(zhì)數(shù)方法:m除以2~m-1(按定義),之間每個整數(shù)都除不盡m除以2~m/2,之間每個整數(shù)都除不盡m除以2~m的平方根,之間每個整數(shù)都除不盡第30頁,課件共39頁,創(chuàng)作于2023年2月#include<math.h>#inclue<stdio.h>voidmain(){inti,j,m,c=0;for(i=3;i<100;i++){m=sqrt(i);for(j=2;j<=m;j++)if(i%j==0)break;if(j>=m+1){printf("%d",i);c=c+1;}}printf("\nc=%d\n",c);}第31頁,課件共39頁,創(chuàng)作于2023年2月例:輸出斐波那契數(shù)列前40項

F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)#include<stdio.h>voidmain(){longintf1=1,f2=1,f3;inti=3; printf("%10ld\n",f1); printf("%10ld\n",f2);while(i<=40){ f3=f1+f2; printf("%10ld\n",f3);i++;f1=f2;f2=f3; }}第32頁,課件共39頁,創(chuàng)作于2023年2月例:輸出斐波那契數(shù)列前40項

F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)#include<stdio.h>voidmain(){longintf1=1,f2=1;

inti=1;while(i<=20){printf("%10ld%10ld\n",f1,f2);f1=f1+f2;f2=f1+f2;i=i+1;}}第33頁,課件共39頁,創(chuàng)作于2023年2月例.教材習題5.7#include<stdio.h>voidmain(){inti,j,k,n;for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf("%d",n);}printf("\n");}第34頁,課件共39頁,創(chuàng)作于2023年2月求定積分不是用解析法求準確值,而是用近似法(等效矩形法、等效梯形法、辛普生公式(Sipson)

#include<math.h>#include<stdio.h>voidmain(){inti,n;doublea,b,h,s=0,f,x;scanf("%lf,%lf,%d",&a,&b,&n);h=(b-a)/n;x=a;f=sin(a);for(i=1;i<n;i++){s=s+f*h;x=x+h;f=sin(x);}printf("s=%f\n",s);}寬為h;

高為sin(x)

ab第35頁,課件共39頁,創(chuàng)作于2023年2月等效梯形法:#include<math.h>#include<stdio.h>voidmain(){inti,n;doublea,b,h,s,f;scanf("%lf,%lf,%d",&a,&b,&n);h=(b-a)/n;s=sin(a);for(i=1;i<=n;i++){f=sin(a+i*h);s=s+2*f;}s=(s-sin(b))*h/2;printf("s=%f\n",s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論