/* N次関数の定積分 Nと係数と区間を読み込み 区分求積 */
#include<stdio.h>
#include<math.h>
#define M 10 /* 分割数の最大値=2^M
*/
int n;
float c[10];
main(){
int
i,j,k;
float
a,b,d,s,x;
int
power(int,int);
float
f(float);
FILE
*fp;
fp=fopen("K:/40103A.dat","w");
printf("n次関数:n=?
");
scanf("%d",&n);
for(k=0;k<=n;k++){
printf("%d次係数=?
",k);
scanf("%f",&c[k]);
}
printf("a
から b まで : a=? ");
scanf("%f",&a);
printf("b=?
");
scanf("%f",&b);
fprintf(fp,"%4.1f
から %4.1f まで",a,b);
printf("\nf(x)=
%4.1f ",c[0]);
fprintf(fp,"\nf(x)=
%4.1f ",c[0]);
for(i=1;i<=n;i++){
printf("+
%4.1f x^%d ",c[i],i);
fprintf(fp,"+
%4.1f x^%d ",c[i],i);
}
printf("\n");
fprintf(fp,"\n");
for(i=0;i<=M;i++){
printf("STEP
%2d ( %4d 分割 )
",i,power(2,i));
fprintf(fp,"STEP
%2d ( %4d 分割 )
",i,power(2,i));
d=(b-a)/power(2,i);
printf("d=%6.4f",d);
fprintf(fp,"d=%6.4f",d);
s=0.0;
for(j=0;j<power(2,i);j++){
x=a+d*j+d/2;
s=s+d*f(x);
}
printf("
定積分の値 = %9.4f\n",s);
fprintf(fp,"
定積分の値 = %9.4f\n",s);
}
fclose(fp);
return(1);
}
/* 整数p の q 乗を計算する関数 */
int power(int p,int q){
int
i,r=1;
for(i=0;i<q;i++){
r=r*p;
}
return(r);
}
/* 関数 f(x) の値を計算する関数 */
float f(float x){
int
i;
float
fpower(float,int);
float
y=c[0];
for(i=1;i<=n;i++){
y=y+c[i]*fpower(x,i);
}
return(y);
}
/* 実数x の n 乗を計算する関数 */
float fpower(float x,int n){
int
i;
float
s=1.0;
for(i=0;i<n;i++){
s=s*x;
}
return(s);
}