| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 400 人关注过本帖
标题:来看看这个C++程序
只看楼主 加入收藏
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
结帖率:93.48%
收藏
已结贴  问题点数:20 回复次数:4 
来看看这个C++程序
在下边的这个程序中,编译能通过,运行过程中有错误,调式有expression cannot evaluted的错误,高手帮调式下,谢了!代码如下:
#include<iostream.h>
#include<cstdio>
struct Node
{
    float conf;
    int exps;
    Node *next;
    Node()
    {
        conf=0.0;
        exps=0;
        next=NULL;
    }
};
Node *createNode()
{
    Node *str,*p;
    float c;
    int e;
    p=new Node;
    str=p;
    cin>>c>>e;
    p->conf=c;
    p->exps=e;
    while(true)
    {
        Node *temp=new Node;
        cin>>c>>e;
        temp->conf=c;
        temp->exps=e;
        p->next=temp;
        p=temp;   
        if(c==0.0&&e==0)
        {
        temp->conf=0.0;
        temp->exps=0;
        break;
        }

    }
    return str;
}

void printA(Node *pp)
{
    //Node *np=NULL;
    cout<<"多项式为:";
    cout<<pp->conf<<"x"<<char(94)<<pp->exps;
    //for(np=pp->next;((np->conf!=0.0)||(np->exps!=0));np=np->next)
    pp=pp->next;
    while((pp->conf!=0.0)||(pp->exps!=0))
    {
        if(pp->conf>0)
        {
            cout<<" + "<<pp->conf<<"x"<<char(94)<<pp->exps;
        }
        if(pp->conf<0)
        {
            cout<<" - "<<-pp->conf<<"x"<<char(94)<<pp->exps;
        }
        pp=pp->next;

    }
    cout<<endl;
}

void clears(Node *xp)
{
    Node *cp=NULL,*tp;
    for(cp=xp;((cp->conf!=0)||(cp->exps!=0));cp=cp->next)
    {
        tp=cp->next;
        delete cp;
        cp=tp;
    }
    delete cp;
}
Node *add(Node *A,Node *B)
{
    Node *q1=NULL,*p1=NULL,*r,*tp,*first;
    float temp;
    q1=A;
    p1=B;
    tp=new Node;
    first=tp;
    bool t=true;
    while((q1->conf!=0.0||q1->exps!=0)&&(p1->conf!=0.0||p1->exps!=0))
    {
        if(q1->exps>p1->exps)
        {
            if(t)
            {
                tp->conf=q1->conf;
                tp->exps=q1->exps;
                t=false;
                q1=q1->next;
            }
            else
            {
            r=new Node;
            r->conf=q1->conf;
            r->exps=q1->exps;
            tp->next=r;
            tp=r;
            q1=q1->next;
            }
        }
        if(q1->exps<p1->exps)
        {
            if(t)
            {
                tp->conf=p1->conf;
                tp->exps=p1->exps;
                t=false;
                p1=p1->next;
            }
            else
            {
            r=new Node;
            r->conf=p1->conf;
            r->exps=p1->exps;
            tp->next=r;
            tp=r;
            p1=p1->next;
            }
        }
        if(q1->exps==p1->exps)
        {
            temp=q1->conf+p1->conf;
            if(t)
            {
                if(temp!=0)
                {
                tp->conf=temp;
                tp->exps=p1->exps;
                }
                t=false;
                p1=p1->next;
                q1=q1->next;
            }
            else
            {
            r=new Node;
            r->conf=temp;
            r->exps=p1->exps;
            tp->next=r;
            tp=r;
            p1=p1->next;
            q1=q1->next;
            }
        }
    }
    while((q1->conf!=0.0||q1->exps!=0))
    {
        r=new Node;
        r->conf=q1->conf;
        r->exps=q1->exps;
        tp=r;
        q1=q1->next;
    }
    while((p1->conf!=0.0||p1->exps!=0))
    {
        r=new Node;
        r->conf=p1->conf;
        r->exps=p1->exps;
        tp=r;
        p1=p1->next;
    }
    r=new Node;
    r->conf=0;
    r->exps=0;
    return first;
}


void main()
{
    Node *ttp1,*ttp2,*ttp3;
    cout<<"请输入第一个多项式:"<<endl;
    ttp1=createNode();
    cout<<"请输入第二个多项式:"<<endl;
              ttp2=createNode();
    printA(ttp1);
    printA(ttp2);
    ttp3=add(ttp1,ttp2);
    printA(ttp3);

}
2009-11-02 09:59
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:20 
先说说你自己的程序的思路,这样别人熟悉起来也方便些

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-11-02 10:12
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
回复 楼主 无诲今生
主要是多项式的加法运算,add(Node,Node)这个函数是进行多项式的加法运算,createNode这个函数是存一个多项式,反回链表的头指针,printA这个函数是输出链表内容

顺境逆境切莫止境,得意失意切莫在意。
2009-11-02 12:05
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
版主,是哪里错了?

顺境逆境切莫止境,得意失意切莫在意。
2009-11-02 17:24
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
           
程序代码:
if(t)
{
    tp->conf=q1->conf;
    tp->exps=q1->exps;
    t=false;
    q1=q1->next;
 }


程序代码:
 if(t)
 {
     tp->conf=p1->conf;
     tp->exps=p1->exps;
     t=false;
     p1=p1->next;
  }


程序代码:
if(t)
{
 if(temp!=0)
 {
  tp->conf=temp;
  tp->exps=p1->exps;
 }
   t=false;
  p1=p1->next;
  q1=q1->next;
}

这几个if语句里面有错。你每次赋完应该让tp向后移。
否则后面相加的值会把前面覆盖了。出现first->next == NULL的时候,在printA()就出错了。
具体怎么改,你自己去琢磨琢磨。

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-11-02 19:49
快速回复:来看看这个C++程序
数据加载中...
 
   



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

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