问题描述:设计算法用顺序表实现两个多项式相加。
数据描述:两个多项式f(x)=2x^4+3x^2-5x+10,g(x)=4x^4+10x^2+x, 求和结果:f(x)+g(x)=6x^4+13x^2-4x+10。
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct List{
int xishu; //系数
int zhishu; //指数
}List,*Li;
typedef struct S{
List *L; //多项式各项
int cou; //存储多项式个数
}S;
void creat(S &s) //创建多项式
{
printf("请输入多项式项的个数\n");
scanf("%d",&s.cou);
s.L=(List *)malloc(s.cou*sizeof(List));
printf("请输入%d项的系数和指数(指数按照由大到小顺序)\n",s.cou);
for(int i=0;i<s.cou;i++)
{
scanf("%d%d",&s.L[i].xishu,&s.L[i].zhishu);
}
}
void add(S s1,S s2,S &s3) //求和
{
int index=0;
int i,j;
s3.L=(List *)malloc((s1.cou+s2.cou)*sizeof(List));
i=j=s3.cou=0;//初始化为零
while(i<s1.cou && j<s2.cou) //归并写入分三种情况
{
if(s1.L[i].zhishu==s2.L[j].zhishu)
{
s3.cou++;
s3.L[index].zhishu=s2.L[j].zhishu;
s3.L[index++].xishu=s2.L[j].xishu+s1.L[i].xishu;
i++;
j++;
}
else if(s1.L[i].zhishu>s2.L[j].zhishu)
{
s3.cou++;
s3.L[index++]=s1.L[i++];
}
else
{
s3.cou++;
s3.L[index++]=s2.L[j++];
}
}
while(i<s1.cou)
{
s3.cou++;
s3.L[index++]=s1.L[i++];
}
while(j<s2.cou)
{
s3.cou++;
s3.L[index++]=s2.L[j++];
}
}
void print(S s) //按照多项式样式输出
{
for(int i=0;i<s.cou;i++)
{
if(i && s.L[i].xishu>0)//判定一下从第二个项开始输出+或-
{
printf("+");
}
printf("%d",s.L[i].xishu);
if(s.L[i].zhishu!=0) //判断当指数为零不输出x
{
printf("x^%d",s.L[i].zhishu);
}
}
printf("\n");
}
int main()
{
S s1,s2,s3;
printf("输入f(x):\n");
creat(s1);
printf("输入g(x):\n");
creat(s2);
printf("输出f(x)+g(x):\n");
add(s1,s2,s3);
print(s3);
return 0;
}测试示例:

本文介绍了一种使用顺序表实现两个多项式相加的算法。通过定义多项式的结构体,创建多项式,并实现求和及输出功能。示例展示了如何输入两个多项式并输出其和。
2351

被折叠的 条评论
为什么被折叠?



