C++编程用梯形法求积分

2023-11-02

这是我们学校oj的作业可以看看:

 

#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的套路了,交上去一遍基本上就能对了,不是之前刚开学一个答案能改上十多次的我了。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++编程用梯形法求积分 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 使用 C# 读取 Soap 消息

  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐