国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程

2020-01-26 14:53:15
字體:
供稿:網(wǎng)友

C++函數(shù)的嵌套調(diào)用
C++不允許對函數(shù)作嵌套定義,也就是說在一個函數(shù)中不能完整地包含另一個函數(shù)。在一個程序中每一個函數(shù)的定義都是互相平行和獨立的。

雖然C++不能嵌套定義函數(shù),但可以嵌套調(diào)用函數(shù),也就是說,在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。

在程序中實現(xiàn)函數(shù)嵌套調(diào)用時,需要注意的是:在調(diào)用函數(shù)之前,需要對每一個被調(diào)用的函數(shù)作聲明(除非定義在前,調(diào)用在后)。

【例】用弦截法求方程f(x)=x3-5x2+16x-80=0的根。

這是一個數(shù)值求解問題,需要先分析用弦截法求根的算法。根據(jù)數(shù)學(xué)知識,可以列出以下的解題步驟:
1) 取兩個不同點x1,x2,如果f(x1)和f(x2)符號相反,則(x1,x2)區(qū)間內(nèi)必有一個根。如果f(x1)與f(x2)同符號,則應(yīng)改變x1,x2,直到f(x1), f(x2)異號為止。注意x1?x2的值不應(yīng)差太大,以保證(x1,x2)區(qū)間內(nèi)只有一個根。

2) 連接(x1, f(x1))和(x2, f(x2))兩點,此線(即弦)交x軸于x,見圖。


x點坐標可用下式求出:


再從x求出f(x)。

3) 若f(x)與f(x1)同符號,則根必在(x, x2)區(qū)間內(nèi),此時將x作為新的x1。如果f(x)與f(x2)同符號,則表示根在( x1,x)區(qū)間內(nèi),將x作為新的x2。

4) 重復(fù)步驟 (2) 和 (3), 直到 |f(x)|<ξ為止, ξ為一個很小的正數(shù), 例如10-6。此時認為 f(x)≈0。

這就是弦截法的算法,在程序中分別用以下幾個函數(shù)來實現(xiàn)以上有關(guān)部分功能:
1) 用函數(shù)f(x)代表x的函數(shù):x3-5x2+16x-80。

2) 用函數(shù)xpoint (x1,x2)來求(x1,f(x1))和(x2,f(x2))的連線與x軸的交點x的坐標。

3) 用函數(shù)root(x1,x2)來求(x1,x2)區(qū)間的那個實根。顯然,執(zhí)行root函數(shù)的過程中要用到xpoint函數(shù),而執(zhí)行xpoint函數(shù)的過程中要用到f函數(shù)。

根據(jù)以上算法,可以編寫出下面的程序:

#include <iostream>#include <iomanip>#include <cmath>using namespace std;double f(double); //函數(shù)聲明double xpoint(double, double); //函數(shù)聲明double root(double, double); //函數(shù)聲明int main( ){ double x1,x2,f1,f2,x; do {  cout<<"input x1,x2:";  cin>>x1>>x2;  f1=f(x1);  f2=f(x2); } while(f1*f2>=0); x=root(x1,x2); cout<<setiosflags(ios::fixed)<<setprecision(7); //指定輸出7位小數(shù) cout<<"A root of equation is "<<x<<endl; return 0;}double f(double x) //定義f函數(shù),以實現(xiàn)f(x){ double y; y=x*x*x-5*x*x+16*x-80; return y;}double xpoint(double x1, double x2) //定義xpoint函數(shù),求出弦與x軸交點{ double y; y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); //在xpoint函數(shù)中調(diào)用f函數(shù) return y;}double root(double x1, double x2) //定義root函數(shù),求近似根{ double x,y,y1; y1=f(x1); do {  x=xpoint(x1,x2); //在root函數(shù)中調(diào)用xpoint函數(shù)  y=f(x); //在root函數(shù)中調(diào)用f函數(shù)  if (y*y1>0)  {   y1=y;   x1=x;  }  else   x2=x; }while(fabs(y)>=0.00001); return x;}

運行情況如下:

input x1, x2:2.5 6.7

主站蜘蛛池模板:
扶风县|
宜章县|
铜陵市|
理塘县|
江达县|
常熟市|
曲松县|
汤原县|
石嘴山市|
抚顺县|
赣州市|
克什克腾旗|
锡林郭勒盟|
仙桃市|
连州市|
湘西|
丹阳市|
茌平县|
南陵县|
崇明县|
阜新|
英吉沙县|
新邵县|
长春市|
固镇县|
云和县|
方山县|
犍为县|
阿荣旗|
克拉玛依市|
珲春市|
林周县|
托里县|
河西区|
云安县|
观塘区|
丹凤县|
宁都县|
湟中县|
神池县|
于都县|