一元稀疏多项式计算器实验(报告+程序)(共10页).doc
《一元稀疏多项式计算器实验(报告+程序)(共10页).doc》由会员分享,可在线阅读,更多相关《一元稀疏多项式计算器实验(报告+程序)(共10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上一元稀疏多项式计数器预习报告姓名:刘茂 学号0062一、实验要求(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列;(3)多项式a和b相加,建立多项式a+b;(4)多项式a和b相减,建立多项式a-b。(5)多项式求值;(6)多项式求导;(7)求多项式的乘积。二、测试数据:1、(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7);2、(6x-3-x+4.4x2-1.2x9+1.2x9)-(-6x-3+5
2、.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x);3、(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5);4、(x+x3)+(-x-x3)=0;5、(x+x100)+(x100+x200)=(x+2x100+x200);6、(x+x2+x3)+0=x+x2+x3.7、互换上述测试数据中的前后两个多项式。三、思路分析用带表头结点的单链表存储多项式。本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分
3、别表示两个一元多项式a和b。为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项。 若p-expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 若p-expnq-expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。四、实验程序/头文件#include#include#include/定义多项式的项typedef struct Polynomial float coef; int expn;
4、struct Polynomial *next;*Polyn,Polynomial;void Insert(Polyn p,Polyn h) if(p-coef=0) free(p);/系数为0的话释放结点 else Polyn q1,q2; q1=h;q2=h-next; while(q2&p-expnexpn)/查找插入位置 q1=q2; q2=q2-next; if(q2&p-expn=q2-expn)/将指数相同相合并 q2-coef+=p-coef; free(p); if(!q2-coef)/系数为0的话释放结点 q1-next=q2-next; free(q2); else/指数
5、为新时将结点插入 p-next=q2; q1-next=p;Polyn CreatePolyn(Polyn head,int m)/建立一个头指针为head、项数为m的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); /调用Insert函数插入结点 return head;void DestroyPolyn(Polyn p)/销毁多项式p Polyn q1,q2; q1=p-next; q2=q
6、1-next; while(q1-next) free(q1); q1=q2; q2=q2-next;void PrintPolyn(Polyn P)Polyn q=P-next; int flag=1;/项数计数器 if(!q) /若多项式为空,输出0 putchar(0); printf(n); return; while(q) if(q-coef0&flag!=1) putchar(+); /系数大于0且不是第一项 if(q-coef!=1&q-coef!=-1)/系数非1或-1的普通情况 printf(%g,q-coef); if(q-expn=1) putchar(X); else
7、if(q-expn) printf(X%d,q-expn); else if(q-coef=1) if(!q-expn) putchar(1); else if(q-expn=1) putchar(X); else printf(X%d,q-expn); if(q-coef=-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);int compare(Polyn a,Polyn b) if(a&b) if(!b|a-expnb-
8、expn) return 1; else if(!a|a-expnexpn) return -1; else return 0; else if(!a&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空Polyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式a+b,返回其头指针 Polyn qa=pa-next; Polyn qb=pb-next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc-next=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 稀疏 多项式 计算器 实验 报告 程序 10
限制150内