数据结构 实验二 线性表实现一元多项式计算_第1页
数据结构 实验二 线性表实现一元多项式计算_第2页
数据结构 实验二 线性表实现一元多项式计算_第3页
数据结构 实验二 线性表实现一元多项式计算_第4页
数据结构 实验二 线性表实现一元多项式计算_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沏广/祟实验报告

课程名称:程序设计与数据结构指导老师:_成绩:

实验名称:一元多项式的加减运算实验类型:基础训练型同组学生姓名:

一、实验目的和要求(必填)二、实验内容和代码(必填)

三、代码缺陷及修正记录四、实验结果与分析(必填)

五、讨论、心得

一元多项式的加减运算

一、实验目的和要求

按照有序线性表的方式实现一元多项式的数据类型

二、实验内容和代码

【实验内容】

1、用数据结构的方法编程实现一元多项式的加减运算

2、一元多项式的乘法运算(选做)

3、课外阅读:秦九韶算法(霍纳算法)求解多项式

【实验代码】

Polynomial.h

structPolynomial

{

intcoef;

intexp;

structPolynomial*next;

);

structPolynomial*create();〃建立多项式

structPolynomial*insert(structPolynomial*head,structPolynomial*p);

voidadd(structPolynomial*pl,structPolynomial*p2);〃多项式相加运算

voidsub(structPolynomial*pl,structPolynomial*p2);〃多项式相减运算

voidprint(structPolynomial*p);

Polynomial.c

#include<stdio.h>

#include<stdlib.h>

#includenPolynomial.h"

structPolynomial*create()

(

structPolynomial*p,*q,*head;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

scanf_s("%d%d”,&p->coef,&p->exp);

head=NULL;

while(p->coef!=0||p->exp!=0)

(

head=insert(head,p);

scanO(n%d%d",&p->coef,&p->exp);

}

returnhead;

)

structPolynomial*insert(structPolynomial*head,structPolynomial*p)

、(

装structPolynomial*q,*ql,*q2;

q=(structPolynomial*)malloc(sizeof(structPolynomial));

订q->coef=p->coef;

q->exp=p->exp;

线q->next=NULL;

if(head==NULL)

(

head=q;

head->next=NULL;

returnhead;

}

q2=ql=head;

while(ql!=NULL)

(

while(ql->exp<p->exp)

(

q2=ql;

if(ql->next==NULL)

break;

ql=ql->next;

)

if(ql->exp==p->exp)

q1->coef=q1->coef+p->coef;

if(ql->coef==0)

(

if(ql==head)

(

head=head->next;

break;

}

else

(

q2->next=ql->next;

)

)

else

break;

)

elseif(q1->exp<p->exp)

(

ql->next=q;

break;

)

装else

(

订if(q2==head&&q2->exp>q->exp)〃如果不加q2->exp>q->exp会出现二义性

(

线q->next=head;

head=q;

break;

)

else

(

q2->next=q;

q->next=ql;

break;

)

)

)

returnhead;

);

voidadd(structPolynomial*pl,structPolynomial*p2)

(

structPolynomial*p,*q,*head;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

head=q=p;

while(pl!=NULL||p2!=NULL)

(

if(pl==NULL)

(

while(p2!=NULL)

(

q=p;//p的前一节点

p->exp=p2->exp;

p->coef=p2->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

p2=p2->next;

)

)

elseif(p2==NULL)

(

while(pl!=NULL)

(

q二p;

p->exp=pl->exp;

装p->coef=pl->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

订q->next=p;

pl=pl->next;

线}

)

else

(

if(pl->exp<p2->exp)

(

q二p;

p->exp=pl->exp;

p->coef=pl->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

pl=pl->next;

)

elseif(p1->exp==p2->exp)

(

q二p;

p->exp=pl->exp;

p->coef=p1->coef+p2->coef;

if(p->coef!=0)

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

pl=pl->next;

p2=p2->next;

)

else

(

pl=pl->next;

p2=p2->next;

)

)

else

{

q=p;

p->exp=p2->exp;

p->coef=p2->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

p2=p2->next;

)

装}

、)

订q->next=NULL;

print(head);

线);

voidsub(structPolynomial*pl,structPolynomial*p2)

(

structPolynomial*p,*q,*head;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

head=q=p;

while(pl!=NULL||p2!=NULL)

(

if(pl==NULL)

(

while(p2!=NULL)

(

q=p;

p->exp=p2->exp;

p->coef=-p2->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

p2=p2->next;

)

elseif(p2==NULL)

(

while(pl!=NULL)

(

q=p;

p->exp=pl->exp;

p->coef=pl->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

pl=pl->next;

)

)

else

(

if(pl->exp<p2->exp)

{

q=p;

p->exp=pl->exp;

p->coef=pl->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

pl=pl->next;

)

elseif(pl->exp==p2->exp)

(

q二p;

p->exp=pl->exp;

p->coef=pl->coef-p2->coef;

if(p->coef!=0)

(

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

pl=pl->next;

p2=p2->next;

)

else

(

pl=pl->next;

p2=p2->next;

else

q二p;

p->exp=p2->exp;

p->coef=-p2->coef;

p=(structPolynomial*)malloc(sizeof(structPolynomial));

q->next=p;

p2=p2->next;

q->next=NULL;

print(head);

);

voidprint(structPolynomial*p)〃将多项式打印到屏幕

(

structPolynomial*pl;

Pl=P;

if(p==NULL)

(

装printf("O\n");

return;

订}

while(pl!=NULL)

线{

if(pl==p)〃头结点输出时的情况

(

printf(H%d",pl->coef);

if(pl->exp!=0)

printf(uxA%du,pl->exp);

else

printf("");

I

else

(

if(p1->coef>0||pl->coef==0)

(

printf(M+%dH,pl->coef);

if(pl->exp!=0)

printf(uxA%dM,pl->exp);

else

printf("");

else

printf(H-%d",-pl->coef);

if(pl->exp!=0)

printf(uxA%dn,pl->exp);

else

printf(un);

pl=pl->next;

)

printf(u\nu);

)

UnaryPolynomial.c

#include<stdio.h>

#include<stdlib.h>

#includenPolynomial.h"

intmain()

装structPolynomial*pl,*p2;

printf(”请输入多项式A中x的系数及指数(输入00表示输入结束):\nn);

订pl=create();

printf(”请输入多项式B中x的系数及指数(输入00表示输入结束):\nn);

线p2=create();

printf(,,\nu);

printf(uA(x)=n);

print(pl);

printf("\nn);

printf("B(x)=n);

print(p2);

printf(u\n\nu);

printf(uA(x)+B(x)=");

add(pl,p2);

printf(u\n\nu);

printf(,'A(x)-B(x)=,');

sub(pl,p2);

printf("\n\nu);

system("pausen);

return0;

三、代码缺陷及修正记录

一开始运行时到一半会自动退出,但一步步调试又能得到正确结果,找不到原因所在,

最后加了system("pause")才可。

四、实验结果与分析

234234

当两一元多项式分别为A(x)=X+2X+3X+4X^B(X)=2X+3X+4X+4X,

|HF:\360Downloads\VS2017平常文〈筋瞰一元多项式B9M渝1复1\Debug\Project1.exe-□X

请输入多项式AWx的系数及指数(输入0。表示输入结束):

11

22

33

44

00

请输入多项式B中x的系数及指数(输入00表示输入结束):

21

32

43

44

00

A(x)=lx1+2x2+3x3+4x4

B(x)=2x1+3x2+4x3+4x4

A(x)+B(x)=3x1+5x2+7x3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论