文档详情

一元多项式的表示与相加运算.doc

发布:2017-12-15约3.51千字共7页下载文档
文本预览下载声明
西 安 二. 实验内容 1、实现一元多项式的相加运算 三.方案设计 为实现多项式的相加运算 1)用两个单链表分别表示两个一元多项式。 2)多项式向相加的运算规则 指数相同项的对应系数相加,若和不为0,则构成“和多项式”中的一项。 指数不相同的项仍按升幂顺序复抄到“和多项式”中。 以单链表polya和polyb分别表示两个一元多项式A和B,A+B的求和运算,就等同于单链表的插入问题,因此“和多项式”中的结点无需另生成。 为实现处理,设p、q分别指向单链表polya和poly b的当前项,比较p、q结点的指数项,由此得到以下运算规则: 若p-expq-exp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-exp=q-exp,则将两个结点中的系数相加,当和不为0是修改结点p的系数域,释放q结点;若和尾0,则和多项式中无此项,从A中删去p结点,同时释放p和q结点。 若p-expq-exp,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四.测试数据及运行结果 截图如下: 五.总结 实验过程中遇到的问题及解决办法: 问题:写完程序后,出现错误。 解决方法:查看程序提示,双击左键,寻找错误点。找到错误,并进行修改。 不能熟练运用链栈及指针 解决办法:查阅书籍,提高自己对链表及指针的认识,掌握使用链表及指针的技巧 对设计及调试过程的心得体会: 编写的程序要按照正当的程序要求,不能遵循人的思维。 编写程序时注意对链栈及指针的使用,注意各个出错的点及逻辑性错误。 提高自己对链表与指针的认识。 六.附录:源代码(电子版) 实现代码如下: (1)建立多项式 Polynomial * Create(void) { Polynomial *head, *rear, *s; int c, e; head = (Polynomial *)malloc(LEN); //建立多项式头结点 rear = head; //rear始终指向单链表的尾,便于尾插法建表 printf(系数(当系数输入为0时,多项式结束):); scanf(%d,c); printf(\n); printf(指数:); scanf(%d,e); printf(\n); while(c!=0) { s = (Polynomial *)malloc(LEN); s-cofe = c; s-expn = e; rear-next = s; rear = s; printf(系数(当系数输入为零时,多项式结束):); scanf(%d,c); printf(\n); printf(指数:); scanf(%d,e); printf(\n); } rear-next = NULL; return (head); } 两多项式相加 Polynomial* AddPolyn(Polynomial* pa,Polynomial* pb) { Polynomial *qa = pa-next; Polynomial *qb = pb-next; Polynomial *headc, *pc, *qc; pc=(Polynomial *)malloc(sizeof (Polynomial)); pc-next = NULL; headc = pc; while(qa != NULLqb != NULL) { qc = (Polynomial *)malloc(sizeof(Polynomial)); if(qa-expn qb-expn) { qc-cofe = qa-cofe; qc-expn = qa-expn; qa = qa-next; } else if(qa-expn == qb-expn) { qc-cofe = qa-cofe+qb-cofe; qc-expn = qa-expn; qa = qa-next; qb = qb-next; } else { qc-cofe = qb-cofe; qc-expn = qb-expn; qb = qb-next; } if(qc-cofe != 0) { qc-next = pc-next; pc-next = qc; pc = qc; } else free(qc); } wh
显示全部
相似文档