多项式运用实验报告 下载本文

内容发布更新时间 : 2024/5/15 13:38:55星期一 下面是文章的全部内容请认真阅读。

《数据结构》

实验题目:班 级:学 号:姓 名:完成日期:

多项式运用

实验报告

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) // 当系数不等于零时 {