C++ 指针和结构问题
我想把两个多项式相加 下面的代码适用于多项式,如1+2x+3x^2和1+x+x^2,但在添加1+2x+3x^2和1+1x+x^3时不起作用C++ 指针和结构问题,c++,C++,我想把两个多项式相加 下面的代码适用于多项式,如1+2x+3x^2和1+x+x^2,但在添加1+2x+3x^2和1+1x+x^3时不起作用 请注意,系数存储在动态数组中,即使该项不存在,我们也会对其进行解释。i、 e1+1x+x^3作为度输入:3个系数1 1 0 1。我还需要考虑两个相互抵消的多项式的加法。i、 e+3x^2+(-3x^2)=0.关于我如何考虑这两种情况的任何建议。当两个多项式的阶数不同时,这不起作用的原因是循环具有未定义的行为:它继续到max-1,但max-1处的索引仅对这两个
请注意,系数存储在动态数组中,即使该项不存在,我们也会对其进行解释。i、 e1+1x+x^3作为度输入:3个系数1 1 0 1。我还需要考虑两个相互抵消的多项式的加法。i、 e+3x^2+(-3x^2)=0.关于我如何考虑这两种情况的任何建议。当两个多项式的阶数不同时,这不起作用的原因是循环具有未定义的行为:它继续到
max-1
,但max-1
处的索引仅对这两个多项式中的一个有效
循环中的代码需要在访问a->coefs[i]
之前检查索引i
是否小于a->degree
,并且在访问b->coefs[i]
之前检查索引i
是否小于b->degree
:
for(int i=0; i<=max; i++)
sum[i] = (i <= a->degree ? a->coeffs[i] : 0)
+ (i <= b->degree ? b->coeffs[i] : 0);
for(inti=0;icoeffs[i]:0)
+(i?b级->系数[i]:0);
这将使您避免访问超过
coefs
数组末尾的数据。当两个多项式的阶数不同时,这不起作用的原因是循环具有未定义的行为:它继续访问max-1
,但max-1
处的索引仅对这两个多项式中的一个有效
循环中的代码需要在访问a->coefs[i]
之前检查索引i
是否小于a->degree
,并且在访问b->coefs[i]
之前检查索引i
是否小于b->degree
:
for(int i=0; i<=max; i++)
sum[i] = (i <= a->degree ? a->coeffs[i] : 0)
+ (i <= b->degree ? b->coeffs[i] : 0);
for(inti=0;icoeffs[i]:0)
+(i?b级->系数[i]:0);
这样可以避免访问超过
coefs
数组末尾的数据。我不清楚您在问什么——也许您可以提供更多的上下文,或者提供一个示例来说明您在寻找什么?同时,请务必检查。谢谢我不清楚你在问什么——也许你可以提供更多的上下文,或者一个例子来说明你在寻找什么?同时,请务必检查。谢谢哦,我想到了合并排序,我们在那里做了类似的事情!感谢you@user2809437我发布的修复程序应该可以做到这一点——条件表达式将防止访问超过数组末尾。只需替换你的sum[i]=a->coefs[i]+b->coefs[i]代码>有了它,代码就可以工作了。我做了我的学位,我给了我正确的值!再次感谢你,我想到了合并排序,我们在那里做了类似的事情!感谢you@user2809437我发布的修复程序应该可以做到这一点——条件表达式将防止访问超过数组末尾。只需替换你的sum[i]=a->coefs[i]+b->coefs[i]代码>有了它,代码就可以工作了。我做了我的学位,我给了我正确的值!再次感谢你