大家看看这个多项式有什么需要改进的?
前段时间老师布置了个关于多项式的相加的问题,刚开始没点头绪,曾在此论坛问了下思路,通过看书终于写出来了,自认为挺好,可是给老师看了只叫我运行下试试,然后说了些注意的地方,就这样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; }