《一元多项式的表示与相加运算.doc》由会员分享,可在线阅读,更多相关《一元多项式的表示与相加运算.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一元多项式的表示与相加运算 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称: 一元多项式的表示与相加运算 专业名称: 通信工程班 级: 通工1312 学生姓名: 周鹏飞学号(8位): 03131044指导教师: 陈琳实验日期: 一. 实验目的及实验环境1、实现单链表的建立2、实现一元多项式的表示3、实现一元多项式的相加运算4、VC+6。0运行环境二。 实验内容1、实现一元多项式的相加运算三方案设计为实现多项式的相加运算1)用两个单链表分别表示两个一元多项式.2)多项式向相加的运算规则 指数相同项的对应系数相加,若和不为0,则构成“和多项式”中的一项。 指数不相同的项仍按升幂顺序复抄
2、到“和多项式中. 以单链表polya和polyb分别表示两个一元多项式A和B,A+B的求和运算,就等同于单链表的插入问题,因此“和多项式”中的结点无需另生成. 为实现处理,设p、q分别指向单链表polya和poly b的当前项,比较p、q结点的指数项,由此得到以下运算规则: 若p-expq-exp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若pexp=q-exp,则将两个结点中的系数相加,当和不为0是修改结点p的系数域,释放q结点;若和尾0,则和多项式中无此项,从A中删去p结点,同时释放p和q结点。若pexpqexp,则结点q所指的结点应是“和多项式中的一项,将结点q插入在结
3、点p之前,且令指针q在原来的链表上后移。四测试数据及运行结果截图如下: 五总结实验过程中遇到的问题及解决办法:问题:写完程序后,出现错误.解决方法:查看程序提示,双击左键,寻找错误点。找到错误,并进行修改。 不能熟练运用链栈及指针 解决办法:查阅书籍,提高自己对链表及指针的认识,掌握使用链表及指针的技巧 对设计及调试过程的心得体会:(1) 编写的程序要按照正当的程序要求,不能遵循人的思维。(2) 编写程序时注意对链栈及指针的使用,注意各个出错的点及逻辑性错误。(3) 提高自己对链表与指针的认识. 六附录:源代码(电子版)实现代码如下: (1)建立多项式Polynomial Create(voi
4、d)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);scofe = c;sexpn = e;rearnext = s;rear = s;printf(系数(
5、当系数输入为零时,多项式结束):”);scanf(%d”,&c); printf(”n”);printf(”指数:);scanf(%d,e); printf(”n”); rearnext = NULL;return (head);(2) 两多项式相加Polynomial* AddPolyn(Polynomial* pa,Polynomial pb)Polynomial qa = pa-next;Polynomial *qb = pb-next;Polynomial *headc, pc, qc;pc=(Polynomial )malloc(sizeof (Polynomial));pc-nex
6、t = NULL;headc = pc;while(qa != NULL&qb != NULL)qc = (Polynomial *)malloc(sizeof(Polynomial);if(qaexpn qb-expn)qccofe = qacofe;qcexpn = qa-expn;qa = qa-next;else if(qa-expn = qbexpn)qc-cofe = qa-cofe+qb-cofe;qc-expn = qa-expn;qa = qanext;qb = qb-next;elseqccofe = qb-cofe;qc-expn = qb-expn;qb = qb-ne
7、xt;if(qccofe != 0)qcnext = pc-next;pc-next = qc;pc = qc;elsefree(qc);while(qa != NULL)qc = (Polynomial *)malloc(sizeof (Polynomial);qccofe = qacofe;qcexpn = qa-expn;qa = qanext;qc-next = pcnext;pc-next = qc;pc = qc;while(qb != NULL)qc = (Polynomial )malloc(sizeof (Polynomial);qc-cofe = qbcofe;qcexpn
8、 = qbexpn;qb = qbnext;qc-next = pc-next;pcnext = qc;pc = qc;return (headc); (3) 多项式的输出void PrintPolyn(Polynomial p)Polynomial* q;int flag = 1;q = p-next;if(!q)putchar(0);printf(n);return;while(q)if(qcofe0&flag!=1)putchar(+);if(qcofe!=1qcofe!=1)printf(”%d”,qcofe);if(q-expn=1)putchar(X);else if(qexpn)
9、printf(X%d”,qexpn);elseif(!qexpn)putchar(1);else if(qexpn=1)putchar(X);else printf(Xd,qexpn);if(q-cofe=1)if(!q-expn)printf(-1”);else if(q-expn=1)printf(-X”);else printf(Xd”,q-expn);q = qnext;flag+;printf(”n”);(4) 主函数void main(void) Polynomial * polya,* polyb, q;printf(”tttt欢迎使用n);printf(”n请输入第一个多项式:nn”);polya=Create(); /*调用建立链表函数,创建多项式A*/PrintPolyn(polya);printf(n请输入第二个多项式:nn”);polyb=Create(); /*同理,创建B/PrintPolyn(polyb);printf(n多项式的和为:nn);q=AddPolyn(polya,polyb); /*调用一元多项式相加函数*/PrintPolyn(q); /调用输出函数,打印结果/printf(n);getch();