[求助]一元多项式计算
<FONT face=宋体> <B>一元多项式计算</B>能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入;</FONT> [em08]我也正想要哦。。。 不是吧?现在有答案了没啊?? 我也想要!!!!!!!!!!!!! [em04]WO YE XIANG YAO A [em08] 我写了个,只是不在这里。没法子发给。 <P>#include<stdio.h>
#include<stdlib.h></P><P>typedef struct node
{
int coef;</P><P> int exp;</P><P> struct node *next;</P><P>}Node;</P><P>void inarray(int x,int *end,int n);</P><P>int string_change_num(char *start,int *end);</P><P>Node *string_change_link(int *end,int n);</P><P>Node *order(Node *head);</P><P>Node *unite(Node *head);</P><P>void print (Node *head);</P><P>void main()
{
Node *head,*head1;</P><P> char str[255];</P><P> int i,end[255],n,x;</P><P> printf("输入字符,以'='号结束:\n\n");</P><P> printf("例如要输入 3x^3+4x^3,就要输入3x3+4x3\n\n");//注意 '+'或者'-'只是为了标记用,作用是识别指数,没有实际符号意义
for(i=0;i<255;i++)
{
scanf("%c",&str[i]);</P><P> if(str[i]=='=')</P><P> break;
}</P><P> str[i]='\0';</P><P> n=string_change_num(str,end);</P><P> head=string_change_link(end,n);</P><P> head1=order(head);</P><P> printf("按照指数从小到大排序的多项式:\n\n");</P><P> print(head1);</P><P> printf("\n");</P><P> printf("输入要查找的系数:\n\n");</P><P> scanf("%d",&x);
inarray(x,end,n);</P><P> printf("合并后的多项式是:\n");</P><P> head1=unite(head);</P><P> head=order(head1);</P><P> print(head);</P><P> printf("\n");
}</P><P>int string_change_num(char *start,int *end)
{
int i=0,j=0,k,sum=0,c=0,flag=1;</P><P> while(start[i]!='\0')
{
if(start[i]=='x'||start[i]=='+'||start[i]=='-')
{
if(start[i]=='x'&&start[j-1]=='-')</P><P> flag=0;
if(start[i]=='x'&&start[j-1]=='+')</P><P> flag=1;</P><P>
for(k=j;k<i;k++)
sum=sum*10+start[k]-'0';</P><P> if(flag==0)
{
sum=-sum;</P><P> flag=1;
}
end[c++]=sum;
sum=0;</P><P> j=i+1;
}
i++;
}
while(start[j]>'0'&&start[j]<'9')
{
sum=sum*10+start[j]-'0';</P><P> j++;
}</P><P>end[c++]=sum;</P><P>return c;</P><P>}
Node *string_change_link(int *end,int n)
{
Node *head,*p,*s;</P><P> int i=0;</P><P> head=(Node *)malloc(sizeof(Node));</P><P> head->next=NULL;</P><P> p=head;</P><P> while(i<n)
{
s=(Node *)malloc(sizeof(Node));</P><P> if(i%2==0)</P><P> s->coef=end[i];</P><P> i++;</P><P> if(i%2!=0)</P><P> s->exp=end[i];</P><P> p->next=s;</P><P> p=s;</P><P> i++;
}</P><P> p->next=NULL;</P><P> return head;
}</P><P>Node *order(Node *head)
{
Node *p,*q,*t,*s,*h;
h=(Node *)malloc(sizeof(Node));
h->next=head;
p=h;
while(p->next->next!=NULL)
{
for(s=p,q=p->next;q->next!=NULL;q=q->next)
if(q->next->exp<s->next->exp)
s=q;
if(s!=q)
{
t=s->next;
s->next=t->next;
t->next=p->next;
p->next=t;
}
p=p->next;
}
head=h->next;
free(h);
return head;
}</P><P>Node *unite(Node *head)
{
Node *p,*q,*q1,*p1;</P><P> q1=head;</P><P> p1=head;</P><P> p=head->next;
q=p->next;</P><P> while(p->next!=NULL)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->exp==q->exp)
{
while(q1->next!=q)</P><P> q1=q1->next;</P><P> while(p1->next!=p)</P><P> p1=p1->next;</P><P> if(p->coef+q->coef==0)
{
if(q==p->next)
{
p1->next=q->next;</P><P> free(q);</P><P> free(p);</P><P> q=p1;</P><P> p=p1;
}
else{
p1->next=p->next;</P><P> free(p);</P><P> p=p1;</P><P> q1->next=q->next;</P><P> free(q);</P><P> q=q1;
}
p1=head;</P><P> q1=head;
}
else{
p->coef=p->coef+q->coef;
q1->next=q->next;</P><P> free(q);</P><P> q=q1;</P><P> p1=head;</P><P> q1=head;
}
}
}
if(p->next!=NULL)</P><P> p=p->next;
if(p->next==NULL)</P><P> break;
}
return head;
}</P><P>void print(Node *head)
{
Node *p;</P><P> p=head->next;</P><P> if(p==NULL)</P><P> printf("0");
else
{
if(p->exp==0)
printf("%d",p->coef);</P><P> else
if(p->exp==1)
printf("%dx",p->coef);
else</P><P> if(p->coef==1)</P><P> printf("x^%d",p->exp);</P><P> else if(p->coef==-1)</P><P> printf("-x^%d",p->exp);</P><P> else
printf("%dx^%d",p->coef,p->exp);
p=p->next;</P><P> while(p!=NULL)
{
if(p->exp==0)</P><P> printf("%d",p->coef);</P><P> else
if(p->exp==1)
{
if(p->coef>0)
printf("+%dx",p->coef);</P><P> else printf("%d",p->coef);
}</P><P> else if(p->coef>0&&p->coef!=1&&p->exp!=-1)</P><P> printf("+%dx^%d",p->coef,p->exp);</P><P> else if(p->coef<0&&p->coef!=1&&p->exp!=-1)</P><P> printf("%dx^%d",p->coef,p->exp);</P><P> else if(p->coef==1)</P><P> printf("+x^%d",p->exp);
else if(p->coef==-1)</P><P> printf("-x^%d",p->exp);</P><P> p=p->next;
}</P><P> }
}</P><P>void inarray(int x,int *end,int n)
{
int i;</P><P> for(i=0;i<n;i+=2)
{
if(end[i]==x)
printf("系数是:%d 指数是:%d\n\n",end[i],end[i+1]);</P><P>
}</P><P> if(i>n)</P><P> printf("没有找到!!\n");</P><P>}
</P>[em01][em01] 这是我帮一个女孩子写的数据结构期末作业,见到这里需要就发上来了,那个老师超级变态,要求的功能都式加大编程难度的,就是说那个老师要求用字符输入到一维数组,然后再转换成整形数据,凡是不实现这两个功能的就不可以及格确实是够变态。[em01][em01] 支持斑竹! 哦 斑竹很强呀 我也有一道题目想请斑竹帮忙 谢谢
编制一个能实现演示执行集合的并,交和差运算的程序 讲个方法
用线性表,节点2个部分,一个系数,一个阶。实现就很简单了,最好用链表。
这样根据定义写出4则运算。
还可以再优化,比如用压缩写。
实现九自己做,不能全依赖别人吗 我看用链表是最好的,因为输入多项式的每个式子时直接比较插入就可以了,这样一下子就排好了;而且进行加法或减法运算的时候也是比较和插入,如果相同就加减运算,很方便.输入的时候这样输入:"基数 指数\n" ,这样每输入一个就插入一个,如果基数和指数都是0表示式子输入结束.具体算法表示我没有写 <P>有没有一元多项式的乘法<BR>谢谢!!!!</P>[em28]
[原创]
<P ><FONT face=宋体><o:p></o:p></FONT></P><P ><FONT face=宋体>这个是我刚刚调试好的了 <BR>作者:张怡<BR><BR><BR><BR><BR>#include <iostream.h><o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include <stdio.h><o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include <stdlib.h><o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include <malloc.h><o:p></o:p></FONT></P>
<P ><FONT face=宋体>typedef int datatype;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>typedef struct LNode<o:p></o:p></FONT></P>
<P ><FONT face=宋体>{<o:p></o:p></FONT></P>
<P ><FONT face=宋体> float coef; /*多项式系数*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> int expn; /*多项式指数*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> struct LNode *next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>}LNode,*linklist;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>/*---------创建带头结点的多项式链表--------*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体>linklist creat()<o:p></o:p></FONT></P>
<P ><FONT face=宋体>{ linklist head,s,p,pre;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> float coef;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> int expn;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> head=(linklist)malloc(sizeof(LNode)); /*表头结点*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> head->next=NULL;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("输入系数:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> scanf("%f",&coef);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("输入指数:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> scanf("%d",&expn);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> while (coef!=0.0) <o:p></o:p></FONT></P>
<P ><FONT face=宋体> { printf("当系数等于零的时候结束!");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> s=(linklist)malloc(sizeof(LNode)); /*生成新结点*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> s->coef=coef;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> s->expn=expn;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> s->next=NULL;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre=head; /*插入到有序的多项式链表中去*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=head->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>while (p && p->expn <s->expn) <o:p></o:p></FONT></P>
<P ><FONT face=宋体> { pre=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=p->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> s->next=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre->next=s;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("读下一项:\n");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("输入系数:\n");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> scanf("%f",&coef); <o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("\n");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("输入指数:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> scanf("%d",&expn);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体>return head;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>}<o:p></o:p></FONT></P>
<P ><FONT face=宋体>/*-----------输出多项式链表-------------*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体>void print(linklist head) <o:p></o:p></FONT></P>
<P ><FONT face=宋体> { linklist p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=head->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> while (p)<o:p></o:p></FONT></P>
<P ><FONT face=宋体> { <o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("%fX^%d+",p->coef,p->expn);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=p->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>}<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>/*-------------多项式相加----------------*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体>linklist add(linklist pa,linklist pb)<o:p></o:p></FONT></P>
<P ><FONT face=宋体>{<o:p></o:p></FONT></P>
<P ><FONT face=宋体> linklist p,q,pre,r,head;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> float x;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> head=pa; <o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=pa->next; //p,q 指向头接点的下一个接点,即多项式的第一个接点<o:p></o:p></FONT></P>
<P ><FONT face=宋体> q=pb->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre=pa; //pre指向p的前驱<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> while((p!=NULL)&&(q!=NULL)) //处理多项式的相加的问题<o:p></o:p></FONT></P>
<P ><FONT face=宋体> if(p->expn<q->expn) <o:p></o:p></FONT></P>
<P ><FONT face=宋体> {<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=p->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> else if (p->expn==q->expn) <o:p></o:p></FONT></P>
<P ><FONT face=宋体> {<o:p></o:p></FONT></P>
<P ><FONT face=宋体> x=p->coef+q->coef;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> if(x!=0) //系数相加不为0的情况<o:p></o:p></FONT></P>
<P ><FONT face=宋体> {<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p->coef=x;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=p->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> else //系数相加为0的情况<o:p></o:p></FONT></P>
<P ><FONT face=宋体> {<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre->next=p->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> free(p);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> p=pre->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> r=q;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> q=q->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> free(r);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> else <o:p></o:p></FONT></P>
<P ><FONT face=宋体> {<o:p></o:p></FONT></P>
<P ><FONT face=宋体> r=q->next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> q->next=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre->next=q;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre=q;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> q=r;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> }<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> if(q!=NULL)<o:p></o:p></FONT></P>
<P ><FONT face=宋体> pre->next=q;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> free(pb); <o:p></o:p></FONT></P>
<P ><FONT face=宋体> return head;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>}<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>/*----主程序------*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体>void main()<o:p></o:p></FONT></P>
<P ><FONT face=宋体>{<o:p></o:p></FONT></P>
<P ><FONT face=宋体> linklist a,b,c;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("请输入第一个多项式:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> a=creat(); /*创建多项式链表a*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> printf("请输入第二个多项式:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体> b=creat(); /*创建多项式链表b*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体> cout<<"您输入的第一个多项式为:"<<endl;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> print(a);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> cout<<"您输入的第二个多项式为:"<<endl;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> print(b);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> cout<<endl;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> cout<<"两多项式相加后为:"<<endl;<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体> c=add(a,b); /* 计算多项式a+b */<o:p></o:p></FONT></P>
<P ><FONT face=宋体> print(c);<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P>
<P ><FONT face=宋体>}<o:p></o:p></FONT></P>
<P ><FONT face=宋体> <o:p></o:p></FONT></P> 每个多项式到最后都多了一个多余的加号。。。。。。 <P>#include<stdio.h><BR>#include<malloc.h></P>
<P>typedef struct{<BR> float coef;<BR> int expn;<BR>}Elemtype;</P>
<P>typedef struct node{<BR> Elemtype date;<BR> struct node* next;<BR>}node,*polynomial;</P>
<P>void Initpoly(polynomial &p)<BR>{<BR> p=(polynomial)malloc(sizeof(node));<BR> p->date.expn=0;<BR> p->date.coef=0.0;<BR> p->next=NULL;<BR>} //初始化链表</P>
<P>int cmp(Elemtype a1,Elemtype a2)<BR>{<BR> if(a1.expn>a2.expn)return 1;<BR> if(a1.expn<a2.expn)return -1;<BR> else return 0;<BR>}//比较两个结点</P>
<P>void Insertpoly(polynomial p1,Elemtype e)<BR>{<BR> polynomial p=p1,pnew;<BR> pnew=(polynomial)malloc(sizeof(node));<BR> while(p->next!=NULL)<BR> {<BR> if(cmp(p->next->date,e)==-1) p=p->next;<BR> else break;<BR> }<BR> pnew->date=e;<BR> pnew->next=NULL;</P>
<P> if(cmp(p->date,e)==0)p->date.coef+=e.coef;</P>
<P> else<BR> { <BR> pnew->next=p->next;p->next=pnew;<BR> } </P>
<P>}//按序插入结点</P>
<P>void Creatpoly(polynomial & poly)<BR>{<BR> static int i=1;<BR> Elemtype e;<BR> printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);<BR> scanf("%f %d",&e.coef,&e.expn);<BR> Initpoly(poly);<BR> while(e.coef!=0||e.expn!=0)<BR> {<BR> Insertpoly(poly,e);<BR> scanf("%f %d",&e.coef,&e.expn);<BR> }<BR> i++;</P>
<P>}//创造一个链表</P>
<P>void Appendpoly(polynomial &p1,polynomial &p2)<BR>{ <BR> polynomial p=p1;<BR> while(p->next!=NULL)<BR> {p=p->next;}<BR> p->next=p2;<BR>}//两个链表相接</P>
<P>void Addpoly(polynomial p1,polynomial p2)<BR>{<BR> polynomial p=p1->next,h=p2->next;<BR> while(p!=NULL&&h!=NULL)<BR> {<BR> switch(cmp(p->date,h->date))<BR> {<BR> case 1:<BR> {<BR> Insertpoly(p1,h->date);<BR> h=h->next;<BR> break;<BR> }<BR> case 0:<BR> {<BR> p->date.coef+=h->date.coef;<BR> p=p->next;h=h->next;<BR> break;<BR> }<BR> case -1:<BR> {<BR> Insertpoly(p,h->date);<BR> h=h->next;<BR> p=p->next;<BR> break;<BR> }<BR> }<BR> }<BR> if(h!=NULL)Appendpoly(p1,h);<BR> printf("两个多项式的和为:\n");<BR> <BR>}//两个多项式相加</P>
<P>void Destroypoly(polynomial p)<BR>{<BR> while(p!=NULL)<BR> {<BR> polynomial p1=p;<BR> p=p->next;<BR> free(p1);<BR> }<BR>}//释放存储空间</P>
<P>void Printpoly(polynomial p)<BR>{<BR> polynomial p1=p->next;<BR> printf("(%f %d)",p1->date.coef,p1->date.expn);<BR> p1=p1->next;<BR> while(p1!=NULL)<BR> {<BR> printf("+(%f %d)",p1->date.coef,p1->date.expn);<BR> p1=p1->next;<BR> }<BR> printf("\n");</P>
<P>}//打印多项式</P>
<P>void main()<BR>{<BR> polynomial p1;<BR> Creatpoly(p1);<BR> Printpoly(p1);</P>
<P> polynomial p2;<BR> Creatpoly(p2);<BR> Printpoly(p2);<BR> Addpoly(p1,p2);<BR> Printpoly(p1);<BR> Destroypoly(p2);<BR> Destroypoly(p1);<BR>}</P> <P>#include<stdio.h><BR>#include<malloc.h></P>
<P>typedef struct{<BR> float coef;<BR> int expn;<BR>}Elemtype;</P>
<P>typedef struct node{<BR> Elemtype date;<BR> struct node* next;<BR>}node,*polynomial;</P>
<P>void Initpoly(polynomial &p)<BR>{<BR> p=(polynomial)malloc(sizeof(node));<BR> p->date.expn=0;<BR> p->date.coef=0.0;<BR> p->next=NULL;<BR>} //初始化链表</P>
<P>int cmp(Elemtype a1,Elemtype a2)<BR>{<BR> if(a1.expn>a2.expn)return 1;<BR> if(a1.expn<a2.expn)return -1;<BR> else return 0;<BR>}//比较两个结点</P>
<P>void Insertpoly(polynomial p1,Elemtype e)<BR>{<BR> polynomial p=p1,pnew;<BR> pnew=(polynomial)malloc(sizeof(node));<BR> while(p->next!=NULL)<BR> {<BR> if(cmp(p->next->date,e)==-1) p=p->next;<BR> else break;<BR> }<BR> pnew->date=e;<BR> pnew->next=NULL;</P>
<P> if(cmp(p->date,e)==0)p->date.coef+=e.coef;</P>
<P> else<BR> { <BR> pnew->next=p->next;p->next=pnew;<BR> } </P>
<P>}//按序插入结点</P>
<P>void Creatpoly(polynomial & poly)<BR>{<BR> static int i=1;<BR> Elemtype e;<BR> printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);<BR> scanf("%f %d",&e.coef,&e.expn);<BR> Initpoly(poly);<BR> while(e.coef!=0||e.expn!=0)<BR> {<BR> Insertpoly(poly,e);<BR> scanf("%f %d",&e.coef,&e.expn);<BR> }<BR> i++;</P>
<P>}//创造一个链表</P>
<P>void Appendpoly(polynomial &p1,polynomial &p2)<BR>{ <BR> polynomial p=p1;<BR> while(p->next!=NULL)<BR> {p=p->next;}<BR> p->next=p2;<BR>}//两个链表相接</P>
<P>void Addpoly(polynomial p1,polynomial p2)<BR>{<BR> polynomial p=p1->next,h=p2->next;<BR> while(p!=NULL&&h!=NULL)<BR> {<BR> switch(cmp(p->date,h->date))<BR> {<BR> case 1:<BR> {<BR> Insertpoly(p1,h->date);<BR> h=h->next;<BR> break;<BR> }<BR> case 0:<BR> {<BR> p->date.coef+=h->date.coef;<BR> p=p->next;h=h->next;<BR> break;<BR> }<BR> case -1:<BR> {<BR> Insertpoly(p,h->date);<BR> h=h->next;<BR> p=p->next;<BR> break;<BR> }<BR> }<BR> }<BR> if(h!=NULL)Appendpoly(p1,h);<BR> printf("两个多项式的和为:\n");<BR> <BR>}//两个多项式相加</P>
<P>void Destroypoly(polynomial p)<BR>{<BR> while(p!=NULL)<BR> {<BR> polynomial p1=p;<BR> p=p->next;<BR> free(p1);<BR> }<BR>}//释放存储空间</P>
<P>void Printpoly(polynomial p)<BR>{<BR> polynomial p1=p->next;<BR> printf("(%f %d)",p1->date.coef,p1->date.expn);<BR> p1=p1->next;<BR> while(p1!=NULL)<BR> {<BR> printf("+(%f %d)",p1->date.coef,p1->date.expn);<BR> p1=p1->next;<BR> }<BR> printf("\n");</P>
<P>}//打印多项式</P>
<P>void main()<BR>{<BR> polynomial p1;<BR> Creatpoly(p1);<BR> Printpoly(p1);</P>
<P> polynomial p2;<BR> Creatpoly(p2);<BR> Printpoly(p2);<BR> Addpoly(p1,p2);<BR> Printpoly(p1);<BR> Destroypoly(p2);<BR> Destroypoly(p1);<BR>}</P> 高手们..有用java语言的一元多项式吗?<BR>
<P 0cm 0cm 0pt; TEXT-INDENT: 21.1pt; mso-char-indent-count: 2.0"><BR>一元多项式的输入、相加<BR>能够输入并建立多项式<FONT face="Times New Roman">a</FONT>和<FONT face="Times New Roman">b</FONT>,并计算<FONT face="Times New Roman">a+b<BR></FONT>要求:能够让用户按照<FONT face="Times New Roman">n</FONT>,<FONT face="Times New Roman">c1</FONT>,<FONT face="Times New Roman">e1</FONT>,<FONT face="Times New Roman">c2</FONT>,<FONT face="Times New Roman">e2</FONT>……<FONT face="Times New Roman">cn</FONT>,<FONT face="Times New Roman">en</FONT>,其中<FONT face="Times New Roman">n</FONT>是多项式的项数,<FONT face="Times New Roman">ci</FONT>,<FONT face="Times New Roman">ei</FONT>分别为第<FONT face="Times New Roman">i</FONT>项的系数和指数。序列按指数降序排列。<FONT face="Times New Roman"> <BR></FONT>输出:按照<FONT face="Times New Roman">c1*e1+c2*e2+…+</FONT>的格式分别输出多项式<FONT face="Times New Roman">a</FONT>,<FONT face="Times New Roman">b</FONT>,以及<FONT face="Times New Roman">a+b</FONT>的结果。<o:p></o:p></P>
<P 0cm 0cm 0pt; TEXT-INDENT: 21.1pt; mso-char-indent-count: 2.0"></P>
回复:(wwwwok)[求助]一元多项式计算
<P>有没有带乘法的代码的~~ 谢谢了[em08]!</P> [em01]页:
[1]
2
