一元多项式相加

类别:编程语言 点击:0 评论:0 推荐:

一元多项式相加

题目:求两个一元多项式的和。输入多项式方式为,多项式项数,每项系数和指数,按指数从大到小的顺序输入。

  分析

  多项式的算术运算是表处理的一个经典问题。建立两张表a、b分别存放两个多项式的内容,建立表指针ta、tb,指向表a和表b的元素,根据表a、b元素中的指数大小合并输出。



  1、比较ta、tb指向元素的大小,若ta的指数大于tb的指数,输出ta元素,改变指针ta;

  2、若ta的指数小于tb的指数,输出tb元素,改变指针tb;

  3、若ta的指数等于tb的指数,ta、tb元素的系数相加输出,同时改变指针ta和tb;

  4、若有一表取空,则输出另一表剩余的内容。


参考程序:采用pascal语言

源程序一:多项式相加的顺序表实现



program ex11_5a;

type

node=record

zhi,xi:integer;

end;

ar=array[1..1000] of node;

var

a,b:ar;

ta,tb,n:integer;

begin

write('One : '); readln(n);{输入第一个多项式的系数和指数}

for ta:=n downto 1 do readln(a[ta].xi,a[ta].zhi);

ta:=n;

write('Two : '); readln(n);{输入第二个多项式的系数和指数}

for tb:=n downto 1 do readln(b[tb].xi,b[tb].zhi);

tb:=n;

write('Result is ');

while (ta>0) and (tb>0) do {当两个表均不空时}

begin {比较两表指针指向的项指数,输出指数小的项系数和指数, 同时改变该表指针}

if a[ta].zhi>b[tb].zhi then

begin

if a[ta].xi<0 then write(#8' '#8);

write(a[ta].xi,'x',a[ta].zhi,'+');

dec(ta);

end

else

if a[ta].zhi then
begin

if b[tb].xi<0 then write(#8' '#8);

write(b[tb].xi,'x',b[tb].zhi,'+');

dec(tb);

end

else

begin {若两表指针指向的项指数相等,则两系数相加输出, 两表指针同时改变}

if b[tb].xi+a[ta].xi<>0 then

begin

if b[tb].xi+a[ta].xi<0 then write(#8' '#8);

write(b[tb].xi+a[ta].xi,'x',b[tb].zhi,'+');

end;

dec(ta);

dec(tb);

end;

end;

while ta>0 do {若有一表空,则输出另一表的剩余项}

begin

if a[ta].xi<0 then write(#8' '#8);

write(a[ta].xi,'x',a[ta].zhi,'+');

dec(ta);

end;

while tb>0 do

begin

if b[tb].xi<0 then write(#8' '#8);

write(b[tb].xi,'x',b[tb].zhi,'+');

dec(tb);

end;

writeln(#8' '#8);

readln;

end.

本文地址:http://com.8s8s.com/it/it26733.htm