注册 登录
编程论坛 数据结构与算法

麻烦大家看看这个一元多项式相乘,错在那里。

a475875867 发布于 2012-04-15 10:42, 359 次点击
问题出现在multiply(linknode *fa,linknode *fb,linknode *fc)建新表fc中,我这样写多项式相乘应该不对,请大家不要站在如何写才对的基础上看。我主要想知道我这样写错在那里了,麻烦大家了。
#include <stdio.h>
#include <math.h>
typedef struct LinkNode
{
    float coef;                                  //多项式系数
    int index;                                   //多项式指数
    struct LinkNode *next;
}linknode;

int createlink(linknode *head)
{
    head->next=NULL;
    int z;
    linknode *p,*s;
    p=head;
    float a=1;
    int n;
    int b=1;
    printf("请按多项式指数由高到低输入系数和指数:\n");
    while(z)
    {
        scanf("%f %d",&a,&b);
        if(fabs(a)>0.000001)
        {
            s=new linknode;
            s->coef=a;
            s->index=b;
            s->next=NULL;
            p->next=s;
            p=s;
            n++;
        }
        else z=0;
    }
    return n;
}

void show(linknode *head)
{
    linknode *p;
    p=head->next;
    while(p&&p->next)
    {
            printf("\(%fx^%d\)+",p->coef,p->index);
            p=p->next;
    }
    printf("\(%fx^%d\) ",p->coef,p->index);
    printf("\n");


}
void multiply(linknode *fa,linknode *fb,linknode *fc)      
{
    int i,j,L;                                 //j和L分别记录链表fa和链表fb的长度
    linknode *m,*n,*k,*p;
    m=fa->next;
    n=fb->next;
    fc->next=NULL;                           
    k=fc;
    for(i=1;i<=L;i++)                          //从链表fa的第一个结点开始
    {
               
        for(i=1;i<=j;j++)                      //乘以链表fb的所有结点  
        {                           
            p=new linknode;                    //以下是将一个链表fa的结点乘以链表fb的一个结点所得的结果放进新建链表fc每个结点中,建新表fc的过程
            p->coef=m->coef*n->coef;
            p->index=m->index+n->index;
            p->next=NULL;
            k->next=p;
            n=n->next;
        }
        m=m->next;
    }
}
            



void main()
{
    int L,j;
    linknode *fa,*fb,*fc;
    fa=new linknode;
    fb=new linknode;
    fc=new linknode;
    L=createlink(fa);          //L记录链表fa的长度
    printf("fa(x)=");
    show(fa);
    j=createlink(fb);          //j记录链表fb的长度
    printf("fb(x)=");
    show(fb);   
    void multiply(linknode *fa,linknode *fb,linknode *fc);
    printf("fa(x)*fb(x)=");
    show(fc);
}
3 回复
#2
a4758758672012-04-15 10:48
不好意思,上面L是记录链表fa的长度,j是记录链表fb的长度。打错了

#3
寒风中的细雨2012-04-16 10:28
都知道不对, 难道还要按照不对的思路去走么?

试着给自己程序设计步骤, 会容易分析的
#4
a4758758672012-04-16 22:55
谢谢这几天忙着写这份作业,写到我烦了。今天终于写完了。以前只是听老师讲和看书,从来没实践过。没想到,一实践就错误百出啊。看来以后有空还是要多多练习才行。这次收获挺大的,弄明白很多。不够还有一些到现在都没弄清,我只是换了方法才写好的。改天问问你
1