一.写一个用矩形法求定积分的函数,求sin(x)在(0,1)上的定积分。
#include <stdio.h>
#include <math.h>
float jifen(float a,float b)
{int i,l;
float n=0.001,s=0; //n表示划分的单位宽度,n越小结果越精确,n是矩形的宽
l=(b-a)/n; // l表示有多少个单位宽度
for(i=0;i<l;i++)
s=n*sin(a+n*i)+s; // sin(a+n*i)是矩形的长
printf("用矩形法求得该函数在(%2.0f,%2.0f)上的积分为%f。\n",a,b,s);
}
main()
{
jifen(0,1);
}
二.写一个用梯形法求定积分的函数,求sin(x)在(0,1)上的定积分。
#include <stdio.h>
#include <math.h>
float jifen(float a,float b)
{int i,l;
float n=0.001,s=0;
l=(b-a)/n;
for(i=0;i<l;i++)
s=(sin(a+n*i)+sin(a+n*(i+1)))*n/2+s; // (sin(a+n*i)是梯形的上底,sin(a+n*(i+1))是下底
printf("用梯形法求得该函数在(%2.0f,%2.0f)上的积分为%f。\n",a,b,s);
}
main()
{
jifen(0,1);
}
三.(综合)写一个用矩形法和梯形法求定积分的通用函数,分别求sin(x)在(0,1)上、cos(x)在(-1,1)上、exp在(0,2)上的定积分。
说明:jifen的函数定义中,double (*fun)(double)表示fun是指向函数的指针,被指的函数是一个实型函数,有一个实型形参,Fun是指向函数的指针变量。用jifen(0,1,sin)语句调用jifen函数时,给jifen函数传递了sin函数的入口地址,这时jifen函数中的fun函数就相当于是sin函数了,(*fun)(a+n*i)相当于sin(a+n*i)。这样jifen函数就是一个通用求定积分的函数了。
#include <stdio.h>
#include <math.h>
jifen(float a,float b,double (*fun)(double))
{int i,l;
float n=0.001,s=0,s1=0;
l=(b-a)/n;
for(i=0;i<l;i++)
{s=n*(*fun)(a+n*i)+s;
s1=((*fun)(a+n*i)+(*fun)(a+n*(i+1)))*n/2+s1;
}
printf("用矩形法求得该函数在(%2.0f,% 2.0f)上的积分为%f。\n",a,b,s);
printf("用梯形法求得该函数在(%2.0f,% 2.0f)上的积分为%f。\n\n",a,b,s1);
}
main()
{printf("1.sin函数:\n");
jifen(0,1,sin);
printf("2.cos函数:\n");
jifen(-1,1,cos);
printf("3.exp函数:\n");
jifen(0,2,exp);
}