
实验一-一元多项式运算.docx
8页实验一-一元多项式运算实验一-一元多项式运算实验一一元多项式的运算1.问题定义及需求分析1.1课题目的和任务问题描述:设计一个一元多项式简单计算器实验要求:1)采用顺序表或链表等数据结构2)输入并建立多项式3)输出运算结果的多项式1.2数据形式输入数据形式:通过键盘输入输入值的范围:多项式的项数和指数的输入数据为int型,输入值范围为-32768至32767;多项式系数的输入值范围为float型,范围为1.2e-38至3.4e+38输出数据形式:输出到显示器1.3程序功能实现两个一元多项式之间的加法、减法和乘法运算1.4测试数据4 //第一个多项式的项数1 4 //第一项的系数和指数3 3 //第二项的系数和指数-2 2 //第三项的系数和指数6 0 //第四项的系数和指数5 //第二个多项式的项数-3 5 //第一项的系数和指数2 2 //第二项的系数和指数-6 0 //第三项的系数和指数-1 -1 //第四项的系数和指数1.2 -2 //第五项的系数和指数2.概要设计2.1抽象数据类型需要定义一个多项式类型的数据类型,里面包含一个int型的指数和一个float型的系数,再定义一个多项式节点,里面包含一个多项式类型的数据,和一个指向下一个节点的指针。
通过对多项式节点的操作,实现对输入数据的运算2.2开始输入第一个多项式的项数创建多项式CreatPolyn()输入第二个多项式的项数创建多项式CreatPolyn()输出第一个多项式PrintPolyn()选择操作Menu()加法运算AddPolyn()减法运算SubtractPolyn()乘法运算MultiplyPolyn()输出运算后的多项式PrintPolyn()结束输出第一个多项式PrintPolyn()1加法运算2减法运算3乘法运算3.详细设计3.1存储结构实现多项式结构体:typedef struct{float coef;int expn;}Poly;typedef struct LNode{Poly data;struct LNode* next;}LNode,*LinkList;多项式类型的定义:typedef LinkList polynomial;3.2负责模块的伪码算法(1)int MultiplyPolyn(polynomial& a,polynomial& b){//多项式相乘 if(a,b中均没有项){return 0;}c=(polynomial)malloc(sizeof(LNode));//开辟一个c储存相乘结果 c->next=NULL;ha=a->next;//ha为a中的项hb=b->next;//hb为b中的项for(;hb不空;下一项){//将a中第一项与b中所有项相乘ha的系数*hb的系数;ha的指数*hb的指数;开辟一个新节点E,将数据存入,并把E连到c后}Sort(c);//对c中多项式排序ha=ha->next;//ha指向下一个项while(ha!=NULL){//将a中第二项与b中所有项相乘,存入d,然后将c和d相加得到新的c,再以此对a中其余各项做相同操作,最终得到乘法运算后的chb=b->next;//hb为b的第一项d=(polynomial)malloc(sizeof(LNode));//开辟一个d储存相乘结果d->next=NULL;for(;hb不空;下一项){//将a中第一项与b中所有项相乘 ha的系数*hb的系数;ha的指数*hb的指数;开辟一个新节点E,将数据存入,并把E连到d后;}Sort(d);//对d中多项式排序 ha=ha->next;//ha 指向下一项AddPolyn(c,d);//将c ,d 相加得到新的c}t=a;a=c;//a 指向运算结果DestroyPolyn(b);//销毁初始的两个多项式DestroyPolyn(t);} (2)void DestroyPolyn(polynomial& L){//销毁多项式while(L!=NULL){p=L;L=L->next;//指向后一项free(p);}}(3)void Sort(polynomial& L){//对多项式的指数进行冒泡排序 for(多项式长度){for(j=L;j->next->next!=NULL;j=j->next){if(j->next 指数 q=j->next->next;p->next=q->next;q->next=p;j->next=q;}}}}4. 调试分析4.1问题分析与解决方法(1)多项式相乘对于多项式相乘,考虑到两个一元多项式的相乘,可以利用两个一元多项式相加的算法来实现,因为乘法运算可以分解为一系列的加法运算,所以只需循环执行加法运算,就可以完成多项式的相乘。
例如A (x )和B (x )为一元多项式,则有:()()()()()11121n ie e e n ne i i M x A x B x A x b x b x b x b A x x ==⨯⎡⎤=⨯+++⎣⎦=∑L其中,每一项都是一个一元多项式。












