一元多项式的相加减
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一一元多项式的表示和相减、相乘
一、实验目的
1.掌握链表的存储方式
2.掌握一元多项式的存储及运算。
二、实验内容
已知一元多项式P(x)和Q(x)已存在,求P(x)-Q(x)和P(x)* Q(x)并输出。
要求:
1.通过键盘随机输入两多项式P(x)和Q(x)的内容。
2.输出结果要有P(x)和Q(x)的以及它们的差P(x)-Q(x)和乘积P(x)* Q(x)。
三、实验步骤:
1.创建一元多项P(x)和Q(x)。
2.求P(x)-Q(x),P(x)* Q(x)。
3.输出P(x)、Q(x)、P(x)-Q(x),P(x)* Q(x)。
四、算法说明
首先,定义一元多项式的存储方式,然后从键盘输入P(x)和Q(x)对应多项式的各对系数和指数,建立相应的一元多项式
五、测试结果参考下图
多项式相减
多项式相乘
六、源代码
1.多项式的相减
# include
# include
typedef struct{
float coef; //系数
int expn; //指数
}ElemType;
typedef struct LNode{ //结点类型
ElemType data;
struct LNode *next;
}*LinkList;
void MakeNode(LinkList &s,ElemType e){ //生成结点
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
}
void InsAfter(LinkList p,LinkList s){
//插入结点
s->next=p->next;
p->next=s;
}
int compare(ElemType e1,ElemType e2){
//比较
if(e1.expn>e2.expn)
return 1;
else if(e1.expn return -1; return 0; } void OrderInsert(LinkList &L,ElemType e,int(*compare)(ElemType,ElemType)){ //有序插入 LinkList p=L,q=p->next,s; while(q){ int n=compare(e,q->data); if(n<0){ MakeNode(s,e); InsAfter(p,s);break; } else if(n==0) { q->data.coef=q->data.coef+e.coef; if(q->data.coef==0){p->next=q->next;free(q);} break; } p=p->next;q=p->next; } if(q==NULL) { MakeNode(s,e); InsAfter(p,s); //最大,放在最后一个位置 } } void InitList(LinkList &L){ //初始化 L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; } void SetCurElem(LinkList &p,ElemType e){ //设置结点p->data.coef=e.coef; p->data.expn=e.expn; } void CreatePolyn(LinkList &L,int m){ InitList(L); ElemType e; e.coef=0.0; e.expn=-1; SetCurElem(L,e);//设置头结点的数据元素 printf("请输入%d对多项式的值:\n",m); for(int i=1;i<=m;i++){ scanf("%f%d",&e.coef,&e.expn); //输入值 OrderInsert(L,e,compare); } } void show(LinkList L){ //输出方法 LinkList p=L->next; if(p){ //第一个输出 printf("%.2fX^%d",p->data.coef,p->data.expn); p=p->next; } while(p){ if(p->data.coef>0) printf("+"); printf("%.2fX^%d",p->data.coef,p->data.expn); p=p->next; } printf("\n"); } void ListDestroy(LinkList &L){ //销毁 LinkList p=L,q; while(p){ q=p; p=p->next; free(q); } } void subtract(LinkList L1,LinkList L2,LinkList &L3){ //多项式相减 ElemType e; InitList(L3); e.coef=0.0;