none
谁能解我困惑?程序编译的时候没有出现错误,也能运行,但是就是不能得到我想要的结果。此程序为多项式的加法。 RRS feed

  • 问题

  • #include <stdio.h>
    #include <stdlib.h>
    #define null 0
    typedef struct list
    {
       float ceof;
       int zhishu;
       struct list *next;

    }term;
     term *ha,*hb;

    int locate(term *p,term *q)
    {
           if((*p).zhishu>(*q).zhishu)
                return -1;
          else if((*p).zhishu==(*q).zhishu)
                return 0;
          else
                return 1;


    }

    term *makenode()
    {  term *s;
        s=(term *)malloc(sizeof(term));
        s->ceof=0.0;
        s->zhishu=0;
        s->next=null;
        return s;
       
    }

    void insert(term *q,term *s)
    {
        s->next=q->next;
        q->next=s;

    }
    term *creat(int n)
    {
       term *head,*p,*q,*S;
       int i;
       head=(term *)malloc(sizeof(term));
       (*head).ceof=0.0;
       (*head).zhishu=-1;
       p=head;
       for(i=0;i<n;i++)
       {
        q=(term *)malloc(sizeof(term));
           scanf("%d%d",&(*q).ceof,&(*q).zhishu);//(*p).ceof和p.ceof有很大的区别
        q->next=null;
        p->next=q;
        p=q;
        if(!locate(ha,hb))
        {
               S=makenode();
               insert(ha,S);
        }


       }
           p->next=null;
           return head;

     
    }

    void xiangjia(term *la,term *lb)
    {
       term *ha,*hb,*qa,*qb;
       int sum=0;
       ha=la;  hb=lb;
       qa=ha->next;qb=hb->next;
     

       while(qa&&qb)
       {
       switch(locate(ha,hb))
       {
        case -1:
        ha=qa;qa=qa->next;break;
         case 0:
      
           sum=(*qa).zhishu+(*qb).zhishu;
        if(sum!=0)
        {
         (*qa).zhishu=sum;
         ha=qa;
              
        }
           else
        {
            ha->next=qa->next; free(qa);
        }
         hb->next=qb->next; free(qb);
       
               qa=ha->next;
         qb=hb->next;
               break;

     

       
      
      
       case 1:
      
              hb->next=qb->next;
              insert(ha,qb);
             
              qb=hb->next;
              ha=ha->next;

               break;
      
      
       }
       if(!qa)
       { qa->next=qb;free(hb);}

       }
      
          
      
    }

     

    void display(term *head)
    {
       term *p;
       p=head->next;
       while(p)
       {
           printf(" %d*x%d",(*p).ceof,(*p).zhishu);
           p=p->next;
       }
       printf("\n");

    }

    void main()
    {
       term *la,*lb;
       int m,n;
       printf("请输入多项式的长度m和n\n");
       scanf("%d%d",&m,&n);
       la=creat(m);
       lb=creat(n);
       xiangjia(la,lb);
       printf("相加得到的多项式为:\n");
       display(la);

     


    }

    • 已移动 doukooo 2011年9月22日 5:39 c++ (发件人:微软学生讨论专区)
    2011年9月21日 13:13

答案

  • 你好,

     

    根据您的代码,我发现在create方法中有这样一句:if(!locate(ha,hb)) 然而当程序运行进入create方法中的这句时,term hahb还没有赋值,在debug模式下,编译器会使用默认初始化,而在release模式下,编译器直接使用当前内存中的值。

     

     

    希望我的建议能够帮助您解决您的问题。


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年9月29日 8:07
    2011年9月23日 6:18
  • scanf("%d%d",&m,&n);
    改成

    scanf("%d, %d", &m, &n);

    试一下

    • 已标记为答案 Rob Pan 2011年9月29日 8:07
    2011年9月26日 1:03

全部回复

  • 你好,

     

    根据您的代码,我发现在create方法中有这样一句:if(!locate(ha,hb)) 然而当程序运行进入create方法中的这句时,term hahb还没有赋值,在debug模式下,编译器会使用默认初始化,而在release模式下,编译器直接使用当前内存中的值。

     

     

    希望我的建议能够帮助您解决您的问题。


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年9月29日 8:07
    2011年9月23日 6:18
  • 如果你用的是VS的IDE的话,你这个程序不大,用Debug模式编译,用F11运行,再按F11单步进行调试即可
    0xBAADF00D
    2011年9月25日 10:11
    版主
  • scanf("%d%d",&m,&n);
    改成

    scanf("%d, %d", &m, &n);

    试一下

    • 已标记为答案 Rob Pan 2011年9月29日 8:07
    2011年9月26日 1:03