文档详情

一元稀疏多项式计算器实验(报告+程序).doc

发布:2018-10-14约8.84千字共10页下载文档
文本预览下载声明
专业技术资料分享 WORD文档 下载可编辑 一元稀疏多项式计数器预习报告 姓名:刘茂 学号222012315220062 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7); 2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )=(-7.8x^15-1.2x^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。 三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。 采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项。 ① 若p-expnq-expn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ② 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③ 若p-expnq-expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #includestdio.h #includemalloc.h #includestdlib.h //定义多项式的项 typedef struct Polynomial{ float coef; int expn; 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(q2p-expnq2-expn) {//查找插入位置 q1=q2; q2=q2-next; } if(q2p-expn==q2-expn) {//将指数相同相合并 q2-coef+=p-coef; free(p); if(!q2-coef) {//系数为0的话释放结点 q1-next=q2-next; free(q2); } } else {//指数为新时将结点插入 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;im;i++) { p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据 printf(请输入第%d项的系数与指数:,i+1); scanf(%f %d,p-coef,p-expn); Insert(p,head); //调用I
显示全部
相似文档