| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8266 人关注过本帖, 1 人收藏
标题:[求助]一元多项式计算
只看楼主 加入收藏
type_error
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-9-28
收藏
得分:0 
讲个方法

用线性表,节点2个部分,一个系数,一个阶。实现就很简单了,最好用链表。

这样根据定义写出4则运算。

还可以再优化,比如用压缩写。

实现九自己做,不能全依赖别人吗
2005-09-29 21:33
luobouu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-5
收藏
得分:0 

有没有一元多项式的乘法
谢谢!!!!

2005-11-05 11:14
52523229
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-8
收藏
得分:0 
[原创]

这个是我刚刚调试好的了
作者:张怡




#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

typedef int datatype;

typedef struct LNode

{

float coef; /*多项式系数*/

int expn; /*多项式指数*/

struct LNode *next;

}LNode,*linklist;

/*---------创建带头结点的多项式链表--------*/

linklist creat()

{ linklist head,s,p,pre;

float coef;

int expn;

head=(linklist)malloc(sizeof(LNode)); /*表头结点*/

head->next=NULL;

printf("输入系数:");

scanf("%f",&coef);

printf("输入指数:");

scanf("%d",&expn);

while (coef!=0.0)

{ printf("当系数等于零的时候结束!");

s=(linklist)malloc(sizeof(LNode)); /*生成新结点*/

s->coef=coef;

s->expn=expn;

s->next=NULL;

pre=head; /*插入到有序的多项式链表中去*/

p=head->next;

while (p && p->expn <s->expn)

{ pre=p;

p=p->next;

}

s->next=p;

pre->next=s;

printf("读下一项:\n");

printf("输入系数:\n");

scanf("%f",&coef);

printf("\n");

printf("输入指数:");

scanf("%d",&expn);

}

return head;

}

/*-----------输出多项式链表-------------*/

void print(linklist head)

{ linklist p;

p=head->next;

while (p)

{

printf("%fX^%d+",p->coef,p->expn);

p=p->next;

}

}

/*-------------多项式相加----------------*/

linklist add(linklist pa,linklist pb)

{

linklist p,q,pre,r,head;

float x;

head=pa;

p=pa->next; //p,q 指向头接点的下一个接点,即多项式的第一个接点

q=pb->next;

pre=pa; //pre指向p的前驱

while((p!=NULL)&&(q!=NULL)) //处理多项式的相加的问题

if(p->expn<q->expn)

{

pre=p;

p=p->next;

}

else if (p->expn==q->expn)

{

x=p->coef+q->coef;

if(x!=0) //系数相加不为0的情况

{

p->coef=x;

pre=p;

p=p->next;

}

else //系数相加为0的情况

{

pre->next=p->next;

free(p);

p=pre->next;

}

r=q;

q=q->next;

free(r);

}

else

{

r=q->next;

q->next=p;

pre->next=q;

pre=q;

q=r;

}

if(q!=NULL)

pre->next=q;

free(pb);

return head;

}

/*----主程序------*/

void main()

{

linklist a,b,c;

printf("请输入第一个多项式:");

a=creat(); /*创建多项式链表a*/

printf("请输入第二个多项式:");

b=creat(); /*创建多项式链表b*/

cout<<"您输入的第一个多项式为:"<<endl;

print(a);

cout<<"您输入的第二个多项式为:"<<endl;

print(b);

cout<<endl;

cout<<"两多项式相加后为:"<<endl;

c=add(a,b); /* 计算多项式a+b */

print(c);

}

2005-11-09 13:49
mydy520
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-20
收藏
得分:0 
每个多项式到最后都多了一个多余的加号。。。。。。
2005-11-20 19:22
ぺЖ楓Ж仐
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-11-27
收藏
得分:0 

#include<stdio.h>
#include<malloc.h>

typedef struct{
float coef;
int expn;
}Elemtype;

typedef struct node{
Elemtype date;
struct node* next;
}node,*polynomial;

void Initpoly(polynomial &p)
{
p=(polynomial)malloc(sizeof(node));
p->date.expn=0;
p->date.coef=0.0;
p->next=NULL;
} //初始化链表

int cmp(Elemtype a1,Elemtype a2)
{
if(a1.expn>a2.expn)return 1;
if(a1.expn<a2.expn)return -1;
else return 0;
}//比较两个结点

void Insertpoly(polynomial p1,Elemtype e)
{
polynomial p=p1,pnew;
pnew=(polynomial)malloc(sizeof(node));
while(p->next!=NULL)
{
if(cmp(p->next->date,e)==-1) p=p->next;
else break;
}
pnew->date=e;
pnew->next=NULL;

if(cmp(p->date,e)==0)p->date.coef+=e.coef;

else
{
pnew->next=p->next;p->next=pnew;
}

}//按序插入结点

void Creatpoly(polynomial & poly)
{
static int i=1;
Elemtype e;
printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);
scanf("%f %d",&e.coef,&e.expn);
Initpoly(poly);
while(e.coef!=0||e.expn!=0)
{
Insertpoly(poly,e);
scanf("%f %d",&e.coef,&e.expn);
}
i++;

}//创造一个链表

void Appendpoly(polynomial &p1,polynomial &p2)
{
polynomial p=p1;
while(p->next!=NULL)
{p=p->next;}
p->next=p2;
}//两个链表相接

void Addpoly(polynomial p1,polynomial p2)
{
polynomial p=p1->next,h=p2->next;
while(p!=NULL&&h!=NULL)
{
switch(cmp(p->date,h->date))
{
case 1:
{
Insertpoly(p1,h->date);
h=h->next;
break;
}
case 0:
{
p->date.coef+=h->date.coef;
p=p->next;h=h->next;
break;
}
case -1:
{
Insertpoly(p,h->date);
h=h->next;
p=p->next;
break;
}
}
}
if(h!=NULL)Appendpoly(p1,h);
printf("两个多项式的和为:\n");

}//两个多项式相加

void Destroypoly(polynomial p)
{
while(p!=NULL)
{
polynomial p1=p;
p=p->next;
free(p1);
}
}//释放存储空间

void Printpoly(polynomial p)
{
polynomial p1=p->next;
printf("(%f %d)",p1->date.coef,p1->date.expn);
p1=p1->next;
while(p1!=NULL)
{
printf("+(%f %d)",p1->date.coef,p1->date.expn);
p1=p1->next;
}
printf("\n");

}//打印多项式

void main()
{
polynomial p1;
Creatpoly(p1);
Printpoly(p1);

polynomial p2;
Creatpoly(p2);
Printpoly(p2);
Addpoly(p1,p2);
Printpoly(p1);
Destroypoly(p2);
Destroypoly(p1);
}

2005-11-27 19:48
ぺЖ楓Ж仐
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-11-27
收藏
得分:0 

#include<stdio.h>
#include<malloc.h>

typedef struct{
float coef;
int expn;
}Elemtype;

typedef struct node{
Elemtype date;
struct node* next;
}node,*polynomial;

void Initpoly(polynomial &p)
{
p=(polynomial)malloc(sizeof(node));
p->date.expn=0;
p->date.coef=0.0;
p->next=NULL;
} //初始化链表

int cmp(Elemtype a1,Elemtype a2)
{
if(a1.expn>a2.expn)return 1;
if(a1.expn<a2.expn)return -1;
else return 0;
}//比较两个结点

void Insertpoly(polynomial p1,Elemtype e)
{
polynomial p=p1,pnew;
pnew=(polynomial)malloc(sizeof(node));
while(p->next!=NULL)
{
if(cmp(p->next->date,e)==-1) p=p->next;
else break;
}
pnew->date=e;
pnew->next=NULL;

if(cmp(p->date,e)==0)p->date.coef+=e.coef;

else
{
pnew->next=p->next;p->next=pnew;
}

}//按序插入结点

void Creatpoly(polynomial & poly)
{
static int i=1;
Elemtype e;
printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);
scanf("%f %d",&e.coef,&e.expn);
Initpoly(poly);
while(e.coef!=0||e.expn!=0)
{
Insertpoly(poly,e);
scanf("%f %d",&e.coef,&e.expn);
}
i++;

}//创造一个链表

void Appendpoly(polynomial &p1,polynomial &p2)
{
polynomial p=p1;
while(p->next!=NULL)
{p=p->next;}
p->next=p2;
}//两个链表相接

void Addpoly(polynomial p1,polynomial p2)
{
polynomial p=p1->next,h=p2->next;
while(p!=NULL&&h!=NULL)
{
switch(cmp(p->date,h->date))
{
case 1:
{
Insertpoly(p1,h->date);
h=h->next;
break;
}
case 0:
{
p->date.coef+=h->date.coef;
p=p->next;h=h->next;
break;
}
case -1:
{
Insertpoly(p,h->date);
h=h->next;
p=p->next;
break;
}
}
}
if(h!=NULL)Appendpoly(p1,h);
printf("两个多项式的和为:\n");

}//两个多项式相加

void Destroypoly(polynomial p)
{
while(p!=NULL)
{
polynomial p1=p;
p=p->next;
free(p1);
}
}//释放存储空间

void Printpoly(polynomial p)
{
polynomial p1=p->next;
printf("(%f %d)",p1->date.coef,p1->date.expn);
p1=p1->next;
while(p1!=NULL)
{
printf("+(%f %d)",p1->date.coef,p1->date.expn);
p1=p1->next;
}
printf("\n");

}//打印多项式

void main()
{
polynomial p1;
Creatpoly(p1);
Printpoly(p1);

polynomial p2;
Creatpoly(p2);
Printpoly(p2);
Addpoly(p1,p2);
Printpoly(p1);
Destroypoly(p2);
Destroypoly(p1);
}

2005-11-27 19:49
pandajoe
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-11-30
收藏
得分:0 
高手们..有用java语言的一元多项式吗?


一元多项式的输入、相加
能够输入并建立多项式ab,并计算a+b
要求:能够让用户按照nc1e1c2e2……cnen,其中n是多项式的项数,ciei分别为第i项的系数和指数。序列按指数降序排列。
输出:按照c1*e1+c2*e2+…+的格式分别输出多项式ab,以及a+b的结果。

2005-12-05 10:34
lfchun457
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-30
收藏
得分:0 
回复:(wwwwok)[求助]一元多项式计算

有没有带乘法的代码的~~ 谢谢了

2007-06-30 16:04
hcl382710
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-8-17
收藏
得分:0 
2007-08-17 22:50
恶魔
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-1-7
收藏
得分:0 
原帖由 [bold][underline]ぺЖ楓Ж仐[/underline][/bold] 于 2005-11-27 19:49 发表 [url=http://bbs.][/url]
#include<stdio.h>#include<malloc.h>
typedef struct{ float coef; int expn;}Elemtype;
typedef struct node{ Elemtype date; struct node* next;}node,*polynomial;
void Initpoly(polynomial &p){ p=(polynomial ...

为什么我运行不成功呢?
2008-01-07 09:32
快速回复:[求助]一元多项式计算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020347 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved