[精品]变步长梯形公式(c措辞)
变步长梯形公式(C语言)
程序:
// cehngxu.cpp : 定义控制台应用程序的入口点。 //
#include "stdafx.h"
#include"stdio.h"
#include "math.h"
double f(double x) //这里自定义了函数,因为出现sin(0)/0的情况,系统无法计算;
{
double y;
if (x == 0)
y = 1; //把x=0作为一种情况,单独拿出来;
else
y = sin(x) / x; //正常情况下的函数;
return(y);
} //编写这个自定义函数便于你在作业中的计算,对于不
用的
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目只需改动一下函数即可计算;
void main() //主函数;
{
double a , b ,h,k,s,t[4998]; //数组的定义中不能出现变量,故对其任意取值,一般取一个
很大的数;
int n = 1, m = 0;
printf("please input a=");
scanf_s("%lf", &a); //在VC环境下用scanf输入没有问题,但是在我这编译环境
visual studio 2013下需要用scanf_s()输入;
printf("please input b=");
scanf_s("%lf", &b);
t[1] = (b - a)*(f(a) + f(b)) / 2;
do
{
h = (b - a) / n;
s = 0;
for (k = 0; k < n; k++)
{
s += f(a + (k + 0.5)*h);
}
t[2 * n] = t[n] / 2 + h / 2 * s; //梯形的递推公式
n = 2*n;
m = m + 1;
}
while (fabs(t[n]- t[n/2]) >= 0.0000001);
printf("\n计算次数=%d",m);
printf("\n计算结果=%.7lf", t[n]);
printf("\n误差为=%.10lf", fabs(t[n] - t[n / 2]));
}
新加入的程序部分我做了批注,你应该能看懂,整个程序变化不大,主要是把下标我给你改成了数组,这样看起来比较直观,不容易迷糊。还有就会你那个while的终止条件改了一下,其他没什么变化。
结果: