问题描述
我试图对两个多项式表达式进行运算,而我又将两个数相加,在某些情况下它给出了正确的答案,而在其他情况下,例如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 (将#修改为@)