采用梯形法编程实现计算函数定积分(指针)
2022年 03月 19 日

BIGFISH

按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和)),在积分区间[a,b]内计算函数

y1=10(1+x2)dxy2=30x1+x2dx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。 Integral(float (*f)(float), float a, float b);

**输出格式要求:"y1=%f\ny2=%f\n"

知识点:利用梯形法计算定积分
方法一

#include 
#include 
#include  

float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
///这是函数引用说明,第一个float表示函数返回值为浮点型,f表示函数名,第二个float表示参数类型是浮点型。
int main()
{
    float y1, y2;
    y1 = Integral(Fun1, 0.0, 1.0);
    y2 = Integral(Fun2, 0.0, 3.0);
    printf("y1=%f\ny2=%f\n", y1, y2);
}

float Fun1(float x)
{
    return 1 + x * x;
}

float Fun2(float x)
{
    return x / (1 + x * x);
}

float Integral(float (*f)(float), float a, float b)
{
    int i, n = 100;
    float s = 0, h = 0;
    h = (b - a) / n; //将高分为100份
    s = ((*f)(a) + (*f)(b)) / 2;  // 第一条上底 和最后一条下底
    for (i = 1; i < n; i++)  //注意是 小于 不是 小于等于
    {
        s += (*f)(a + i * h);
        //除了第一和最后 , 其它都是上次 ,所以不需要除二
        //(a + i * h) ==下底
    }
    return s * h;
}

方法二

#include 
#include 
#include  

float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);

int main()
{
    float y1, y2;
    y1 = Integral(Fun1, 0.0, 1.0);
    y2 = Integral(Fun2, 0.0, 3.0);
    printf("y1=%0.2f\ny2=%0.2f\n", y1, y2);
}

float Fun1(float x)
{
    return 1 + x * x;
}

float Fun2(float x)
{
    return x / (1 + x * x);
}

float Integral(float (*f)(float), float a, float b)
{
    float sum = 0;
    int i, n = 100;
    float s = 0, h = 0;
    h = (b - a) / n;     // 把高分成100份
    for (i = 1; i <= n; i++)
    {
        s = ((*f)(a + (i-1)*h) + (*f)(a + i * h))*h / 2;
        //(*f)== 函数表达式(fun函数)
        //a + i * h == 下底
        //a + (i - 1)* h == 上底
        sum = sum + s;
    }
    return sum; 
}

采用梯形法编程实现计算函数定积分(指针)

按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和)),在积分区间[a,b]内计算函数

y1=10(1+x2)dxy2=30x1+x2dx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。 Integral(float (*f)(float), float a, float b);

**输出格式要求:"y1=%f\ny2=%f\n"

知识点:利用梯形法计算定积分
方法一

#include 
#include 
#include  

float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
///这是函数引用说明,第一个float表示函数返回值为浮点型,f表示函数名,第二个float表示参数类型是浮点型。
int main()
{
    float y1, y2;
    y1 = Integral(Fun1, 0.0, 1.0);
    y2 = Integral(Fun2, 0.0, 3.0);
    printf("y1=%f\ny2=%f\n", y1, y2);
}

float Fun1(float x)
{
    return 1 + x * x;
}

float Fun2(float x)
{
    return x / (1 + x * x);
}

float Integral(float (*f)(float), float a, float b)
{
    int i, n = 100;
    float s = 0, h = 0;
    h = (b - a) / n; //将高分为100份
    s = ((*f)(a) + (*f)(b)) / 2;  // 第一条上底 和最后一条下底
    for (i = 1; i < n; i++)  //注意是 小于 不是 小于等于
    {
        s += (*f)(a + i * h);
        //除了第一和最后 , 其它都是上次 ,所以不需要除二
        //(a + i * h) ==下底
    }
    return s * h;
}

方法二

#include 
#include 
#include  

float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);

int main()
{
    float y1, y2;
    y1 = Integral(Fun1, 0.0, 1.0);
    y2 = Integral(Fun2, 0.0, 3.0);
    printf("y1=%0.2f\ny2=%0.2f\n", y1, y2);
}

float Fun1(float x)
{
    return 1 + x * x;
}

float Fun2(float x)
{
    return x / (1 + x * x);
}

float Integral(float (*f)(float), float a, float b)
{
    float sum = 0;
    int i, n = 100;
    float s = 0, h = 0;
    h = (b - a) / n;     // 把高分成100份
    for (i = 1; i <= n; i++)
    {
        s = ((*f)(a + (i-1)*h) + (*f)(a + i * h))*h / 2;
        //(*f)== 函数表达式(fun函数)
        //a + i * h == 下底
        //a + (i - 1)* h == 上底
        sum = sum + s;
    }
    return sum; 
}

赞 (0)

猜您想看

ubuntu美化

参考: ...

01

【tools-download】

爆破工具 ...

04

c语言 字母排序

输入三个英文字...

05

评论区(1条评论)

我要评论


利用梯形法计算定积分 - 大鱼

[…] 代码实例:采用梯形法编程实现计算函数定积分(指针) […]