版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沏广/祟实验报告
课程名称:程序设计与数据结构指导老师:_成绩:
实验名称:一元多项式的加减运算实验类型:基础训练型同组学生姓名:
一、实验目的和要求(必填)二、实验内容和代码(必填)
三、代码缺陷及修正记录四、实验结果与分析(必填)
五、讨论、心得
一元多项式的加减运算
一、实验目的和要求
按照有序线性表的方式实现一元多项式的数据类型
二、实验内容和代码
【实验内容】
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年水产养殖病害防控策略指南
- 2026青海西宁市城北区大堡子镇中心卫生院招聘卫生专业技术人员的1人备考题库含答案详解
- 2026浙江宁波市镇海中学国际部诚招学科双语教师备考题库及完整答案详解1套
- 2026年林下经济模式创新发展课
- 软件开发大数据模块开发规范手册
- 2026福建三明市永安市罗坊乡人民政府招聘编外聘用驾驶员1人备考题库及完整答案详解1套
- 2026年企业并购法律尽调实务培训
- 职业健康促进与企业健康管理未来趋势
- 驻马店2025年河南驻马店市平舆县人民医院招聘人事代理人员28人笔试历年参考题库附带答案详解
- 金华2025年浙江金华义乌市人民检察院司法雇员招录6人笔试历年参考题库附带答案详解
- 江苏省盐城市大丰区四校联考2025-2026学年七年级上学期12月月考历史试卷(含答案)
- 事业编退休报告申请书
- 原发性骨髓纤维化2026
- 半导体厂务项目工程管理 课件 项目6 净化室系统的设计与维护
- 河南省洛阳强基联盟2025-2026学年高二上学期1月月考英语试题含答案
- 2026年中考数学模拟试卷试题汇编-尺规作图
- 安全技术劳动保护措施管理规定
- 新建加油站可行性研究报告6118933
- 论高级管理人员应具备的财务知识
- GB/T 7354-2003局部放电测量
- GB/T 1690-1992硫化橡胶耐液体试验方法
评论
0/150
提交评论