多项式的加法乘法源代码.docx

上传人:b****5 文档编号:6189184 上传时间:2023-01-04 格式:DOCX 页数:16 大小:238.88KB
下载 相关 举报
多项式的加法乘法源代码.docx_第1页
第1页 / 共16页
多项式的加法乘法源代码.docx_第2页
第2页 / 共16页
多项式的加法乘法源代码.docx_第3页
第3页 / 共16页
多项式的加法乘法源代码.docx_第4页
第4页 / 共16页
多项式的加法乘法源代码.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

多项式的加法乘法源代码.docx

《多项式的加法乘法源代码.docx》由会员分享,可在线阅读,更多相关《多项式的加法乘法源代码.docx(16页珍藏版)》请在冰豆网上搜索。

多项式的加法乘法源代码.docx

多项式的加法乘法源代码

1,按要求输入一元多项式的系数

2,计算一元多项式的加法

3,输出计算结果

4,按要求输入一元多项式的系数

5,计算一元多项式的乘法

6,输出计算结果

7,退出

五、程序流程图

1,加法运算

2,乘法运算

 

六、源程序

#include

#include

#include

#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;

p2->e=e;

p2->next=NULL;

if(head==NULL)

{head=p2;continue;}

for(l=r=head;l!

=NULL&&(l->e)next)r=l;

if(l==head&&l->e>e)head=p2;

elser->next=p2;

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":

"",p1->e);

p1=p1->next;

}

printf("\n");

}

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!

=NULL&&p2!

=NULL)

{

if(p1->e==p2->e)

{

p1->c+=p2->c;

p2=p2->next;

r=p1;

p1=p1->next;

continue;

}

if(p1->ee)

{

r=p1;

p1=p1->next;

continue;

}

if(p1->e>p2->e)

{

l=p2;

p2=p2->next;

if(p1==h)h=l;

elser->next=l;

l->next=p1;

r=l;

continue;

}

}

if(p1==NULL)r->next=p2;

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;p2!

=NULL;p2=p2->next)

{

for(p1=head1;p1!

=NULL;p1=p1->next)

{

p=(structpolynode*)malloc(sizeof(structpolynode));

p->c=p1->c*p2->c;

p->e=p1->e+p2->e;

p->next=NULL;

if(p1==head1)t=p;

elser->next=p;

r=p;

}

head=add(head,t);

}

//output(head);

returnhead;

}

 

Linklistcreatpolyn(LinklistL,intn){//构造新的一元多项式

inti;

Linklisthead,p;

head=(Linklist)malloc(sizeof(Node));//创建头结点

head->next=NULL;

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->next;

L->next=p;

}

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->next;

while(p->next!

=NULL){

printf("%f*x^%d+",(*p).coef,(*p).expn);//输出多项式的项

p=p->next;

}

printf("%f*x^%d\n",(*p).coef,(*p).expn);//输出多项式最后一项

}//Print

LinklistAddpolyn(Linklistpa,Linklistpb){//多项式相加

inta,b;

floatsum;

Linklistha,hb,qa,qb,p1,p2;

ha=pa;//ha,hb分别指向pa和pb中当前结点

hb=pb;

qa=ha->next;//qa和qb分别指向pa和pb中当前结点

qb=hb->next;

while(qa!

=NULL&&qb!

=NULL){//qa和qb均非空

a=(*qa).expn;

b=(*qb).expn;

switch(cmp(a,b)){//比较指数

case-1:

{//a

ha->next=qa;

ha=ha->next;

qa=qa->next;break;}

case0:

{//a=b

sum=(*qa).coef+(*qb).coef;

if(sum!

=0.0){

(*qa).coef=sum;

ha->next=qa;

ha=ha->next;

}

else{

p1=qa;

free(p1);

}

p2=qb;

qa=qa->next;

qb=qb->next;

free(p2);

break;}

case1:

{//a>b

ha->next=qb;

ha=ha->next;

qb=qb->next;

break;}

}//switch

}//while

while(qa!

=NULL){//如果qb不为空

ha->next=qa;

ha=ha->next;

qa=qa->next;

}

while(qb!

=NULL){//如果qb不为空

ha->next=qb;

ha=ha->next;

qb=qb->next;

}

return(pa);

}//Addpolyn

 

voidmain()

{

intm,n,i;

chart;

Linklistpa,pb;

pa=(Linklist)malloc(sizeof(Node));

pb=(Linklist)malloc(sizeof(Node));

printf("请输入一元多项式pa的项数:

\n");//构造一元多项式pa

scanf("%d",&m);

pa=creatpolyn(pa,m);

printf("请输入一元多项式pb的项数:

\n");//构造一元多项式pb

scanf("%d",&n);

pb=creatpolyn(pb,n);

printf("多项式pa为:

");//输出pa

print(pa);

printf("多项式pb为:

");//输出pb

print(pb);

printf("多项式pa与pb的和为:

");//输出多项式pa和pb的和

print(Addpolyn(pa,pb));

structpolynode*head1=NULL,*head2=NULL,*head=NULL;

logn:

printf("请输入需要相乘的多项式个数,至少2个:

");

scanf("%d%c",&n);

printf("\n输入一个多项式的方式为:

系数,指数;例如:

3,4;5,6;7,8;as0,0;结束\n");

printf("\n请输入第1个多项式的系数和指数:

");

head1=creat();

printf("\n第1个多项式的为:

");

output(head1);

for(i=1;i

{

printf("\n请输入第%d个多项式的系数和指数:

",i+1);

head2=creat();

printf("\n第%d个多项式为:

",i+1);

output(head2);

if(i==1)head=mul(head1,head2);

elsehead=mul(head,head2);

}

printf("\n多项式相乘结果为:

");

output(head);

printf("\n是否继续(y/n)?

");

scanf("%*c%c",&t);

if(t=='y')gotologn;

}

七、程序运行界面图

1,加法运行输入项数

 

2,输入每一项的系数及指数

3,算出加法运算结果及乘法运行输入项数

4,入乘法运算每一项的系数及指数

5,算出乘法运算的结果

 

八、心得体会

通过这次的课程设计,是我又温习了数组、循环结构以及嵌套以及分块模块等C语言知识。

一元多项式是一个复杂的运算程序,但是当我设计成功后,我心花怒放。

在课程设计期间,最大的收获是一心一意全心投入去做一件事。

能力很重要,但有时候合作带来的效果也很重要!

大家在一起讨论、研究,一起解决问题,也许有时候一个程序看不懂,但大家在一起讨论,一起去解决,最终还是能够解决的。

对于很多嵌套结构还不是很熟悉,以及指针的运用不是掌握的太好。

所以还是需要进一步的熟悉运用。

东华理工大学长江学院

课程设计评分表

学生姓名:

班级:

学号:

课程设计题目:

一元多项式的加法、乘法运算的实现

项目内容

满分

实评

能结合所学课程知识、有一定的能力训练。

符合选题要求

(5人一题)

10

工作量适中,难易度合理

10

能熟练应用所学知识,有一定查阅文献及运用文献资料能力

10

理论依据充分,数据准确,公式推导正确

10

能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等

10

能体现创造性思维,或有独特见解

10

总体设计正确、合理,各项技术指标符合要求。

10

说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰

10

设计说明书栏目齐全、合理,符号统一、编号齐全。

 格式、绘图、表格、插图等规范准确,符合国家标准

10

有一定篇幅,字符数不少于5000

10

总分

100

指导教师评语:

 

指导教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1