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