C++程序設(shè)計:第3章 結(jié)構(gòu)化程序設(shè)計_第1頁
C++程序設(shè)計:第3章 結(jié)構(gòu)化程序設(shè)計_第2頁
C++程序設(shè)計:第3章 結(jié)構(gòu)化程序設(shè)計_第3頁
C++程序設(shè)計:第3章 結(jié)構(gòu)化程序設(shè)計_第4頁
C++程序設(shè)計:第3章 結(jié)構(gòu)化程序設(shè)計_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 結(jié)構(gòu)化程序設(shè)計,1,第三章 結(jié)構(gòu)化程序設(shè)計,3.1 簡單的輸入輸出 3.2 順序、分支和循環(huán)結(jié)構(gòu),2,3.1簡單的輸入輸出,輸入:cin 程序在執(zhí)行期間,接收外部信息的操作稱為程序的輸入;而把程序向外部發(fā)送信息的操作稱為程序的輸出。在C+中沒有專門的輸入輸出語句,所有輸入輸出是通過輸入輸出流來實(shí)現(xiàn)的。,3,要使用C+提供的輸入輸出時,必須在程序的開頭增加一行: #include 即包含輸入輸出流的頭文件“iostream”。有關(guān)包含文件的作用,在編譯預(yù)處理部分(第四章)作詳細(xì)介紹。,4,輸入十進(jìn)制整數(shù)和實(shí)數(shù),cin . (舉例說明),int a,b; cinab;/程序運(yùn)行至此停下,等

2、待從鍵盤輸入變量值,鍵盤輸入:3 5 或:3 5 均可。,輸入語句自動過濾空白字符。,3,鍵盤,5,鍵盤,5,浮點(diǎn)型數(shù)據(jù)同整型數(shù)據(jù)一樣。,float c,d; cincd;,char ch1,ch2; cinch1ch2;,若輸入:ab則ch1為a,ch2為b。,若輸入:a b則ch1為a,ch2為b。,字符型變量過濾空白字符。cin格式過濾空白字符,6,float a; int i1,i2; char ch1,ch2; cini1ai2ch1ch2;,輸入:34 5.678 1a b,i2:1,在缺省的情況下,cin自動跳過輸入的空格,換言之,cin不能將輸入的空格賦給字符型變量,同樣地,回

3、車鍵也是作為輸入字符之間的分隔符,也不能將輸入的回車鍵字符賦給字符型變量。,a:5.578,i1:34,ch1:a,ch2:b,7,若要把從鍵盤上輸入的每一個字符,包括空格和回車鍵都作為一個輸入字符賦給字符型變量時,必須使用函數(shù)cin.get()。其格式為: cin.get();,cin.get()從輸入行中取出一個字符,并將它賦給字符型變量。這個語句一次只能從輸入行中提取一個字符。,char c1; cin.get(c1);,8,char ch1,ch2,ch3; cin.get(ch1); cin.get(ch2); cin.get(ch3);,輸入:A B,則:ch1:A,并且在輸入緩沖

4、區(qū)中保留回車鍵。,ch2:空格,ch3:B,空格的ASCII碼為32,ch2,9,輸入十六進(jìn)制或八進(jìn)制數(shù)據(jù),在缺省的情況下,系統(tǒng)約定輸入的整型數(shù)是十進(jìn)制數(shù)據(jù)。當(dāng)要求按八進(jìn)制或十六進(jìn)制輸入數(shù)據(jù)時,在cin中必須指明相應(yīng)的數(shù)據(jù)類型:hex為十六進(jìn)制;oct為八進(jìn)制;dec為十進(jìn)制。,10,int i,j,k,l; cinhexi;/指明輸入為十六進(jìn)制數(shù) cinoctj;/指明輸入為八進(jìn)制數(shù) cink;/輸入仍為八進(jìn)制數(shù) cindecl;/指明輸入為十進(jìn)制數(shù) 當(dāng)執(zhí)行到語句cin時,若輸入的數(shù)據(jù)為: 11 11 12 12,結(jié)果:i:17,j:9,k:10,l:12,11,使用非十進(jìn)制數(shù)輸入時,要注意

5、以下幾點(diǎn): 1、八進(jìn)制或十六進(jìn)制數(shù)的輸入,只能適用于整型變量,不適用于字符型變量,實(shí)型變量。,2、當(dāng)在cin中指明使用的數(shù)制輸入后,則所指明的數(shù)制一直有效,直到在接著的cin中指明輸入時所使用的另一數(shù)制為止。如上例中,輸入k的值時,仍為八進(jìn)制。,12,3、輸入數(shù)據(jù)的格式、個數(shù)和類型必須與cin中所列舉的變量類型一一對應(yīng)。一旦輸入出錯,不僅使當(dāng)前的輸入數(shù)據(jù)不正確,而且使得后面的提取數(shù)據(jù)也不正確。,cina,b;,cina b;,cinab;,int a, b;,cinab;,13,輸出數(shù)據(jù)cout 與輸入cin對應(yīng)的輸出是cout輸出流。,當(dāng)要輸出一個表達(dá)式的值時,可使用cout來實(shí)現(xiàn),其一般格

6、式為: cout .; 其中運(yùn)算符“”稱為插入運(yùn)算符,它將緊跟其后的表達(dá)式的值,輸出到顯示器當(dāng)前光標(biāo)的位置。,14,int a=6; float f1=12.4; char s1 =“abcd”; coutatf1ts1endl;,t為轉(zhuǎn)義字符Tab endl為回車或n,顯示器,顯示器,顯示器,6,12.4,abcd,15,cout將雙引號中的字符串常量按其原樣輸出,char ch1=a,ch2=b; cout“c1=“ch1t“c2=“ch2endl;,c1=ac2=b,int i1=4,i2=5; float a=3.5; cout“a*i1=“a*i1endl“a*i2=“a*i2end

7、l;,a*i1=14 a*i2=17.5,16,指定輸出項(xiàng)占用的寬度: 在輸出的數(shù)據(jù)項(xiàng)之間進(jìn)行隔開的另一種辦法是指定輸出項(xiàng)的寬度。如上面的兩個輸出語句可改寫為: cout setw(6) isetw(10)jendl;,_ _ _ _ _ 4_ _ _ _ _ _ _ _ _12,cout setw(5)msetw(10)j*kendl;,_ _ _ _ 7_ _ _ _ _ _ _ _ 24,其中setw(6)指明其后的輸出項(xiàng)占用的字符寬度為6,即括號中的值指出緊跟其后的輸出項(xiàng)占用的字符位置個數(shù),并向右對齊。setw是“set width”的縮寫。,17,使用setw()應(yīng)注意以下三點(diǎn): 1

8、、在程序的開始位置必須包含頭文件iomanip.h,即在程序的開頭增加: #include ,2、括號中必須給出一個表達(dá)式(值為正整數(shù)),它指明緊跟其后輸出項(xiàng)的寬度。,3、該設(shè)置僅對其后的一個輸出項(xiàng)有效。一旦按指定的寬度輸出其后的輸出項(xiàng)后,又回到原來的缺省輸出方式。,18,輸出八、十六進(jìn)制數(shù)和科學(xué)表示法的實(shí)數(shù),對于整型數(shù)據(jù)可指定以十六進(jìn)制或八進(jìn)制輸出,而對于實(shí)型數(shù)據(jù)可指定以科學(xué)表示法形式輸出。例如,設(shè)有如下一個程序: #include void main(void) float x=3.14,y=100; cout.setf(ios:scientific,ios:floatfield); /表

9、明浮點(diǎn)數(shù)用科學(xué)表示法輸出 cout xt; cout yendl; ,執(zhí)行該程序后的輸出為: 3.140000e+000 1.000000e+002,19,與cin中類同,當(dāng)在cout中指明以一種進(jìn)制輸出整數(shù)時,對其后的輸出均有效,直到指明又以另一種進(jìn)制輸出整型數(shù)據(jù)為止。對實(shí)數(shù)的輸出,也是這樣,一旦指明按科學(xué)表示法輸出實(shí)數(shù),則接著的輸出均按科學(xué)表示法輸出,直到指明以定點(diǎn)數(shù)輸出為止。明確指定按定點(diǎn)數(shù)格式輸出(缺省的輸出方式)的語句為: cout.setf(ios:fixed,ios:floatfield);,20,3.2 C+的流程控制語句,21,3.2.1 順序結(jié)構(gòu) 3.2.2 選擇結(jié)構(gòu) 3.

10、2.3 循環(huán)結(jié)構(gòu) 3.2.3 其它控制語句 3.2.4 應(yīng)用舉例,22,3.2.1 順序結(jié)構(gòu),順序結(jié)構(gòu):按照語句出現(xiàn)的先后順序依次執(zhí)行。 (1) 表達(dá)式語句 形式: 表達(dá)式1; 表達(dá)式2; 例如:,i+; sum=a+b; coutabendl;,23,(2) 空語句,形式: ; 作用: 當(dāng)程序中某個位置在語法上需要一條語句,而在語義上又不 要求執(zhí)行任何動作時,可放上一條空語句。 一般適用于在循環(huán)語句中做空循環(huán)體; 如:,for (m = 0; m1000; m+) ;,24,(3) 復(fù)合語句,形式: 變量定義 語句組 作用:當(dāng)程序中某個位置在語法上只允許一條語句, 而在語義上要執(zhí)行多條語句才

11、能完成某個操作時,需要使用復(fù)合語句。,例如:,if(x=0) couta; coutb;,25,引例:已知三角形的三邊,求其面積。,#include #include int main() float a,b,c,p,s; cinabc; p=(a+b+c)/2; s=sqrt(fabs(p*(p-a)*(p-b)*(p-c); cout三角形面積為:sendl; return 0; ,26,3.2.2 選擇結(jié)構(gòu),選擇結(jié)構(gòu):根據(jù)條件的值來判斷程序的流向。 C/C+中,提供兩類選擇控制語句: if語句,實(shí)現(xiàn)n分支,要求n個表達(dá)式; switch語句,實(shí)現(xiàn)多分支;只用1個表達(dá)式。,27,(1) i

12、f 語句,if語句的三種形式: 形式1: if (表達(dá)式) 語句 作用:當(dāng)表達(dá)式為真(非0)時,執(zhí)行表達(dá)式后面的語句, 否則繞過該語句,而執(zhí)行其后面的語句。 【例3.1】比較兩個數(shù)x和y的大小,并使得x大于y。,if(xy;,28,29,x=3; y=4; t=x; x=y; y=t;,3,3,4,4,3,x,y,t,#include void main() int x,y,t; coutxy; if (xyendl; ,程序:,30,形式2: if (表達(dá)式) 語句1 else 語句2 作用:當(dāng)表達(dá)式為真(非0)時,執(zhí)行語句1,否則執(zhí)行語句2。 【例3.2】計算分段函數(shù):,31,要使max存

13、放x、y中大者, min存放小者,分析下面程序段正確否?,if (x) y=sin(x)+sqrt(x*x+1); else y=cos(x)x*x+3*x;,if (xy) max = x; min = y; else max = y; min = x;,error C2181: illegal else without matching if,32,形式3: if (表達(dá)式1) 語句1 else if (表達(dá)式2) 語句2 else if (表達(dá)式n) 語句n else 語句n+1 作用:當(dāng)表達(dá)式1的值為true時, 執(zhí)行語句1;否則判斷當(dāng)表達(dá)式2的值為true時執(zhí)行語句2;依此類推,若表

14、達(dá)式的值都為false,則執(zhí)行語句n+1。,33,【例3.3】已知成績mark,要求顯示對應(yīng)五級制的評定,評定條件如下:,34,if (mark = 90) cout 優(yōu); else if (80 = mark ,if (mark = 60) cout= 70) cout= 80) cout=90) cout 優(yōu); else cout 不及格;,分析下面兩程序段:,注意: 不管有幾個分支,程序執(zhí)行一個分支后,其余分支不再執(zhí)行。 else if不能寫成 elseif。 當(dāng)多分支中有多個表達(dá)式同時滿足,則只執(zhí)行第一個與之匹配的語句。,if (mark = 90) cout=80) cout=70)

15、 cout=60) cout 及格; else cout 不及格;,35,if語句的嵌套形式,if語句的嵌套是指if或else后面的語句本身又是一個if語句。 如: if(表達(dá)式1) if(表達(dá)式11) 語句11 else 語句12 else 語句2,if (表達(dá)式1) if (表達(dá)式2) 語句1 else 語句2,注意: 為了增強(qiáng)程序的可讀性,建議采用鋸齒型的書寫形式。 else始終與它上面的最近的if語句配對,而這個if語 句又沒有其它的else與之匹配 。,如何使之與第一個if配對?,36,【例3.4】已知x,y,z三個數(shù),使得xyz。 可用一個IF語句和一個嵌套的IF語句實(shí)現(xiàn)。,if

16、(xy) t=x ; x=y ; y=t; if (yz) t=y ; y=z ; z=t ; if (xy) t=x ; x=y ; y=t ; ,if (xy) t = x, x = y, y = t; if (xz) t = x, x = z, z = t; if (yz) t = y, y = z, z = t;,37,(2) switch語句,形式: switch(表達(dá)式) case 常量表達(dá)式1:語句組1; break; case 常量表達(dá)式2:語句組2; break; case 常量表達(dá)式n:語句組n; break; default: 語句組n+1 ,執(zhí)行順序:當(dāng)表達(dá)式的值與某個

17、常量表達(dá)式的值相等時,則執(zhí)行該常量表達(dá)式后面相應(yīng)的語句,若使用了break, 則執(zhí)行完該語句后便退出switch語句;否則,還要依次執(zhí)行其后面的各條語句。若找不到相匹配的常量表達(dá)式,則執(zhí)行default后面的語句。,必須為整型或字符型,38,2a+1 (1=a2) 【例3.5】用switch結(jié)構(gòu)求分段函數(shù)b= a2-3 (2=a4) a是整數(shù) a 其它,正確: switch(int)a) case 1: b=2*a+1;break; case 2: case 3: b=a*a-3;break; default: b=a; ,錯誤: switch(int)a) case a=1 ,共用同一個語句

18、組,思考:若省去break語句,情況會怎樣?,39,【例3.4】百分制以5級制顯示:,switch (int(mark/10) case 10: case 9: cout 優(yōu); break; case 8: cout 良; break; case 7: cout 中; break; case 6: cout 及格; break; default: cout 不及格; ,思考:若省去break語句,情況會怎樣?,if (mark = 90) cout=80) cout=70) cout=60) cout 及格; else cout 不及格;,40,綜合應(yīng)用: 自測四則運(yùn)算 要求:自動產(chǎn)生1-10

19、的操作數(shù)和運(yùn)算符代碼,用戶輸入答案,計算機(jī)顯示正確與否。 分析:利用rand函數(shù)產(chǎn)生操作數(shù)和運(yùn)算符代碼; 利用switch語句進(jìn)行運(yùn)算符代碼轉(zhuǎn)換和運(yùn)算; 用戶輸入答案后進(jìn)行判卷,進(jìn)一步需求: 如何產(chǎn)生若干道題?,41,#include iostream #include stdlib void main() int num1,num2,nop; char op,c; float result,an; num1=rand() % 11;/隨機(jī)數(shù)范圍0-10 num2=rand() % 11; nop =rand() % 4; switch (nop) case 0: op=+;result=nu

20、m1+num2;break; case 1: op=-;result=num1-num2;break; case 2: op=*;result=num1*num2; break; case 3: op=/;result=num1/num2; coutan; if (result=an) cout okendl; else cout errorendl; ,42,(3) 條件運(yùn)算符 是C中的唯一的三目運(yùn)算符。 表達(dá)式1?表達(dá)式2 :表達(dá)式3,max=ab?a:b ; / 求a, b中的大者 當(dāng) a=2 b=1 ab為真,表達(dá)式的值等于a, max值為2 當(dāng) a=1 b=2 ab為假,表達(dá)式的值等

21、于b, max值為2,注意: 條件運(yùn)算符的優(yōu)先級比賦值運(yùn)算符高 x=(x=3) ? x+2 : x-3 2. 結(jié)合方向自右至左 ab?a:cd?c:d 3. 三個表達(dá)式的類型可不同 z=ab?A:a+b,x=5,43,x=9, y=6, z=5; x=(x+y)%z=x%z+y%z)?1:0; coutx= xendl;,x=1; y=2; z=3; x+=y+=z; couty?x+:y+)endl;,y=y+z=5 x=x+5=6,9,x=0,44,void main(void ) int x=1,y=2,z=3; x+=y+=z; couty?x+:y+=y ,xyz 輸出,653,65

22、36,6635,6636,6,6799,6797,9,344,3440,3441,45,執(zhí)行以下程序段后,變量a,b,c的值分別是: int x=10, y=9; int a,b,c; a=(-x= =y+)?-x:+y; b=x+; c=y;,x=8 y=10 a=8,b=8 x=9,c=10,46,void main(void ) int a=5,b=1,c=0; if(a=b+c) cout“* * *n”; else cout“$ $ $n”; ,* * *,47,3.2.3 循環(huán)結(jié)構(gòu),C+語言提供了三種循環(huán)語句:,流程圖如下: while do-while for,while (表達(dá)

23、式) 語句,do 語句 while (表達(dá)式);,for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,48,#include #include void main() int num1,num2,nop; char op; float result,an; /do num1=rand() % 11; num2=rand() % 11; nop =rand() % 4; switch (nop) case 0: op=+;result=num1+num2;break; case 1: op=-;result=num1-num2;break; case 2: op=*;result=num1*num2;

24、 break; case 3: op=/;result=num1/num2; coutan; if (result=an) coutc; / while (c=y); ,49,【例3.6】用上述三種循環(huán)語句求,while語句:,n = 1;s = 0; while (n=100) s=s+n; n=n+1; ,n = 1; s = 0; do s = s+n; n = n+1; while(n=100);,do-while語句:,for (n = 1,s = 0;n=100;n+) s=s+n;,for語句:,50,【例3.7】求下列級數(shù)的前m項(xiàng)和,要求其誤差小于0.00001。,分析: 級數(shù)

25、的通項(xiàng)為 xm/m!, 第i項(xiàng)ti與第i-1項(xiàng) ti-1之間存在如下關(guān)系: ti=t i-1*x/i,int i(1);float t(1),e(0); while(t1e-5) e+=t; t*=x/i; i+;,int i(1);float t(1),e(0); for( ;t1e-5; ) e+=t; t *=x/i; i+;,for(i=1,t=1,e=0;t1e-5; e+=t, t *=x/i,i+);,分號不能省略,空語句,51,循環(huán)的嵌套,循環(huán)的嵌套:循環(huán)體內(nèi)包含另一個完整的循環(huán)結(jié)構(gòu)。 三種循環(huán)語句皆可以相互嵌套 。 【例3.8】打印九九乘法表,52,#include void

26、 main() coutt 九九乘法表endl; coutt -endl; for(int i=1;i=9;i+) for(int j=1;j=9;j+) coutij=i*jt; coutendl; ,程序:,思考:打印上三角或下三角程序如何改動?,53,3.2.4 其它控制語句,break語句和 continue語句 break語句有兩個作用: 用于switch語句中,保證多分支情況的正確執(zhí)行; 用于循環(huán)語句中,強(qiáng)制終止本層循環(huán)(跳出本層循環(huán))。 Continue語句的作用: 繞過本次循環(huán),強(qiáng)行進(jìn)入下一次循環(huán)。 即它只能跳過循環(huán)體中continue后面的語句。 注意: continue只能

27、用于循環(huán)語句,54,3.2.4 其它控制語句,【例3.9】 break 和 continue 語句的區(qū)別,for(m=20;m0;m-) if(m % 6=0) break; coutm ; ,for(m=20;m0;m-) if(m % 6=0) continue; coutm ; ,55,3.2.5 應(yīng)用舉例,(1) 求最大值(或最小值) 【例3.10】從鍵盤輸入一組數(shù),求這組數(shù)中的最大值。,cinm; max=m; /第一個數(shù)假設(shè)為最大數(shù) while (cinm,m!=0) if (mmax) max=m;,max=0; /設(shè)一個較小的數(shù)為最大值的初值 for(int i=0;im; i

28、f (mmax) max=m; ,以輸入0作為結(jié)束,輸入數(shù)的個數(shù)未知,輸入數(shù)的個數(shù)已知,56,for(k=n;k0;k-) if(m%k= =0,(2)最大公約數(shù),假設(shè)m、n是兩個整數(shù),且mn,57,【例3.11】用輾轉(zhuǎn)相除法求兩自然數(shù)的最大公約數(shù)。 算法思想: (1) 對于已知兩數(shù)m,n,使得mn (2) m除以n得余數(shù)r (3) 若r=0,則n為最大公約數(shù),結(jié)束;否則執(zhí)行(4) (4) mn,nr,再重復(fù)執(zhí)行(2),輾轉(zhuǎn)相除法 while (r=m % n)!=0) m=n;n=r; coutn;,輾轉(zhuǎn)相減法 m=m-n mn n=n-m nm m、n為公約數(shù) m=n while (m!=

29、n) if(mn)m-=n;else n-=m;,58,#include void main( ) int m, n, t, r; coutmn; if(mn) t=m; m=n; n=t; while (r=m % n)!=0) m=n;n=r; cout最大公約數(shù)為 nendl; ,程序:,59,(3)質(zhì)數(shù) 【例3.12】求2100之間的素數(shù),并以每行顯示8個質(zhì)數(shù)。 質(zhì)數(shù):除1和它本身外,不能被其他任何一個整數(shù)整除的自然數(shù)。 分析: (1) 判別某數(shù)m是否為素數(shù)最簡單的方法是:用i=2,3,m-1逐個判別m能否被j整除,只要有一個能整除,m不是素數(shù),退出循環(huán);若都不能整除,則m是素數(shù)??蛇M(jìn)

30、一步證明:若m不能被 中任一整數(shù)整除,則m為質(zhì)數(shù)。 (2) 每行顯示8個,只要對求得的質(zhì)數(shù)計數(shù),滿8個換行。,. for(i=2;m%i!=0;i+); if(i=m) .,. k= sqrt(m); for(i=2;ik) .,60,程序: #include void main() int m,i,countm(0); for(m = 2;mm-1) coutmt; countm+; if (countm % 8 =0) coutendl; ,61,(4) 求部分級數(shù)和 【例3.13】計算sin(x)的值,公式為: 當(dāng)?shù)趎項(xiàng)的絕對值小于10-5時結(jié)束。 分析:關(guān)鍵是找部分級數(shù)和的通項(xiàng),如下表

31、示: ti+2= -1*ti*x*x/(i+1)*(i+2) i=1,3,5,7,t=x;i=1; sinx=0; while(fabs(t)=1e-5) sinx+=t; t=-t*x*x/(i+1)*(i+2); i=i+2; ,62,(5) 窮舉法 【例3.14】百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元。現(xiàn)有100元錢要買100只雞,列出所有可能的購雞方案。 分析: (1) 設(shè)母雞、公雞、小雞各為x、y、z只,列出方程為: x+y+z = 100 3x+2y+0.5z = 100 三個未知數(shù),兩個方程,此題有若干個整數(shù)解。 (2) 采用試湊法(也稱為窮舉法或枚舉法)來

32、實(shí)現(xiàn),即將可能出現(xiàn)的各種情況一一羅列測試,判斷是否滿足條件,采用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。,63,用三重循環(huán)來實(shí)現(xiàn): for(x=0;x=33;x+) for(y=0;y=50;y+) for(z=0;z=100;z+) if(3*x+2*y+0.5*z)=100) ,用二重循環(huán)來實(shí)現(xiàn): for(x=0;x=33;x+) for(y=0;y=50;y+) z=100-x-y; if(3*x+2*y+0.5*z)=100) coutsetw(9)xsetw(9)ysetw(9)zendl; ,64,猴子吃桃子。小猴在某天摘桃若干個,當(dāng)天吃掉一半多一個;第二天吃了剩下的桃子的一半多一個;以后每天都吃尚存桃子

33、的一半多一個,到第7天要吃時只剩下一個,問小猴共摘下了多少個桃子? 分析:這是一個“遞推”問題,先從最后一天推出倒數(shù)第二天的桃子,再從倒數(shù)第二天的桃子推出倒數(shù)第三天的桃子。設(shè)第n天的桃子為xn,那么它是前一天的桃子數(shù)的xn-1 的一半減1,即xn-1 =( xn +1)2,(5)遞推法 “遞推法”也稱為 “迭代法”,其基本思想是把一個復(fù)雜的計算過程轉(zhuǎn)化為簡單過程的多次重復(fù),每次重復(fù)都從舊值的基礎(chǔ)上遞推出新值,并由新值代替舊值。,65,#include void main() int i,x=1; /第7天的桃子 cout=1;i-) x = (x + 1) * 2; cout 第i 天的桃子數(shù)

34、為:x只endl; ,66,【例3.15】利用牛頓迭代法求方程 在x0附近的根的近似值。 牛頓迭代公式為: 輸入x0值,由公式求出x1,再由x1從公式求出x2,.,直到 時可視x n+1為方程f(x)=0在X0附近的一個近似根 ,設(shè)為10-5 。,67,x1=1; do x0=x1; x1=x0 - (3*x0*x0*x0-4*x0*x0-5*x0+13)/(9*x0*x0-8*x0-5) while(fabs(x1-x0)1e-5);,思考: 若迭代最高次數(shù)M后,即使達(dá)不到精度也要輸出結(jié)果, 程序該如何修改?,68,#include #include void main( ) double

35、x0,x1,f1x,fx; x0=1; do fx=3*x0*x0*x0-4*x0*x0-5*x0+13; f1x=9*x0*x0-8*x0-5; /f(x0)的導(dǎo)數(shù) x1=x0-fx/f1x; while (fabs(x1-x0)1.0e-5); cout方程的根是 x1endl; ,69,(6)分類統(tǒng)計 【例3.16】對輸入一串字符,統(tǒng)計其中單詞的個數(shù)、字母個數(shù)、數(shù)字個數(shù)。規(guī)定單詞之間用一個空白符分開(空白符包括空格符、水平制表符、換行符)。以z表示輸入結(jié)束。 分析: (1)統(tǒng)計單詞的個數(shù),可通過統(tǒng)計空白符的個數(shù)得到。 (2)由于標(biāo)準(zhǔn)輸入流cin輸入時會把空白符作為輸入結(jié)束符,所以應(yīng)使用g

36、etchar()函數(shù)逐一讀取字符,該函數(shù)必須用”stdio.h”。,int alpha(0), num(0),ch(0),word(0); while(c=getchar( )!=EOF) / EOF代表文本結(jié)束符,對應(yīng)輸入CTRL+Z if(c= |c=t|c=n) word+; if(c=a ,70,#include #include void main( ) int alpha(0), num(0),ch(0),word(0);char c; while(c=getchar( )!=EOF) / EOF代表文本結(jié)束符,對應(yīng)輸入CTRL+Z if(c= |c=t|c=n) word+; i

37、f(c=a ,71,我國有13億人口,按人口年增長0.8%計算,多少年后我國人口超過26億。,#include void main() double x = 13; int n = 0; while( ) coutn年endl; ,x = x * 1.008; n = n + 1;,72,0,y,x,x1,x2,x,coutsetiosflags(ios:fixed); coutsetprecision(5)x;,if (f1*fm0) x1=mid; else if (f1*fm0) x2=mid;,73,隨機(jī)函數(shù)rand()函數(shù)產(chǎn)生032767之間的整數(shù) rand()%101 產(chǎn)生0100間的數(shù) rand()%6+5 產(chǎn)生5 10間的數(shù),74,#include void main() int k9=0,k8=0,k7=0,k6=0,k5=0; float mark; coutmark; if (mark = 90) k9+; else if (mark=80) k8+; else if ( mark =

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論