数据结构课程设计一元多项式.docx
- 文档编号:17788794
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:20
- 大小:475.39KB
数据结构课程设计一元多项式.docx
《数据结构课程设计一元多项式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元多项式.docx(20页珍藏版)》请在冰点文库上搜索。
数据结构课程设计一元多项式
湖南工学院课程设计
一元多项式计算
班级:
信息本1002
学号:
09
姓名:
班级:
信息本1002
学号:
26
姓名:
班级:
信息本1002
学号:
34
姓名:
班级:
信息本1002
学号:
41
姓名:
一、课题任务
功能:
1).能够按照指数降序排列建立并输出多项式;
2).能够完成两个多项式的相加,并将结果输出;
3).能根据输入的多项式及变量的值,能进行计算。
并输出计算结果。
4).能对多个输入的表达式按照指数大小排序输出。
二、概要设计
三、详细设计
一元多项式定义系数和指数结构如下:
coef
expn
next
coef域--存放结点的系数值
expn域--存放结点的指数值
next域--存放结点的直接后继的地址(位置)的指针域(链域)
一元多项式单链表存储结构:
typedefstructterm
{floatcoef;
006.
2)恰汗合孜尔《C语言程序设计》中国铁道出版社2009.
3)杨永斌《数据结构(理论与实践).》天津科学技术出版社
4)XX资料
八、附录
#include<>
#include<>
#include<>
#include
#include<>
#definenull0
#defineW10
usingnamespacestd;
typedefstructterm
{.
if(p->expn
{f=p->coef;i=p->expn;
p->coef=q->coef;p->expn=q->expn;
q->coef=f;q->expn=i;
fini=1;
}
}
for(g=h,p=g->next;p;)//比较将指数相同的数进行合并
if(g->expn==p->expn)
{g->coef+=p->coef;
g->next=p->next;//合并后跳过一个元素,并删除该结点
q=p;
p=p->next;
free(q);
}
else
if(g->next)
{g=g->next;
p=p->next;
}
returnh;
}
voidPrintfPoly(term*P)
{//输出按指数从大到小排列后的一元多次式
term*q=P;
if(!
q)
{
putchar('0');
return;
}
if(q->coef!
=1)
{printf("%g",q->coef);
//%g用来输出实数,它根据数值的大小,自动选f格式或e格式,且不输出无意义的0
if(q->expn==1)putchar('X');//若指数值大小为1,则指数省略
elseif(q->expn)printf("X^%d",q->expn);
}
elseif(!
q->expn)putchar('1');
elseif(q->expn==1)putchar('X');
elseprintf("X^%d",q->expn);
q=q->next;
while(q)
{
if(q->coef>=0)putchar('+');
if(q->coef!
=1)
{
printf("%g",q->coef);
if(q->expn==1)putchar('X');
elseif(q->expn)printf("X^%d",q->expn);
}
elseif(!
q->expn)putchar('1');
elseif(q->expn==1)putchar('X');
elseprintf("X^%d",q->expn);
q=q->next;
}
}
intCompare(term*a,term*b)
{
if(a->expn
if(a->expn>b->expn)return1;
return0;
}
floatC(term*c,floatx)//计算输入变量的多项式的值
{floatsum=0,a;
intb;
term*q=c;
for(;q;q=q->next)
{a=q->coef;b=q->expn;
sum+=a*pow(x,b);
}
returnsum;
}
term*APolyn(term*Pa,term*Pb)
{//多项式加法:
Pa=Pa+Pb,利用两个多项式的结点构成"和多项式"。
term*h,*qa=Pa,*qb=Pb,*p,*q;
floatsum;
h=p=(term*)malloc(sizeof(term));
p->next=NULL;
while(qa&&qb)
{//Pa和Pb均非空
switch(Compare(qa,qb))
{
case-1:
//多项式PA中当前结点的指数值小
p->next=qb;
p=qb;
qb=qb->next;
break;
case0:
//两者的指数值相等
sum=qa->coef+qb->coef;
if(sum!
=
{//修改多项式PA中当前结点的系数值
p->next=qa;
qa->coef=sum;
p=qa;
qa=qa->next;
}
else
{//删除多项式PA中当前结点
q=qa;
qa=qa->next;
free(q);
}
q=qb;
qb=qb->next;
free(q);
break;
case1:
//多项式PB中当前结点的指数值小
p->next=qa;
p=qa;
qa=qa->next;
break;
}//结束switch
}//结束while
if(Pa)p->next=qa;//链接Pa中剩余结点
if(Pb)p->next=qb;//链接Pb中剩余结点
q=h;
h=h->next;
free(q);
returnh;
}//APolyn
term*A(term*Pa,term*Pb)
{intn;
printf("请输入第二个一元多项式的项数:
");
scanf("%d",&n);
Pb=CreatPolyn(Pb,n);
Pb=selsort(Pb);
cout<<"两个多项式相加结果为:
";
PrintfPoly(Pa);
if(Pb&&Pb->coef>0)printf("+");
PrintfPoly(Pb);
Pa=APolyn(Pa,Pb);
printf("=");
Pa=selsort(Pa);
PrintfPoly(Pa);
returnPa;
}
term*BPolyn(term*Pa,term*Pb)
{//多项式减法:
Pa=Pa-Pb,利用两个多项式的结点构成"差多项式"。
term*p=Pb;
while(p)
{p->coef*=-1;
p=p->next;
}
returnAPolyn(Pa,Pb);
}//BPolyn
term*B(term*Pa,term*Pb)
{intn;
printf("请输入第二个一元多项式的项数:
");
scanf("%d",&n);
Pb=CreatPolyn(Pb,n);
Pb=selsort(Pb);
cout<<"两个多项式相减结果为:
";
PrintfPoly(Pa);
printf("-");
putchar('(');PrintfPoly(Pb);putchar(')');
Pa=BPolyn(Pa,Pb);
printf("=");
Pa=selsort(Pa);
PrintfPoly(Pa);
returnPa;
}
voidmain()
{term*M,*N;
term*q;
inti,j,n;
floatx,y;
term*G[W];
intk;
f:
puts("\t================一元多项式计算系统:
===================");
printf("\n\t\t\t1:
按照指数降序排列输出多项式\n\t\t\t2:
一元多项式的加法运算");
printf("\n\t\t\t3:
一元多项式的减法运算\n\t\t\t4:
输入的多项式及变量的值计算结果");
puts("\n\t\t\t5:
对多个输入的表达式按照指数从大到小排序输出\n\t\t\t0:
退出系统");
puts("\t========================================================");
printf("\n请选择您要进行的操作:
");
cin>>i;
switch(i)
{
case1:
printf("\n\t\t\t按照指数降序排列输出多项式:
\n请输入该一元多项式的项数:
");
scanf("%d",&n);
M=CreatPolyn(M,n);
M=selsort(M);
cout<<"您输入的多项式按指数降序排列为:
";
PrintfPoly(M);
cout< gotof; case2: printf("\n\t\t\t一元多项式加法计算: \n请输入第一个一元多项式的项数: "); scanf("%d",&n); M=CreatPolyn(M,n); M=selsort(M); M=A(M,N); cout< gotof; case3: printf("\n\t\t\t一元多项式减法计算: \n请输入第一个一元多项式的项数: "); scanf("%d",&n); M=CreatPolyn(M,n); M=selsort(M); M=B(M,N); cout< gotof; case4: printf("\n\t\t\t根据输入的多项式及变量的值进行计算: \n请输入您将要计算的一元多项式的项数: "); scanf("%d",&n); M=CreatPolyn(M,n); M=selsort(M); cout<<"您输入的一元多项式按指数降序排列为: "; PrintfPoly(M); cout<<"\n请输入变量x的值: "; scanf("%f",&x); y=C(M,x); printf("多项式的值为: %f\n",y); cout< gotof; case5: printf("\n\t\t\t对多个输入的表达式按照指数大小排序输出: \n请输入需要排序的一元多项式的个数: "); scanf("%d",&k); for(i=0;i {printf("请输入第%d个一元多项式的项数: ",i+1); scanf("%d",&n); M=CreatPolyn(M,n); M=selsort(M); G[i]=M;//用数组记住每一个多项式 } for(j=0;j for(i=1;i if(G[i-1]->expn {q=G[i];G[i]=G[i-1];G[i-1]=q;} printf("输入的表达式按照指数从大到小排序输出结果为: \n"); for(i=0;i {printf("\t%d: ",i+1); PrintfPoly(G[i]); cout< } cout< gotof; case0: break; printf("=================谢谢您使用该系统! ==================\n"); default: puts("您输入的数据有误,请重新输入! "); gotof; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 多项式
![提示](https://static.bingdoc.com/images/bang_tan.gif)