**
题干要求
其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。 这里主要讲解自定义函数的原理:一、涉及的数学知识
- 用到多项式的合并与展开
简单 例子:3x^2+2x+1=x(3x+2)+1 - 本题假设我们输入 :n=3 ; x =2.0;
a[0]=1 ; a[1]=1;a[2]=2 ;a[3]=3;
则f(x)=a[0] * (x^0) + a[1] * (x^1)+ a[2] * (x ^2)+a[3] * (x^3)=
x(x(a[3])x+a[2])+a[1])+a[0] ;
用循环计算 x(x(a[3])x+a[2])+a[1])+a[0]; 然后依照先算括号里面的原则计算。
用到的循环语句是 add = add * x + a[i];
add 等于0是为了第一次计算引出a[3];
二、代码实现
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf(“%lf”, &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
double f( int n, double a[], double x )
{
double add = 0;
for(int i = n; i > -1; i--)
{
add = add * x + a[i];
}
return add;
}
总结
我们要善用学的数学知识解决问题,本体关键是对多项式合并,然后利用循环从里往外算。