多项式相加
来源:互联网 发布:上海矩阵化工有限公司 编辑:程序博客网 时间:2024/04/28 00:32
#include<stdio.h>
#include<malloc.h>
typedef struct Node //多项式数据类型的定义
{
float coef; //系数
int exp; //指数
struct Node *next; //指向多项式的下一结点
}PolyNode;
PolyNode * Createpoly() //创建链表
{
PolyNode *L,*r,*s;
float coef;
int exp;
L=(PolyNode *)malloc(sizeof(PolyNode)); //申请表头结点空间
r=L; //r为尾指针
printf("coef:");
scanf("%f",&coef);
printf("exp: ");
scanf("%d",&exp);
while(coef!=0)
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //建立项的结点,并插在链尾
s->coef=coef;
s->exp=exp;
r->next=s;
r=s;
printf("coef:");
scanf("%f",&coef);
printf("exp: ");
scanf("%d",&exp);
}
r->next=NULL;
return(L);
}
void Addpoly(PolyNode *pa, PolyNode *pb) //两个多项式相加
{
PolyNode *p,*q,*r,*temp; //temp用来存放临时结点
float sum;
p=pa->next;
q=pb->next;
r=pa;
while(p&&q)
{
if(p->exp<q->exp) //p指向的项指数小于q,尾指针指向p,且将p指向链表的下一结点
{
r=p;
p=p->next;
}
else if(p->exp==q->exp) //指数相等时,系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
r=p;
}
else //系数相加为0
{
r->next=p->next;
free(p);
}
p=r->next;
temp=q;
q=q->next;
}
else //q指向项指数小于p时,将q加入多项式中
{
temp=q->next;
q->next=p;
r->next=q;
r=q;
q=temp;
}
}
if(q)
r->next=q;
free(pb);
}
void Print(PolyNode * p) //打印多项式
{
int i=0;
while(p->next)
{
p=p->next;
i++;
printf(" %g*x^%d\n",p->coef,p->exp);
}
printf("一共有%d项\n",i);
}
int main() //主函数
{
PolyNode * pa,* pb;int i;
printf("\n**********^-^欢迎光临^-^**********\n");
printf("\n请输入多项式a(按指数递增顺序输入):\n");
pa=Createpoly();
Print(pa);
printf("\n请输入多项式b(按指数递增顺序输入):\n");
pb=Createpoly();
Print(pb);
printf("\n多项式相加结果是:\n");
Addpoly(pa,pb);
Print(pa);
printf("\n");
return 0;
}
#include<malloc.h>
typedef struct Node //多项式数据类型的定义
{
float coef; //系数
int exp; //指数
struct Node *next; //指向多项式的下一结点
}PolyNode;
PolyNode * Createpoly() //创建链表
{
PolyNode *L,*r,*s;
float coef;
int exp;
L=(PolyNode *)malloc(sizeof(PolyNode)); //申请表头结点空间
r=L; //r为尾指针
printf("coef:");
scanf("%f",&coef);
printf("exp: ");
scanf("%d",&exp);
while(coef!=0)
{
s=(PolyNode *)malloc(sizeof(PolyNode)); //建立项的结点,并插在链尾
s->coef=coef;
s->exp=exp;
r->next=s;
r=s;
printf("coef:");
scanf("%f",&coef);
printf("exp: ");
scanf("%d",&exp);
}
r->next=NULL;
return(L);
}
void Addpoly(PolyNode *pa, PolyNode *pb) //两个多项式相加
{
PolyNode *p,*q,*r,*temp; //temp用来存放临时结点
float sum;
p=pa->next;
q=pb->next;
r=pa;
while(p&&q)
{
if(p->exp<q->exp) //p指向的项指数小于q,尾指针指向p,且将p指向链表的下一结点
{
r=p;
p=p->next;
}
else if(p->exp==q->exp) //指数相等时,系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
r=p;
}
else //系数相加为0
{
r->next=p->next;
free(p);
}
p=r->next;
temp=q;
q=q->next;
}
else //q指向项指数小于p时,将q加入多项式中
{
temp=q->next;
q->next=p;
r->next=q;
r=q;
q=temp;
}
}
if(q)
r->next=q;
free(pb);
}
void Print(PolyNode * p) //打印多项式
{
int i=0;
while(p->next)
{
p=p->next;
i++;
printf(" %g*x^%d\n",p->coef,p->exp);
}
printf("一共有%d项\n",i);
}
int main() //主函数
{
PolyNode * pa,* pb;int i;
printf("\n**********^-^欢迎光临^-^**********\n");
printf("\n请输入多项式a(按指数递增顺序输入):\n");
pa=Createpoly();
Print(pa);
printf("\n请输入多项式b(按指数递增顺序输入):\n");
pb=Createpoly();
Print(pb);
printf("\n多项式相加结果是:\n");
Addpoly(pa,pb);
Print(pa);
printf("\n");
return 0;
}
0 0
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 多项式相加
- 两个多项式相加!
- 上海百达翡丽手表维修
- 常量数据的处理思路
- 【Java二十周年】我会勇敢的走下去
- 表单控件(下拉选择框select)
- 看数据结构写代码(60 ) 键树的多重链表表示(Trie树)
- 多项式相加
- 正则表达式
- Win8 Metro(C#)数字图像处理--4图像颜色空间描述
- [LeetCode] Isomorphic Strings
- 顺序栈的一些操作
- Unique Binary Search Trees
- 利用Java NIO 实现文件监控功能。
- 表单控件(文本域textarea)
- C/C++代码优化的27条建议