变步长梯形公式(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;