| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 894 人关注过本帖
标题:关于多项式的加法,错在哪里呢?诚问。
只看楼主 加入收藏
ste11ar
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-9-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
关于多项式的加法,错在哪里呢?诚问。
显示的系数总是为0,多项式和为zero item。我是新手,虚心求教
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct polynomials
{
    int coef;
    int exp;
    struct polynomials *next;
}poly;

poly *create(){
    int n;
    poly *head;
    poly *p1,*p2;
    n=0;
    p1=p2=(poly*)malloc(sizeof(poly));
    scanf("%d%d",&p1->coef,&p1->exp);
    if(p1->next==0)head=NULL;
    else
    {
        while(p1->coef!=0)
        {n++;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        scanf("%d%d",&p1->coef,&p1->exp);
        }
        p2->next=NULL;
    }
    return head;
}

void print(poly *p){
    poly *q;
    q=p;
    printf(" ");
    if(q!=0)
        do
        {
           printf("%dX^%d",q->coef,q->exp);
                q=q->next;
            if(q!=0)printf("+");
        }while(q!=0);
        else printf("zero item");
        printf("\n");
}
int compare(poly *a,poly *b){
if(a->exp>b->exp)return 1;
else if(a->exp<b->exp)return -1;
return 0;
}
poly *add(poly *a,poly *b){
    poly *head,*polya=a,*polyb=b,*p,*q;
    int sum;
    head=p=(poly*)malloc(sizeof(poly));
    p->next=NULL;
    while(polya&&polyb){
        switch(compare(polya,polyb)){
        case -1:
            p->next=polyb;
            p=polyb;
            polyb=polyb->next;
            break;
        case 0:
            sum=polya->coef+polyb->coef;
            if(sum!=0){
                polya->coef=sum;
                p->next=polya;
                p=polya;
                polya=polya->next;
            }
            else{
                q=polya;
                polya=polya->next;
                free(q);
            }
            q=polyb;
            polyb=polyb->next;
            free(q);
            break;
        case 1:
            p=polya->next;
            p=polya;
            polya=polya->next;
            break;
            }
        }
        if(polya)p->next=polya;
        if(polyb)p->next=polyb;
        q=head;
        head=head->next;
        free(q);
        return head;
}

int main(){
    poly *a,*b,*s;
    printf("input polynomials a: ");
    a=create();
    printf("input polynomials b: ");
    b=create();
    printf("poly_a:\n");
    print(a);
    printf("poly_b:\n");
    print(b);
    printf("poly_sum:\n");
    s=add(a,b);
    print(s);
}


[ 本帖最后由 ste11ar 于 2009-9-26 13:26 编辑 ]
搜索更多相关主题的帖子: 加法 多项式 
2009-09-26 13:22
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:20 
先测试你的creat(),这个只要建完表打印输出就知道了
再测试add(),在函数结束之前测试加法操作之后的sum是否建表成功(很可能就是这里的问题)
多写几个printf()就容易测出来了。

倚天照海花无数,流水高山心自知。
2009-09-27 11:14
快速回复:关于多项式的加法,错在哪里呢?诚问。
数据加载中...
 
   



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

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