C語(yǔ)言新教材PPT課堂課件-4(2)-循環(huán)結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言新教材PPT課堂課件-4(2)-循環(huán)結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言新教材PPT課堂課件-4(2)-循環(huán)結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言新教材PPT課堂課件-4(2)-循環(huán)結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言新教材PPT課堂課件-4(2)-循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1主要內(nèi)容: 4.4.1 while 語(yǔ)句4.4.2 do-while 語(yǔ)句4.4.3 for 語(yǔ)句4.4.4 break和continue語(yǔ)句 4.4.5 循環(huán)的嵌套4.4.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例4.4 循環(huán)結(jié)構(gòu)2循環(huán)控制C語(yǔ)言提供三種循環(huán)語(yǔ)句:while 語(yǔ)句do-while 語(yǔ)句for 語(yǔ)句3舉例:求1100之間所有整數(shù)的和i100sum=sum +i; i=i+1; 真假sum=0, i=1 輸出sum的值 sum=sum +i; i=i+1; 假真sum=0, i=1 輸出sum的值i=100當(dāng)型循環(huán)直到型循環(huán)44.4.1 用while 語(yǔ)句實(shí)現(xiàn)當(dāng)型循環(huán)格式: while (表達(dá)式

2、) 語(yǔ)句 當(dāng)表達(dá)式為真循環(huán)體語(yǔ)句表達(dá)式循環(huán)體語(yǔ)句真(非0)假(0)當(dāng)型循環(huán)注意:循環(huán)體可能一次也不被執(zhí)行進(jìn)入循環(huán)的條件5如果在while語(yǔ)句之前對(duì)變量sum賦初值為1,是否可以?程序的哪些地方應(yīng)作相應(yīng)的改動(dòng)?舉例:用while語(yǔ)句求1100之間整數(shù)和#include void main( ) int i,sum=0; i=1; while( i=100) sum=sum+i; i+; printf(1+2+3+100=%dn, sum);語(yǔ)句sum=sum+i;和語(yǔ)句i+;能否對(duì)調(diào)位置?程序的哪些地方應(yīng)作相應(yīng)的改動(dòng)? sum=0,i=1 當(dāng)i 100sum=sum+i i = i +1 輸出s

3、um的值例4.18while語(yǔ)句6 4.4.2 用do-while 語(yǔ)句實(shí)現(xiàn)直到型循環(huán)格式:do 語(yǔ)句 while (表達(dá)式) ;表達(dá)式循環(huán)體語(yǔ)句真(非0)假(0)繼續(xù)循環(huán)的條件注意:循環(huán)體至少被執(zhí)行一次 語(yǔ)句(循環(huán)體) 當(dāng)表達(dá)式為真直到型循環(huán)7舉例:用do-while語(yǔ)句求1-100之間整數(shù)和 sum=0, i=1 sum=sum +i i=i+1 當(dāng)i=100 輸出sum的值do-while語(yǔ)句#include void main( ) int i,sum=0; i=1; do sum=sum+i; i+; while( i=100 ); printf(1+2+3+100=%dn,sum)

4、;例4.18解二8 4.4.3 用for 語(yǔ)句實(shí)現(xiàn)當(dāng)型循環(huán) 格式: for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句表達(dá)式2循環(huán)體語(yǔ)句真(非0)假(0)求解表達(dá)式1求解表達(dá)式3實(shí)質(zhì)是當(dāng)型循環(huán)進(jìn)入循環(huán)的條件9for語(yǔ)句的最常用格式在for語(yǔ)句中,通常表達(dá)式1用來(lái)為循環(huán)變量賦初值,表達(dá)式2用來(lái)設(shè)置循環(huán)條件,表達(dá)式3用于循環(huán)變量增值。for 語(yǔ)句的最常用格式: for ( 循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值 ) 語(yǔ)句例: for ( i=1; i=10; i+=4 ) printf(%d ,i);輸出 1 5 9例4.23(例4.18解三):求1100之間的整數(shù)之和 sum=0; for ( i=

5、1; i=100; i+ ) sum=sum+i;printf(%d ,i);1310for語(yǔ)句for語(yǔ)句的執(zhí)行過(guò)程輸出: 1#include void main( ) int i; for( i=1; i=10; i+=4 ) printf(%d ,i); printf(%d , i);59 1311典型算法:累加、連乘累加算法之累加通式: 累加和變量=累加和變量+累加項(xiàng)如 sum = sum + i ; (i為循環(huán)變量) sum = sum + x ; (x為輸入值或某計(jì)算結(jié)果) num = num + 1; 即 num+; (計(jì)數(shù))連乘算法之連乘通式: 連乘積變量=連乘積變量*連乘項(xiàng)如

6、fac = fac * i ; (i為循環(huán)變量) fac = fac * x ; (x為輸入值或某計(jì)算結(jié)果)12累加、連乘算法舉例【例4.24】求n!【例4.19】、【例4.22】求的近似值【例】求若干數(shù)之總和及平均值【例4.35】多項(xiàng)式計(jì)算13P98例4.24 求 n!=123 n #include void main( ) int i,n; long p=1; printf(input an integer:n); scanf(%d,&n); for (i=1; i=n ; i+) p*= i; printf (n!=%ldn,p); 階乘結(jié)果用int型可能會(huì)溢出也可用while語(yǔ)句實(shí)現(xiàn)(

7、例4.20),或用do-while語(yǔ)句實(shí)現(xiàn)舉例:求n!14舉例:求的近似值(1)#include #include void main() int i=1,n; double pi=0; printf(Input an integer:n); scanf(%d,&n); while(i=n) pi+=1.0/(i*i); i+; pi=sqrt(pi*6); printf(pi=%lfn,pi);/*累加和pi,存2/6 */P90例4.19 利用以下公式求的近似值(n由鍵盤(pán)輸入,n值越大的值越精確)也可用for語(yǔ)句或do-while語(yǔ)句實(shí)現(xiàn)15舉例:求的近似值(2)累加式累加式準(zhǔn)備下一項(xiàng)準(zhǔn)備

8、下一項(xiàng)循環(huán)條件循環(huán)條件P94例4.22利用格里高公式 求的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止/*累加項(xiàng)t ,累加和pi, 分母n, 符號(hào)位s */當(dāng)型直到型/* 實(shí)現(xiàn)+1和-1交替出現(xiàn) */16求的近似值(2)#include #include void main() float pi,t,n; int s; t=1;pi=0;n=1.0;s=1; do pi=pi+t; n=n+2; s=-s; t=s/n; while(fabs(t)=1e-6); pi=pi*4; printf(pi=%10.6fn,pi);/* 實(shí)現(xiàn)+1和-1交替出現(xiàn) */*累加和pi, 累加項(xiàng)t */* 分

9、母n, 符號(hào)位s */ 掌握在循環(huán)體中實(shí)現(xiàn)正負(fù)相間的技巧例4.2217舉例:多項(xiàng)式計(jì)算#include void main() float sum,term,x;int n,k,sign;printf(Input n,x: n); scanf(%d,%f,&n,&x);sum=x; term=x; sign=1;for(k=2;k=n;k+) term*=x*x/(2*k-2)/(2*k-1); sign=-sign; sum+=sign*term; printf(sum=%fn,sum); P113例4.35 計(jì)算18例:求1100之間的整數(shù)之和#include void main( ) i

10、nt i,sum; sum=0; for( i=1 ; i=100; i+ ) sum=sum+i; printf(sum=%dn,sum);表達(dá)式1可缺?。ǖ浜蟮姆痔?hào)不能省略),將表達(dá)式1作為語(yǔ)句放到循環(huán)之前。i=1;4.4.3(2) for 語(yǔ)句的靈活使用19sum=0;#include void main( ) int i,sum; for( i=1; i=100 ; i+ ) sum=sum+i, printf(sum=%dn,sum);循環(huán)之前的賦初值語(yǔ)句可以放在表達(dá)式1中,中間用逗號(hào)間隔。例:求1100之間的整數(shù)之和for 語(yǔ)句的靈活使用 for( sum=0, i=1; i=1

11、00 ; i+ ) 20#include void main( ) int i,sum; sum=0; for (i=1;i=100; ) sum=sum+i; printf(sum=%dn,sum);表達(dá)式3可缺省(但其前的分號(hào)不能省略),將表達(dá)式3作為語(yǔ)句放到循環(huán)體的末尾。i+for 語(yǔ)句的靈活使用例:求1100之間的整數(shù)之和 i+; 21#include void main( ) int i,sum; for (sum=0 , i=1; i=100 ; i+) printf(sum=%dn,sum);循環(huán)體中的內(nèi)容可以放在表達(dá)式3中,但要在圓括號(hào)的后面加一個(gè)分號(hào)。sum= sum +i;

12、例:求1100之間的整數(shù)之和for 語(yǔ)句的靈活使用for (sum=0,i=1; i=100; sum=sum+i, i+);22#include void main( ) int i,sum; sum=0; for( i=1 ; i=100; ) sum=sum+i; printf(sum=%dn,sum);表達(dá)式1、表達(dá)式3可同時(shí)缺省,但表達(dá)式2前后的分號(hào)都不能省略。while(i=100) for循環(huán)可替代while循環(huán)例:求1100之間的整數(shù)之和for 語(yǔ)句的靈活使用i=1;i+i+; 23#include void main( ) int i,sum; sum=0; for(i=1;

13、 ; i+) sum=sum+i; printf(sum=%dn,sum);else break; /*退出循環(huán)*/i=100例:求1100之間的整數(shù)之和for 語(yǔ)句的靈活使用表達(dá)式2可缺省,放在循環(huán)體之中,但for語(yǔ)句中的兩個(gè)分號(hào)都不能省略。if (i=100)此處為空相當(dāng)于1(永真條件)244.4.4 break語(yǔ)句和continue語(yǔ)句break 語(yǔ)句格式: break;功能: 提前結(jié)束整個(gè)循環(huán),從循環(huán)體中無(wú)條件跳轉(zhuǎn)到循環(huán)語(yǔ)句后面執(zhí)行??捎糜趕witch語(yǔ)句和循環(huán)結(jié)構(gòu)中。continue語(yǔ)句格式: continue;功能: 結(jié)束本輪循環(huán),即在本輪循環(huán)中,不再執(zhí)行循環(huán)體中continue后

14、面的語(yǔ)句。只能用于循環(huán)結(jié)構(gòu)。25break語(yǔ)句和continue語(yǔ)句的比較(P105舉例)輸出: 1 2! void main( ) int n; for(n=1;n=8;n+) if(n%3=0)break; printf(%4d,n); printf(!n); void main( ) int n; for (n=1;n=8;n+) if(n%3=0)cotinue; printf(%4d,n); printf(!n); 輸出: 1 2 4 5 7 8! 26break語(yǔ)句的使用算法:假設(shè)將512分解為15i和512-15i兩個(gè)數(shù),若512-15i能被13整除, 15i和512-15i就是

15、一組解#include void main( ) int i;for(i=1; ;i+) if( !(512-i*15)%13) ) break;printf(%d+%d=512n, i*15, 512-i*15); P102例4.28 將數(shù)字512表示成兩個(gè)數(shù)的和,這兩個(gè)數(shù)分別為15和13的倍數(shù),只需找到一個(gè)解即可。 代表:(512-i*15)%13=027break語(yǔ)句的使用算法:假設(shè)將512分解為i和512-i兩個(gè)數(shù),若i能被15整除且 512-i能被13整除,i和512-i就是一組解#include void main( ) int i;for(i=1; ;i+) if(!(i%15)

16、 &!(512-i)%13) ) break;printf(%d+%d=512n, i, 512-i); 例4.28 另解28例4.28 改為找到所有的解 void main( ) int i;for(i=1; i512 ; i+) if(!(i%15) & !(512-i)%13) ) printf(%d+%d=512n, i, 512-i); 29break語(yǔ)句的使用算法:假設(shè)將512分解為i和512-i兩個(gè)數(shù),若i能被15整除且 512-i能被13整除,i和512-i就是一組解#include void main( ) int i;for(i=1; ;i+) if(!(i%15) &!(

17、512-i)%13) ) break;printf(%d+%d=512n, i, 512-i); 例4.28 另解30P121習(xí)題4.20 輸入若干個(gè)數(shù)(以0結(jié)束輸入),求總和并統(tǒng)計(jì)數(shù)的個(gè)數(shù)#include void main( ) int i; float x,sum=0; for( i=1; i=100 ; i+ ) scanf(%f,&x); if (x=0) break; sum+=x; printf(sum=% .0f,count=%dn,sum,i);i-1 )break語(yǔ)句的使用31continue語(yǔ)句的使用P103例4.29 輸出100200之間所有能夠被7或9整除的數(shù)#inc

18、lude void main( ) int i;for(i=100;i=200;i+) if(i%7!=0)&(i%9!=0) continue;printf(%5d ,i); if(i%7=0)|(i%9=0) printf(%5d ,i);等效于:32continue語(yǔ)句的使用例4.29改進(jìn)輸出格式:#include void main( ) int i,n=0;for(i=100;i=200;i+) if(i%7!=0)&(i%9!=0) continue;printf(%5d ,i);n+;if(n%5=0) printf(n); /*當(dāng)n被5整除時(shí)換行,即一行輸出5個(gè)數(shù)*/ 33br

19、eak語(yǔ)句和continue語(yǔ)句的使用void main( ) int i,a=0,b=0,c=0,d=0; for(i=1;i=4;i+) switch(i) case 1: a=1; continue; case 2: b=2; case 3: c=3; break; case 4: d=4; printf(%d%d%d%dn,a,b,c,d); 輸出: 1230 1230 1234 P106舉例344.4.5 循環(huán)嵌套一個(gè)循環(huán)體中又包含了另一個(gè)完整的循環(huán)結(jié)構(gòu),叫做循環(huán)的嵌套。三種循環(huán)結(jié)構(gòu)可以互相嵌套。循環(huán)嵌套的執(zhí)行過(guò)程是:外循環(huán)執(zhí)行一次,內(nèi)循環(huán)執(zhí)行一個(gè)全過(guò)程。35#include voi

20、d main( ) int i,n=10,j; long s=0,t; for ( i=1; i=n; i+) s+=t; printf (s=%ldn,s);舉例:計(jì)算s=1!+2!+3!+ +10! P108例4.31 雙重循環(huán)實(shí)現(xiàn): 外循環(huán)計(jì)算累加; 內(nèi)循環(huán)求i!t=1;for (j=1;j=i;j+) t=t*j;循環(huán)嵌套36#include void main( ) int i,n=10; long s=0,t=1; for ( i=1; i=n; i+) t*=i; s+=t; printf (s=%ldn,s);舉例:計(jì)算s=1!+2!+3!+ +10! 另解:用單重循環(huán)實(shí)現(xiàn)(P

21、98例4.25) 374.4.6 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例累加、連乘特殊圖形輸出窮舉算法:百錢(qián)買(mǎi)百雞,求水仙花數(shù)數(shù)的分離:求水仙花數(shù),例4.33迭代、遞推:求Fabonacci數(shù)列,猴子吃桃問(wèn)題, 牛頓迭代法求方程根二分法求方程根數(shù)的判別:判素?cái)?shù)輾轉(zhuǎn)相除法求最大公約數(shù)數(shù)的統(tǒng)計(jì):求最大、最小數(shù)等梯形法求定積分38 舉例:特殊圖形輸出(1)#include void main( ) int i, j; for( i=1 ; i=8 ; i+ ) for( j=1; j=i ; j+ ) printf(*); printf(n); */*外循環(huán)控制輸出圖形的行數(shù)*/*內(nèi)循環(huán)控制每行輸出的字符*/輸出i個(gè)

22、*號(hào)輸出一個(gè)換行符39 舉例:特殊圖形輸出(2)#include void main( ) int i, j, k; for( i=1 ; i=8 ; i+ ) for( j=1; j=i ; j+ ) printf( ); for( k=1; k=3; k+) printf(*); printf(n); * * * * * * * */*外循環(huán)控制輸出圖形的行數(shù)*/輸出i個(gè)空格輸出3個(gè)*號(hào)輸出一個(gè)換行符40 舉例:特殊圖形輸出(3)#include void main( ) int i, j, k; for( i=1 ; i=8 ; i+ ) for( j=1; j=8-i ; j+ ) p

23、rintf( ); for( k=1; k=2*i-1; k+) printf(*); printf(n); * * * * * * */*外循環(huán)控制輸出圖形的行數(shù)*/輸出(8-i)個(gè)空格輸出(2*i-1)個(gè)*號(hào)輸出一個(gè)換行符41 舉例:特殊圖形輸出(4)#include void main( ) int i, j, k; for( i=8 ; i=1 ; i- ) for( j=1; j=8-i ; j+ ) printf( ); for( k=1; k=2*i-1; k+) printf(*); printf(n); * * * * * * * * /*外循環(huán)控制輸出圖形的行數(shù)*/輸出(8

24、-i)個(gè)空格輸出(2*i-1)個(gè)*號(hào)輸出一個(gè)換行符P108例4.3042窮舉法舉例:解百錢(qián)買(mǎi)百雞問(wèn)題百錢(qián)買(mǎi)百雞問(wèn)題(出自算經(jīng),古代數(shù)學(xué)家張丘建):雞翁一,值錢(qián)五;雞母一,值錢(qián)三;雞雛三,值錢(qián)一。百錢(qián)買(mǎi)百雞,問(wèn)雞翁、母、雛各幾何。變量cocks:存放公雞數(shù)量,取值020變量hens:存放母雞數(shù)量,取值033變量chicks:存放小雞數(shù)量,取值0100滿足兩條件:cocks + hens + chicks =100 (只) 5*cocks + 3*hens + chicks/3=100 (元)P122習(xí)題4.2343百錢(qián)買(mǎi)百雞程序1#include void main( ) int cocks,h

25、ens,chicks; for (cocks=0 ; cocks=20 ; cocks+ ) for (hens=0 ; hens=33 ; hens+ ) for (chicks=0 ; chicks=100 ; chicks+ ) if (cocks+hens+chicks=100 & cocks*5+hens*3+chicks/3=100 & chicks%3=0) printf(%d,%d,%dn,cocks,hens,chicks); 44百錢(qián)買(mǎi)百雞程序2#include void main( ) int cocks,hens,chicks; for (cocks=0 ; cocks

26、=20 ; cocks+ ) for(hens=0 ; hens=33 ; hens+ ) chicks=100-cocks-hens; if (cocks*5+hens*3+chicks/3=100 & chicks%3=0) printf(%d,%d,%dn,cocks,hens,chicks); 窮舉法其它應(yīng)用:百馬百擔(dān)問(wèn)題;雞兔同籠問(wèn)題;整錢(qián)換零錢(qián);密碼破譯;猜數(shù)游戲;求水仙花數(shù)45窮舉法舉例:求水仙花數(shù)#includevoid main() int i,j,k,m1,m2;printf(narcissus numbers are: );for(i=1;i=9;i+) /*百位數(shù)*/

27、for(j=0;j=9;j+) /*十位數(shù)*/ for(k=0;k=9;k+) /*個(gè)位數(shù)*/ m1=i*100+j*10+k; /* m1為三個(gè)數(shù)字分別為i,j,k的三位數(shù) */m2=i*i*i+j*j*j+k*k*k; /* m2為三個(gè)數(shù)字的立方和 */if(m1=m2) printf(%4d,m1); /* 輸出滿足水仙花條件的數(shù) */ printf(n); P109例4.32 一個(gè)三位數(shù)若其各位數(shù)字立方和等于該數(shù)本身,則為水仙花數(shù),如:153=13+53+33 則153是水仙花數(shù)。46 數(shù)的分離舉例:for( i=100;i=999;i+)a=i的百位數(shù)b=i的十位數(shù)c=i的個(gè)位數(shù)i

28、=a3+b3+c3YNi是水仙花數(shù)求水仙花數(shù)另解47數(shù)的分離舉例例4.33 輸入132767之間的整數(shù),把這個(gè)整數(shù)顯示為一系列數(shù)字,每組數(shù)字間隔兩個(gè)空格。算法一: P110解法(了解)算法二:用數(shù)組處理 -更好!48遞推/迭代算法利用遞推(迭代)公式由前一項(xiàng)或前幾項(xiàng)推算出后一項(xiàng) 關(guān)鍵在遞推(迭代)公式的構(gòu)造例如(P101) Fabonacci數(shù)列(兔子數(shù)列)各項(xiàng)值分別為: 1,1,2,3,5,8, 第1項(xiàng)和第2項(xiàng)值都是1,從第3項(xiàng)開(kāi)始,每一個(gè)項(xiàng)值都是它的相鄰前2項(xiàng)的項(xiàng)值之和,即49P101例4.27 循環(huán)一次求Fabonacci數(shù)列的2個(gè)數(shù)1x1, 1x2 for i=1 to 10輸出2個(gè)項(xiàng)

29、x1、x2值x1+x2 x1x2+x1 x2#include void main ( ) int i, x1=1, x2=1; for (i=1;i=10;i+) printf(%d %d ,x1,x2); x1=x1+x2; x2=x2+x1; 遞推/迭代舉例:求Fabonacci數(shù)列前20項(xiàng)值50求Fabonacci數(shù)列前20項(xiàng)值#include void main ( ) int i, x1=1, x2=1; for (i=1;i=10;i+) printf(%10d%10d,x1,x2); if (i%2=0) printf(n); x1=x1+x2; x2=x1+x2; 實(shí)現(xiàn)換行,保

30、證每行輸出2組(4個(gè))數(shù)據(jù)例4.27 改進(jìn)輸出格式保證每個(gè)數(shù)據(jù)占10列511x1, 1x2輸出2個(gè)項(xiàng)x1、x2值 for i=3 to 20 x1+x2 x3輸出1個(gè)項(xiàng)fn值x2 x1x3 x2求Fabonacci數(shù)列前20項(xiàng)值例4.27另解:循環(huán)一次求Fabonacci數(shù)列的1個(gè)數(shù)52求Fabonacci數(shù)列前20項(xiàng)值#include void main ( ) int i, x1=1, x2=1, x3; printf(n%10d%10d,x1,x2);/* 循環(huán)之前先輸出頭2項(xiàng)*/ if(i%4=0)printf(n); /* 實(shí)現(xiàn)每行輸出4個(gè)數(shù)據(jù) */ for (i=3;i=20;i+

31、) x3=x1+x2; printf(%10d,x3); x1=x2; x2=x3; printf(n); 例4.27 另解53遞推/迭代舉例:猴子吃桃問(wèn)題 P91-92例4.21 猴子摘下了一堆桃子,第一天吃總數(shù)的一半多一個(gè),第二天吃剩下的一半多一個(gè),以后每天都吃前一天剩下的一半多一個(gè),到第十天想再吃時(shí)剩一個(gè),求第一天共有多少個(gè)桃子?設(shè)第110天未吃前的桃子數(shù)分別為X1,X2,X10 Xn=Xn-1/2-1 X10=1迭代公式為:54 猴子吃桃問(wèn)題 P91-92例4.21#include void main ( ) int k,x1,x2; k=1; x2=1; /*已知第10天的桃子數(shù)*/

32、 while(k=9) x1=(x2+1)*2; /*求第(10-k)天 x2=x1; 的桃子數(shù)*/ k+; printf(Total number=%dn , x1); 另解:更簡(jiǎn)潔!#include void main ( ) int k,x; x=1; /*已知第10天的桃子數(shù)*/ for (k=9;k=1;k-) x=(x+1)*2; /*求第k天的桃子數(shù)*/ printf(Total number=%dn ,x); 55P122習(xí)題4.29 用牛頓迭代法(牛頓切線法)求方程x3+4x2-10=0 在0,3之間(或1.5附近)的根。 牛頓迭代法求方程的根舉例設(shè)xk是方程f(x)=0的一

33、個(gè)近似根導(dǎo)數(shù)的幾何意義即切線的斜率,得出: 56因此, 令 =x3+4x2-10 =(x+4)*x)*x-10 則 =3x2+8x = (3*x+8)*x牛頓迭代法求根反復(fù)迭代,直到前后兩次求出的x的差的絕對(duì)值小于10-5一元多項(xiàng)式的分層計(jì)算比直接計(jì)算減少計(jì)算量。牛頓迭代公式習(xí)題4.2957用牛頓迭代法求根N-S圖 x=1.5 x0=x f= (x0+4)*x0)*x0-10 f1= (3*x0+8)*x0 x=x0-f/f1 當(dāng)|x-x0|=1e-5 輸出方程的根x習(xí)題4.2958二分法求方程的根舉例P111例4.34 用二分法求方程x3+1.1x2+0.9x-1.4=0的根。 100200

34、Y-100 x1x2f(x1)xf(x2)f(x)f(x)X1、x2的中點(diǎn)x=(x1+x2)/2059二分法求根思路基本思路:取區(qū)間兩端點(diǎn)x1和x2,(1)若f(x1)、f(x2)符號(hào)相反,則在(x1,x2)區(qū)間內(nèi)有一實(shí)根; 取(x1,x2)的中點(diǎn)x, 若f(x1)、f(x)符號(hào)相反,則實(shí)根在(x1,x)區(qū)間內(nèi),改設(shè)x2=x,區(qū)間減半; 若f(x1)、f(x)符號(hào)相同,則實(shí)根在(x,x2)區(qū)間內(nèi),改設(shè)x1=x,區(qū)間減半; 如此反復(fù),不斷縮小區(qū)間,直到區(qū)間很小(|x1-x2|10-6),或者|f(x)|10-6 ,則根為x。(2)若f(x1)、f(x2)符號(hào)相同,則在(x1,x2)區(qū)間內(nèi)無(wú)實(shí)根。

35、60二分法求根程序#include#includevoid main() float x,x1,x2,y1,y2,y; do printf(Input x1,x2: n); scanf(%f,%f,&x1,&x2); y1=(x1+1.1)*x1+0.9)*x1-1.4; y2=(x2+1.1)*x2+0.9)*x2-1.4; while(y1*y2=0); /*使輸入的x1、x2滿足f(x1)*f(x2)0) x1=x; /*若f(x)*f(x1)0,根在區(qū)間 (x,x2)內(nèi) */ else x2=x; /*若f(x)*f(x1)=1e-6); /*或while(fabs(x1-x2)=1e

36、-6);*/ printf(A root of equation is: %8.2fn,x); 例4.34 61數(shù)的判別舉例:判斷整數(shù)m是否為素?cái)?shù)素?cái)?shù)即為質(zhì)數(shù),如果一個(gè)整數(shù)只能被1或者它本身整除,這個(gè)數(shù)就稱為是素?cái)?shù)。判斷素?cái)?shù)的思路是:讓m被2m/2之間所有的整數(shù)整除,如果m能被2m/2 之中的任何一個(gè)整數(shù)整除,則m一定不是素?cái)?shù);如果在2m/2之間不存在能被m整除的整數(shù),則m是素?cái)?shù)。P114例4.3662判斷整數(shù)m是否為素?cái)?shù)算法N-S圖輸入m的值 k= m/2 for i=2 to k 真 假 break 結(jié)束循環(huán) 真 假輸出m是素?cái)?shù)輸出m不是素?cái)?shù)m%i=0ik或i=k+1, 或i=k+1循環(huán)結(jié)

37、束后根據(jù) i的值來(lái)決定m是否為素?cái)?shù)63判斷整數(shù)m是否為素?cái)?shù)程序#include void main( ) int m,i,k; scanf(%d,&m); k=m/2;for ( i=2 ; ik) printf(n%d is a prime number.n,m); else printf(n%d is not a prime number n,m); /*可用 k=sqrt(m);替代,減少判斷次數(shù)*/64 for m=100 to 200 輸出m 真 假 for i=2 to k k= sqrt(m) 真 假 break 結(jié)束循環(huán)m%i=0ik舉例:輸出100200之間的所有素?cái)?shù)65P115例4.37輾轉(zhuǎn)相除法求最大公約數(shù)舉例 輸入m、n 將 m、

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論