| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 420 人关注过本帖
标题:[求助]多项式计算问题
只看楼主 加入收藏
烟屁股
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-6-30
收藏
 问题点数:0 回复次数:0 
[求助]多项式计算问题

基本功能定为
(1) 输入并建立多项式
(2) 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,.....,Cn,en,其中n是多项式的相数,Ci和Ei分别是第i项的系数和指数,序列按指数降序排列
(3) 两个多项式相加,建立并输出和多项式
(4) 两个多项式相减,建立并输出差多项式
(5) 两个多项式相乘, 建立乘积多项式
(6) 计算多项式在x处的值
实现提示:用带表头结点的单链表存储多项式

程序代码如下:
#include "stdio.h"
#include "malloc.h"
typedef struct lnode{
int coef; //系数
int expn; //指数
struct lnode *next;
}lnode,*linklist;

/*-----------排序多项式-------------*/
linklist sort(linklist t) // 最麻烦了!
{ linklist p,s,x,end,temp;
int temp1,temp2;

p=t->next; //p才是实际含数据的首结点

for(x=t;x->next!=NULL;x=x->next)
; //走到链尾
end=x;

while(p!=end) //气泡按指数从小到大排序
{
s=p;
while(s!=end) //一趟排序
{
temp=s; //保存s的pre前一个结点,以便下面赋值给end

if(s->expn > s->next->expn) //前面项的结点的指数高于后面,则两项数据交换
{
temp1=s->coef; s->coef=s->next->coef; s->next->coef=temp1;
temp2=s->expn; s->expn=s->next->expn; s->next->expn=temp2;
}
s=s->next;
}
end=temp; //保存排好的末结点,end一直被重复赋值,并不断回溯.
}
return p;
}
/*-----------创建多项式-------------*/
linklist create(linklist p)
{ linklist r,s,t;
r=p; //用r保存首结点
while(1)
{
int coef1,expn1;
printf("输入系数:\n");
scanf("%d",&coef1);

if(coef1==0) break;

printf("输入指数:\n");
scanf("%d",&expn1);

s=(linklist)malloc(sizeof(lnode));
s->coef=coef1;
s->expn=expn1;
s->next=NULL;

p->next=s;
p=p->next; //p结点前移,保证始终指向末结点

}
t=sort(r); //传递首结点,按指数从小到大排序
return t;
}

/*-----------输出多项式-------------*/
void print(linklist h)
{
while(h!=NULL){
printf("%d",h->coef);
printf("*X");
if(h->expn!=1) printf("%d",h->expn); //指数是1就不用显示出来了,不是1则显示
if(h->next->coef >0 && h->next!=NULL) //下一项的系数为正,则显示“+”
printf("+");

h=h->next;
}
}
void ADD(linklist s, linklist t)
{ linklist c,k,head;
c=(lnode*)malloc(sizeof(lnode));
c->next=NULL;
head=c;
while(t!=NULL&&s!=NULL){
if(s->expn < t->expn){ //比较指数谁的大,然后按指数低的先入链表
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=s->coef;
k->expn=s->expn;
c->next=k;
c=c->next;
s=s->next;
if(s==NULL)
c->next=t;
}
else if(s->expn > t->expn){
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=t->coef;
k->expn=t->expn;
c->next=k;
c=c->next;
t=t->next;
if(t==NULL)
c->next=s;
}
else{ //指数相同则做相加运算
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=s->coef+t->coef;
k->expn=s->expn;
c->next=k;
c=c->next;
t=t->next;
s=s->next;
}
}
print(head); //输出函数
}

void main()
{ linklist p,q,m,n;

p=(lnode*)malloc(sizeof(lnode));
p->next=NULL;
q=(lnode*)malloc(sizeof(lnode));
q->next=NULL;

printf("请输入第一个多项式\n");
m=create(p);

printf("请输入第二个多项式\n");
n=create(q);

printf("\n第一个多项式为:\n");
print(m);

printf("\n第二个多项式为:\n");
print(n);

ADD(p,q); //加法
//Minus(p,q); //减法
}

PS:逻辑错误。


[此贴子已经被作者于2007-7-1 13:45:07编辑过]

搜索更多相关主题的帖子: include 多项式 
2007-07-01 13:44
快速回复:[求助]多项式计算问题
数据加载中...
 
   



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

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