您好,欢迎来到刀刀网。
搜索
您的当前位置:首页一元多项式

一元多项式

来源:刀刀网


实验二 一元多项式相加问题

本实验的目的是进一步熟练掌握应用链表处理实际问题的能力。

一. 问题描述

一元多项式相加是通过键盘输入两个形如P0+ P1X1+ P2X2+…+ PnXn的多项式,经过程序运算后在屏幕上输出它们的相加和。

二. 数据结构设计

分析任意一元多项式的描述方法可知,一个一元多项式的每一个子项都是由“系数—指数”两部分来组成的,所以可以将它抽象成一个由“系数—指数对”构成的线性表,由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了。基于这样的分析,我们可以采用一个带有头结点的单链表来表示一个一元多项式。具体数据类型定义为:

Typedef struct node

{

Float coef; //系数域

Int exp; //指数域

Int flag; //标记结点是否已经过运算加入新的链表的标志位

Struct node next; //指针域,指向下一个系数不为0的子项

}PolyNode;

PolyNode *head_a , *head_b, *head_c;

这3个指针分别作为链表A、B、C的头指针。

三. 功能(函数)设计

1. 输入并建立多项式的功能模块

此模块要求按照指数递增的顺序和一定的输入格式输入格式输入各个系数不为0的子项的“系数—指数对”,输入一个子项建立一个相关结点,当输入结束标志的时候就停止输入,而转去执行程序下面的部分。

例如按照这些操作步骤输入多项式:

屏幕提示:

请输入第一个多项式,按照“系数,指数”的形式输入每一个子项!

1, 1

2, 2

-3,100

0, 0(输入结束的条件,当系数和指数同时为0的时候认为输入结束)

请输入第二个多项式,按照“系数,指数”的形式输入每一个子项!

100,1

200,2

300,200

0, 0

输入后程序将分别建立两个链表来描述两个一元多项式:

A(X)=X+2X2-3X100

B(X)=100X+200X2+300X200

这两个多项式相加结果应为:

C(X)=101X+202X2-3X100+300X200

2. 多项式相加的功能模块

此模块根据在1中建立的两个多项式进行相加的运算,并存放在以C为头指针的一个新链表中。可以采用如下的方法进行设计:

设指针p、q、r分别指向描述多项式的链表A、B、C头部,p指针按照A中结点顺序一个一个地移动,每移动一个结点,就通过q指针的移动来寻找B中是否有与p->exp相同的。

(1) 如果有,在C中合适的位置(注意多项式存储是按照指数递增有序的)建立新结点,并做如下赋值操作:

r->coef=p->coef+q->coef;

r->exp=p->exp+q->exp;

p->flag=1;

q->flag=1;/*标志子项已参与过运算*/

p=p->next;

q=head_b;

(2) 如果没有,在C中合适的位置建立新结点,并做如下赋值操作:

r->coef=p->coef;

r->exp=p->exp;

p->flag=1;

p=p->next;

q=head_b;

注意:当A、B中可以相加的两项系数和为0的时候,在C中就不用分配新的空间来进行存储了。

3. 多项式显示的功能模块

此模块用于多项式的显示,程序可以使用图形界面,通过调整指数应该出现的坐标位置来表示指数形式,如X+2X2-3X100的形式,也可以使用文本界面,用“系数-指数对”的形式表示表达式,如(1,1)、(2,2)、(-3,100)。

四. 界面设计

注意提示用户每一步操作输入的格式和。指导用户按照正确的格式输入数据。

五. 编码实现

六. 运行与测试

1. 测试以下数据,比较结果:

(1)(2x+5x8-3.1x11)+(7- 5x8+11x9)=(-3.1x11+11x9+2x+7)

(2)(x+x3)+(-x – x3)=0

(3)(x+x2+x3)+0= x+x2+x3

(4)互换上述测试数据中的前后两个多项式

2. 不按指数递增的顺序输入多项式,验证程序的健壮性和容错性。

七. 实验完成后的思考

实验人:

实验完成日期:

实验报告提交日期:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务