一元多项式的表示与相加运算_第1页
一元多项式的表示与相加运算_第2页
一元多项式的表示与相加运算_第3页
一元多项式的表示与相加运算_第4页
一元多项式的表示与相加运算_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一元多项式的表示与相加运算一元多项式的表示与相加运算一元多项式的表示与相加运算西安邮电大学(计算机学院)课内实验报告实验名称:一元多项式的表示与相加运算专业名称:通信工程班级:通工1312学生姓名:周鹏飞学号(8位):03131044指导教师:陈琳实验日期:实验目的及实验环境1、实现单链表的建立2、实现一元多项式的表示3、实现一元多项式的相加运算4、VC++6。0运行环境二。实验内容1、实现一元多项式的相加运算三.方案设计为实现多项式的相加运算1)用两个单链表分别表示两个一元多项式.2)多项式向相加的运算规则eq\o\ac(○,1)指数相同项的对应系数相加,若和不为0,则构成“和多项式”中的一项。eq\o\ac(○,2)指数不相同的项仍按升幂顺序复抄到“和多项式"中.以单链表polya和polyb分别表示两个一元多项式A和B,A+B的求和运算,就等同于单链表的插入问题,因此“和多项式”中的结点无需另生成.为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到以下运算规则:eq\o\ac(○,1)若p-〉exp〈q->exp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。eq\o\ac(○,2)若p—>exp=q-〉exp,则将两个结点中的系数相加,当和不为0是修改结点p的系数域,释放q结点;若和尾0,则和多项式中无此项,从A中删去p结点,同时释放p和q结点。eq\o\ac(○,3)若p—>exp>q—>exp,则结点q所指的结点应是“和多项式"中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。四.测试数据及运行结果截图如下:五.总结实验过程中遇到的问题及解决办法:问题:写完程序后,出现错误.解决方法:查看程序提示,双击左键,寻找错误点。找到错误,并进行修改。 不能熟练运用链栈及指针解决办法:查阅书籍,提高自己对链表及指针的认识,掌握使用链表及指针的技巧对设计及调试过程的心得体会:编写的程序要按照正当的程序要求,不能遵循人的思维。编写程序时注意对链栈及指针的使用,注意各个出错的点及逻辑性错误。提高自己对链表与指针的认识.六.附录:源代码(电子版)实现代码如下:(1)建立多项式Polynomial*Create(void){ Polynomial*head,*rear,*s; intc,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!=NULL&&qb!=NULL) { qc=(Polynomial*)malloc(sizeof(Polynomial)); if(qa—>expn〈qb->expn) { qc—>cofe=qa—〉cofe; qc—〉expn=qa->expn; qa=qa-〉next; } elseif(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); } while(qa!=NULL) { qc=(Polynomial*)malloc(sizeof(Polynomial)); qc—>cofe=qa—>cofe; qc—〉expn=qa->expn; qa=qa—>next; qc-〉next=pc—>next; pc-〉next=qc; pc=qc; } while(qb!=NULL) { qc=(Polynomial*)malloc(sizeof(Polynomial)); qc->cofe=qb—>cofe; qc—〉expn=qb—〉expn; qb=qb—>next; qc->next=pc->next; pc—>next=qc; pc=qc; } return(headc);}多项式的输出voidPrintPolyn(Polynomial*p){ Polynomial*q; intflag=1; q=p->next; if(!q) { putchar('0'); printf("\n"); return; } while(q) { if(q—>cofe〉0&&flag!=1) putchar(’+'); if(q—〉cofe!=1&&q—〉cofe!=—1) { printf(”%d”,q—>cofe); if(q-〉expn==1) putchar('X'); elseif(q—〉expn) printf("X^%d”,q—>expn); } else { if(!q—>expn) putchar(’1'); elseif(q—>expn==1) putchar('X’); else printf("X^%d",q—>expn); } if(q->cofe==—1) { if(!q->expn) printf("-1”); elseif(q->expn==1) printf("-X”); elseprintf("—X^%d”,q-〉expn); } q=q—〉next; flag++; } printf(”\n”);}主函数voidmain(void){ Polynomial*polya,*polyb,*q; printf(”\t\t\t\t欢迎使用\n"); printf(”\n请输入第一个多项式:\n\n”); polya=Create();/*调用建立链表函数,创建多项式A*/ PrintPolyn(polya); printf("\n请输入第二个多项式:\n\n”)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论