编程论坛's Archiver

wwwwok 发表于 2005-5-31 23:07

[求助]一元多项式计算

<FONT face=宋体>  <B>一元多项式计算</B>
能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入;</FONT>

睡觉 发表于 2005-6-7 16:12

[em08]我也正想要哦。。。

hanbing 发表于 2005-6-14 21:15

不是吧?现在有答案了没啊??

chenlulucy723 发表于 2005-6-14 22:46

我也想要!!!!!!!!!!!!!

xiaosi 发表于 2005-6-18 14:49

[em04]WO  YE XIANG YAO A [em08]

天边的一片云 发表于 2005-7-20 19:00

我写了个,只是不在这里。没法子发给。

热情依然 发表于 2005-7-20 22:20

<P>#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;</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&lt;255;i++)
{
      scanf("%c",&amp;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",&amp;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'&amp;&amp;start[j-1]=='-')</P><P>   flag=0;
        
  if(start[i]=='x'&amp;&amp;start[j-1]=='+')</P><P>   flag=1;</P><P>
        for(k=j;k&lt;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]&gt;'0'&amp;&amp;start[j]&lt;'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-&gt;next=NULL;</P><P> p=head;</P><P>    while(i&lt;n)
{
      s=(Node *)malloc(sizeof(Node));</P><P>   if(i%2==0)</P><P>    s-&gt;coef=end[i];</P><P>   i++;</P><P>    if(i%2!=0)</P><P>    s-&gt;exp=end[i];</P><P>   p-&gt;next=s;</P><P>   p=s;</P><P>   i++;
}</P><P> p-&gt;next=NULL;</P><P> return head;
}</P><P>Node *order(Node *head)
{
Node *p,*q,*t,*s,*h;

h=(Node *)malloc(sizeof(Node));

h-&gt;next=head;

p=h;

while(p-&gt;next-&gt;next!=NULL)
{
  for(s=p,q=p-&gt;next;q-&gt;next!=NULL;q=q-&gt;next)
   
   if(q-&gt;next-&gt;exp&lt;s-&gt;next-&gt;exp)
   
    s=q;
  if(s!=q)
  {
   t=s-&gt;next;
   
   s-&gt;next=t-&gt;next;
   
   t-&gt;next=p-&gt;next;
   
   p-&gt;next=t;
  }
  p=p-&gt;next;
}
  head=h-&gt;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-&gt;next;
   
q=p-&gt;next;</P><P> while(p-&gt;next!=NULL)
{
  for(q=p-&gt;next;q!=NULL;q=q-&gt;next)
  {
   if(p-&gt;exp==q-&gt;exp)
   {
    while(q1-&gt;next!=q)</P><P>     q1=q1-&gt;next;</P><P>    while(p1-&gt;next!=p)</P><P>     p1=p1-&gt;next;</P><P>    if(p-&gt;coef+q-&gt;coef==0)
    {
     if(q==p-&gt;next)
     {
      p1-&gt;next=q-&gt;next;</P><P>      free(q);</P><P>      free(p);</P><P>      q=p1;</P><P>      p=p1;
     
     }
     else{
      p1-&gt;next=p-&gt;next;</P><P>      free(p);</P><P>      p=p1;</P><P>      q1-&gt;next=q-&gt;next;</P><P>      free(q);</P><P>      q=q1;
     }
     p1=head;</P><P>     q1=head;
    }
    else{
     p-&gt;coef=p-&gt;coef+q-&gt;coef;  
     
     q1-&gt;next=q-&gt;next;</P><P>     free(q);</P><P>     q=q1;</P><P>     p1=head;</P><P>     q1=head;
    }
   }
  }
  if(p-&gt;next!=NULL)</P><P>   p=p-&gt;next;

  if(p-&gt;next==NULL)</P><P>   break;
}
return head;
}</P><P>void print(Node *head)
{
Node *p;</P><P> p=head-&gt;next;</P><P>    if(p==NULL)</P><P>  printf("0");
  
else
{

   if(p-&gt;exp==0)
  
    printf("%d",p-&gt;coef);</P><P>  else
   if(p-&gt;exp==1)
   
    printf("%dx",p-&gt;coef);
   
   else</P><P>    if(p-&gt;coef==1)</P><P>     printf("x^%d",p-&gt;exp);</P><P>    else if(p-&gt;coef==-1)</P><P>                printf("-x^%d",p-&gt;exp);</P><P>    else
  
    printf("%dx^%d",p-&gt;coef,p-&gt;exp);

p=p-&gt;next;</P><P> while(p!=NULL)
{
  if(p-&gt;exp==0)</P><P>   printf("%d",p-&gt;coef);</P><P>  else
   if(p-&gt;exp==1)
   {
    if(p-&gt;coef&gt;0)
      
    printf("+%dx",p-&gt;coef);</P><P>    else printf("%d",p-&gt;coef);
   }</P><P>  else if(p-&gt;coef&gt;0&amp;&amp;p-&gt;coef!=1&amp;&amp;p-&gt;exp!=-1)</P><P>     printf("+%dx^%d",p-&gt;coef,p-&gt;exp);</P><P>  else  if(p-&gt;coef&lt;0&amp;&amp;p-&gt;coef!=1&amp;&amp;p-&gt;exp!=-1)</P><P>      printf("%dx^%d",p-&gt;coef,p-&gt;exp);</P><P>  else if(p-&gt;coef==1)</P><P>   printf("+x^%d",p-&gt;exp);
  
  else if(p-&gt;coef==-1)</P><P>     printf("-x^%d",p-&gt;exp);</P><P>  p=p-&gt;next;
}</P><P> }
}</P><P>void inarray(int x,int *end,int n)
{
   int i;</P><P>   for(i=0;i&lt;n;i+=2)
   {
    if(end[i]==x)
   
     printf("系数是:%d  指数是:%d\n\n",end[i],end[i+1]);</P><P>   
   
   }</P><P>   if(i&gt;n)</P><P>    printf("没有找到!!\n");</P><P>}
</P>[em01][em01]

热情依然 发表于 2005-7-20 22:25

这是我帮一个女孩子写的数据结构期末作业,见到这里需要就发上来了,那个老师超级变态,要求的功能都式加大编程难度的,就是说那个老师要求用字符输入到一维数组,然后再转换成整形数据,凡是不实现这两个功能的就不可以及格确实是够变态。[em01][em01]

neo 发表于 2005-8-13 00:37

支持斑竹!

jiajia123 发表于 2005-9-28 16:36

哦 斑竹很强呀  我也有一道题目想请斑竹帮忙 谢谢
编制一个能实现演示执行集合的并,交和差运算的程序

type_error 发表于 2005-9-29 21:33

讲个方法

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

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

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

实现九自己做,不能全依赖别人吗

gaoshikao 发表于 2005-10-1 20:03

我看用链表是最好的,因为输入多项式的每个式子时直接比较插入就可以了,这样一下子就排好了;而且进行加法或减法运算的时候也是比较和插入,如果相同就加减运算,很方便.输入的时候这样输入:"基数 指数\n" ,这样每输入一个就插入一个,如果基数和指数都是0表示式子输入结束.具体算法表示我没有写

luobouu 发表于 2005-11-5 11:14

<P>有没有一元多项式的乘法<BR>谢谢!!!!</P>[em28]

52523229 发表于 2005-11-9 13:49

[原创]

<P ><FONT face=宋体><o:p></o:p></FONT></P>
<P ><FONT face=宋体>这个是我刚刚调试好的了 <BR>作者:张怡<BR><BR><BR><BR><BR>#include &lt;iostream.h&gt;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include &lt;stdio.h&gt;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include &lt;stdlib.h&gt;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>#include &lt;malloc.h&gt;<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-&gt;next=NULL;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>  printf("输入系数:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体>  scanf("%f",&amp;coef);<o:p></o:p></FONT></P>
<P ><FONT face=宋体>  printf("输入指数:");<o:p></o:p></FONT></P>
<P ><FONT face=宋体>  scanf("%d",&amp;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-&gt;coef=coef;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      s-&gt;expn=expn;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      s-&gt;next=NULL;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      pre=head;                 /*插入到有序的多项式链表中去*/<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      p=head-&gt;next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>while (p &amp;&amp; p-&gt;expn &lt;s-&gt;expn)    <o:p></o:p></FONT></P>
<P ><FONT face=宋体>      { pre=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>            p=p-&gt;next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>          }<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      s-&gt;next=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>      pre-&gt;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",&amp;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",&amp;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-&gt;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-&gt;coef,p-&gt;expn);<o:p></o:p></FONT></P>
<P ><FONT face=宋体>       p=p-&gt;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-&gt;next;    //p,q 指向头接点的下一个接点,即多项式的第一个接点<o:p></o:p></FONT></P>
<P ><FONT face=宋体>        q=pb-&gt;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)&amp;&amp;(q!=NULL))  //处理多项式的相加的问题<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                if(p-&gt;expn&lt;q-&gt;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-&gt;next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                }<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                else if (p-&gt;expn==q-&gt;expn) <o:p></o:p></FONT></P>
<P ><FONT face=宋体>                {<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                        x=p-&gt;coef+q-&gt;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-&gt;coef=x;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                                pre=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                                p=p-&gt;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-&gt;next=p-&gt;next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                                free(p);<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                                p=pre-&gt;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-&gt;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-&gt;next;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                        q-&gt;next=p;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>                        pre-&gt;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-&gt;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&lt;&lt;"您输入的第一个多项式为:"&lt;&lt;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&lt;&lt;"您输入的第二个多项式为:"&lt;&lt;endl;<o:p></o:p></FONT></P>
<P ><FONT face=宋体>   print(b);<o:p></o:p></FONT></P>
<P ><FONT face=宋体>   cout&lt;&lt;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&lt;&lt;"两多项式相加后为:"&lt;&lt;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>

mydy520 发表于 2005-11-20 19:22

每个多项式到最后都多了一个多余的加号。。。。。。

ぺЖ楓Ж仐 发表于 2005-11-27 19:48

<P>#include&lt;stdio.h&gt;<BR>#include&lt;malloc.h&gt;</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 &amp;p)<BR>{<BR> p=(polynomial)malloc(sizeof(node));<BR> p-&gt;date.expn=0;<BR> p-&gt;date.coef=0.0;<BR> p-&gt;next=NULL;<BR>} //初始化链表</P>
<P>int cmp(Elemtype a1,Elemtype a2)<BR>{<BR> if(a1.expn&gt;a2.expn)return 1;<BR>  if(a1.expn&lt;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-&gt;next!=NULL)<BR> {<BR>  if(cmp(p-&gt;next-&gt;date,e)==-1) p=p-&gt;next;<BR>  else break;<BR> }<BR> pnew-&gt;date=e;<BR> pnew-&gt;next=NULL;</P>
<P> if(cmp(p-&gt;date,e)==0)p-&gt;date.coef+=e.coef;</P>
<P> else<BR> { <BR>  pnew-&gt;next=p-&gt;next;p-&gt;next=pnew;<BR> } </P>
<P>}//按序插入结点</P>
<P>void Creatpoly(polynomial &amp; poly)<BR>{<BR> static int i=1;<BR> Elemtype e;<BR> printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);<BR> scanf("%f %d",&amp;e.coef,&amp;e.expn);<BR> Initpoly(poly);<BR> while(e.coef!=0||e.expn!=0)<BR> {<BR>  Insertpoly(poly,e);<BR>  scanf("%f %d",&amp;e.coef,&amp;e.expn);<BR> }<BR> i++;</P>
<P>}//创造一个链表</P>
<P>void Appendpoly(polynomial &amp;p1,polynomial &amp;p2)<BR>{  <BR> polynomial p=p1;<BR> while(p-&gt;next!=NULL)<BR> {p=p-&gt;next;}<BR> p-&gt;next=p2;<BR>}//两个链表相接</P>
<P>void Addpoly(polynomial p1,polynomial p2)<BR>{<BR> polynomial p=p1-&gt;next,h=p2-&gt;next;<BR> while(p!=NULL&amp;&amp;h!=NULL)<BR> {<BR>  switch(cmp(p-&gt;date,h-&gt;date))<BR>  {<BR>  case 1:<BR>   {<BR>               Insertpoly(p1,h-&gt;date);<BR>      h=h-&gt;next;<BR>      break;<BR>   }<BR>  case 0:<BR>   {<BR>    p-&gt;date.coef+=h-&gt;date.coef;<BR>    p=p-&gt;next;h=h-&gt;next;<BR>    break;<BR>   }<BR>  case -1:<BR>   {<BR>    Insertpoly(p,h-&gt;date);<BR>    h=h-&gt;next;<BR>    p=p-&gt;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-&gt;next;<BR>  free(p1);<BR> }<BR>}//释放存储空间</P>
<P>void Printpoly(polynomial p)<BR>{<BR> polynomial p1=p-&gt;next;<BR> printf("(%f %d)",p1-&gt;date.coef,p1-&gt;date.expn);<BR>    p1=p1-&gt;next;<BR> while(p1!=NULL)<BR> {<BR>  printf("+(%f %d)",p1-&gt;date.coef,p1-&gt;date.expn);<BR>  p1=p1-&gt;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>

ぺЖ楓Ж仐 发表于 2005-11-27 19:49

<P>#include&lt;stdio.h&gt;<BR>#include&lt;malloc.h&gt;</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 &amp;p)<BR>{<BR> p=(polynomial)malloc(sizeof(node));<BR> p-&gt;date.expn=0;<BR> p-&gt;date.coef=0.0;<BR> p-&gt;next=NULL;<BR>} //初始化链表</P>
<P>int cmp(Elemtype a1,Elemtype a2)<BR>{<BR> if(a1.expn&gt;a2.expn)return 1;<BR>  if(a1.expn&lt;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-&gt;next!=NULL)<BR> {<BR>  if(cmp(p-&gt;next-&gt;date,e)==-1) p=p-&gt;next;<BR>  else break;<BR> }<BR> pnew-&gt;date=e;<BR> pnew-&gt;next=NULL;</P>
<P> if(cmp(p-&gt;date,e)==0)p-&gt;date.coef+=e.coef;</P>
<P> else<BR> { <BR>  pnew-&gt;next=p-&gt;next;p-&gt;next=pnew;<BR> } </P>
<P>}//按序插入结点</P>
<P>void Creatpoly(polynomial &amp; poly)<BR>{<BR> static int i=1;<BR> Elemtype e;<BR> printf("请输入第%d个多项式的系数与指数 以 系数 指数的形式输入\n",i);<BR> scanf("%f %d",&amp;e.coef,&amp;e.expn);<BR> Initpoly(poly);<BR> while(e.coef!=0||e.expn!=0)<BR> {<BR>  Insertpoly(poly,e);<BR>  scanf("%f %d",&amp;e.coef,&amp;e.expn);<BR> }<BR> i++;</P>
<P>}//创造一个链表</P>
<P>void Appendpoly(polynomial &amp;p1,polynomial &amp;p2)<BR>{  <BR> polynomial p=p1;<BR> while(p-&gt;next!=NULL)<BR> {p=p-&gt;next;}<BR> p-&gt;next=p2;<BR>}//两个链表相接</P>
<P>void Addpoly(polynomial p1,polynomial p2)<BR>{<BR> polynomial p=p1-&gt;next,h=p2-&gt;next;<BR> while(p!=NULL&amp;&amp;h!=NULL)<BR> {<BR>  switch(cmp(p-&gt;date,h-&gt;date))<BR>  {<BR>  case 1:<BR>   {<BR>               Insertpoly(p1,h-&gt;date);<BR>      h=h-&gt;next;<BR>      break;<BR>   }<BR>  case 0:<BR>   {<BR>    p-&gt;date.coef+=h-&gt;date.coef;<BR>    p=p-&gt;next;h=h-&gt;next;<BR>    break;<BR>   }<BR>  case -1:<BR>   {<BR>    Insertpoly(p,h-&gt;date);<BR>    h=h-&gt;next;<BR>    p=p-&gt;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-&gt;next;<BR>  free(p1);<BR> }<BR>}//释放存储空间</P>
<P>void Printpoly(polynomial p)<BR>{<BR> polynomial p1=p-&gt;next;<BR> printf("(%f %d)",p1-&gt;date.coef,p1-&gt;date.expn);<BR>    p1=p1-&gt;next;<BR> while(p1!=NULL)<BR> {<BR>  printf("+(%f %d)",p1-&gt;date.coef,p1-&gt;date.expn);<BR>  p1=p1-&gt;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>

pandajoe 发表于 2005-12-5 10:34

高手们..有用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>

lfchun457 发表于 2007-6-30 16:04

回复:(wwwwok)[求助]一元多项式计算

<P>有没有带乘法的代码的~~ 谢谢了[em08]!</P>

hcl382710 发表于 2007-8-17 22:50

[em01]

页: [1] 2

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.