应该是计算机上浮点数导致的吧。因为浮点数比较跟整数比较不一致的。
创新互联建站专注于企业营销型网站、网站重做改版、永定网站定制设计、自适应品牌网站建设、H5场景定制、商城开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为永定等各大城市提供网站开发制作服务。
#include
stdio.h
double
polynomial(double
x)
{
return
4*x*x*x
-
x*x
+
7;
}
const
double
EPS=1e-5;
main()
{
double
x,
minx=1,
maxx=2,
step=0.1;
for(x
=
minx;
x
maxx+EPS;
x+=step)
{
printf("polynomial(%.2f)
=
%.2f\n",
x,
polynomial(x));
}
}
C:\test.exe
polynomial(1.00)
=
10.00
polynomial(1.10)
=
11.11
polynomial(1.20)
=
12.47
polynomial(1.30)
=
14.10
polynomial(1.40)
=
16.02
polynomial(1.50)
=
18.25
polynomial(1.60)
=
20.82
polynomial(1.70)
=
23.76
polynomial(1.80)
=
27.09
polynomial(1.90)
=
30.83
polynomial(2.00)
=
35.00
计算多项式 p(x)=a(n-1)x(n-1)+a(n-2)x(n-2)+.....a1x+a0;
在指定点x处的函数值。
算法:
首先将多项式表述成如下嵌套的方式:
p(x)=(...((a(n-1)+a(n-2))x+a(n-3))x+....a1)x+a0;
然后依次从里向外算(因为x是已知的么),得到递推公式:
U(n-1)=a(n-1)
U(k)=U(k+1)x+a(k); K=n-2,n-3......1,0;
那当算到k=0时,得到的U(0)就是要求的值。
下面是用C语言实现的:
double plyv( double a[],double x,int n) //a[]是多项式的系数,n是数组长度。
{
double u;//一直存放递归结果;
Int i;
for(i=n-2;i=0;i--)
{
u=u*x+a[i];
}
return u;
}
#include
int main()
{
double a[3]={2,3,4};//根据多项式的形式定义数组长度以及个数,如果有的x项没有,则视系数为0;
double s;
double x;
s=plyv(a,x,3);//此为最后结果;
printf("%f",s);
return 0;
}
此题的解题重点在于:找到求解的递归关系,然后依据递归关系求解。
思路:
因为这是个加法的多项式,用变量s累加,s的最初值是0,第1次向上加1!,第2次加2!,...,第n磁加n! s+=jc;阶乘变量jc在循环中计算。
每项用循环变量i控制,第1次循环取值1,第2次循环取值2,...,第20次循环取值20,这个变量就是要求的阶乘数,i的值每次加1
阶乘是个累乘的运算,用变量jc,初始值是1,第1次向上乘以循环变量值1,就是1!,第2次是前边计算好的1!*2=2!,...,第20次就是19!*20=20!,jc*=i;
由于20!数据比较大,对于32bit的int型变量存放不下,可以考虑用double型数据计算,省得溢出。
因此程序主体算法为:
int i;
double s,jc;
s=0; jc=1;
for ( i=1;i=20;i++ ) { jc*=i; s+=jc; }
printf("%lf\n",s);