用c语言编写一个程序,要求如下已知如下两个多项式P(x)=PX+ PX+...+PX+PQ(x)=qX+qX+...+qX+q求它们的乘积多项式 S(x)=sX+...+sX+s.可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 19:03:29
用c语言编写一个程序,要求如下已知如下两个多项式P(x)=PX+ PX+...+PX+PQ(x)=qX+qX+...+qX+q求它们的乘积多项式  S(x)=sX+...+sX+s.可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义

用c语言编写一个程序,要求如下已知如下两个多项式P(x)=PX+ PX+...+PX+PQ(x)=qX+qX+...+qX+q求它们的乘积多项式 S(x)=sX+...+sX+s.可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义
用c语言编写一个程序,要求如下
已知如下两个多项式
P(x)=PX+ PX+...+PX+P
Q(x)=qX+qX+...+qX+q
求它们的乘积多项式 S(x)=sX+...+sX+s.
可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义一维数组来s来存储结果;利用函数来完成对结果多项式各项系数的计算,最后在屏幕上计算结果.

用c语言编写一个程序,要求如下已知如下两个多项式P(x)=PX+ PX+...+PX+PQ(x)=qX+qX+...+qX+q求它们的乘积多项式 S(x)=sX+...+sX+s.可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义

简单说个算法

输入的时候是输入两个式子的系数,可以用#作为输入结束标志

char ch=‘0’;

while(ch!='#'-‘0’)

{

scanf(%c,&ch);

ch-='0';

}

上面的算法每个循环得到的ch里存放的就是实际的数值

想办法放到p,q数组里去就行了

p,q,s位数分别为pi,qi,si的话

si=pi+qi;         //s的幂次必为p,q幂次之和

P、Q的x幂次相加存入S相应位置

至于输入系数的时候

输入没有特别要求的话可以按照x的升序排列

这样0次幂存入p[0],1次幂存入p[1],...

三个数组都可以这样安排

方便计算同时可以获取最终式子项数,也就是(幂次+1),在si里

s(x)系数计算

x幂次之和m刚好对应s[ ]下标

for(m=0;m<=si;m++)           //计算数组s[ ]

   for(i=0;i<=m;i++)

     s[m]=p[i]+q[m-i];

然后输出应该就可以了

大概就是这样吧 

源程序在这里,Win7+C-Free 5.0测试通过

先上截图

#include <stdio.h> 

#include <string.h>

#define MAXLEN 20         //数组长度 

void input();             //输入P/Q 

void mul();               //多项式乘法 

void outputS();           //输出S 

int main(void)

{

float p[MAXLEN],q[MAXLEN],               //p,q输入元素为原多项式各项系数

          s[MAXLEN<<2];                    //s中元素为输出多项式

int   sn,pn,qn;                          //分别为多项式的次数 



    system("cls"); 

 

printf("\n\n输入P(x)的次数(正整数):");   //输入P(x) 

scanf("%d",&pn);

printf("\n输入P(x)各项系数,P(x)降幂排列:\n");

pn++;                                    //项数=次数+1 

input(p,pn);

printf("\n"); 

printf("\n\n输入Q(x)的次数(正整数):");   //输入Q(x) 

scanf("%d",&qn);

printf("\n输入Q(x)各项系数,Q(x)降幂排列:\n");

qn++;                                    //项数=次数+1 

    input(q,qn);

    printf("\n");

    sn=(pn+qn-2);                            //S多项式次数 

    int i;                                   //S数组初始化 

    for (i=0;i<sn+1;i++)

      s[i]=0;

    mul(p,q,s,pn,qn);                        //做多项式乘法 

    outputS(s,sn+1);                            //输出S 

    printf("\n");

    getch();

    return 1;

}

void input(float *p,int t)

{

    int i;

for (i=0;i<t;i++) scanf("%f",&p[i]);

}

void mul(float *p,float *q,float *s, int m, int n)

{

int i,j;

for (i=0;i<m;i++)            //扫描P(x)系数 

  for (j=0;j<n;j++)          //扫描Q(x)系数 

    s[i+j]+=p[i]*q[j];

}

void outputS(float *s,int t)

{

int i;



printf("\nS(x)各项系数是(S(x)降幂排列):\n");

for (i=0;i<t;i++) 

  printf("%.2f\t",s[i]);

}

呼呼~~终于完成了~~