版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沏广/祟实验报告
课程名称:程序设计与数据结构指导老师:_成绩:
实验名称:一元多项式的加减运算实验类型:基础训练型同组学生姓名:
一、实验目的和要求(必填)二、实验内容和代码(必填)
三、代码缺陷及修正记录四、实验结果与分析(必填)
五、讨论、心得
一元多项式的加减运算
一、实验目的和要求
按照有序线性表的方式实现一元多项式的数据类型
二、实验内容和代码
【实验内容】
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024短视频平台运营绩效评估与合作合同2篇
- 架子工单项承包合同
- 化工设计-ASPEN软件:第七章反应器模拟
- 二零二四年度土地使用权转让合同:商业用地使用权交易协议
- 人教版九年级化学第九单元2溶解度课时3溶解度曲线混合物的分离分层作业课件
- 幼儿园环境布置二零二四年度合作协议
- 八下英语课件4单元
- 银行老员工年度总结
- 人力资源团队规划
- 《selenium安装教程》课件
- 大学生创业英语智慧树知到期末考试答案章节答案2024年广西师范大学
- S7-1500 PLC应用技术 习题及答案
- 五年级上册语文课件-语文园地八 人教 部编版
- 钳工教学中钻孔方法的改进探究
- 水轮机结构介绍(经典)
- 高处作业基本知识高处不胜寒安全不能忘
- 管道支架载荷计算
- 防火门安装施工方案
- 无损检测射线常见缺陷图集及分析
- 最新外科疾病诊疗指南(精品课件)
- 外墙门头改造脚手架施工(完整版)
评论
0/150
提交评论