C语言复习---矩形法求定积分函数

一:分析:

大一学习积分的时候,我们学习过,可以通过矩形法来求定积分。
思路就是将积分区间划分成n等份,然后将这n等份近似看成矩形(或梯形),然后对所有的矩形(或梯形)的面积进行求和。

二:简单的例子

求函数X^2在的定积分

矩形法:

#include<iostream>
#include<math.h>
using namespace std;
int main(){
    float fun(float x);
    float a, b;
    cout << "请输入函数X^2的定积分的下限a和上限b:";
    cin >> a >> b;
    int n = 50;//将区间划分成50份
    float h = (b - a) / n;//h是每个区间分大小
    float s = 0;//s是矩形的面积的和
    float i = 0;
    for (i = a; i < b; i += h){
        s = s + fun(i)*h;
    }
    cout << "\n结果是:" << s << endl;
    cout << endl;
}
float fun(float x){
    return pow(x, 2);
}

三:使用C语言实现下面三个函数的定积分求解

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//使用矩形法来求定积分的通用函数
//p是函数指针,a是下界,b是上界,n是等分数
float integral(float(*p)(float), float a, float b, int n)
{
    int i;
    float area=0;
    float ew = (b - a) / n;

    for (i = 1; i <= n;i++)
        area += (*p)(a + i*ew)*ew;

    return area;
}

float f_sin(float x)
{
    return sin(x);
}

float f_cos(float x)
{
    return cos(x);
}

float f_exp(float x)
{
    return exp(x);
}

int main()
{
    float a, b,area;
    float(*p)(float);
    int n = 20;

    printf("test sin,input a,b:");
    scanf("%f,%f", &a, &b);
    p = f_sin;
    area = integral(p, a, b, n);
    printf("get value:%f\n", area);

    printf("test cos,input a,b:");
    scanf("%f,%f", &a, &b);
    p = f_cos;
    area = integral(p, a, b, n);
    printf("get value:%f\n", area);

    printf("test exp,input a,b:");
    scanf("%f,%f", &a, &b);
    p = f_exp;
    area = integral(p, a, b, n);
    printf("get value:%f\n", area);

    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/ssyfj/p/9562727.html

时间: 2024-10-03 08:44:39

C语言复习---矩形法求定积分函数的相关文章

ZOJ 3898 Stean 矩形法求积分

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5601 题意:求一个绕y轴旋转的旋转体体积.R = 2+cos(z). 思路:旋转体体积可以直接用积分求出来,旋转体表面积公式对于此题积分比较难积,所以用矩形法来求积分. 1 #include <bits/stdc++.h> 2 using namespace std; 3 int T; 4 double z1, z2, V, area; 5 const doubl

C语言之函数调用11—递归法求Hermite函数

/*递归法! ========================================== 题目: Hermite 函数:输入n.x,求Hn(x)? H0(x)=1; H1(x)=2*x; Hn(x)=2*x*Hn-1(x)-2*(n-1)Hn-2(x); ========================================== */ #include<stdio.h> float H(int n,int x) { if(n==0) return 1; if(n==1) r

C语言之函数调用12—递归法求阿克曼函数

//递归法! /* =========================================== 题目:编写阿克曼函数的递归函数程序! A(m,n)= n+1                (m=0) A(m-1,1)       (m=0) A(m-1,A(m,n-1))            (m!=0,n!=0) =========================================== */ #include<stdio.h> int A(int m,int n)

C语言花式玩法之把函数拷贝到数组执行 (需要mprotect)

在阅读内核代码的时候,明白了内核是通过页表项中的标志位_PAGE_READ,_PAGE_WRITE,_PAGE_EXECUTE来区分页的权限的. 进程在内核中的地址空间代码段,数据段,堆,栈之间最大的区别也是权限的区别,而系统调用mprotect恰好是用来改变内存页的权限的. 是否可以通过mprotect可以把栈上的数组修改成可执行权限,然后把函数内容拷贝到数组执行呢?值得尝试一下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #inc

POJ 2478 Farey Sequence 筛选法求欧拉函数

题目来源:POJ 2478 Farey Sequence 题意:输入n 求 phi(2)+phi(3)+phi(4)+...+phi(n) 思路:用类似筛法的方式计算phi(1), phi(2), ..., phi(n) 再求前缀和 #include <cstdio> #include <cstring> #include <cmath> //欧拉phi函数 const int maxn = 1000010; typedef long long LL; int eule

hdu2824 The Euler function 筛选法求欧拉函数模板题

//求a , b范围内的所有的欧拉函数 //筛选法求欧拉函数模板题 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 3000010 ; typedef __int64 ll ; int e[maxn] ; int a ,  b ; void Euler() { int i,j; for (i=1;i<maxn;i++) e[i]

嵌入式Linux C语言(三)——指针与函数

嵌入式Linux C语言(三)--指针与函数 指针对函数的功能有巨大的贡献,指针能够将数据传递给函数,并且允许函数对数据进行修改.指针对于函数的作用主要有两方面:将指针传递给函数和声明函数指针. 一.程序的栈和堆 程序的栈和堆是C语言程序运行的运行时元素. 1.程序栈 程序栈是支持函数执行的内存区域,通常和堆共享一块内存区域,通常程序栈占据内存区域的下部,堆用内存区域的上部.程序栈存放栈帧,栈帧存放函数参数和局部变量.调用函数时,函数的栈帧被推倒栈上,栈向上长出一个栈帧,当函数终止时,函数的栈帧

【转载】C语言 构建参数个数不固定函数

深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施. VA函数(variable argument function),参数个数可变函数,又称可变参数函数.C/C++编程中,系统提供给编程人员的va函数很少.*printf()/*scanf()系列函数,用于输入输出时格式化字符串:exec*()系列函数,用于在程序中执行外部文件(main(int argc,char*argv[]算不算呢,与其说main

BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则.小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一.小Q想在这种纸中裁减