其中f(x)是被積函數,橫坐標上兩點之間的間隔越小,計算結果越精確。
為了解決這類問題,可以使用C語言中的回調函數編寫壹個通用的計算函數,代碼如下:
#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
# include & ltmath.h & gt
//函數:返回f(x)在整數區間[a,b]的值。
//參數:FunCallBack?指向用於計算f(x)的函數
//整數區間的起始值
//b積分區間的結束值。
//dx?橫坐標的區間數越小,計算結果越準確。
雙倍?算(雙倍?(*FunCallBack)(double?x),
雙倍?a,雙份?b,雙份?dx)
{
雙倍?doui
雙倍?總計?=?0;//保存最終計算結果。
為了什麽?(doui?=?a;?杜伊?& lt=?b;?杜伊?+=?dx)
{
總計?+=?FunCallBack(doui)* dx;
}
回歸?總計;
}
雙倍?f2(雙?x)
{
回歸?x * x
}
雙倍?f(雙?x)
{
回歸?x;
}
雙倍?f3(雙?x)
{
回歸?x*x*x?;
}
int?主()
{
雙倍?總計;
總計?=?(計算(f,?2,?3,?0.000001));
printf("總計?=?%lf\n ",合計);
總計?=?(計算(f2,?2,?3,?0.000001));
printf("總計?=?%lf\n ",合計);
總計?=?(計算(f3,?2,?3,?0.000001));
printf("總計?=?%lf\n ",合計);
回歸?0?;
}
其中函數f,f2,f3是關於x的自寫被積函數。
運行結果:
總計?=?2.500000
總計?=?6.333331
總計?=?16.249991