多项式相加C语言程序

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

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 } }
}/*chongpaixu(l);*/ if(l->next ){ printf("你输入的多项式是 f(x)="); putout(l);}else printf("你输入的多项式是 f(x)=0\n"); } else printf("你输入的多项式 l 不存在\n"); printf("请输入 s 的项数\n"); scanf("%d",&d); if(d>0) {for (i=0;i<d;i++) {printf("请输入第%d 项的系数\n",i+1); scanf("%f",&coe); printf("请输入第%d 项的 r 指数\n",i+1); scanf("%d",&exp);if(coe){ insertlist(hs,q,w);hs=hs->next ;} }if(s->next){ printf("你输入的多项式是 f(x)="); putout(s);} else printf("你输入的多项式是 f(x)=0\n"); } else printf("你输入的多项式不存在\n"); hl=l; hs=s;
{list l,s,hl,hs; int i,d,exp;float *q;int *w; float coe; putmessage(); q=&coe; w=&exp; l=initlist(); s=initlist(); hl=l; hs=s; printf("请输入 l 的项数\n"); scanf("%d",&d); if(d>0) {for (i=0;i<d;i++) {printf("请输入第%d 项的系数\n",i+1); scanf("%f",&coe); printf("请输入第%d 项的指数\n",i+1); scanf("%d",&exp); if(coe){ insertlist(hl,q,w);hl=hl->next ;}
printf("%.2fx^%d\n",p->coef,p->expn); } int cmp(int f,int g) //比较函数,用来判定当前两多项式指数问题 {if (f<g) 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 =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
if(hl->next &&hs->next ) {addlist(l,s);printf("合并后的多项式 f(x)="); if(l->next){ putout(l);} else printf("0\n");} else printf("no add\n"); system ( "pause" );//不加此语Leabharlann Baidu,exe 文件在执行完毕直接跳出 }
#include "stdafx.h"//备注:我用的编译平台所提供的头文件不是“stdio.h" #include"malloc.h" #include<cstdlib> //此头文件用来解决执行可以执行文件 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
}//while
} void putmessage(void)//用来表明备注 {printf("备注:该算法经过上课时老师给我们提出的问题进行了修改,不过关于排序的算法 还不能完善\n"); printf("因此,请输入时请将多项式按照升序输入,将相同指数合并!\n"); printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n"); } void main()
;free(hm->next);hm->next
case 1:hm->next =pn;hn=pm;pn=pn->next ;pm=hm->next ;break; }//switch
=pm->next
;hn->next=pm;pm->next
}//while if(hm->next ) //参考书本 43 页算法的思想,将剩余结点插入当前链表中 {hn->next=pm;free(hm);} }//addlist
相关文档
最新文档