精华内容
下载资源
问答
  • c语言-计算积分

    千次阅读 2019-04-06 14:03:18
    计算积分 采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。 程序运行结果示例: y1=1.333350 y2=1.151212 程序: #include <stdio.h> float Fun1(float x); float Fun2(float x); ...

    计算积分

    采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。

    程序运行结果示例:

    y1=1.333350

    y2=1.151212

     程序:

    #include <stdio.h>
    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=%f\ny2=%f\n", y1, y2);
        return 0;
    }
     
    /*  函数功能:计算函数1+x*x的函数值 */
    float Fun1(float x)
    {
        return  1 + x * x;
    }
     
    /*  函数功能:计算函数x/(1+x*x)的函数值 */
    float Fun2(float x)
    {
        return x / (1 + x * x);
    }
     
    /*    函数功能:用梯形法计算函数的定积分 */
    float Integral(float (*f)(float), float a, float b)
    {
        float s, h;
        int n = 100, i;
        s = ((*f)(a) + (*f)(b)) / 2;
        h = (b - a) / n;
         
        for (i=1; i<n; i++)
        {
           s += (*f)(a + i * h);
        }
        return s * h ;
    }

     

    展开全文
  • int y),并在主程序中实现输入输出4、编写计算学生年龄的递归函数5、编写递归函数实现Ackman函数一、实验目的与要求1、利用复化梯形公式计算积分掌握C语言中定义函数的方法掌握通过“值传递”调用函数的方法2、...

    1、利用复化梯形公式计算定积分

    2、计算Ackerman函数

    3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出

    4、编写计算学生年龄的递归函数

    5、编写递归函数实现Ackman函数

    一、实验目的与要求

    1、利用复化梯形公式计算定积分

    掌握C语言中定义函数的方法

    掌握通过“值传递”调用函数的方法

    2、计算Ackerman函数

    掌握递归函数的设计方法

    进一步练习阅读检查与调试修改C程序的方法

    3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出

    写出解决该问题的递归算法:

    20190519175610961593.png

    在递归函数中,使用数字1 作为回归条件;

    在递归函数中,使用 if_else 语句根据条件的真假来决定是递推还是回归。

    4、编写计算学生年龄的递归函数

    写出解决该问题的递归算法:

    递归公式如下,根据公式容易写出递归程序。

    20190519175611259445.png

    在递归函数中,使用数字1 作为回归条件;

    在递归函数中,使用if_else语句根据条件的真假来决定是递推还是回归。

    5、编写递归函数实现Ackman函数

    根据递归公式编写递归函数;

    在递归函数中,使用if_else语句根据条件的真假来决定是递推还是回归。

    二、实验内容

    1、利用复化梯形公式计算定积分

    问题的简单描述:

    (1)编制一个函数sab(a,b,n),其功能为利用复化梯形公式计算定积分

    20190519175611471359.png

    其中n为对区间[a,b]的等分数。要求该函数在一个独立的文件中。

    (2)编制一个主函数以及计算被积函数值的函数 f(x),在主函数中调用(1)中的函数sab(a,b,n)计算并输出下列积分值

    20190519175611597336.png

    要求主函数与函数f(x)在同一文件中。

    (3)编制另一个主函数以及计算被积函数值的函数 f(x),在主函数中调用(1)中的函数sab(a,b,n)计算并输出下列积分值

    20190519175611730148.png

    同样要求主函数与函数f(x)在同一文件中。

    (4)要求画出模块sab()的流程图。

    方法说明:

    设定积分为

    20190519175611824875.png

    则复化梯形求积公式为

    20190519175611922531.png

    其中h=(b-a)/n,Xk=a+kh。

    流程图

    20190519175612037765.png

    实验代码:

    (1)sab.h

    fz.gif

    #include

    double f(double x);

    double sab(double a,double b,int n)

    {

    double h,result,x1,x2,x3=0,t;

    int k;

    h=(b-a)/n;

    x1=f(a);

    x2=f(b);

    for(k=1;k<=n-1;k++)

    {

    t=a+k*h;

    x3=x3+f(t);

    }

    return h*(x1+x2)/2+h*x3;

    }

    fz.gif

    (2)6.4.2.2.1

    fz.gif

    #include

    #include

    #include"sab.h"

    double f(double x)

    {

    double result;

    result=x*x*exp(x);

    return result;

    }

    main()

    {

    double a,b,result;

    int n;

    printf("please input double a,b and integer n:");

    scanf("%lf%lf%d",&a,&b,&n);

    result=sab(a,b,n);

    printf("sab(%lf,%lf,%d)=%f",a,b,n,result);

    return 0;

    }

    fz.gif

    (3)6.4.2.2.2.

    fz.gif

    #include

    #include"sab.h"

    double f(double x)

    {

    double result;

    result=1/(25+x*x);

    return result;

    }

    main()

    {

    double a,b,result;

    int n;

    printf("please input double a,b and integer n:");

    scanf("%lf%lf%d",&a,&b,&n);

    result=sab(a,b,n);

    printf("sab(%f,%f,%d)=%f",a,b,n,result);

    return 0;

    }

    fz.gif

    运行结果

    20190519175612235031.png

    问题分析

    注意输出结果的类型,开始定义变量为double,所以结果也应该是相应的%lf,然后是算法,复化梯形公式,一开始没怎么看明白这个sab函数怎么写的,然后联想到定积分的基本定义,用一个个的小梯形的面积去替代曲面的面积,利用到了微元法和近似计算法。然后根据实验要求给的框图,大概理解了这个算法,h*【f(a)+f(b)】/2表示梯形的面积,再加上一个h乘上f(x)的累加,从1累加到n-1.

    2、计算Ackerman函数

    问题的简单描述:

    (1)根据方法说明,编制计算Ackerman函数的递归函数ack(n,x,y)。

    (2)编制一个主函数,由键盘输入n,x,y,调用(1)中的函数ack(n,x,y),计算Ackerman函数

    (3)在主函数中,输入之前要有提示,并检查输入数据的合理性,若输入的数据不合理,则输出出错信息。输出要有文字说明。

    (4)输入(n,x,y) = (2,3,1)运行该程序。然后自定义几组数据再运行该程序。

    方法说明:

    Ackerman函数的定义如下:

    1n,x,y为非负整数,且

    20190519175612384445.png

    流程图如下图所示:

    20190519175612559250.png

    实验代码:

    fz.gif

    #include

    int Ack(int n,int x,int y)

    {

    int a;

    if (n==0)

    a=x+1;

    if (n==1&&y==0)

    a=x;

    if (n==2&&y==0)

    a=0;

    if (n==3&&y==0)

    a=1;

    if (n>=4&&y==0)

    a=2;

    if (n!=0&&y!=0)

    a=Ack(n-1,Ack(n,x,y-1),x);

    return a;

    }

    main()

    {

    int n,x,y,result;

    printf("Please input n,x,y:");

    scanf("%d,%d,%d",&n,&x,&y);

    if (n<0&&x<0&&y<0)

    printf("data error");

    result=Ack(n,x,y);

    printf("Ack(%d,%d,%d)=%d",n,x,y,result);

    }

    fz.gif

    运行结果如下

    20190519175612727218.png问题分析:

    注意函数最后一个判断语句的写法,注意还有一个进一步递推的公式才能够写完这个程序。

    3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序只能怪实现输入输出

    问题的简单描述:

    编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。程序流程图如下图所示:

    20190519175612866867.png

    实验代码:

    fz.gif

    #include

    long getpower(int x,int y)

    {

    if (y==1)

    return x;

    else if(y>=2)

    return (x*getpower(x,y-1));

    }

    main()

    {

    int num,power;

    long answer;

    printf("请输入一个数:");

    scanf("%d",&num);

    printf("请输入一个幂次方:");

    scanf("%d",&power);

    answer=getpower(num,power);

    printf("结果是:%ld\n",answer);

    }

    fz.gif

    运行结果如下:

    20190519175612978195.png

    问题分析:

    这题比较简单没什么大问题。

    4、编写计算学生年龄的递归函数

    问题的简单描述:

    用递归方法计算学生的年龄。已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。流程图如下图所示:

    20190519175613094406.png

    实验代码:

    fz.gif

    #include

    int age(int n)

    {

    int c;

    if(n==1)

    c=10;

    else

    return age(n-1)+2;

    return c;

    }

    main()

    {

    int n=5;

    printf("%d",age(n));

    }

    fz.gif

    运行结果如下:

    20190519175613186203.png

    问题分析:

    注意递归公式就好了。

    5、编写递归函数实现Ackman函数

    问题的简单描述:

    定义递归函数实现下列Ackman函数:

    20190519175613287765.png

    其中m、n为正整数。设计程序求Acm(2,1),Acm(3,2)。

    实验代码:

    fz.gif

    #include

    Acm(int m,int n)

    {

    if(m==0)

    return n+1;

    if(n==0)

    return Acm(m-1,1);

    if(n>0&&m>0)

    return Acm(m-1,Acm(m,n-1));

    }

    int main()

    {

    int m,n,x,y;

    printf("please input two integers m,n:");

    scanf("%d%d",&m,&n);

    printf("please input two integers x,y:");

    scanf("%d%d",&x,&y);

    printf("Acm(%d,%d)=%d\n",m,n,Acm(m,n));

    printf("Acm(%d,%d)=%d",x,y,Acm(x,y));

    }

    fz.gif

    运行结果如下:

    20190519175613374679.png

    问题分析:

    这个程序其实也不难,只要看懂了要怎样下一步递推就可以了。

    三、实验小结(在本次实验中收获与不足)

    这节课我学会如何调用另一个独立文件程序中的函数,且要注意,在独立文件头文件中还要对函数进行声明。就是可以自己定义的东西直接拿来用,不用再去敲那些函数了,循环使用。现在敲代码还是看着框图去敲代码,发现自己存在很多问题,这个技能锻炼熟练了,但是里面的函数一些关键语句,比如变量代表的含义是什么,然后for里面的循环到底是什么东西,算法是怎么的出来的。

    做第一个时候我终于感受到了数学的重要性,去思考一个问题怎么用数学方法来解决,那种更简单,应该是以后实验的方向。

    展开全文
  • void CountIntegral(unsigned int *src, unsigned int *dst, int width, int height) { assert(src != NULL); assert(dst != NULL); assert(width >= 0); assert(height >= 0);... for ...
    void CountIntegral(unsigned int *src, unsigned int *dst, int width, int height)
    {
    	assert(src != NULL);
    	assert(dst != NULL);
    	assert(width >= 0);
    	assert(height >= 0);
    
    	dst[0] = src[0];
    	for (int x = 1; x < width; x++)
    		dst[x] = dst[x - 1] + src[x];
    	for (int y = 1; y < height; y++)
    		dst[y * width] = dst[(y - 1) * width] + src[y * width];
    	for (int y = 1; y < height; y++)
    	{
    		for (int x = 1; x < width; x++)
    			dst[y * width + x] = src[y * width + x] + dst[y * width + x - 1] +
    								 dst[(y - 1) * width + x] - dst[(y - 1) * width + x - 1];
    	}
    }

     

    展开全文
  • 优质解答用4了四种方法,另外还加了个龙格贝.大人大量给分吧~#includeusing namespace std;double getPI0(int h){double l = 1.0/h;int i,j;double s = 0;for(i = 0; i < h; i++){s += l*(4/(1+((2*i+1)*l/2)*((2*...

    7d14a2b81882cfe4494b096a84150b2a.png 优质解答

    用4了四种方法,另外还加了个龙格贝.

    大人大量给分吧~

    #include

    using namespace std;

    double getPI0(int h){

    double l = 1.0/h;

    int i,j;

    double s = 0;

    for(i = 0; i < h; i++){

    s += l*(4/(1+((2*i+1)*l/2)*((2*i+1)*l/2)));

    }

    return s;

    }

    double getPI1(double h){

    double l = 1.0/h;

    int i,j;

    double s = 0;

    for(i = 0; i < h; i++){

    s += l*(4/((1+i*l*i*l)))/2+l*4/(1+((i+1)*l*(i+1)*l))/2;

    }

    return s;

    }

    double getPI2(double h){

    double l = 1.0/h;

    int i,j;

    double a,b;

    double s = 0;

    for(i = 0; i < h; i++){

    a = i*l;

    b = i*l+l;

    double fa = 4/(1+a*a);

    double fb = 4/(1+b*b);

    double fab = 4/(1+(a+b)*(a+b)/4);

    s += l*(fa+4*fab+fb)/6;

    }

    return s;

    }

    double fj(double a,int j){

    int i;

    double r = 1;

    for(i = 0; i < j; i++){

    r *= a;

    }

    return r;

    }

    double longBeiGe(double r){//r为给定的误差限

    double * tm;

    double * t;

    tm = new double[1];

    t = new double [2];

    tm[0] = getPI1(1);

    t[0] = getPI1(2);

    t[1] = (4*t[0]-tm[0])/3;

    int i = 1,j = 0;

    while(t[i]-tm[i-1]>r){

    tm = t;i++;

    t = new double [i+1];

    t[0] = getPI1(fj(2,i+1));

    for(j = 1; j

    展开全文
  • 计算x2在0到1间的面积 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(int argc, char *argv[]) 5 { 6 int i,k,n; 7 n=100000; //循环总次数 8 k=0;...
  • c语言计算行列式

    2020-10-16 23:01:26
    ∀n∈N 是通过欧拉积分 Γ(z)=∫0∞tz−1e−tdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞​tz−1e−tdt. 你可以找到更多关于的信息 LaTeX 数学表达式here. 新的甘特图功能,丰富你的文章 Mon ...
  • C语言计算圆周率PI的代码

    千次阅读 2019-01-31 09:08:08
    下面的内容段是关于C语言计算圆周率PI的内容。 #include "stdio.h" #include "stdlib.h" #define SCALE 10000 #define ARRINIT 2000 void pi_digits(int digits) { int carry = 0; int arr[digits + 1]; ...
  • C语言积分

    2015-03-31 18:20:09
    用梯形法求定积分,对应于一个积分式就要有一段程序,不过可以改变程序的一小部分来改变所要求的积分式,程序以y=xsinx
  • 思路分析 代码实现 #include <stdio.h> float DefiniteIntegral(float x,float y,float (*f)(float)); float Fun(float x);... 功能描述:计算积分的函数 形参列表:上限x 下限y 被积函数f 注意事
  • c语言计算积分 一、积分计算原理 先把积分区域划分为n个曲边梯形,每个求值点为曲边梯形的两个底边中点,求得每个曲边梯形的面积即为积分值 用近似法求得积分:当n为无穷大时,可将该曲边梯形近似看成矩形,求出求...
  • 根据Romberg算法计算积分,和变步长的Simpson算法的输入都一样.算法基本分析:输入a,b(积分上下限),n为积分区间等分数,eps为计算精度,我这里1e-7,代表0乘以10的负6次方.本题目取的例子为数值书137面的例子2...
  • c语言实现积分运算

    万次阅读 2018-10-24 21:24:44
    其次还要知道定积分的定义 #include #include using namespace std; int main() { float integral(float(*p)(float),float a,float b,int n); float fsin(float); float a1,b1,c,(*p)(float); int n; ...
  • you can use this code to analyse a point is inside the circle or outside the circle.
  • 精确要求:当通项的绝对值小于10^-6时为止。 公式如下: #include <stdio.h> #include <math.h> double mycos(double x){ int n=1; double s=0,t=1.0; while(fabs(t)>... printf("请输入通项:
  • 积分的 sin (x)若要使用实用程序,用户必须输入两个值: b 和 c,在指定的范围 [b、 c]∫ 将计算 sin (x) dx。必须为弧度,不度输入 b 和 c请注意,对间隔的作用负积分也是否定的。例如,从 0 到 π 这个函数的积分...
  • C语言积分的近似值

    2019-04-30 17:09:08
    用梯形法求积分的近似值 **/ #include"stdio.h" #include"math.h" float seekIntegral(float a, float b, int n) { float f1 = 0, f2 = 0; float s = 0; float deta, x; x = a; deta = (b - a) / n; f1 = sin...
  • 变步长的Simpson公式计算积分.算法基本分析:输入a,b(积分上下限),n为积分区间等分数,eps为计算精度,我这里1/2e-6,代表0.5乘以10的负6次方.变步长梯形求积算法计算积分,本题目取的例子为数值书131面的例子2,...
  • 声明:本系列随笔主要用于记录c语言的常备知识点,不能保证所有知识正确性,欢迎大家阅读、学习、批评、指正!!你们的鼓励是我前进的动力。严禁用于私人目的。转载请注明出处:http://www.cnblogs.com/myblesh/...
  • c语言实现积分的方法

    万次阅读 2012-06-07 14:37:59
    复化梯形公式,复化抛物线公式和Romberg求积法的算法程序: 以下程序均定义误差限为1*10^-5; 1)复化梯形公式: #include  #include  ...#define a 0 //积分下限a ...#define b 1 //积分上限b
  • Romberg积分计算积分C语言

    千次阅读 2012-03-30 18:48:49
    -------------Romberg积分计算积分------- 参考教材:《数值分析》李乃成,梅立泉,科学出版社  《计算方法教程》第二版 凌永祥,陈明逵*/ //误差界eps%被积函数为f(x)=(x^3+sin(x))/x;积分区间为[0.3,0.8] ...
  • 请教大侠如下积分如何计算,重要是写出步骤,基础比较差:1. ∫[a,+∞]2/π ·1/(1+x^2)dx =1 求a 值;2. ∫[0,+∞]a - e^(-x^2/2)dx =1 求a值;3. ∫[-∞,+∞]a·e^(-|x|)dx =1, 求a值;4. ∫[0,+∞]∫[0,+∞] a·1/(1+x^...
  • 计算机C语言等级考试模拟题(福建省) (42页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!22.9 积分微机原理实验报告学 院:班 级:学 号:姓 名:小班学号:目录实验1、ADS ...
  • 今天小编就为大家分享一篇C语言:利用指针编写程序,用梯形法计算给定的定积分实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • C语言求定积分

    千次阅读 2019-03-13 16:49:42
    那现在就用这种方法,利用C语言求定积分。 下面附上代码: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;iostream&amp;gt; #include &...
  • c语言实现二重积分 数值解法
  • 主要介绍了C语言计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下
  • 主要介绍了C语言实现求定积分的方法,涉及C语言操作相关数学函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 本文实例为大家分享了C语言程序实现黎曼和求定积分,供大家参考,具体内容如下通过黎曼和解定积分既是把在xy平面中函数曲线与x轴区间区域划分成多个矩形并求它们的面积之和,矩形数量越多,得出的面积越精确。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,991
精华内容 3,196
关键字:

c语言计算积分

c语言 订阅