怎么用C语言表示积分

如题所述

源代码如下:

#include#includefloat f1(float x) 

{

return(1.0+x);

}

float f2(float x) 

{

return(2.0*x+3.0);

}

float f3(float x)
{
return(exp(x)+1);
}

float f4(float x)
{
return(pow(1+x,2));

}

float f5(float x)
{

return(pow(x,3));

}

float fsimp(float a,float b,float (*p)(float))

{

float c,s;

c=(a+b)/2;

s=(b-a)/6*(p(a)+4*p(c)+p(b));

return s;

}

int main()

{

float a,b;

printf("请输入积分下限a的值:");

scanf("%f",&a);

printf("请输入积分上限b的值:");

scanf("%f",&b); 

printf("%f\n",fsimp(a,b,f1));

}

扩展资料

1、对应于一个积分式要有一段程序,可以改变程序的一小部分来改变所要求的积分式。

2、除数不能位0。

3、两个整数相除,结果仍是整数。

4、若被除数其中有一个为浮点数或者两个都为浮点数,则结果为浮点类型。操作数必须为整数,不能是浮点数。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-05

代码如下:

f1浮点数(x)

返回(1.0+x);

f2浮点(浮点x)

Return(2.0*x+3.0);

{}floatf3(floatx)return(exp(x)+1);{}浮动f4(浮动x)返回值(pow(1+x,2));

f5(Floatx){

返回(pow(x,3));

fsimp(Floata,Floatb,Float(*p)(Float))

浮动c,s;

C=(a+b)/2;

/6s=(b-a)*(p+4*p(c)(a)+p(b));

返回年代;

Intmain()

浮动a、b;

Printf(“请输入a:的值”);

scanf (" % f ", & a);

Printf(“请输入上限b:”的值);

scanf(“% f”,& b);

Printf("%f\n",fsimp(a,b,f1));

扩展资料:

1.对应一个积分要有一个程序段,你可以改变程序的一小部分来改变所需的积分。

2.除数不可能是0。

3.除以两个整数,结果仍然是整数。

4.如果一个或两个红利都是浮点数,那么结果就是浮点类型的。操作数必须是整数,而不是浮点数。

5.高等数学中的微积分是连续的,cpu是离散系统中按节拍运行的顺序电路,计算机中的dt不能无穷小,但根据算法的执行周期有一个最小值,微分可减可除,积分可加。

本回答被网友采纳
第2个回答  推荐于2017-10-15

  高等数学里的微积分是连续的,CPU这种时序电路按拍运行属于离散系统,dt在计算机里不可能趋于无穷小,而是有个最小值,这个取决于的算法执行周期。
  微分可以用减法或除法,积分用加法。

比如定义几个组全局变量 
volatile double V_previous, V_Current;
volatile double dV;
volatile double iV;

V_previous代表前一次V的值。
V_current代表这一次V的值。
dV是微分
iV是积分

如果有必要,可以自行加上时间戳和存储缓冲区用来统计数据。

需要一个函数对上述变量初始化
void Var_Init(void)
{
  V_previous = V_Current = dV = iV = 0;
}

假设下面这个函数严格地每隔时间t执行一次,而且这个t就是符合你分辨率要求的单位时间dt。比如t=1ms,则程序开始运行时是t0,一直执行到时刻t(n-1),tn。
void Scheduled_Task(void)
{
  V_previous = V_Current;    // 将t(n-1)次的旧数据存在previous变量中
  V_Current = **********; // 获取最新一次的数据,取决于你的数据源
  dV = V_Current - V_previous; // 减法做微分
  iV += V_Current;  // 加法做积分
}

第3个回答  2013-05-15
例如从0到1区间积分,选择一个间隔,如0.01,然后从0到1循环,每次增加0.01。然后把f(x)*0.01累加起来就是积分结果了。
相似回答