实验一完成多项式的相加运算Word下载.docx
- 文档编号:16667956
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:9
- 大小:34.88KB
实验一完成多项式的相加运算Word下载.docx
《实验一完成多项式的相加运算Word下载.docx》由会员分享,可在线阅读,更多相关《实验一完成多项式的相加运算Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
(2)学习利用线性表提供的接口去求解实际问题
(3)熟悉线性表的的存储方法
二、实验内容和原理
1.实验内容
设计一个一元多项式的简单计算程序,其基本功能有:
(1)输入并建立多项式;
(2)输出多项式;
(3)多项式的相加运算。
利用单链表实现。
2.实验原理
使用单链表实现一元多项式的存储,并实现两个一元多项式的加法运算。
三、实验环境
硬件:
(1)学生用微机
(2)多媒体教室或远程教学(3)局域网环境
软件:
(1)WindowsXP中文操作系统
(2)TurboC3.0或者VC6.0
四、算法描述及实验步骤
1描述
1、创建两个单链表A、B,分别调用CreatePolyn();
2、输出多项式,分别调用PrintPolyn();
3、多项式相加运算AddPolyn()。
2算法流程图
3代码(注释)
#include<
stdio.h>
malloc.h>
math.h>
typedefstructPolynomial
{floatcoef;
//系数变量
intexp;
//指数变量
structPolynomial*next;
//定义next指针
}*Polyn,Polynomial;
//Polyn为结点指针类型
voidInsert(Polynp,Polynh)
//插入新的结点p
{if(p->
coef==0)free(p);
//系数为0的话释放结点
else
{Polynq1,q2;
q1=h;
q2=h->
next;
while(q2&
&
p->
exp<
q2->
exp)
//查找插入位置
{q1=q2;
q2=q2->
}
if(q2&
exp==q2->
//将指数相同相合并
{q2->
coef+=p->
coef;
free(p);
if(!
coef)
{q1->
next=q2->
free(q2);
else
//指数为新时将结点插入
{p->
next=q2;
q1->
next=p;
}//Insert
intf(floatx)//判断输入是否为整形
{floata;
a=x-(longint)x;
if(a==0&
x==fabs(x))
return1;
return0;
PolynCreatePolyn(Polynhead,intm)
//建立一个头指针为head、项数为m的一元多项式
{inti;
Polynp;
p=head=(Polyn)malloc(sizeof(structPolynomial));
head->
next=NULL;
for(i=0;
i<
m;
i++)
{
p=(Polyn)malloc(sizeof(structPolynomial));
//建立新结点以接收数据
printf("
pleaseinputNO.%dcoefandexp:
"
i+1);
scanf("
%f%d"
&
coef,&
exp);
while(!
f(p->
coef)&
!
exp))
{printf("
输入有错,请重新输入:
"
);
}
Insert(p,head);
//调用Insert函数插入结点
returnhead;
}//CreatePolyn
voidDestroyPolyn(Polynp)
//销毁多项式p
q1=p->
q2=q1->
while(q1->
next)
{free(q1);
q1=q2;
//指针后移
voidPrintPolyn(PolynP)//输出多项式
{Polynq=P->
intflag=1;
//项数计数器
q)
//若多项式为空,输出0
{putchar('
0'
\n"
return;
while(q)
if(q->
coef>
0&
flag!
=1)putchar('
+'
//系数大于0且不是第一项
coef!
=1&
q->
=-1)
//系数非1或-1的普通情况
%g"
q->
coef);
exp==1)putchar('
X'
elseif(q->
exp)printf("
X^%d"
coef==1)
{if(!
exp)putchar('
1'
elseprintf("
coef==-1)
-1"
exp==1)printf("
-X"
-X^%d"
q=q->
flag++;
}//while
}//PrintPolyn
intcompare(Polyna,Polynb)
{if(a&
b)
b||a->
exp>
b->
exp)return1;
elseif(!
a||a->
exp)return-1;
elsereturn0;
a&
b)return-1;
//A多项式已空,但B多项式非空
elsereturn1;
//B多项式已空,但A多项式非空
}//compare
PolynAddPolyn(Polynpa,Polynpb)//求解并建立多项式A+B,返回其头指针
{Polynqa=pa->
Polynqb=pb->
Polynheadc,hc,qc;
hc=(Polyn)malloc(sizeof(structPolynomial));
//建立头结点
hc->
headc=hc;
while(qa||qb)
{qc=(Polyn)malloc(sizeof(structPolynomial));
switch(compare(qa,qb))
//功能选择
{
case1:
qc->
coef=qa->
exp=qa->
exp;
qa=qa->
break;
case0:
{
coef+qb->
qb=qb->
case-1:
coef=qb->
exp=qb->
}
}//switch
if(qc->
=0)
{qc->
next=hc->
next=qc;
hc=qc;
elsefree(qc);
//当相加系数为0时,释放该结点
returnheadc;
}//AddPolyn
PolynSubtractPolyn(Polynpa,Polynpb){//求解并建立多项式A-B,返回其头指针
Polynh=pb;
Polynp=pb->
Polynpd;
while(p){
//将pb的系数取反
coef*=-1;
p=p->
pd=AddPolyn(pa,h);
for(p=h->
p;
next)
//恢复pb的系数
returnpd;
}//SubtractPolyn
PolynMultiplyPolyn(Polynpa,Polynpb){//求解并建立多项式A*B,返回其头指针
Polynhf,pf;
Polynqa=pa->
hf=(Polyn)malloc(sizeof(structPolynomial));
//建立头结点
hf->
for(;
qa;
next){
for(qb=pb->
qb;
pf=(Polyn)malloc(sizeof(structPolynomial));
pf->
coef*qb->
exp+qb->
Insert(pf,hf);
//调用Insert函数以合并指数相同的项
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 完成 多项式 相加 运算
![提示](https://static.bdocx.com/images/bang_tan.gif)