多项式相加c语言程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "stdafx.h"//备注:我用的编译平台所提供的头文件不是“stdio.h"

#include"malloc.h"

#include //此头文件用来解决执行可以执行文件exe后直接退出的问题,希望可以帮到大家了解一个新函数和头文件

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()

相关文档
最新文档