收藏 分享(赏)

一元多项式相加完整实验报告.doc

上传人:精品资料 文档编号:10512315 上传时间:2019-11-24 格式:DOC 页数:10 大小:124KB
下载 相关 举报
一元多项式相加完整实验报告.doc_第1页
第1页 / 共10页
一元多项式相加完整实验报告.doc_第2页
第2页 / 共10页
一元多项式相加完整实验报告.doc_第3页
第3页 / 共10页
一元多项式相加完整实验报告.doc_第4页
第4页 / 共10页
一元多项式相加完整实验报告.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、 一元多项式相加实验报告一元多项式的相加一 实验内容根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题-两个多项式相加二 需求分析1 掌握线性结构的逻辑特性和物理特性。2 建立一元多项式。3 将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。4 能够完成两个多项式的加减运算,并输出结果。三 概要设计1 本程序所用到的抽象数据类型:typedef OrderedLinkList polynomial; / 用带表头结点的有序链表表示多项式结点的数据元素类型定义为:typedef struct / 项的表示 float coef; /

2、系数 int expn; / 指数 term, ElemType;Void AddPolyn(polynomail /系数int expn; /指数struct NODE *next; NODE;NODE *Creat(int n);void print(NODE *head);NODE *AddPolyn(NODE *head1, NODE *head2);NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare(int a, int b);main()NODE *head1,

3、*head2, *head3;int n1, n2;printf(“请输入你需要的多项数的数目 n1 : “);scanf(“%d“, head1 = Creat(n1);printf(“第一个多项式的显示 : n“);print(head1);printf(“n 请输入你需要的多项数的数目 n2 : “);scanf(“%d“, head2 = Creat(n2);printf(“n 第二个多项式的显示 : n“);print(head2);head3 = AddPolyn(head1, head2);printf(“n 合并后的多项式的显示 : n“);print(head3);print

4、f(“n“);/*创建链表*/NODE *Creat(int n)NODE *current, *previous, *head;int i;head = (NODE *)malloc(sizeof(NODE); /*创建头结点 */previous = head;for(i = 0; i coef, previous-next = current;previous = current; previous-next = NULL;return head;/*一元多项式的想加,总体考虑,可分 qa 的指数比 qb 小,或等于 pb(如果系数相加等于 0 和不等于 0),或大于 pb里面由 Ins

5、ertBefore 和 Delfirst 两个小模块组成一部分*/NODE *AddPolyn(NODE *head1, NODE *head2)NODE *ha, *hb, *qa, *qb;int a, b;float sum;ha = head1; /*ha 和 hb 指向头结点*/hb = head2;qa = ha-next; /*qa 和 qb 指向头结点的下一个结点*/qb = hb-next;while(qa b = qb-expn;switch(compare(a, b) case -1 : /*qa-expn expn*/ha = qa;qa = qa-next;break

6、;case 0 :sum = qa-coef + qb-coef; /*系数的和*/if(sum != 0.0) /*如果不是 0.0*/qa-coef = sum; /*改变系数*/ ha = qa; else free(Delfirst(ha, qa); free(Delfirst(hb, qb);qa = ha-next; qb = hb-next; /*qb 释放后要重新赋值*/break;case 1 : /*如果 qa- expn qb - expn*/ Delfirst(hb, qb);InsertBefore(ha, qb); /*把 qb 插入到 ha 下一个结点之前 */q

7、b = hb-next;ha = ha-next;break;if(qb)ha-next = qb; /*插入剩余的 pb*/free(head2);return head1;/*比较*/int compare(int a, int b)if(a b)return 1;elsereturn 0;/*删除结点 q*/NODE *Delfirst(NODE *p1, NODE *q)p1 - next = q - next;return (q);/*插入结点,引入结点 p,可以让 p 插入到 p2 和 p1 之间*/void InsertBefore(NODE *p1, NODE *p2)NODE

8、 *p;p = p1-next;p1-next = p2;p2-next = p;/*打印,为了美观程序分开打印*/void print(NODE *head)NODE *current;current = head-next;while(current-next != NULL)printf(“%0.f * x%d + “, current-coef, current-expn);current = current - next;printf(“%0.f * x%d“, current-coef, current-expn);六 调试分析如图第八行,如果直接一次性输完两项的次数和项数,还是会

9、显示“请输入系数和指数”纠正办法:输入时输完一项的系数和指数,按回车后继续输入。七 测试结果输入一个二次三项式 X2+3X+1,一个三次四项式 2X3+4X2+X+1输出如图:八 心得体会首先,我的 C+学的不是很好,因此做这样一个课程设计感觉有点吃力,还好我不断的看书,翻阅资料,询问同学,上网搜索,总算像模像样地把这个程序编的能运行了。功夫不负有心人。其次,这次编程是我更多地理解掌握了线性链表的逻辑机构和物理特性。对大一时学过的知识有了很好的巩固。困难还是很多的,比如初次运行的时候,好几十个错误,当时真的感到非常崩溃。幸亏我没有放弃,才最终完成。长舒一口气。最后,通过这次编程,不仅仅考察了我对知识的掌握,更重要的是锻炼了我的思维能力和耐心,在最困难的时候没有放弃,今天才能如此舒心。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报