一元多项式的加法乘法运算的实现Word格式文档下载.docx

上传人:b****6 文档编号:20189769 上传时间:2023-01-17 格式:DOCX 页数:18 大小:249.64KB
下载 相关 举报
一元多项式的加法乘法运算的实现Word格式文档下载.docx_第1页
第1页 / 共18页
一元多项式的加法乘法运算的实现Word格式文档下载.docx_第2页
第2页 / 共18页
一元多项式的加法乘法运算的实现Word格式文档下载.docx_第3页
第3页 / 共18页
一元多项式的加法乘法运算的实现Word格式文档下载.docx_第4页
第4页 / 共18页
一元多项式的加法乘法运算的实现Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

一元多项式的加法乘法运算的实现Word格式文档下载.docx

《一元多项式的加法乘法运算的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一元多项式的加法乘法运算的实现Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

一元多项式的加法乘法运算的实现Word格式文档下载.docx

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"

//输出多项式最后一项

}//Print

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

指导教师评语:

指导教师签名:

年月日

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

当前位置:首页 > 小学教育 > 语文

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

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