这是我们学校oj的作业可以看看:
![](https://img-blog.csdnimg.cn/fbe3275ac6aa496ebec937c79ebf7c8f.png)
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double hanshu1(double j)
{
double y;
y = 4 / (1 + j * j);
return y;
}
double hanshu2(double j)
{
double y;
y = sqrt(1 + j * j);
return y;
}
double hanshu3(double j)
{
double y;
y = sin(j);
return y;
}
double jifen1(double*a, double*b)
{
int n = 1000;
double y,y1,y2=0,h;
h = (b - a) / n;
y1 = h * (hanshu1(*a) + hanshu1(*b)) / 2;
for (int i = 1; i <= n - 1; i++)
{
y2 = y2 + h * hanshu1(*a + i * h);
}
y = y1 + y2;
return y;
}
double jifen2(double*a, double*b)
{
int n = 1000;
double y, y1, y2 = 0, h;
h = (b - a) / n;
y1 = h * (hanshu1(*a) + hanshu1(*b)) / 2;
for (int i = 1; i <= n - 1; i++)
{
y2 = y2 + h * hanshu1(*a + i * h);
}
y = y1 + y2;
return y;
}
double jifen(double*a, double*b)
{
int n = 1000;
double y, y1, y2 = 0, h;
h = (b - a) / n;
y1 = h * (hanshu2(*a) + hanshu2(*b)) / 2;
for (int i = 1; i <= n - 1; i++)
{
y2 = y2 + h * hanshu2(*a + i * h);
}
y = y1 + y2;
return y;
}
double jifen3(double*a, double*b)
{
int n = 1000;
double y, y1, y2 = 0, h;
h = (b - a) / n;
y1 = h * (hanshu3(*a) + hanshu3(*b)) / 2;
for (int i = 1; i <= n - 1; i++)
{
y2 = y2 + h * hanshu3(*a + i * h);
}
y = y1 + y2;
return y;
}
int main()
{
double a, b;
double pi = 3.14;
cout.setf(ios::fixed);
a = 0;
b = 1;
cout << setprecision(4) << jifen1(&a, &b) << endl;
a = 1;
b = 2;
cout << setprecision(4) << jifen2(&a, &b) << endl;
a = 0;
b = pi;
cout << setprecision(4) << jifen1(&a, &b) << endl;
}
后面看了看答案反思了一下发现的确可以改进,还有对学的函数指针一开时觉得有点无用但是经过这道题改观了。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double hanshu1(double j)
{
double y;
y = 4 / (1 + j * j);
return y;
}
double hanshu2(double j)
{
double y;
y = sqrt(1 + j * j);
return y;
}
double hanshu3(double j)
{
double y;
y = sin(j);
return y;
}
double jifen1(double(*fun)(double x),double*a, double*b)
{
int n = 1000;
double y, y1, y2 = 0, h;
h = (*b - *a) / n;
y1 = h * (((*fun)(*a) + (*fun)(*b)) / 2);
for (int i = 1; i <= n - 1; i++)
{
y2 += (*fun)(*a + i * h);
}
y2 *= h;
y = y1 + y2;
return y;
}
int main()
{
double a, b;
double pi = 3.14;
cout.setf(ios::fixed);
a = 0;
b = 1;
cout << setprecision(4) << jifen1(hanshu1,&a, &b) << endl;
a = 1;
b = 2;
cout << setprecision(4) << jifen1(hanshu2,&a, &b) << endl;
a = 0;
b = pi/2;
cout << setprecision(4) << jifen1(hanshu3,&a, &b) << endl;
}
函数指针这个东西就是可以使你定义的几个函数当成参数传进你的主函数中。你只要调主函数就可以了不用调来调去。可以减少代码重用。
现在收悉我们学校oj的套路了,交上去一遍基本上就能对了,不是之前刚开学一个答案能改上十多次的我了。。。。