15,440
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <math.h>
const double eps = 1e-20;
double arr[10];
int n;
int n, k, i;
double m,p,u,y;
double j,sum,v;
double f(double x) {
y = 0.0;
for (k=n; k>=0; k--) {
y = y + arr[k] * pow(x,(double)k);
}
return y;
}
int main() {
printf("The function is like y = [(arr[n])x^n] + [(arr[n-1])x^(n-1)] + [(arr[n-2])x^(n-2)] + ... + [(arr[1])x] + arr[0]\n");
printf("Input n :");
scanf("%d",&n);
if (n<1 || 10<=n) {
printf("1<=n<10\n");
return 1;
}
i = n;
for (i=n; i>=0; i--) {
printf("Input the arr[%d]: ",i);
scanf("%lf", &arr[i]);
}
printf("\nEnter the range[m,p]:");
scanf("%lf%lf",&m,&p);
if (f(m)*f(p)<0.0) {
while (fabs(m-p)>eps) {
v=(m+p)/2.0;
sum=f(v);
printf("[%lf %lf]\n",m,p);
if (fabs(sum)<eps) {
break;
} else {
if(f(v)*f(m)<0) {
p=v;
} else if(f(v)*f(p)<0) {
m=v;
}
}
}
j=(m+p)/2.0;
printf("\nThe nearest result is:x=%lf\n",j);
} else {
printf("Wrong");
}
return 0;
}