C语言求解积分函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
int part_number;//分割段数
float dt;//dt
float upper_limit,lower_limit;//积分上限和下限
void read();
void setDt();
double accurate(double t);
double integrates();
int main(void)
{
double result;
read();
setDt();
result=integrates();
printf("(1/(1+50t^2))*dt在%f到%f上的积分结果为%.20f\n",lower_limit,upper_limit,result);
}
//读取分割段数以及积分上限和下限
void read()
{
printf("请输入分割段数(注意:段数越大,结果越精确):");
while(0==scanf("%d",&part_number)||part_number<=0)
{
while('\n' != getchar()){}
printf("输入无效!请重新输入分割段数:");
}
printf("请输入积分上限:");
while(0==scanf("%f",&upper_limit))
{
while('\n' != getchar()){}
printf("输入无效!请重新输入积分上限:");
}
printf("请输入积分下限:");
while(0==scanf("%f",&lower_limit))
{
while('\n' != getchar()){}
printf("输入无效!请重新输入积分下限:");
}
if(lower_limit>upper_limit)
{
printf("输入无效,积分上限不能小于积分下限!请重新输入\n"); read();
}
}
//计算dt
void setDt()
{
dt=(1.0*(upper_limit-lower_limit))/part_number;
}
//计算(1/(1+50t^2))*dt
double accurate(double t)
{
double temp=(1.0/(1+50*t*t))*dt;
return temp;
}
//调用accurate函数计算在积分区间上的最后结果
double integrates()
{
double sum=0.0;//积分结果
//根据分割段数进行相应轮次accurate运算,并且将每次计算结果相加 int index=0;
for(;index sum+=accurate(lower_limit+index*dt); return sum; }