多项式计算 C语言编程
这个其实很简单,需要3个数组(暂时考虑int数组),长度都是10,分别保存多项式1、2和计算结果。初始化为全0。输入就按照你的假设吧。输入后三个数组分别为:
多项式1:[7, 0, -5, 2, 0, 0, 0, 0, 0, 0](x的0次幂系数是7,x的1次幂系数是2,以此类推,下同)
多项式2:[-8, 1, 3, 0, 0, 0, 0, 0, 0, 0]
计算结果:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0](还没算呢,当然都是0)
加法减法很好算,不赘述。乘法怎么算呢,你按照真实的数学计算步骤推一遍就知道了,你会把3×2、x、-8分别乘以2×3-5×2+7,最后把结果加起来。转换到程序中,就是把若干个数组加起来:
[-56, 0, 40, -16, 0, 0, 0, 0, 0, 0]
[0, 7, 0, -5, 2, 0, 0, 0, 0, 0]
[0, 0, 21, 0, -15, 6, 0, 0, 0, 0]
加起来就可以了。
至于提高水平,这个题目出得不好,因为多项式相除结果不唯一。比如说2×2 + 1除以x2 + 1,你可以说2×2 + 1 = 2(x2 + 1) – 1,也可以说2×2 + 1 = 1(x2 + 1) + x2。这样的题目数学上就意义不大,用程序去实现也达不到锻炼水平的作用。也许我理解有误?
C语言中一维多项式求值
计算多项式 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;
}
此题的解题重点在于:找到求解的递归关系,然后依据递归关系求解。
用C语言链表实现多元多项式及其乘法,加法。
用C语言链表实现多项式, 例如f(x_{i,k}^{l})=3+x_{1,2}^2x_{3,2}+x_{1,3}x_{4,3}^3 (变量x_{i,k}^{l}有3个指标i,k,l, i,k,l可以取遍1到n的整数)。要求多项式由键盘输入,用链表存储单项式(节点是x_{i,k}^{l}),用链表存储多项式(节点是单项式)。编写3个函数分别是实现多项式加法,乘法的函数,以及输出多项式的函数。