| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:有关逆波兰计算器的程序,帮忙分析一下!!!!
只看楼主 加入收藏
水晶宝宝
Rank: 2
来 自:江西
等 级:禁止访问
帖 子:11
专家分:15
注 册:2009-10-30
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:5 
有关逆波兰计算器的程序,帮忙分析一下!!!!
计算器(1-2)*(4+5),用逆波兰计算机表示成12-45+*,逆波兰计算器可以用来说明外部变量的用法,程序用到栈的知识,还包含了四个文件。
第一个文件main.c

#include <stdio.h>
#include <stdlib.h>
#define maxop 100
#define number '0'
int getop (char []);
void push (double f);
double pop (void);
int main (void)
{
    int type;
    double op2;
    char s[maxop];
    while ((type=getop(s))!='x')
    {
        switch(type)
        {
        case number:
            push(atof(s));
            break;
        case '+':
            push(pop()+pop());
            getchar();
            break;
        case '*':
            push(pop()*pop());
            getchar();
            break;
        case '-':
            op2=pop();
            push(pop()-op2);
            getchar();
            break;
        case '/':
            op2=pop();
            if(op2!=0)
                push(pop()/op2);
            else
                printf("error:zero divisor \n");
            getch();
            break;
        case '=':
            printf("result is:\t%.8g\n",pop());
            break;
        default:
            printf("error :unknow command %s\n",s);
            break;
        }
    }
    return 0;



错误提示说 红色部分出错,但是我改成getchar();之后又出现四个错误,帮忙分析一下,后面还有三个文件,一个一个来
搜索更多相关主题的帖子: 计算器 波兰 
2009-10-30 19:50
hackerStar
Rank: 2
来 自:厦门
等 级:禁止访问
帖 子:66
专家分:71
注 册:2009-10-29
收藏
得分:1 
宝宝,你要把全部代码都同时运行一次,我帮你把其他代码给出来哈

-------------->>>>>信仰火之意识,崇拜黑客精神<<<<<--------------------
2009-10-30 20:37
hackerStar
Rank: 2
来 自:厦门
等 级:禁止访问
帖 子:66
专家分:71
注 册:2009-10-29
收藏
得分:0 
第二个文件 stack.c

#define maxval 100
int sp=0;
double val [maxval];
void push (double f)
{
    if(sp<maxval)
        val[sp++]=f;
    else
        printf("error:stack full,cannot push %g\n",f);
}
double pop(void)
{
    if(sp>0)
        return val[--sp];
    else
    {
        printf("error:stack empty\n");
        return 0.0;
    }
}

-------------->>>>>信仰火之意识,崇拜黑客精神<<<<<--------------------
2009-10-30 20:39
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
这个不是在那本书上的例题么?
我考虑过几个问题 :
getch()是什么函数,如果保证s[maxop]不溢出。
如果排除输入三个数然后输入一个运算符的错误。
所以那个例题还可以自己完善 。




要练习算法就来http:///!!有挑战哦!!
2009-10-30 20:47
hackerStar
Rank: 2
来 自:厦门
等 级:禁止访问
帖 子:66
专家分:71
注 册:2009-10-29
收藏
得分:0 
第三个文件
#include <ctype.h>
int getch(void);
void ungetch(int);
int getch(char s[])
{
    int i,c;
    while ((s[0]=c=getch())==' '||c=='\t')
        s[1]='\0';
    if(!isdigit(c)&&c!='.')
        return c;
    i=0;
    if(isdigit(c))
        while(isdigit(s[++i]=c=getch()))
            if(c=='.')
                while(isdigit (s[++i]=c=getch()))
                    s[i]='\0';
                if(c!='\n')
                    ungetch(c);
                return number;

}

-------------->>>>>信仰火之意识,崇拜黑客精神<<<<<--------------------
2009-10-30 21:09
hackerStar
Rank: 2
来 自:厦门
等 级:禁止访问
帖 子:66
专家分:71
注 册:2009-10-29
收藏
得分:0 
宝宝,不对呀,我把程序按照书上的运行一次,竟然出错了    push(atof(s));这句代码错了吗?

-------------->>>>>信仰火之意识,崇拜黑客精神<<<<<--------------------
2009-10-30 21:11
快速回复:有关逆波兰计算器的程序,帮忙分析一下!!!!
数据加载中...
 
   



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

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