两多项式求和(C语言版)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
node *Add (node *a,node *b )
//两个多项式相加
{ node *ha,*hb,*pa,*pb,*tmpb;
int t;
ha=a;
hb=b;
while(ha->next!=NULL) {
pa=ha->next;
pb=hb->next;
tmpb=hb;
while(tmpb->next!=NULL){
{ printf("%5.1f",p->next->coef);
if(p->next-Leabharlann Baiduexpn!=0)
printf(" * X(%d)",p->next->expn);
p=p->next;
if(p->next!=NULL)
printf(" + ");
}
c1=getchar();
c2=getchar();
t=cmp(pa,pb);
if(t==0){ (pa->coef)+=(pb->coef);
pb=pb->next;
tmpb->next=pb;
}
if(t!=0){
tmpb=pb;
pb=pb->next;
}
}
ha=ha->next;
}
if(hb->next!=NULL)//如果多项式b还有某些项未执行相加操作,
if(!p)
{ printf("分配内存失败!");
exit(OVERFLOW);
}
printf("请输入第%d项系数:\n",i+1);
//从键盘读取数据
scanf("%f",&p->coef);
printf("请输入第%d项指数:\n",i+1);
scanf("%d",&p->expn);//从键盘读取数据
//则将其接到结果多项式a后面
ha->next=hb->next;
return a;//返回结果多项式
}
int main()
{ node *x,*y,*p,*hp;
int m=0,n=0;
char c1,c2;
printf("请输入第一个多项式的项数!\n");
scanf("%d",&m);
printf("请输入第一个多项式\n\n");
//比较两个指数大小,并返回-1或0或1
{ if(m->expn<n->expn)
return -1;
else if(m->expn==n->expn)
return 0;
else
return 1;
}
float Sum(node *m,node *n)
//求多项式两个系数之和
{ return m->coef+n->coef;
{ node *head, *p, *q;//
int i;
head=(node *)malloc(sizeof(node));
if(!head) { printf("分配内存失败!");
exit(OVERFLOW);
}
for(i=0;i<n;i++)
{ p=(node *)malloc(sizeof(node));
x=Create(m);
printf("请输入第二个多项式的项数!\n");
scanf("%d",&n);
printf("请输入第二个多项式\n\n");
y=Create(n);
p=Add(x,y );
printf("两个多项式相加成功,其结果如下:\n");
while(p->next!=NULL)//输出相加所得的多项式
if(c2=='\n')
printf("\n");
return 0;
}
#include "stdlib.h"
#include "stdio.h"
# define OVERFLOW -2
typedef struct term
{ float coef; //多项式系数
int expn; //多项式指数
struct term *next;
} node;
node *Create(int n)//创建一个n个结点的链表,并给每//个节点数据域赋值
if(i==0)
//如果是第一个节点,则指针q、head同时指向该第一个实节点
head->next=q=p;
else //否则一个节点一个节点往后接
{ q->next=p;
p->next=NULL;
q=p;
}
}
return(head);//返回所建链表头指针
}
int cmp (node *m,node *n )
相关文档
最新文档