多项式相加c语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdafx.h"//备注:我用的编译平台所提供的头文件不是“stdio.h"
#include"malloc.h"
#include
typedef struct List{ //定义一个动态链表
float coef;
int expn;
struct List *next;
}*list;
list initlist()//初始化,生成新结点
{list l;l=(list)malloc(sizeof(List));
if (!l) printf("error");
l->next=NULL;
return l;
}
void insertlist (list l,float *coe,int *exp)//每次scanf后插入结点,从链尾插入,main函数中定义一个链表尾指针
{list s;
s=(list)malloc(sizeof(List));
if(!s)printf("error");
s->coef=*coe;
s->expn=*exp;
l->next =s;
s->next =NULL;
}
void putout(list l)//输出链表
{list p;
p=l->next;
while(p->next)
{ if(p->expn==0)
printf("1+");
else if(p->coef==1&&p->expn==1)
{printf("x+");}
else
printf("%.2fx^%d+",p->coef,p->expn);
p=p->next ;
} if(p->expn==0)
printf("1\n");
else if(p->coef==1&&p->expn==1)
{printf("x\n");}
else
printf("%.2fx^%d\n",p->coef,p->expn);
}
int cmp(int f,int g) //比较函数,用来判定当前两多项式指数问题
{if (f return (-1); else if(f==g) return 0; else return (1); } void addlist(list n,list m){//多项式相加 list hn,hm,pn,pm;float sum; pn=n->next ;pm=m->next ;hn=n;hm=m;//定义一个当前节点的指针和一个头指针 while(hn->next&&hm->next) {switch (cmp(pn->expn,pm->expn))//比较两指数 {case -1: hn=pn; pn=pn->next; break; case 0: sum=pn->coef +pm->coef ; if(sum!=0) {pn->coef =sum;pm=pm->next ;free(hm->next);hm->next =pm;hn=hn->next ;pn=pn->next ; }//if else {hn->next =pn->next ; free(pn); pn=hn->next ; hm->next =pm->next ; free(pm); pm=hm->next ;}break;//else case 1:hm->next =pm->next ;hn->next=pm;pm->next =pn;hn=pm;pn=pn->next ;pm=hm->next ;break; }//switch }//while if(hm->next ) //参考书本43页算法的思想,将剩余结点插入当前链表中 {hn->next=pm;free(hm);} }//addlist void chongpaixu(list l)//将输入的多项式按升序排列,并将指数相同的合并(还不能执行){ list s;list q;list k;list w;float sum;k=initlist(); q=l->next ;s=l; while(q->next){ for(w=l ;q->next !=NULL;q=q->next ) {for (s=s->next ;s->next!=NULL;s=s->next ) {switch(cmp(s->expn,q->expn)) {case -1:w=w->next ;break; case 1:k->coef=q->coef; q->coef=s->coef; s->coef=k->coef; k->expn=q->expn ; q->expn =s->expn ; s->expn =k->expn ;free(k);w=w->next ;break; case 0:sum=s->coef+q->coef; if(sum) {s->coef=sum; s->next=q; free(q); q=s->next ;}//if else {w->next=q->next; free(s);free(q); s=w->next ; q=s->next ;}//else break; }//switch } } }//while } void putmessage(void)//用来表明备注 {printf("备注:该算法经过上课时老师给我们提出的问题进行了修改,不过关于排序的算法还不能完善\n"); printf("因此,请输入时请将多项式按照升序输入,将相同指数合并!\n"); printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n"); } void main()