如何解决添加两个多项式表达式时出错
我试图对两个多项式表达式进行运算,而我又将两个数相加,在某些情况下它给出了正确的答案,而在其他情况下,例如x ^ 2 + x与x + 1相加,则给出错误答案。
在程序中,我首先将表达式存储到数组中,然后根据指数对数组进行排序(降序排列),然后比较两个表达式,然后根据程序将它们相加。 Expression [0] .coeff存储表达式中的元素数。
#include<stdio.h>
typedef struct {
float coeff;
int expo;
}poly;
void sort(poly E[])
{
int n = E[0].coeff,tempExpo,tempCoeff;
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n-1-i;j++)
{
if(E[j].expo < E[j+1].expo)
{
tempExpo = E[j].expo;
tempCoeff = E[j].coeff;
E[j].expo = E[j+1].expo;
E[j].coeff = E[j+1].coeff;
E[j+1].expo = tempExpo;
E[j+1].coeff = tempCoeff;
}
}
}
}
void input(poly Exp[])
{
int counter = 1;
float coeff;
int expo;
printf("\nEnter the coeffecient and exponent in sorted order (press 0 0 to end process) :\n");
while(1)
{
scanf("%f%d",&coeff,&expo);
if(coeff == 0 && expo == 0)
{
Exp[0].coeff = counter--;//size of array is the first coeffecient
sort(Exp);
break;
}
Exp[counter].coeff = coeff;
Exp[counter].expo = expo;
counter++;
}
}
void print(poly Exp[])
{
int n = Exp[0].coeff,counter = 1;
printf("\nExpression :");
while(n>1)
{
printf("%.1f x^%d ",Exp[counter].coeff,Exp[counter].expo);
n--;
if(n!= 1)
printf(" + ");
counter ++;
}
}
void add(poly E1[],poly E2[],poly R[])
{
int n = E1[0].coeff;
int m = E2[0].coeff;
int i=1,k=1,j=1;
while(i<=n && j<=m)
{
if(E1[i].expo > E2[j].expo)
{
R[k].coeff = E1[i].coeff;
R[k].expo = E1[i].expo;
k++;i++;
}
else if(E1[i].expo == E2[j].expo)
{
R[k].coeff = E1[i].coeff + E2[j].coeff ;
R[k].expo = E1[i].expo;
k++;i++;j++;
}
else
{
R[k].coeff = E2[j].coeff;
R[k].expo = E2[j].expo;
k++;j++;
}
}
while(i<=n)
{
R[k].coeff = E1[i].coeff;
R[k].expo = E1[i].expo;
k++;i++;
}
while(j<=m)
{
R[k].coeff = E2[j].coeff;
R[k].expo = E2[j].expo;
k++;j++;
}
R[0].coeff= k-1 ;
}
int main()
{
poly E1[100],E2[100],R[100];
char op;
R[0].coeff = 0;
input(E1);
print(E1);
input(E2);
print(E2);
add(E1,E2,R);
printf("\nAfter addition ");
print(R);
return 0;
}
我知道它的代码有点长,有人可以帮忙找出错误之处并进行更改以纠正错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。