/* * * 用变步长梯形求积公式求定积分 * 1 * ∫ (x/(4+x^2))dx * 0 */ #include <stdio.h> #include <string.h> #include <math.h> #include <conio.h> #include <stdlib.h> #define epsilon 0.00001 float f(float x) { return(x/(4+x*x)); } float computeT(float a,float b) { float T=0,h=(b-a)/2; T=h*(f(a)+2*T+f(b))/2; return(T); } main() { int i; float a,b,T1,T2,S,x,h; printf("\n Input the begin :"); scanf("%f",&a); printf("\n Input the end :"); scanf("%f",&b); h=b-a; T1=computeT(a,b); while(1) { S=0; x=a+h/2; do { S+=f(x); x+=h; }while(x<b); T2=(T1+h*S)/2; if(fabs(T2-T1)>=epsilon) { T1=T2; h=h/2; continue; } else break; } printf("solve is : %f",T2); getch(); return(S); }