一元多项式的加法乘法运算的实现Word格式文档下载.docx
- 文档编号:20189769
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:18
- 大小:249.64KB
一元多项式的加法乘法运算的实现Word格式文档下载.docx
《一元多项式的加法乘法运算的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一元多项式的加法乘法运算的实现Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
string.h>
#defineNULL0
typedefstructNode{//定义结构体类型
floatcoef;
//系数
intexpn;
//指数
structNode*next;
//结构体指针
}Node,*Linklist;
structpolynode
{
intc;
inte;
structpolynode*next;
};
structpolynode*creat(void)
intc,e;
structpolynode*head=NULL;
structpolynode*p1,*p2,*l,*r;
while(scanf("
%d,%d%*c"
&
c,&
e),c||e)
{
p2=(structpolynode*)malloc(sizeof(structpolynode));
p2->
c=c;
e=e;
p2->
next=NULL;
if(head==NULL)
{head=p2;
continue;
}
for(l=r=head;
l!
=NULL&
&
(l->
e)<
e;
l=l->
next)r=l;
if(l==head&
l->
e>
e)head=p2;
elser->
next=p2;
next=l;
}
returnhead;
voidoutput(structpolynode*head)
structpolynode*p1;
p1=head;
if(p1==NULL)
{printf("
\nmultinomialiszero\n"
);
return;
printf("
\n"
while(p1!
=NULL)
{
printf(p1!
=head&
(p1->
c)>
0?
"
+%d"
:
"
%d"
p1->
c);
printf(p1->
e?
x^%d"
e);
p1=p1->
next;
}
structpolynode*add(structpolynode*head1,structpolynode*head2)
{
structpolynode*p1,*p2,*r,*l,*h;
h=r=p1=head1;
p2=head2;
if(head1==NULL)
{h=head2;
returnh;
while(p1!
p2!
=NULL)
{
if(p1->
e==p2->
e)
p1->
c+=p2->
c;
p2=p2->
r=p1;
p1=p1->
continue;
}
if(p1->
e<
p2->
r=p1;
l=p2;
if(p1==h)h=l;
elser->
l->
next=p1;
r=l;
}
if(p1==NULL)r->
returnh;
structpolynode*mul(structpolynode*head1,structpolynode*head2)
structpolynode*p,*p1,*p2,*r,*t,*head;
head=NULL;
if(head1==NULL||head2==NULL)returnhead;
for(p2=head2;
=NULL;
p2=p2->
next)
for(p1=head1;
p1!
p1=p1->
{
p=(structpolynode*)malloc(sizeof(structpolynode));
p->
c=p1->
c*p2->
e=p1->
e+p2->
if(p1==head1)t=p;
next=p;
r=p;
head=add(head,t);
//output(head);
}
Linklistcreatpolyn(LinklistL,intn){//构造新的一元多项式
inti;
Linklisthead,p;
head=(Linklist)malloc(sizeof(Node));
//创建头结点
head->
L=head;
for(i=n;
i>
0;
i--){
p=(Linklist)malloc(sizeof(Node));
printf("
请输入一元多项式的第%d项的系数和指数:
i);
scanf("
%f%d"
(*p).coef,&
(*p).expn);
//输入系数和指数
p->
next=L->
L->
return(head);
//返回头结点
}//creatpolyn
intcmp(inta,intb){//比较a,b的大小
if(a>
b)
return
(1);
else
if(a==b)
return(0);
else
return(-1);
voidprint(LinklistL){//显示一元多项式
Linklistp;
p=L->
while(p->
next!
=NULL){
%f*x^%d+"
(*p).coef,(*p).expn);
//输出多项式的项
p=p->
%f*x^%d\n"
//输出多项式最后一项
LinklistAddpolyn(Linklistpa,Linklistpb){//多项式相加
inta,b;
floatsum;
Linklistha,hb,qa,qb,p1,p2;
ha=pa;
//ha,hb分别指向pa和pb中当前结点
hb=pb;
qa=ha->
//qa和qb分别指向pa和pb中当前结点
qb=hb->
while(qa!
qb!
=NULL){//qa和qb均非空
a=(*qa).expn;
b=(*qb).expn;
switch(cmp(a,b)){//比较指数
case-1:
{//a<
b
ha->
next=qa;
ha=ha->
qa=qa->
break;
case0:
{//a=b
sum=(*qa).coef+(*qb).coef;
if(sum!
=0.0){
(*qa).coef=sum;
ha->
}
else{
p1=qa;
free(p1);
p2=qb;
qb=qb->
free(p2);
break;
case1:
{//a>
next=qb;
ha=ha->
}//switch
}//while
=NULL){//如果qb不为空
ha->
qa=qa->
while(qb!
qb=qb->
return(pa);
}//Addpolyn
voidmain()
intm,n,i;
chart;
Linklistpa,pb;
pa=(Linklist)malloc(sizeof(Node));
pb=(Linklist)malloc(sizeof(Node));
请输入一元多项式pa的项数:
//构造一元多项式pa
scanf("
m);
pa=creatpolyn(pa,m);
请输入一元多项式pb的项数:
//构造一元多项式pb
n);
pb=creatpolyn(pb,n);
printf("
多项式pa为:
//输出pa
print(pa);
多项式pb为:
//输出pb
print(pb);
多项式pa与pb的和为:
//输出多项式pa和pb的和
print(Addpolyn(pa,pb));
structpolynode*head1=NULL,*head2=NULL,*head=NULL;
logn:
请输入需要相乘的多项式个数,至少2个:
%d%c"
\n输入一个多项式的方式为:
系数,指数;
例如:
3,4;
5,6;
7,8;
as0,0;
结束\n"
\n请输入第1个多项式的系数和指数:
head1=creat();
\n第1个多项式的为:
output(head1);
for(i=1;
i<
n;
i++)
\n请输入第%d个多项式的系数和指数:
i+1);
head2=creat();
\n第%d个多项式为:
output(head2);
if(i==1)head=mul(head1,head2);
elsehead=mul(head,head2);
}
\n多项式相乘结果为:
output(head);
\n是否继续(y/n)?
%*c%c"
t);
if(t=='
y'
)gotologn;
七、程序运行界面图
1,加法运行输入项数
2,输入每一项的系数及指数
3,算出加法运算结果及乘法运行输入项数
4,入乘法运算每一项的系数及指数
5,算出乘法运算的结果
八、心得体会
通过这次的课程设计,是我又温习了数组、循环结构以及嵌套以及分块模块等C语言知识。
一元多项式是一个复杂的运算程序,但是当我设计成功后,我心花怒放。
在课程设计期间,最大的收获是一心一意全心投入去做一件事。
能力很重要,但有时候合作带来的效果也很重要!
大家在一起讨论、研究,一起解决问题,也许有时候一个程序看不懂,但大家在一起讨论,一起去解决,最终还是能够解决的。
对于很多嵌套结构还不是很熟悉,以及指针的运用不是掌握的太好。
所以还是需要进一步的熟悉运用。
东华理工大学长江学院
课程设计评分表
学生姓名:
班级:
学号:
课程设计题目:
一元多项式的加法、乘法运算的实现
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
理论依据充分,数据准确,公式推导正确
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
能体现创造性思维,或有独特见解
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;
分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
有一定篇幅,字符数不少于5000
总分
100
指导教师评语:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 多项式 加法 乘法 运算 实现