c#用复合梯形公式求积分,已知上下限及步长为什么计算结果为0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a, b, select;
double result,step;
Console.WriteLine("请选择要积分的函数,1:f(x)=1+x^2 2:f(x)=log10(x) 3:1/(1+x^2)");
select = Console.Read();
Console.WriteLine("请输入积分上下限及步长");
a = Console.Read();
b = Console.Read();
step = Console.Read();
Integration func = new Integration();
FunctionDelegate f1 = new FunctionDelegate(func.fun_1);
FunctionDelegate f2 = new FunctionDelegate(func.fun_2);
FunctionDelegate f3 = new FunctionDelegate(func.fun_3);
if (select == 1)
{
result = func.Integral(a, b,step, f1);
}
else if (select == 2)
{
result = func.Integral(a, b, step, f2);
}
else
{
result = func.Integral(a, b,step, f3);
}
Console.WriteLine("The result is {0}", result);
System.Threading.Thread.Sleep(1000 * 1000);
}
//定义委托
public delegate double FunctionDelegate(double x);
public partial class Integration
{
public double fun_1(double x)
{ return 1 + x * x; }
public double fun_2(double x)
{ return Math.Log10(x); }
public double fun_3(double x)
{ return 1 / (1 + x * x); }
public double Integral(double a, double b,double s, FunctionDelegate f)
{//梯形法求积分的值
double sum = 0;
for(double i=a; i<=b; i+=s)
{
sum += f(i);
}
sum *= s;
return sum;
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
提供一个不是很完美的解决方法
输入一个值就回车一次
程序数据输入有问题, 你输入的所以数据都会当做字符处理
Read方法的处理方式是:
第一次调用会阻塞你的程序,直到输入Enter,同时会在输入内容上添加一个终止序列(Windows下是回车符和换行符)
后续的Read方法调用不会阻塞你的程序,直到Read方法检索完毕了最后一个字符,这时如果要再调用Read方法,程序又会再次处于阻塞状态了,就像第一次调用Read方法一样,但是这又是新的一次轮回了!
多谢大神受教了