【题目】
用矩形法求积分sinx (0,1) cos(-1,1) exp(0,2)
【程序】
#include <iostream>
#include <cmath>
using namespace std;
main()
{
double integral(double (*p)(double),double up_limit,double low_limit);
double (*p) (double);
p=sin;
cout<<"∫sin(x) from 0~1 Result is: "<<integral(p,1,0)<<endl;
p=cos;
cout<<"∫cos(x) from -1~1 Result is: "<<integral(p,1,-1)<<endl;
p=exp;
cout<<"∫exp(x) from 0~2 Result is: "<<integral(p,2,0)<<endl;
return 0;
}
double integral(double (*p)(double),double up_limit,double low_limit)//注意是(*p)
{
double j;
double m;
m=(fabs(up_limit)+fabs(low_limit))/1000000;
cout<<"m="<<m<<endl;
double result;
for(result=0,j=1;j<1000000;j++)
{
result+=(*p)(j*m+low_limit)*m;
}
return (result);
}
运行结果:
1.使用指针指向函数时,调用函数时注意是(*p)()而不是p(),这点谭浩强的书上是有错误的;
2.在函数调用指向函数的指针时,注意也是(*p)(double),而不是*p(double),后者是指针函数,不然会报错。
这个也是纠缠了很久,老是提示result那一个有错误
3.上下限注意用绝对值