内容发布更新时间 : 2025/1/27 7:18:12星期一 下面是文章的全部内容请认真阅读。
《数据结构》
实验题目:班 级:学 号:姓 名:完成日期:
多项式运用
实验报告
1.需求分析
实现实系数一元多项式的创建,打印以及两个一元多项式的加、乘运算。
(1)输入形式和输入值的范围
输入要求:分行输入,每行输入一项,先输入多项式的系数,再输入多项式的指数,以0 0为结束标志,结束一个多项式的输入。
输入形式: 2.0 3 1.2 2 3.4 0 3.2 2 0.1 0 2.5 1 3.2 3 1.9 1 0.4 0
输入值的范围:系数为float型,指数为int型。
(2)输出的形式:
3.0x^0+2.0x^3 -x^-1-2.0x-3.0x^3
-x^-1+3.0x^0-2.0x^1-x^3 x^-1+3.0x^0+2.0x^1+5.0x^3
-3.0x^-1-6.0x^1-2.0x^2-9.0x^3-4.0x^4-6.0x^6
(3)程序所能达到的功能:
a、根据所输入的多项式每个项的系数和指数,创建两个多项式单链表,结点按升幂排序。
b、按升幂顺序分别输出所创建的两个多项式。 c、求两个多项式的积求并输出积多项式。 d、两个多项式和并输出和多项式。 e、销毁上述4个多项式。
(4)测试数据:
第一组数据: 输入: 2 4 3 2 1 5 2 3 0 0
5 3 2 3 6 5 3 6 7 4 4 8 0 0 输出:
3.0x^2+2.0x^3+2.0x^4+1.0x^5
7.0x^3+7.0x^4+6.0x^5+3.0x^6+4.0x^8
3.0x^2+9.0x^3+9.0x^4+7.0x^5+3.0x^6+4.0x^8
21.0x^5+35.0x^6+46.0x^7+42.0x^8+25.0x^9+24.0x^10+11.0x^11+8.0x^12+4.0x^13
第二组数据: 输入: 4 6 0 4 3 3 5 2 4 1 0 0 2 0 3 5 3 6 4 7 0 0 输出:
4.0x^1+5.0x^2+3.0x^3+4.0x^6 2.0x^0+3.0x^5+3.0x^6+4.0x^7
2.0x^0+4.0x^1+5.0x^2+3.0x^3+3.0x^5+7.0x^6+4.0x^7
8.0x^1+10.0x^2+6.0x^3+20.0x^6+27.0x^7+40.0x^8+29.0x^9+12.0x^10+12.0x^11+12.0x^12+16.0x^13 Press any key to continue
第三组数据: 输入: -2 1 2 -3 3 0 9 5 7 -4 0 0 -6 5
0 8 5 -6 -3 4 9 0 0 0 输出:
7.0x^-4+2.0x^-3+3.0x^0-2.0x^1+9.0x^5 5.0x^-6+9.0x^0-3.0x^4-6.0x^5
5.0x^-6+7.0x^-4+2.0x^-3+12.0x^0-2.0x^1-3.0x^4+3.0x^5
35.0x^-10+10.0x^-9+15.0x^-6-10.0x^-5+63.0x^-4+18.0x^-3+45.0x^-1+6.0x^0-66.0x^1-12.0x^2-9.0x^4+69.0x^5+12.0x^6-27.0x^9-54.0x^10
2.概要设计
(1)抽象数据类型一元多项式的定义如下:
ADT Polynomial{
数据对象:D={ai| ai ∈TermSet,i=1,2,?,m,m≥0
TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数}
数据关系:R1={< ai-1,ai >| ai-1 , ai ∈D,且ai-1 中的指数值<ai 中的
指数值,i=2,?,n}
基本操作:CreatPolyn(); //创建多项式,m为项数
DestroyPolyn (Polynode &List); //销毁多项式 PrintPolyn (Polynode &List); //输出多项式 AddPolyn (Polynode &La,Polynode &Lb); //两个多项式
相加
MultipyPolyn(Polynode &La,Polynode &Lb); //两个多
项式相乘
} ADT Polynomial
(2)主程序的流程图: 开 始
输入两个多项式h1,h2 判断h1,h2系数是否为0
调用print()函数,输出,合并过并排好序的h1,h2 调用addPoly(h1,h2),合并并输出 调用multPoly(h1,h2)合并并输出 结 束 (3)各模块之间的调用关系如下:
主程序模块 单向循环列表模块
3.详细设计
1、1)结点类型
typedef struct Pnode {
float coef; //系数 int exp; //指数
struct Pnode *next; //指向下一结点的指针 }Polynode;
2) 基本操作函数如下:
Polynode* CreatPolyn() //构造一个空的多项式并按升序排列 {
Polynode *List; Polynode *p,*q,*s; int e,i=1; float c;
List=(Polynode *)malloc(sizeof(Polynode)); //申请一个新
结点
List->next=NULL;
p=List; //指向头结点 printf(\请输入多项式第%d项的系数和指数(以输入0 0结束): \ scanf(\
while(c!=0) // 当系数不等于零时 {