版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章 C語言的基本控制結(jié)構(gòu),Chapter 3 Control Flow,問題,#include #include void main(void){ float a,b,c,x1,x2; scanf(“%f,%f,%f”,&a,&b,&c); x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a); x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a); p
2、rintf(“x1=%7.2f\nx2=%7.2f”,x1,x2);},b*b-4ac<0?,一元二次方程根求解算法描述,b2-4ac=0?,,yes,,求等根,,,no,,,b2-4ac>0?,yes,,求實根,,no,,,求復(fù)根,,,,問題:如何構(gòu)造條件? 如何根據(jù)條件實現(xiàn)不同算法?,3.1 程序的三種控制結(jié)構(gòu),結(jié)構(gòu)化程序設(shè)計是軟件設(shè)計的第三次革命。結(jié)構(gòu)化程序設(shè)計的基礎(chǔ)是采用三種程序的控制結(jié)構(gòu)。,1966
3、年BÖHM &Jacopini 證明:只要三種控制結(jié)構(gòu)就能表達用一個入口和一個出口框圖所能表達的任何程序邏輯。,三種控制結(jié)構(gòu)如下:,⒈順序結(jié)構(gòu)Sequence,算法描述: f; g;,框圖:,,f;,,g;,,⒉選擇結(jié)構(gòu)Selection(分支結(jié)構(gòu)),算法描述: if(e) f; else g;,框圖:,,e?,yes,,,f;,,,,no,,,g;,,
4、,,⒊循環(huán)結(jié)構(gòu)Repetition,⑴當型循環(huán),while c is true do f,,c?,,f,YES,,,,,NO,,,,,⑵直到循環(huán),do f until c is false,,f,,c?,YES,,,,NO,,三種控制結(jié)構(gòu)有如下共同的特點:,一個入口和一個出口;無死語句;無死循環(huán)。,如何構(gòu)造條件 ?,⒋復(fù)合語句 CompoundStatement,概念:C語言可以用{ }包括一系列的語句。一對{ }所
5、包含的內(nèi)容稱為一個復(fù)合語句。其中可以含有0到多條C語言語句。,#include void main (void) { int a,b; scanf(“%d,%d”,&a,&b); { int temp; temp=a; a=b; b=temp; } printf(“%d,%d”,a,b);},,復(fù)合語句,,
6、復(fù)合語句,復(fù)合語句可以嵌套,凡是可以出現(xiàn)單一語句的地方都可以使用復(fù)合語句。,復(fù)合語句的作用:,⒈作為分支和循環(huán)的塊。,⒉作為標識符的作用域。,交換算法演示,3.2 關(guān)系運算和邏輯運算,⒈關(guān)系運算(Relational Operator),關(guān)系運算是比較兩個表達式的數(shù)值相互關(guān)系的運算。,關(guān)系運算規(guī)則:參加運算的表達式的從左到右按關(guān)系運算符提供的關(guān)系進行比較,滿足關(guān)系得到整型值1 , 不滿足關(guān)系得到整型值0。,int a=1,b=3
7、,c,d;c=a>b ; d=a+2<=b+3;,⒉邏輯運算(Logical Operator),邏輯運算運算時判斷對象真、假的運算。C語言沒有提供邏輯類型。任何類型的值都可以表示邏輯狀態(tài),如下表:,運算對象非0代表邏輯真,是0代表邏輯假。也就是說任何類型的量都有邏輯值。,邏輯運算的結(jié)果用整型值表示。運算結(jié)果為真時,得到整型值1;運算結(jié)果為假時,得到整型值0。,int a=2,b=0; a
8、 b a+b,C語言的邏輯運算,其中,!運算是單目運算。,邏輯運算演示,⒊復(fù)雜邏輯關(guān)系的表示,在實際應(yīng)用中,經(jīng)常會遇到描述復(fù)雜的關(guān)系。如:判斷 x是否大于等于5或小于3。此類關(guān)系的描述在程序設(shè)計中會大量使用。,,,,,,0,3,5,x=5,,0,-2,3,,,,-2<x<3 ? x=4,-2<x&&x<3,表示數(shù)值關(guān)系的原則: 開放區(qū)間用或; 閉
9、合區(qū)間用與。,思考題,⒈判斷是否在一、三象限的表達式。,⒉判斷是否在如圖圓環(huán)內(nèi)的表達式。,,,,sqrt(x),代表對x開平方。,⒊ch為字符變量,判斷ch是否為字母的表達式。,(ch>=’a’&&ch=’A’&&ch<=‘Z’),不是字母的表達式?,⒋運算的優(yōu)先級,C 語言允許所有基本類型的量參加同一表達式的運算,也允許所有類型的運算符出現(xiàn)在一個表達式中。因此,表達式值的類型如何確定,運
10、算的先后順序如何確定,必須通過一套規(guī)則解決。,為了便于調(diào)整優(yōu)先級,設(shè)置()為最高優(yōu)先級。相同優(yōu)先級存在一個順序稱為結(jié)合順序,結(jié)合順序有從右向左或從左向右。,⑴運算優(yōu)先級,第一原則:單目運算的優(yōu)先級高于雙目運算。,第二原則:,算術(shù)運算,,關(guān)系運算,,邏輯運算,,賦值運算,表達式優(yōu)先級舉例說明:,++a-b>c+d&&a>=b*34,,①,,②,,③,,④,,⑤,,⑥,,⑦,注意:在無法確定優(yōu)先級時,加()區(qū)
11、分。簡化表達式。,c=b*=a+2,,c=(b*=(a+2)),優(yōu)先級總表,優(yōu)先級特例,⒈自加、自減運算優(yōu)先級遵循原則: 前置:先運算后引用; 后置:先引用后運算。,#include void main(void){ int a=3,b; b=a+++a++; printf(“b=%d”,b); b=++a+(++a); printf(“b=%d”,b);},CHAP3EX0,
12、⒉在邏輯運算中,如果邏輯值能夠確定,則不再進行運算。,int a=0,b=0++a || ++b; printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/,++,CHAP3EX1,3.3 分支結(jié)構(gòu)(選擇結(jié)構(gòu)Selection),⒈if 及 if-else 的三種結(jié)構(gòu)。,由標準的分支結(jié)構(gòu)可以演化成單分支、多分支結(jié)構(gòu)。C語言的分支語句有if 、if – else、switch三
13、種。,⑴if語句,格式:if(expression)statement;,語句,表達式,非0為yes,0為no。,語句,可以是復(fù)合語句。,流程圖:,,e?,,,statement;,,,,,yes,no,舉例:,#include void main(void){ char ch; ch=getchar( ); if(ch>=‘a(chǎn)’&&ch<=‘z’) ch - =32;
14、putchar(ch);},CHAP3EX2,⑵ if – else 結(jié)構(gòu),格式: if(expression) stat1;else stat2;,語句或復(fù)合語句。,流程圖:,,e?,false,,,stat2;,,,stat1;,,,,,,true,入口,出口,舉例:輸出| x |。,#include void main (void){ int x ; scanf ( “%d
15、” , &x); if (x>=0) printf (“%d” , x); else printf( “%d” , -x);},⑶ if –else if結(jié)構(gòu)(Muliline ),格式: if(e1) stat1; else if(e2) stat2;
16、 else if(e3) stat3; … else if(en-1) statn-1; else statn;,框圖:,,e1?,t,,stat1;,,,f,,,e2?,t,,stat2;,,出口,f,,,en-1?,t,,statn-1;,,f,,,st
17、atn;,,,n-1個條件,滿足某個條件,執(zhí)行對應(yīng)的語句,然后到出口。,if else if結(jié)構(gòu)舉例:,征稅問題: 1000以下稅率為3% 1000~2000稅率為4% 2000~3000稅率為5% 3000以上稅率6%輸入收入,求應(yīng)繳稅款。,#include void main(void){ float x ,rate; s
18、canf(“%f ”,&x); if(x<1000) rate=.03; else if(x<2000) rate=.04; else if(x<3000) rate=.05; else rate=.06; printf(“%f ”,x*rate);},3/100?,⑷if語句的嵌套,對于如下的結(jié)構(gòu): if(e1) stat1; else
19、 stat2;,在stat1或stat2中又含有if結(jié)構(gòu):if(e2) stat3;else stat4;稱為if結(jié)構(gòu)的嵌套。各種if結(jié)構(gòu)都可以嵌套。,如求符號函數(shù): -1 (x0),,#include void main ( void){ int x,y ; scanf (“%d” , &x); if (x<0) y=-1;
20、 else if (x==0) y=0; else y=1; printf (“x=%d,y=%d\n”,x,y) ;},外層,內(nèi)層,在外層else語句中,含有一個if結(jié)構(gòu)。,說明:,①書寫采取縮進形式,便于區(qū)分。,,,,內(nèi)層縮進。,②else與最近的if 相匹配,從內(nèi)到外。,y=-1;if (x!=0) if
21、(x>0) y=1;else y=0;,x==0結(jié)果?,舉例:求一元二次方程ax2+bx+c=0的根。,#include #include void main(void){ float a,b,c,d,x1,x2; scanf(“%f,%f,%f”,&a,&b,&c); d=b*b-4.0*a*c; if(fabs(d)0) {
22、 printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a)); printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a)); } else { printf(“\nx1=%f+ i %f”,-b/(2.0*a),(float)sqrt(-
23、d)/(2.0*a)); printf(“\nx2=%f - i %f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a)); } }},外層,,內(nèi) 層,,求相等實根。,求不等實根。,求共扼復(fù)根。,CHAP3EX4,判斷實型量相等或不等用誤差的方法。,flaot a=1.0/*a=1.000001或0.999999*/a==1.0?,⒉switc
24、h語句(多分支結(jié)構(gòu)),格式:switch (expression) { case 常量表達式1: statement 1; case 常量表達式2: statement 2; … case 常量表達式n-1: statement n-1; default : statement n; },只能是整型或字符型表達式。,整
25、型字符型常量表達式。表達式的值要互不能相等!,流程:,①先求expression的值。,②依次比較expression和各常量表達式的值。,③如果與第i個常量表達式相等,則執(zhí)行第i條以后的語句。,④如果都不相等,則執(zhí)行default以后的語句。,語句標號的概念:,#include void main(void){ char grade; grade=getchar( ); switch(grade) {
26、 case ‘A’: printf (“90—100\n”); case ‘B’: printf (“80—89\n’); case ‘C’: printf (“70—79\n”); case ‘D’: printf (“60— 69\n”); case ‘E’: printf (“<60\n”); default : printf (“
27、error\n”); }},CHAP3EX5,語句標號。,,,,,break語句:,格式: break;,作用:中斷switch流程。,break; break; break; break;break;,CHAP3EX6,例:輸出五分制對應(yīng)的百分制范圍。,#include void main(void){ char chGrad; chGrad=getchar( ); switch(chGr
28、ad) { case ‘a(chǎn)’: case ‘A’: printf(“90—100\n”); break; case ‘b’: case ‘B’: printf(“80—89\n”); break; case ‘c’: case ‘C’: printf(“70—79\n”); break; case ‘d’:
29、 case ‘D’: printf(“60—69\n”); break; case ‘e’: case ‘E’: printf(“<60\n”);break; default : printf(“Data Error!\n”); }},多個標號可以共用相同的語句。,default語句可以省略。,3.4 循環(huán)結(jié)構(gòu)(Repetition),程序
30、經(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
31、, do while,for,⒈while 循環(huán)(當型循環(huán)),格式: while(expression) statement;,表達式:值非0,表示滿足條件;值為0代表不滿足條件。,語句(復(fù)合語句),重復(fù)執(zhí)行部分(循環(huán)體)。,流程:,,e?,true,,statement;,,,,,,,,,false,含有使條件趨假的語句。,舉例:,求 s= 1+2+3+4+…+1
32、00,#include void main(void ){ int s=0, i=1; while (i<=100) { s=s+i; /* s+=i; */ i++; } printf (“s = %d \ n”, s) ;},初始化部分,循環(huán)體,條件測試,使條件趨假語句,CHAP3EX7,⒉do – while循環(huán)(直到型循環(huán)),格式:
33、 do { statement;} while (expression );,流程:,,statement;,,e?,,,,true,false,,含有使條件趨假的語句。,while循環(huán)與do-while循環(huán)的區(qū)別:while循環(huán)先判條件,后執(zhí)行循環(huán)體;do –while循環(huán)先執(zhí)行循環(huán)體,后判條件。,舉例:,求:30!,#include void main(void){ f
34、loat s=1.0; int i=1; do{ s*=i; i++; }while(i<=30); printf(“30!=%f”,s);},初始化。,循環(huán)體。,測試條件。,使條件趨假。,CHAP3EX8,思考題:用do-while實現(xiàn)s=1+2+…+100。用while實現(xiàn)30!。,⒊ for循環(huán),格式: for (e1; e2; e3
35、) statement;,流程:,,e1,,e2?,true,,statement;,,e3,,,,,false,,,,,舉例:,求:s=1+2+3+…+100,#include void main (void ){ int s=0,i ; for (i=1; i<=100; i++ ) { s =s + i; }
36、printf (“s= %d” , s) ;},使e2趨假。,在for循環(huán)中,e1、e2、e3都可以省略!,e1省略,,i=1;,e3省略,,i++;,初值表達式。,測試表達式。,增值表達式。,for循環(huán)實例,求100以內(nèi)的偶數(shù)和。,int s=0,i;for(i=2;i<100;i+=2){ s+=i;},求500以內(nèi)最大的5個能被50整除數(shù)的和。,int i ,j,s=0;for(j=500,i=0;i&
37、lt;5;i++, j-=50){ s+=j;},從大到小輸出100以內(nèi)能被5整除的數(shù)。,int i;for(i=100;i>=0;i-=5) printf(“%d\n”,i);,int i,j,s=0;for(i=0,j=0;i+j<100;i++,++j){ s+=i+j;},⒋循環(huán)應(yīng)用的幾個問題,⑴循環(huán)的嵌套,概念:在一個循環(huán)的循環(huán)體內(nèi)又包含一個完整的循環(huán)稱為循環(huán)的嵌套。,i
38、 1 2 3 4 5 6 7 8 9 1 1?1 1?2 …… 1?9 j 2 2?1 2?2 …… 2?9 9 9?1 9?2 ……
39、 9?9,如打印一9?9的乘法表:,i=1時,j從1變化到9,完i*j 。,多重循環(huán),打印9?9乘法表。,#include void main (void ){ int i,j ; for (i=1 ; i<=9 ; i++) { printf (“ \n “); } },外層循環(huán),內(nèi)層循環(huán),說明:,⒈內(nèi)外層
40、循環(huán)采用縮進形式。,⒉while和do- while和for可以 相互嵌套。,⒊執(zhí)行次數(shù)為內(nèi)層循環(huán)次數(shù)和 外層循環(huán)次數(shù)的乘積。,CHAP3EX9,如何打印乘法表的一半?,for(j=1; j<=9 ; j++) { printf ( “ %4d “ , i * j ) ; },⑵循環(huán)的中斷(break)和繼續(xù)(continue),①循環(huán)的中斷:break語句,概念:循
41、環(huán)體中可以加分支,判斷是否繼續(xù)執(zhí)行循環(huán),break語句可以提前結(jié)束循環(huán)。,舉例:求:r=1—10的圓的面積,如圓面積大于100則中斷。,for (r=1; r100 ) 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;
42、for ( n=1; n<=100; n++) { if (n%2!=0) continue; s+=n; },,,,,,,滿足條件,跳過本次循環(huán)體剩余內(nèi)容,繼續(xù)下次循環(huán)。,int s=0,i;for(i=2;i<100;i=i+2)s+=i;,⑶無限循環(huán)和空循環(huán),①條件為恒真的循環(huán)——無限循環(huán),while(1){…}do{ …}while(1);for( ; ;){…},通
43、過條件控制的break語句退出循環(huán)。,例:程序等待直到輸入字母A。for ( ; ;){ ch= getchar ( ); if ( ch==’A’) break;},②循環(huán)體為空語句的循環(huán)——空循環(huán),for (i=1 ;i<=MAX ; i++) ;,作用:程序延時。,空語句,{ ;},,⑷ goto語句,格式: goto Label /* Label: 同一函數(shù)內(nèi)語句前的標號。*/,作
44、用:轉(zhuǎn)移到標號對應(yīng)的語句上繼續(xù)執(zhí)行。,loop: if (i<=100 ) { sum=sum+i; i++; goto loop; },,,,,循環(huán)和分支相互嵌套,輸入10個自然數(shù)統(tǒng)計其中偶數(shù)的個數(shù)及偶數(shù)值和。,算法框圖:,start,,定義變量,,初始化,,循環(huán)?,true,,輸入,,偶數(shù)?,true,,統(tǒng)計累加,,fals
45、e,,,,,,,false,,,輸出結(jié)果,,end,#include void main(void){ int i, ix,iCount=0,iSum=0; for(i=1;i<=10;i++) { scanf(“%d\n”, &ix); if( ix%2==0 )
46、 { iSum+=ix; iCount++; } } printf(“Num=%d\nSum=%d”,iCount,iSum);},,,循環(huán)結(jié)構(gòu),分支結(jié)構(gòu),,,,,,輸入負數(shù)?,do{ if(ix<=0)pri
47、ntf(“date error”); } while(ix<=0);,算法的健壯性,注意:結(jié)構(gòu)應(yīng)完整的包含和被包含。,程序設(shè)計的基本方法,根據(jù)計算機的特點,結(jié)合循環(huán)與分支結(jié)構(gòu)在程序設(shè)計時常使兩種常用的基本方法。,枚舉法(窮舉法)迭代法,本專題將結(jié)合分支和循環(huán)介紹兩種方法的基本思想和具體實現(xiàn)!,枚舉法 Enumeration,存在有限狀態(tài);其中某些狀態(tài)滿足特定條件。通過循環(huán)產(chǎn)生所有狀態(tài)(枚舉)。對每一狀態(tài),
48、按條件進行狀態(tài)測試,滿足條件的狀態(tài),為所求的解。,求100到200內(nèi)的所有素數(shù)。通過循環(huán)使i從101變化到199(枚舉所有狀態(tài))對每次循環(huán)的i進行是否是素數(shù)的測試,如果是素數(shù),輸出i。,枚舉法舉例:,⒈求100到200之間的所有素數(shù)(只能被1和自身整除的數(shù))。,對于自然數(shù)n,判斷其是否為素數(shù)有以下三種方法:,①判斷n是否能被從2到n-1范圍內(nèi)的數(shù)整除;,②判斷n是否能被從2到(int)(n/2)范圍的數(shù)整除;,③判斷n是否能被從2到
49、(int)sqrt(n)范圍的數(shù)整除;,程序如下:,#include #include void main(void){ int n, j, s; for(n=101;ns) printf(“\n%d”,n); }},,枚舉所有數(shù),,構(gòu)造,測試條件,如果n能被2到s的任意數(shù)整除,退出循環(huán)。,如果n是素數(shù),輸出n。,CHAP3EXA,⒉求水仙花數(shù)(條件:三位數(shù)的個、十、百位
50、的方和等于該數(shù)。153==13 +53 +33 )。,n為枚舉變量,枚舉初值 100,枚舉終值999。,構(gòu)造條件:取出n的個、十、百位數(shù)。,測試是否滿足條件,滿足條件輸出n。,#include void main(void){ int n, a, b, c; for(n=100 ; n<=999 ; n++) { a=n/100; b=n%100/10;
51、 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。,CHAP3EXB,⒊愛因斯坦階梯問題(不定范圍的枚舉)。,設(shè)有一階梯,每步跨2階,最后剩1階;每步跨3階,最后剩2階;每步跨5階,最后剩4階;每步跨 6階,最后剩 5階
52、;每步跨7階,正好到階梯頂。問共有多少階梯。,根據(jù)條件可以得出:臺階數(shù)一定是奇數(shù)且為7的倍數(shù)。枚舉初值:k=7; 枚舉公式:k=k+14 結(jié)束條件:滿足(k%3==2)&&(k%5==4)&&(k%6==5)結(jié)束。,#include void main(void){ int k=7; while( !((k%3==2)&&(k%5==4)&&(k%6
53、==5))) k+=14; printf(“\nl=%d”,k);},CHAP3EXC,思考題:,⒈36人一次搬36塊磚,男搬4,女搬2,兩個小孩抬一塊。要一次搬完。問:男、女、小孩要多少?,⒉ 找出1000以內(nèi)的完數(shù),所謂完數(shù)是指該數(shù)的各因子之和等于該數(shù),如6=1+2+3。,⒊證明6到200以內(nèi)的數(shù),符合哥德巴赫猜想(一個大于6的偶數(shù),可以分解成兩個質(zhì)數(shù)之和)。,⒋奇妙的算式:用字母代替十進制數(shù)字寫
54、出如下算式:E G A L ? L L G A E 請找出這些字母代表的數(shù)字。,迭代法 Iteration,迭代是通過循環(huán)不斷由舊值推導新值,并最后求解的過程。迭代法有三個要點:,如人口每年按2%增長,現(xiàn)在人口有12億,10年后人口有多少?,⒈迭代公式。,m=m*(1+2%),⒉迭代初值(邊界條件)。,m=12
55、,⒊迭代次數(shù)(或條件)。,n=10,迭代法舉例,⒈求ex=1+x+x2/2!+…+xn/n!前n+1項之和。,迭代次數(shù)i 0 1 2 … n,迭代公式 t=t*x/i,迭代初值 exp=1, t=1,(i=1~n),#include void main(void){ float exp , x , t; int i, n; scanf(“%f,%d”,&x,&n)
56、; t=1.0; exp=1.0; for(i=1 ; i<=n ; i++) { t*=x/i; exp+=t; } printf(“e^%d=%15.6f”,(int)x,exp);},迭代初值。,迭代公式。,,迭代過程,附加條件:當| t |<10-5,結(jié)束運算。,if(fabs(t)<1e-5)break;,CHAP3EXD,⒉用梯形法求定積分,,,,(
57、 0,0 ),y,x,f(x),,,a,b,面積,,,,h,,,,,x,①將 [a,b]分為n等份,h=(b-a)/n;,②求n個梯形面積之和,第i小面積x=x+hf1=f(x) 下底s=s+ (f0+f1)*h/2 f0=f1 迭代,x 初值為a s初值為0f0 初值為f(a) 次數(shù)為n,迭代求積分的方法,程序如下:,#in
58、clude void main(void){ float a,b,f0,f1,h,x,s=0.0; int n,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*
59、x+4.0; s=s+(f0+f1)*h/2.0; f0=f1; } printf(“S=%f”,s);},CHAP3EXE,迭代初值。,迭代循環(huán),⒊求s=a+aa+aaa+…+aaa…a。 0<a<10 共n項,最后一項有n個a。如求s=2+22+222+2222+…+222…222 n、a從鍵盤輸入。,迭代次數(shù):i=1~n,迭代初值:s=0.0,t=
60、a,迭代公式: t=t*10+a,程序如下:,#include void main(void){ float s,t; int i,a,n; do{ scanf(“%d,%d”,&a,&n); if(a9) printf(“\nData Input Error!\nInput again:”); }while(a9);
61、s=0.0; t=a; for(i=1;i<=n;i++) { s+=t; t=t*10+a; } printf(“\ns=%f”, s);},,,,x,y,f(x),,x1,f1=f(x1),,x2,f2=f(x2),算法分析:,①輸入x1、x2,并求出f1、f2。,②迭代:將區(qū)間二分x =(x1+x2)/2計算出f=f(x),,x,f,
62、③判斷f與f1是否同號如果同號:x1=x,f1=f否 則:x2=x,f2=f,,,x1,,f1,f1,f2,④判斷fabs(x1-x2)是否小于某個規(guī)定的精度(如10- 6 ) :如果小于精度:求出根,退出到⑤。否 則:繼續(xù)②。,⑤輸出根,根的值是(x1+x2)/2。,⒋二分法求方程f(x)= x3-6x-1=0,在[0,5]區(qū)間的根。,二分法求方程根程序,#include #i
63、nclude void main(void){ float x1,x2,x,f1,f2,f; scanf(“%f,%f”,&x1,&x2); f1=x1*x1*x1-6.0*x1-1; f2=x2*x2*x2-6.0*x2-1; do { x=(x1+x2)/2; f=x*x*x-6.0*x-1; if(f*f1>=0)
64、{ f1=f;x1=x;} else {f2=f;x2=x;} }while(fabs(x1-x2)>=1e-6); printf(“Root is :%f”,(x1+x2)/2);},CHAP3EXF,迭代初值。,二分迭代循環(huán),迭代條件。,⒌通過如下公式求π(精度為10-6),從程序的運行看精度和時間的關(guān)系!,迭代初值:fPi=0;fItem=1;iS
65、ign=1;迭代公式:fPi+=(1./fItem)*iSign;fItem+=2.;iSign*=-1;迭代條件: fabs(1./fItem)>1e-6,程 序,⒌求自然數(shù)m和n的最大公約數(shù)(用while循環(huán)實現(xiàn))。,提示:,①比較m和n的大小,如n>m,兩者交換;②求m被n除的余數(shù)k;③如果k為0,除數(shù)n為最大公約數(shù);④如果k不為0,原除數(shù)作為新的被除數(shù)m,余數(shù)作為新除
66、數(shù),繼續(xù)②。,⒍用迭代法求cosX。,⒎求Fibonacci級數(shù) 1,1,2,3,5,8,13,21,34….,迭代法思考題,⒏用牛頓迭代法求方程f(x)=0的根。(必做?。?第三章作業(yè),⒐通過梯形法求y = 輸出結(jié)果。,,⒑求1000以內(nèi)能被73或127整除的自然數(shù)平方根之和。,⒒求100----200之間的所有能被3以及7整除的自然數(shù)的平方根之和。,⒓求級數(shù)a=2/1 + 3
67、/2 + 5/3 +8/5 +13/8+21/13…的前30項之和。,⒔求數(shù)列41+n(n –1)最小非素數(shù)項的序號(n > 2)。,⒕求滿足以下條件的數(shù):該數(shù)大于100小于1000;其個位數(shù)和十位數(shù)的平方和等其百位數(shù)的立方。,⒖求級數(shù)e=1+1/1! +1/2! +1/3!+… 要求:求n項(n由鍵盤輸入)或最后一項小于10-6結(jié)束。,第三章作業(yè),⒗輸入三邊a、b、c判斷是否能構(gòu)成三角形,如能構(gòu)成三角形,要求通過海倫
68、公式計算其面積。 注:⑴海倫公式s=(p(p-a)(p-b)(p-c))1/2 p=(a+b+c)/2 ⑵構(gòu)成三角形的條件:a+b > c , ?a-b? < c,⒘求1500內(nèi)的最大五個素數(shù)之和。,⒙一包海鮮單價為46.5元,如果購買100包至300包則按95%優(yōu)惠;若購買301包至500包,則按85%優(yōu)惠;如果購買501包至1000包,則按80%優(yōu)惠;若購買1000包以上,
69、按70%優(yōu)惠。試編寫一個計算顧客購買X包海鮮所需金額,且打印購買數(shù)量、單價和總金額的程序。,⒚求級數(shù)e=1+1/1! +1/2! +1/3!+…要求:求n項(n由鍵盤輸入)或最后一項小于10-6結(jié)束。,第三章作業(yè),⒛編寫程序求:,21.父親今年30歲,兒子今年6歲,問多少年后,父親的年齡是兒子的2倍?,22.將1元人民幣換成5分、2分、1分的硬幣有多少種換法?,23.一只猴子摘了一堆桃,每天吃一半再加1個,第10天去吃時只剩1
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言基本知識
- c語言基本語法成分
- 順序存儲結(jié)構(gòu)線性表基本操作-純c語言實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)的c語言算法
- c語言-基本選擇題及答案
- 概述c# 語言的基本原理c# 中對象
- 譚浩強c語言_數(shù)據(jù)結(jié)構(gòu)
- c語言-基本選擇題及答案解析
- 初學c語言程序設(shè)計的基本方法和技巧
- 數(shù)據(jù)結(jié)構(gòu)c語言版
- 數(shù)據(jù)結(jié)構(gòu)(c語言版)
- c語言實驗三 循環(huán)結(jié)構(gòu)
- 『基本ascii表和c語言運算表查詢』
- c語言-基本選擇題及參考答案
- c語言(數(shù)據(jù)結(jié)構(gòu))-文章編輯系統(tǒng)
- c語言程序-分支結(jié)構(gòu)題目及答案
- c語言實驗三 程序結(jié)構(gòu)
- c語言程序分支結(jié)構(gòu)題目及答案
- c語言與數(shù)據(jù)結(jié)構(gòu)考試大綱
- 數(shù)據(jù)結(jié)構(gòu)鏈表c語言實現(xiàn)
評論
0/150
提交評論