文档库 最新最全的文档下载
当前位置:文档库 › 一元稀疏多项式计算器实现(完整实现版-详细源码)

一元稀疏多项式计算器实现(完整实现版-详细源码)

一元稀疏多项式计算器实现(完整实现版-详细源码)
一元稀疏多项式计算器实现(完整实现版-详细源码)

1.5一元稀疏多项式计算器

实习报告

一、需求分析

1.输入并建立多项式;

2.输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,c n,e n,其中n是多项式的项数,c i和e i分别是第i项的系数和指数,序列按指数降序排列;

3.多项式a和b相加,建立多项式a+b;

4.多项式a和b相减,建立多项式a—b;

5.多项式a和b相乘,建立多项式a×b;

6.计算多项式在x处的值;

7.求多项式P的导函数P';

8.多项式的输出形式为类数学表达式;

9.做出计算器的仿真界面;

10.测试数据:

(1) (2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7)

(2) (6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 ) =(-7.8x^15-1.2x^9+12x^-3-x);

(3)(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);

(4)(x+x^3)+(-x-x^3)=0

(5)(x+x^100)+(x^100+x^200)=(x+2x^100+x^200)

(6)(x+x^2+x^3)+0=x+x^2+x^3

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

二、概要设计

1.链表的抽象数据类型定义为:

ADT LinkList{

数据对象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }

数据关系:R1={ |ai-1, ai∈D, i=2,...,n }

基本操作:

InitList(&L)

操作结果:构造一个空的线性表L。

DestroyList(&L)

初始条件:线性表L已存在。

操作结果:销毁线性表L。

ClearList(*L)

初始条件:线性表L已存在。

操作结果:将线性表L重置为空表。

LocateElem(L, e, cmp())

初始条件:线性表L已存在,compare()是元素判定函数。

操作结果:返回L中第1个与e满足关系cmp()的元素的位序。若这样的元素不存在,则返回值为0。

SetCurElem(&p, e)

初始条件:线性表L已存在,且非空。

操作结果:用元数e更新p所指结点中元数的值。

GetCurElem(p)

初始条件:线性表L已存在,且非空。

操作结果:返回p所指结点中数据元数的值。

InsFirst (&L, h, s)

初始条件:线性表L已存在,h结点在L中。

操作结果:在L的s所指结点插入在h结点之后,L的长度加1。DelFirst (&L, h, q)

初始条件:线性表L已存在且非空,q结点在L中且不是尾结点

操作结果:删除链表L中的h结点之后的结点q,L的长度减1。

MakeNode(&p, e)

操作结果:创建了一个结点p,其data部分为e。

FreeNode(&p)

初始条件:结点p存在且非空。

操作结果:释放结点p空间。

Append(LinkList &L,Link s)

初始条件:线性表L已存在。

操作结果:s及s以后的结点链接到了原L之后,L的长度增加链上的结点数。ListEmpty(L)

初始条件:线性表L已存在。

操作结果:若线性链表L为空表,则返回TRUE,否则返回FALSE。

GetHead(L)

初始条件:线性表L已存在。

操作结果:返回线性链表L中头结点的位置。

NextPos(L, p)

初始条件:线性表L已存在。

操作结果:返回p所指结点的直接后继的位置,若没后继,则返回NULL。

int cmp(a, b)

初始条件:存在两个元数。

操作结果:比较a,b的数值,分别返回-1,0,1。

} ADT LinkList

2.一元多项式的抽象数据类型定义为:

ADT Polynomial{

数据对象:D={ ai | ai∈TermSet, i=1,2,...,m, m≥0

TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}

数据关系:R1={ |ai-1, ai∈D, 且ai-1中的指数值

基本操作:

CreatPolyn(&P,m)

操作结果:输入m项的系数和指数,建立一元多项式P。

DestroyPolyn(&P)

初始条件:一元多项式P已存在。

操作结果:销毁一元多项式P。

AddPolyn(&Pa,&Pb)

初始条件:一元多项式Pa和Pb已存在。

操作结果:完成多项式相加运算,即:Pa=Pa+Pb,并销毁一元多项式Pb。SubtractPolyn(&Pa,&Pb)

初始条件:一元多项式Pa和Pb已存在。

操作结果:完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb。MultiplyPolyn(&Pa,&Pb)

初始条件:一元多项式Pa和Pb已存在。

操作结果:完成多项式相乘运算,即:Pa=Pa×Pb,并销毁一元多项式Pb。DerivPolyn(&Pa)

初始条件:一元多项式Pa已存在。

操作结果:多项式求导。

CalPolyn(Pa , x)

初始条件:一元多项式Pa已存在。

操作结果:求多项式在x处的值。

PrintPolyn(p, m)

初始条件:一元多项式p已存在,且已知多项式项数。

操作结果:打印输出一元多项式p的项数、系数和指数。

Expression(p, m)

初始条件:一元多项式p已存在,且已知多项式项数。

操作结果:打印输出一元多项式的类数学表达式。

SortPolyn(&p)

初始条件:一元多项式p已存在。

操作结果:对多项式p进行排序

}ADT Polynomial

3.本程序包含4个模块:

(1)主程序模块:

int main(){

初始化;

接受命令;

while(命令!=推出){

处理命令;

接受命令;

}

return 0;

}

(2)一元多项式单元模块——实现一元多项式的抽象数据类型;

(3)链表单元模块——实现链表的抽象数据类型;

(4)结点结构单元模块——定义链表的节点结构。

各模块之间的调用关系如下:

主程序模块一元多项式单元模块链表单元模块

结点结构单元模块

三、详细设计

1.设计好的数据类型:

typedef struct{ //项的表示,多项式的项作为Linklist的数据元素float coef; //系数

int expn; //指数

} term, ElemType;//两个类名:term用于本ADT,ElemType为Linklist的数据对象名

typedef struct LNode {//结点类型

ElemType data;

struct LNode *next;

} *Link, *Position;

typedef struct{//链表类型

Link head,tail; //分别指向线性链表中的头结点和最后一个结点

int len; //指示线性链表中数据个数

} LinkList;

typedef LinkList polynomial;//基于带头结点的线性链表定义的多项式数据类型

2.基于链表、结点的操作(部分伪码如下)

// 分配由p指向值为e的结点,并返回OK,若分配失败,则返回ERROR。

Status MakeNode(Link &p, ElemType e);

//释放p所指结点

void FreeNode(Link &p);

//构造一个空的线性链表L

Status InitList(LinkList &L);

{

L.head=L.tail=(Link)malloc(sizeof(LNode));

L.len=0;

L.head->next=L.tail->next=NULL;

return OK;

}

// 返回线性表L中头结点的位置。

Position GetHead(LinkList &L);

//已知p指向线性链表L中的一个结点,返回p所指结点的直接后驱的位置

//若无后继,返回NULL

Position Nextpos(LinkList &L,Link p);

//已知p指向线性表L中的一个结点,返回p所指结点中数据元素的值。

ElemType GetCurElem(Link p);

//已知p指向线性链表L中的一个结点,用e更新p所指结点中数据元素的值。Status SetCurElem(Link &p,float e);

//已知h指向线性链表的某个结点,将q所指的结点插入在h之后。

Status InsFirst(Link h,Link q);

{

s->next=h->next;

h->next=s;

L.len++;

if(!s->next)

L.tail=s;

return OK;

}

//已知h指向线性链表的头结点,删除线性链表第一个指结点并以q返回

Status DelFirst(Link h,Link &q);

//若线性链表L为空,则返回TRUE,否则返回FALSE。

Status ListEmpty(LinkList L);

{

if(L.head==L.tail==NULL)

return TRUE;

else return FALSE;

}

//将指针s所指的一连串结点连接在线性表L的最后一个结点之后,并改变链表L的尾指针指向新的尾结点。

Status Append(polynomial &L,Link s);

{

i=0;

q=s;

while(s) {//找到新的tail,计数s长度

p=s;

s=s->next;

i++;

}

L.tail->next=q;

L.tail=p;

L.len+=i;

return OK;

}

//判断已知链表中,是否存在相同的元素e,若存在返回TURE,且q指示L中第一个与e相同的结点元素;

//否则返回FALSE,并q指示L中第一个稍大于e的元素的直接前驱的位置Status LocateElem(LinkList L,ElemType e,Position &q);

{

p=L.head;

while(p->next) {

s=p;

p=p->next;

m=p->data;

if(cmp(e,m )==0) {

q=p;

return TRUE;

}

}

q=p;

return FALSE;

}

//整表删除

void ClearList(LinkList &L);

{

if(L.head!=L.tail) {

p=q=L.head->next;

L.head->next=NULL;

while(p!=L.tail) {

p=q->next;

free(q);

q=p;

}

free(q);

L.tail=L.head;

L.len=0;

}

return OK;

}

//依a的指数值<(或=)(或>)b的指数数值,分别返回-1,0,+1

int cmp(term a, term b) ;

{

if(a.expn

return -1;

if(a.expn==b.expn)

return 0;

if(a.expn>b.expn)

return 1;

}

3.基于多项式的操作(部分伪码如下)

//输入m项的系数和指数,建立表示一元多项式的有序链表P

void CreatPolyn(polynomial &p,int m);

{

InitList(p);

h=GetHead(p);

e.coef=0.0;

e.expn=-1;

SetCurElem(h,e);

for(int i=1;i<=m;i++){

cout<<"请输入第"<

cin>>e.coef>>e.expn; cout<

if(!LocateElem(p,e,q))//当前链表中不存在该指数项

if(MakeNode(s,e)) InsFirst(p,q,s);//生成节点并插入链表 else return;

else {

q->data.coef+=e.coef;

++c;

}

}

m=m-c;

}

//销毁一元多项式P

void DestroyPolyn(polynomial &p);

{

while(p.head ->next!=NULL) {

k=p.head;

p.head =p.head ->next;

free(k);

}

free(&p);

}

//打印输出一元多项式P

void PrintPolyn(polynomial p);

{

ha=GetHead(p);

cout<

for(int i=1;i<=m;i++) {

qa=NextPos(p,ha);

e=GetCurElem(qa);

cout<

ha=qa;

}

cout<

}

//打印输出一元多项式的类数学表达式

void Expression(polynomial p,int m);

//完成多项式的相加运算,即:Pa=Pa+Pb,并销毁一元多项式Pb

void AddPolyn(polynomial &Pa ,polynomial &Pb);

{

ha = GetHead(Pa);

hb = GetHead(Pb);//ha和hb分别指向pa和pb的头节点

qa = NextPos(Pa, ha);

qb = NextPos(Pb, hb);

while (qa&&qb) {//qa,qb均非空

a = GetCurElem(qa);

b = GetCurElem(qb);

switch (cmp(a, b)){//a和b为两表比较元数

case -1: //a的指数小于b的指数

DelFirst(Pb, hb, qb);

InsFirst(Pa, ha, qb);

qb = NextPos(Pb, hb);

ha = NextPos(Pa, ha);

break;

case 0: //a的指数等于b的指数

a.coef = a.coef +

b.coef;

if (a.coef != 0.0) { //修改多项式Pa中当前结点的系数SetCurElem(qa, a);

ha = qa;

}

else { //删除多项式Pa中当前结点

DelFirst(Pa, ha, qa);

FreeNode(qa);

}

DelFirst(Pb, hb, qb);

FreeNode(qb);

qb=NextPos(Pb,hb);

qa=NextPos(Pa,ha);

break;

case 1: //a的指数大于b的指数

ha = qa;

qa = NextPos(Pa, qa);

break;

}

}

if (!ListEmpty(Pb)) Append(Pa, qb);//链接Pb中剩余结点FreeNode(hb);//释放Pb的结点

}

//完成多项式的相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb void SubtractPolyn(polynomial &Pa ,polynomial &Pb);

//完成多项式的相减运算,即:Pa=Pa×Pb,并销毁一元多项式Pb void MultiplyPolyn(polynomial &Pa ,polynomial &Pb);

{

InitList(Pc);

qa=GetHead(Pa);

qa=qa->next;

hc=GetHead(Pc);

while(qa) {

a=GetCurElem(qa);

qb=GetHead(Pb);

qb=qb->next;

while(qb) {

b=GetCurElem(qb);

c.coef=a.coef*b.coef;

c.expn=a.expn+b.expn;

MakeNode(qc,c);

InsFirst(Pc,hc,qc);

hc=NextPos(Pc,hc);

qc=NextPos(Pc,qc);

qb=qb->next;

}

qa=qa->next;

}

DestroyPolyn(Pb);

ClearList(Pa);

Pa.head=Pc.head;

Pa.tail=Pc.tail;

Pa.len=Pc.len;

}

//计算多项式在x处的值

double Evaluation(double x, polynomial p);

//计算多项式P的导函数P'

void Derivative( polynomial &p ); {

InitList(Pb);

qa=GetHead(Pa);

qa=qa->next;

hb=GetHead(Pb);

while(qa) {

a=GetCurElem(qa);

b.coef=a.coef*a.expn;

b.expn=a.expn-1;

MakeNode(qb,b);

InsFirst(Pb,hb,qb);

hb=NextPos(Pb,hb);

qb=NextPos(Pb,qb);

qa=qa->next;

}

qb=NULL;

ClearList(Pa);

Pa.head=Pb.head;

Pa.tail=Pb.tail;

Pa.len=Pb.len;

}

4.主函数和其他函数的伪码算法

int main()

{

Initialization();

ReadCommand(cmd);

while (cmd != 'q' && cmd != 'Q') {

Interpret(cmd);

display();

ReadCommand(cmd);

}

return 0;

}

void Initialization()

{

pre_cmd = ' ';

cmd = ' ';

InitList(La);

InitList(Lb);

一元稀疏多项式计算器实验(报告+程序)

一元稀疏多项式计数器预习报告 :刘茂学号0062 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7); 2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )=(-7.8x^15-1.2x^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。

三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。 采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ①若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ②若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include #include #include //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial;

实验报告——2 一元稀疏多项式计算器

华北水利水电学院一元稀疏多项式计算器实验报告 2010~2011学年第一学期 09 级计算机科学与技术专业班级: 2009119 学号: 200911902 姓名:万婷婷 一、实验目的 设计一个医院稀疏多项式简单计算器 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用 二、实验要求 a)输入并建立多项式 b)输出多项式,输出形式为整数序列:n,c 1,e 1 ,c 2 ,e 2 ……c n ,e n ,其中n是多 项式的项数,c i ,e i 分别为第i项的系数和指数。序列按指数降序排列。 c)多项式a和b相加,建立多项式a+b,输出相加的多项式。 d)多项式a和b相减,建立多项式a-b,输出相减的多项式。 用带表头结点的单链表存储多项式。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(1+x+x2 +x3 +x4 +x5)+( -x3- x4) (4)(x+x2+x3)+0 (5)(x+x3)-(-x-x-3) (6) (x+x2 +x3 )+0 三、实验内容 主要算法设计 typedef struct Node { float coef; int index; struct Node *next; }LinkList; 本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。用带头结点的单链表存储多项式; 程序中共定义了5个函数:

void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中LinkList *Creat_L(LinkList *head,int m)//创建一个链表,项数为m void Printf(LinkList *L) LinkList *ADDlist(LinkList *head,LinkList *pb) LinkList *MinusList(LinkList *head,LinkList *pb) 四、程序源代码 #include #include #include #include typedef struct Node { float coef; int index; struct Node *next; }LinkList; void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中 { LinkList *q1,*q2; int flag=0; q1=h; if(p->coef==0) free(p); else { if(q1->next==NULL) { q1->next=p; }

(整理)一元稀疏多项式计算器

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 学期:2012秋季学期 任课教师: 实验题目: 一元稀疏多项式计算器 小组长: 联系电话: 电子邮件: 完成提交时间:2012 年 11 月 10 日 云南大学软件学院2012学年秋季学期

《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:算法设计整体流程控制 综合得分:(满分100分) 指导教师: 年月日

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:函数实现整体流程控制 综合得分:(满分100分) 指导教师: 年月日

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) 多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。 二、【实验设计(Design)】(20%) 在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。 三、【实现描述(Implement)】(30%) //--------函数原型说明-------- typedef struct Node { double xishu; int zhishu;//数据域 //int data; struct Node* pnext;//指针域 }Node,*pNode; pNode phead=(pNode)malloc(sizeof(Node));//创建头节点 pNode creat_list(void);创建链表 void traverse_list(pNode phead);//遍历链表 pNode sort(pNode phead);//对链表进行降序排列 pNode add(pNode phead1,pNode phead2);//两个多项式相加 pNode hebing(pNode phead)//合并同类项 pNode multi(pNode phead1,pNode phead2);//多项式相乘 pNode sub(pNode phead1,pNode phead2);//多项式相减 //多项式求导没有声明和定义函数,而是直接卸载程序里了

多项式的运算(c语言实现)

#include"stdio.h" #include"stdlib.h" #include"conio.h" typedef struct Item{ double coef;//系数 int expn;//指数 struct Item *next; }Item,*Polyn; #define CreateItem(p) p=(Item *)malloc(sizeof(Item)); #define DeleteItem(p) free((void *)p); /************************************************************/ /* 判断选择函数 */ /************************************************************/ int Select(char *str) { char ch; printf("%s\n",str); printf("Input Y or N:"); do{ ch=getch(); }while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n'); printf("\n"); if(ch=='Y'||ch=='y') return(1); else return(0); } /************************************************************/ /* 插入位置定位函数 */ /**************************************************************/ int InsertLocate(Polyn h,int expn,Item **p) { Item *pre,*q; pre=h; q=h->next; while(q&&q->expnnext; } if(!q) { *p=pre; return(1); } else if(q->expn==expn) { *p=q; return(0); } else { *p=pre; return(-1); } } /************************************************************/ /* 插入结点函数 */ /************************************************************/ void insert(Item *pre,Item *p) {

一元稀疏多项式计算器C语言课程设计

2014-2015学年第二学期学号1308210115 《软件工程》 课程设计报告 题目:一元稀疏多项式计算器 专业:计算机科学与技术 班级:计算机科学与技术(2)班 姓名: 指导教师: 成绩:

一、问题描述 (3) 二、需求分析 (3) 三、概要设计 (4) 四、详细设计 (5) 五、源代码 (6) 六、程序测试 (18) 七、使用说明 (24) 八、课设总结 (25)

一、问题描述 1.1基本要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值。 (6)计算器的仿真界面。 1.2设计目的 数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用 二、需求分析 2.1 设计开发环境: 软件方面:系统windows 7 编程软件:VC++ 6.0 2.2思路分析: ①一般情况下的一元n次多项式可写成 pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

数据结构实验,多项式计算器

实验题目:多项式运算器 实验内容:1、熟悉编程环境 2、用链式存储结构实现稀疏一元多项式运算器 实验目的和要求: 1、通过本实验,掌握VC++6.0的基本使用,包括源程序的输入,编译运行及调 试。调试的目的是找程序的运行错误,通过DEBUG菜单设置断点实现。 2、用链式存储结构实现一元多项式的运算。 熟练掌握指针和链表的基本操作,利用菜单进行功能选择。 功能基本要求:创建、显示、求和、求差、求值、销毁、清空、修改 实验算法: 1、数据结构描述: 输入的稀疏每一个多项式用一个链表存储,链表的每一个节点存储多项式的一个非零项。定义为LNode型结构体,其中保存该项的系数和指数。主 函数中用一个数组存储每一个多项式的第一项的头指针以调用多项式。 2、函数和算法描述: 主函数main定义LNode*数组a[]存储每一个多项式头节点的地址,并构建菜单以选择调用函数进行多项式的操作,对多项式进行操作的函数返回新 改动的多项式头结点地址。 Createpolyn函数用以创建一个多项式,在用户输入结束指令之前,不断的申请空间,构建LNode型结点并加至构建的链表的表尾,输入结束指令之 后,表尾设NULL并返回表头指针。 Printpolyn函数用以在屏幕上打印多项式,接收需要打印的多项式链表的头结点,构造循环体在表尾之前,不断以mx^n格式打印对应结点中的数 据。 Copypolyn函数用以复制多项式,接收需要复制的多项式a和复制位置b 的指针,构造循环体,在a到表尾之前循环,在b对应的链表中构建新的结 点,结点上的数据赋值为a中对应的值,返回b的头结点地址。 Addpolyn函数用以求两个已知多项式a、b的和存入c,先构建循环体,在a、b链表都未进行到表尾时,比较两个结点中的次数值,如果相同,将 系数相加赋于c的当前结点,如果不同,将次数较小多项式y(a或b)的结 点赋值给c当前结点,在将y链表向后推。 Subtract函数用以求两多项式的差,类似求和算法。 Value函数用以求一个多项式的值,接收x的值,构建循环体,在表尾之前循环以遍历多项式链表。内置循环体,以次数n为限循环,求出x^n的 值,乘以系数并将每一项的值叠加得值。 Destroypolyn函数用以销毁已有的多项式,将此多项式链表的空间FREE 掉,返回空指针。 Clearpolyn函数用以清空多项式,构建循环体,将多项式的各项的系数、指数置零。 3、时空分析: L= sizeof(struct LNode) 一个含有N项的多项式占用的储存空间为NL+1

一元稀疏多项式计算器(数据结构)

【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【测试数据】 1,(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7) 【实现提示】 用带表头结点的单链表存储多项式。 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } }

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

一元稀疏多项式计算器实验

一元稀疏多项式计数器预习报告 姓名:刘茂学号2220 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^^11)+(7-5x^8+11x^9)=^11+11x^9+2x+7); 2、(6x^-3-x+^^9+^9)-(-6x^-3+^2-x^2+^15 )=^^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。 三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。

采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ① 若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include<> #include<> #include<> //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p);//系数为0的话释放结点 else

一元稀疏多项式计算器(数据结构)

院系:计算机科学学院 专业:软件工程 年级: 2013级 课程名称:数据结构 姓名:韦宜(201321092034)指导教师:宋中山 2015年 12 月 15日

题目:设计一个一元稀疏多项式简单计算器 班级:软件工程1301 姓名:韦宜学号:201321092034 完成日期:12月15日 一、需求分析 问题描述:设计一个一元多项式加法器 基本要求: 输入并建立多项式; (2)两个多项式相加; (3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第i 项的系数和指数,序列按指数降序排列。 (4)计算多项式在x处的值; (5)求多项式的导函数。 软件环境:Windows,UNIX,Linux等不同平台下的Visual C++ 6.0 硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

二、概要分析 本程序有五个函数: PolyNode *Input()(输入函数); PolyNode *Deri(PolyNode *head)(求导函数); PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数); void Output(PolyNode*head)(输出函数); int main()(主函数) 本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

一元多项式计算器设计与实现

一元稀疏多项式简单计算器 一、设计课题 设计一元稀疏多项式简单计算器。 二、需求分析 2.1 输入的形式和输入值的范围: 输入是从键盘输入的,输入的内容为多项式的系数和指数,数为任意的整数,指数为大于等于0的整数 2.2 输出的形式 从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值。 2.3 程序所能达到的功能 a:输入并建立多项式; b:输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei 分别是第i项的系数和指数,序列按指数降序排列; c:多项式a和b相加,建立多项式a+b; d:多项式a和b相减,建立多项式a-b; 2.4 测试数据 (1)(2x+5x^8-3.1x^11)+(7-5x^8+11x^9) = (-3.1x^11+11X^9+2X+7) (2)(X+X^3)+(-X-X^3)=0 (3)(X+X^2+X^3)+0= X+X^2+X^3 三、概要设计 3.1 设计思路 A:数据结构的选用 为了实现任意多项式的加法、减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元属;单链表抽象结构类型定义见附录2。 B:多项式的输入 采用头节点插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非00时就继续,当输入00时,就结束一个多项式的输入; C:2个多项式的加法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中。当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生 D:2个多项式的减法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相减;相加的和不为0的话,用头插法建立一个新的节点。 p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中,并且建立的接点的系数为原来的相反数;当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生,并且建立的接点的系数为原来的相反数。

一元稀疏多项式的加法运算(数据结构实习)

实习一线性表、栈和队列及其应用 ——一元稀疏多项式的加法运算 【问题描述】 设计一个实现一元稀疏多项式相加运算的演示程序。 【基本要求】 (1)输入并建立两个多项式; (2)多项式a与b相加,建立和多项式c; (3)输出多项式a,b,c。输出格式:比如多项式a为:A(x)=c1xe1+ c2xe2+…+ cmxem,其中,ci和ei分别为第i项的系数和指数,且各项按 指数的升幂排列,即0≤e1<e2<…<em。多项式b,c类似输出。 【测试数据】 (1)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5) (2)(x+x100)+(x100+x200)=(x+2x100+x200) (3)(2x+5x8-3x11)+(7-5x8+11x9)=(7+2x+11x9-3x11) 一.需求分析 1.输入的形式和输入值的范围: 输入是从键盘输入的,输入的内容为多项式的系数和指数,其中多项式的每一项分别以一个系数和指数的形式输入,不带未知数X,系数为任意的实数,指数为任意的整数。 要结束该多项式的输入时,输入的指数和系数都为0. 2. 输出的形式 从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值,并且多项式中将未知数X表示了出来. 形式为:+c1X^e1+c2X^e2+…+ciX^ei+…(ci和ei分别是第i 项的系数和指数,序列按指数升序排列。) 当多项式的某一项的系数为+1或者-1时侧该项多项式的输出形式为X^ei或-X^ei; 当该项的系数为正时输出+ciX^ei,当为负数时则输出ciX^ei 3. 程序所能达到的功能 输入并建立多项式,实现一元稀疏多项式的相加并输出。 4. 注意:所有多项式都必须以指数升密形式输入。 5. 测试数据为(1)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5) (2)(x+x100)+(x100+x200)=(x+2x100+x200) (3)(2x+5x8-3x11)+(7-5x8+11x9)=(7+2x+11x9-3x11) 二.设计 1.设计思路

一元多项式计算器程序设计实验报告

武汉工业学院 数学与计算机学院 《数据结构》 课程设计说明书 题目:一元多项式计算器 专业:计算机 班级:计算机类1305班 学号: 1305110053 姓名:杨钦 指导老师:左翠华 2014年12月25日

一、 设计题目 一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器。 【基本要求】 一元稀疏多项式简单计算器的基本功能是: (1) 输入并建立多项式 ; (2) 输出多项式,输出形式为整数序列:n ,c l ,e l ,c 2,e 2,…,c n ,e n ,其中n 是多项式的项数,c i 和e i ,分别是第 i 项的系数和指数,序列按指数降序排列; (3) 多项式a 和b 相加,建立多项式a +b ; (4) 多项式a 和b 相减,建立多项式a -b 。 【测试数据】 (1)(2x+5x 8-3.1x 11) + (7-5x 8+11x 9)=(-3.lx 11+11x 9+2x+7) (2)(6x -3-x+4.4x 2-1.2x 9) -(-6x -3+5.4x 2-x 2+7.8x 15)=(-7.8x 15-1.2x 9+12x -3-x) (3)(1 +x + x 2+x 3+x 4+x 5)+(-x 3-x 4)=(1+x+x 2+x 5) (4)(x+x 3)+(-x -x 3)=0 (5)(x+x 100)+(x 100 +x 200)=(x+2x 100+x 200) (6)(x+x 2+x 3)+0=x+x 2+x 3 (7) 互换上述测试数据中的前后两个多项式 【实现提示】 用带表头结点的单链表存储多项式。 【选作内容】 (1) 计算多项式在x 处的值。 (2) 求多项式 a 的导函数a ' 。 (3) 多项式a 和b 相乘,建立乘积多项式ab 。 (4) 多项式的输出形式为类数学表达式。例如,多项式 -3x8+6x3-18 的输出形式为183683-+-∧∧x x ,x15+(-8)x7-14的输出形式为147815--∧∧x x 。注意,数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为x8,项 -1x3的输出形式为-x3。

数据结构课程设计-一元多项式计算器

实习1、一元稀疏多项式计算器 一、需求分析 1. 问题描述 设计一个一元稀疏多项式简单计算器。 2. 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式。 (2)输出多项式,输出形式为整数序列:n, c1, e1, c2, e2, ········,c n, e n,其中n是多项式的项数,c i,e i分别是第i项的系数和指数,序列按指数降序排列。 (3)多项式a和b想加,建立多项式a+b 。 (4)多项式a和b想减,建立多项式a-b 。 3. 测试数据 (1) (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x) (3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5) (4) (x+x3)+(-x-x3)=0 (5) (x+x100)+(x100+x200)=(x+2x100+x200) (6) (x+x2+x3)+0=(x+x2+x3) (7) 互换测试数据的前后两个多项式。 4. 实现提示 用带表头结点的单链表存储多项式。 二、概要设计 为实现上述程序功能,应用带头结点的单链表存储多项式。为此需要一个抽象数据类型:一元多项式。 1.抽象数据类型一元多项式定义为: ATD Ploynomial{ 数据对象:D={ai|ai∈Termset, i=1,2,3···,m,m≥0Termset中的每个元素包含一个表示系数的实数和表示指数的整数} 数据关系:R1={ai-1,ai∈D,且ai-1中的指数

一元稀疏多项式计算器实习报告

实习报告 题目:设计一个一元稀疏多项式计算器 班级: 姓名学号__________完成日期:__ 一、课程题目 一元稀疏多项式计算器 二、需求分析 1、一元稀疏多项式简单计算器的功能是: 1.1 输入并建立多项式; 1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en, 其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 1.3 求多项式a、b的导函数; 1.4 计算多项式在x处的值; 1.5多项式a和b相加,建立多项式a+b; 1.6 多项式a和b相减,建立多项式a-b。 2、设计思路: 2.1 定义线性表的动态分配顺序存储结构; 2.2 建立多项式存储结构,定义指针*next 2.3利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构 造的一元多项式 3、测试数据: (1)、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7); (2)、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )=(-7.8x^15-1.2x^9+12x^-3-x); (3)、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); (4)、(x+x^3)+(-x-x^3)=0; (5)、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); (6)、(x+x^2+x^3)+0=x+x^2+x^3. 三、概要设计 1.有序表的抽象数据类型定义为: ADT List{ 数据对象:D={a i| a i∈R,i=1,2,…,n,n≧0}

一元稀疏多项式计算器 C语言编写

一元稀疏多项式计算器 C语言编写 悬赏分:120 |提问时间:2008-6-23 20:33 |提问者:骑着单车的熊 一元稀疏多项式计算器: 用C语言编写程序,实现一元稀疏多项式计算器。具体要求如下: (1) 演示程序以用户与计算机对话的形式输入输出数据; (2) 实现两个一元稀疏多项式的加、减、乘运算; (3) 求一个多项式a的导函数a’; (4) 结果以类数学表达式的形式输出。 看清题目的要求我只要C语言的不要其他语言的还有解释一下编程的思路和过程谢谢了大家 请大家传给我能够使用的程序谢谢了 推荐答案 datastruct.h typedef struct list { int c; //多项式的项数 int e; //多项式的指数 struct list *next; //下一结点 }; typedef struct list *LinkList; typedef struct list Node; 下面是线性表的操作相关函数声明,对应文件ListOper.h: //File: ListOper.h #ifndef DATASTRUCT #define DATASTRUCT #include "datastruct.h" #endif //some functions declaretioin bool CreateList(LinkList &L); Node *CreateNode(int e, int c); void FreeList(LinkList &L); void SortList(LinkList &L); void DeleteNextNode(Node *d); void SweepNextNode(Node *s);

一元稀疏多项式的表示及加法运算

一元稀疏多项式的表示及加法运算 一、需求分析 1.程序的功能 (1).按照指数升序顺序,输入并建立多项式M与N。 (2).计算多项式M与N的和 (3).输出多项式M、N、M+N。 2.输入输出的要求 多项式按指数递增顺序输入;设计的数据结构应有利于表示任意一元稀释多项式;多项式的输出采用数学多项式的表示形式。 3.测试数据 (1)7+3x+9x8+5x17, 8x+22x7-9x8 (2) 0, 8x+22x7-9x8 (3)8x10+22x7-9x8 , -1 二、概要设计 1.通过建立链表来实现多项式的输入 在多项式输入之前,要先定义一个带有头结点的单链表,紧接着以指数递增的顺序输入多项式中系数不为零的项,其中每一项对应一个结点,每项对应的结点依次插入直至遇到结束标志,这样结完成了多项式的输入。 2. 两个多项式相加 两个多项式中如果指数相同则系数相加,构成和多项式的一项;如果指数不同,则直接构成和多项式的一项。 3. 多项式的输出 采用数学多项式的表达方式 三、详细设计 1.定义数据类型: typedef struct pnode { float coef; //系数 int exp; //指数 struct pnode *next; //指针,指向下一个系数不为的子项 }PNode, *PLink; PLink M,N,P; //多项式M、N、P 2.通过建立链表来实现多项式的输入 在多项式输入之前,要先定义一个带有头结点的单链表,先输入多项式项数,紧接着以指数递增的顺序输入多项式中系数不为零的项,其中每一项对应一个结点,每项对应的结点依次插入,当项数达到时结束,这样完成了多项式的输入。 PNode *createList(PNode *p) //建立多项式链表 { float a; int b; int c; int d; p=new PNode;

数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.

数据结构课程设计 系别电子信息系 专业计算机科学与技术 班级学号4090113 姓名王健 指导教师党群 成绩 2011年7 月14 日

目录 一、课程题目 (1) 二、需求分析 (1) 三、测试数据 (2) 四、概要设计 (2) 五、调用关系图 (3) 六、程序代码 (3) 七、心得体会及总结 (12) 数据结构课程设计

一、课程题目 一元稀疏多项式计算器 二、需求分析 1、一元稀疏多项式简单计算器的功能是: 1.1 输入并建立多项式; 1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en, 其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 1.3 求多项式a、b的导函数; 1.4 计算多项式在x处的值; 1.5多项式a和b相加,建立多项式a+b; 1.6 多项式a和b相减,建立多项式a-b。 2、设计思路: 2.1 定义线性表的动态分配顺序存储结构; 2.2 建立多项式存储结构,定义指针*next 2.3利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构 造的一元多项式 2.4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示 “提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。多项式显示的格式为:c1x^e1+c2x^e2+… +cnx^en 3、设计思路分析 要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为 运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。 为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则: ① 若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项, 令指针p后移。

一元多项式计算器

实验报告 课程名称:数据结构 实验名称:一元多项式计算器 院(系):计算机与通信工程学院 姓名: 学号: 专业班级: 指导教师: 2020 年 4 月22 日

实验报告正文 一、实验目的 1、目的:掌握顺序表和单链表的存储特点及插入、删除等算法。 2、任务:灵活运用顺序表和单链表的相关算法实现一元多项式的计算。 二、实验内容及要求 1、任务描述 实验内容:设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为: Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm; Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。 2、主要数据类型与变量 系数和指数采用int类型,运算结果不超出int取值范围 3、算法或程序模块 读多项式模块:Polynomial ReadPoly() 多项式乘法模块:Polynomial Mult(Polynomial p1, Polynomial p2) 多项式加法模块:Polynomial Add(Polynomial p1, Polynomial p2) 多项式减法模块:Polynomial Reduce(Polynomial p1, Polynomial p2) 输出多项式模块:void PrintPoly(Polynomial p) 三、测试 1、方案 输入两个多项式分别为: 3 4 -5 2 6 1 -2 0 5 20 -7 4 3 1 2、结果 四、总结与讨论 通过本次实验,我巩固了前面所学的知识,又将C语言的知识,C++的内容结合到

一起,因为太久没有接触计算机实验,所以一切显得熟悉又陌生,对我来说有点吃力,应该再把前面的知识复习巩固。 本实验的主要数据类型与变量类型是 struct PolyNode { int coef; int expon; PolyNode* link; }; typedef PolyNode* Polynomial; 输出的时候每种运算结果以多项式形式输出,要输出升幂和降幂两种情况。结果多项式中无重复阶项、无零系数项,输出多项式时请采用如下易读形式(一元多项式,总变元为x):x^4 - 3 x^2 + 5,实现一个简单的交互式界面,包括系统菜单、输入提示等。多项式运算前首先判定多项式特点,根据多项式是否稀疏来选用合适的存储结构;根据多项式不同的运算要求选择合适的存储结构,庞大的编程需要不断地调试,包括相加、相减、相乘运算。算法模块包括读多项式,加减乘法模块以及输出多项式模块。 附:程序的源代码 #include #include using namespace std; struct PolyNode { int coef; int expon; PolyNode* link; }; typedef PolyNode* Polynomial; void Attach(int c, int e, Polynomial* prear) { PolyNode* node = new PolyNode(); node->coef = c; node->expon = e; (*prear)->link = node; *prear = node; } Polynomial ReadPoly() { int c, e; Polynomial p, rear, temp; p = new PolyNode(); rear = p; while(scanf("%d%d", &c, &e)){ Attach(c,e,&rear); char ch = getchar(); if(ch == '\n') break; } temp = p; p = p->link; free(temp); return p; } Polynomial Mult(Polynomial p1, Polynomial p2) { if (!p1||!p2) return NULL;

相关文档
相关文档 最新文档