c#用复合梯形公式求积分,已知上下限及步长为什么计算结果为0

发布于 2022-09-03 00:25:06 字数 1784 浏览 14 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

潜移默化 2022-09-10 00:25:06

提供一个不是很完美的解决方法
输入一个值就回车一次

    select = int.Parse(Console.ReadLine());
    Console.WriteLine("请输入积分上下限及步长");
    a = int.Parse(Console.ReadLine());
    b = int.Parse(Console.ReadLine());
    step = Double.Parse(Console.ReadLine());

程序数据输入有问题, 你输入的所以数据都会当做字符处理

Read方法的处理方式是:
第一次调用会阻塞你的程序,直到输入Enter,同时会在输入内容上添加一个终止序列(Windows下是回车符和换行符)

后续的Read方法调用不会阻塞你的程序,直到Read方法检索完毕了最后一个字符,这时如果要再调用Read方法,程序又会再次处于阻塞状态了,就像第一次调用Read方法一样,但是这又是新的一次轮回了!

-残月青衣踏尘吟 2022-09-10 00:25:06

多谢大神受教了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文