一元多项式求和
计算机科学与
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
学院
《数据结构与算法》实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
[?] 专业班级 实验地点 机423 学生学号 指导教师 学生姓名 实验时间
实验项目 链表的应用
实验类别 操作性( )验证性( )
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
性( )综合性( ?)其它( )
实(1)熟练掌握链表结构及有关算法的设计; 验要目(2)掌握用链表表示特定形式的数据的方法,并能编写出有关求 的运算的算法。 及
成 绩 评 定 表
类 别 评 分 标 准 分值 得分 合 计
积极出勤、遵守纪律 上机表现 30分 认真完成实验任务
程序代码规范、功能正确 报告质量 70分 填写内容完整、体现收获
说明:
评阅教师:
日 期: 年 月 日
计算机科学与工程学院 一( 实验内容
一元多项式求和:把任意给定的两个一元多项式P(x) ,Q(x) 输入计算
机,计算它们的和并输出计算结果。
二、实验说明
一元多项式可以用单链表表示,结点结构图示如下:
coef exp next
一元多项式链表的结点结构
一元多项式算法伪代码如下:
1. 工作指针p、q初始化;
2. while(p存在且q存在)执行下列三种情形之一
2.1 如果p->exp
exp,则指针p后移;
2.2 如果p->exp>q->exp,则
2.2.1 将结点q插入到结点p之前;
2.2.2 指针q指向原指结点的下一个结点;
2.3 如果p->exp=q->exp,则
2.3.1 p->coef =p->coef+q->coef;
2.3.2 如果p->coef ==0,则执行下列操作,否则,指针p后移;
2.3.2.1 删除结点p;
2.3.2.2 使指针p指向它原指结点的下一个结点;
2.3.3 删除结点q;
2.3.4 使指针q指向它原指结点的下一个结点;
3. 如果q不为空,将结点q链接在第一个单链表的后面;
2 《计算机程序设计基础》实验报告
计算机科学与工程学院
三、 设计分析(实验流程)
实现要定义的一元多项式应采用链式存储结构。根据一元多项式相加的运 算法则,对于两个多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成新多项式的一项;对于两个多项式中所有指数不同的项,分别复制到新多项式中。新多项式不必另外生成,而是在原来的两个多项式中摘取结点即可。
采用顺序存储结构存储多项式系数A,使多项式的某些运算变得更简洁。但在实际使用时,多项式的阶数可能很高,不同的多项式阶数可能相差很大,这使顺序存储结构的最大长度难以确定。而且,最高次幂与最低次幂项之间缺项很多时,采用顺序存储结构显然十分浪费存储空间,因此,一般情况下多采用链式存储结构来存储高阶多项式。
在用线性链表来存储一个多项式时,多项式中的每个非零项系数对应一个结点,结点由数据元素项和指针组成。数据元素项中包含系数和指数值,
设计中先定义定义数据元素中的数据,其中有指数、系数级指针next等。并要先构造一元多项式。在定义输出、删除、合并等模块。
假设指针qa和qb分别指向多项式A和B中当前进行操作的某个结点,比较这个结点的指数项,可能有三种情况:
? 指针qa->expexp,则摘取qa指针所指结点插入到和多项式中;
? 指针qa->expexp,则摘取qb指针所指结点插入到和多项式中;
? 指针qa->exp=qb->exp,则将系数相加,若和数不为零,则修改qa->coef
的值,同时释放qb所指结点,反之,从多项式A的链表中删除相应的结
点,并释放指针Pa和Pb所指结点;
还有就是在输入是采取的降序输入,也好使两个多项式进行合并。并输出。在主函数中将前面也的这些功能都运用起来就可以了。
3 《计算机程序设计基础》实验报告
计算机科学与工程学院 四、源程序代码
#include
#define NULL 0
using namespace std;
typedef struct Polynomial
{
float coef; //系数
int exp; //指数
struct Polynomial *next;
}Polynomial;
Polynomial *CreatPolyn()
{ //输入m项的系数和指数,建立一元多项式
float mod;
int ind;
Polynomial *H,*p,*s;
H=new Polynomial;
s=H;
cout<<"请输入多项式的系数和指数:(按0结束输入)"<>mod>>ind;
while(mod){
p=(Polynomial *)new Polynomial;
p->coef=mod;
p->exp=ind;
s->next=p;
s=p;
cin>>mod>>ind;
}
s->next=NULL;
return H;
}
void Print(Polynomial *pa)
{ //打印输出一元多项式p
while(pa->next!=NULL) {
pa=pa->next;
cout<coef<<"*x^"<exp;
if(pa->next!=NULL&&pa->next->coef>0)
cout<<"+";
}
}
void Delete(Polynomial *pa)
{ //删除一元多项式
Polynomial *p,*q;
p=pa->next;
4 《计算机程序设计基础》实验报告
计算机科学与工程学院
while(p){
q=p;
p=p->next;
delete q;
}
pa->next=NULL;
}
void AddPolyn(Polynomial *pa,Polynomial *pb)
{ //用于链表的合并使用完成多项式的相加运算
float sum;
Polynomial *p,*q,*pre,*temp;
p=pa->next;
q=pb->next;
pre=pa;
while(p!=NULL&&q!=NULL)
{
if(p->exp>q->exp)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp)
{
sum=p->coef+q->coef;
if(sum!=0) {
p->coef=sum;
pre->next=p;
pre=pre->next;
p=p->next;
temp=q;
q=q->next;
delete temp;
}
else
{
temp=p->next;
delete p;
p=temp;
temp=q->next;
delete q;
q=temp;
}
}
else
5 《计算机程序设计基础》实验报告
计算机科学与工程学院
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) //将多项式A中剩余的结点加入到和多项式中
pre->next=p;
else
pre->next=q;
}
int main()
{
int c;
int t=1;
while(t){
cout<<"******************菜单*****************"<>c;
switch(c)
{
case 1:Polynomial *p1,*p2;
p1=CreatPolyn();
cout<<"一元多项式A是: ";
Print(p1);
cout<
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
这次实验做了好久。刚开始都不知道怎么去下手,首先是把
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目的意思理 解错了,本来是一元多项式以为是多元多项式,也不太知道怎么去表达那个次数。后来才知道是自己理解错了。后来想想就用之前在课程设计中用的思路去做。在运行中也遇到了一些小问题。可是在别人的电脑上却是对的。都不知道错在哪里。但最后还是在同学是帮助下找到了。
我觉得在实验中应注意扩大范围,多项式的次数可能会很高很高;在输出之前,须重新排序,次数由高到低递减;最后排序进行交换时,要把次数和系数都交换,不要只交换一个,漏了另一个。
8 《计算机程序设计基础》实验报告