大家看看这个多项式有什么需要改进的?
前段时间老师布置了个关于多项式的相加的问题,刚开始没点头绪,曾在此论坛问了下思路,通过看书终于写出来了,自认为挺好,可是给老师看了只叫我运行下试试,然后说了些注意的地方,就这样O了,我觉得挺无语的,至少是自己写出来的,也得看看我的啊(自恋下,呵呵),隔了这么久突然就想让论坛大神看看还有什么需要改进注意的地方?我没写过什么程序,不懂规则,呵呵。
程序代码:#include<stdio.h>
#include<stdlib.h>
typedef struct term
{
int Coe;
int Epn;
struct term *pnode;
}pol,*ppol;
/*.....................建立链表...............................................*/
ppol create(ppol phead) //注意类型是数据结构型
{
ppol ptemp,plast;
ptemp=(ppol)malloc(sizeof(pol));
scanf("%d%d",&ptemp->Coe,&ptemp->Epn);
phead=plast=ptemp; //保存头部phead
while(ptemp=(ppol)malloc(sizeof(pol)))
{
if(scanf("%d%d",&ptemp->Coe,&ptemp->Epn)!=2) break;
plast->pnode=ptemp; //让表尾节点链接新建节点
plast=ptemp; //表尾部指向新建的节点
}
plast->pnode=NULL;
free(ptemp);
return phead;
}
/*..........................冒泡排序次数相同相加系数...................................*/
void sort(ppol phead)
{
ppol ptemp,prv,plink;
int e,c;
for (prv=phead;prv;prv=prv->pnode)
for (plink=prv,ptemp=prv->pnode;ptemp;plink=ptemp,ptemp=ptemp->pnode)
{
if(ptemp->Epn>prv->Epn)
{
e=prv->Epn;
prv->Epn=ptemp->Epn;
ptemp->Epn=e;
c=prv->Coe;
prv->Coe=ptemp->Coe;
ptemp->Coe=c;
}
if(ptemp->Epn==prv->Epn)
{
prv->Coe+=ptemp->Coe;
plink->pnode=ptemp->pnode;
ptemp=plink;
}
}
}
/*.........................打印链表多项式......................................*/
void show(ppol p)
{
while(p)
{
{
if(p->Epn==1)
{
if(p->Coe==1)
printf("x");
else if(p->Coe==-1)
printf("-x");
else
printf("%dx",p->Coe);
}
else if(p->Epn==0)
printf("%d",p->Coe);
else
{
if(p->Coe==1)
printf("x^%d",p->Epn);
else if(p->Coe==-1)
printf("-x^%d",p->Epn);
else
printf("%dx^%d",p->Coe,p->Epn);
}}
if(p->pnode)
if(p->pnode->Coe>0)
putchar('+');
p=p->pnode;
}
putchar(10);
}
/*.......................两个多项式相接......................................*/
ppol linkadd(ppol pA,ppol pB)
{
ppol pAlast=pA;
while(pAlast->pnode) pAlast=pAlast->pnode;
pAlast->pnode=pB;
return pA;
}
int main()
{
ppol pA,pB;
printf("请输入多项式p(A),形式为(系数 幂),并以标点或字母结束输入:\n");
pA=create(pA);
sort(pA);
printf("多项式p(A)为:\n");
show(pA);
getchar();
printf("请输入多项式p(B),形式为(系数 幂),并以标点或字母结束输入:\n");
pB=create(pB);
sort(pB);
printf("多项式p(B)为:\n");
show(pB);
pA=linkadd(pA,pB);
sort(pA);
printf("多项式p(B)、p(B)的和为:\n");
show(pA);
system("pause");
return 0;
}









