| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 969 人关注过本帖
标题:求助!!求这个用C++编写的计算器的详细解释。多谢!!
只看楼主 加入收藏
上善若幂
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-3-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求助!!求这个用C++编写的计算器的详细解释。多谢!!
#include<iostream>
using namespace std;
class calculator
{
public:
    char token;
    int exp( void );
    int term( void );
    int factor( void );
    void match( char expectedToken );
    void error( void );
};
int calculator::exp(void)
{
    int temp = term(); /*计算比加减运算优先级别高的部分*/
    while (( token == '+' ) || ( token == '-' ))
        switch ( token )
        {
        case '+':
            match('+');     /*加*/
            temp += term();
            break;
        case '-':
            match('-');
            temp -= term(); /*减*/
            break;
        }
    return temp;
}
int calculator::term( void )
{
    int div; /*除数*/
    int temp = factor();   /*计算比乘除运算优先级别高的部分*/
    while (( token == '*' ) || ( token == '/' ))
        switch ( token )
        {
        case '*':
            match('*');  /*乘*/
            temp *= factor();
            break;
        case '/':
            match('/');   /*除*/
            div = factor();
            if ( div == 0 ) /*判断除数是否为0*/
            {
                fprintf(stderr, "除数为0.\n" );
                exit(1);
            }
            temp /= div;
            break;
        }
    return temp;
}

int calculator::factor( void )
{
    int temp;
    if ( token == '(' ) /*有括号的运算*/
    {
        match( '(' );
        temp = exp();
        match(')');
    }

    else if ( isalnum(token)) //实际的数字
    {
        ungetc( token, stdin ); //将读入的字符退还给输入
        scanf( "%d", &temp ); //读出数字
        token = getchar();  //读出当前的标志
    }
    else error(); //不是括号也不是数字
    return temp;
}

void calculator::match( char expectedToken ) //对当前的标志进行匹配
{
    if ( token == expectedToken ) token = getchar(); //匹配成功,获取下一个标志
    else error(); //匹配不成功,报告错误
}

void calculator::error( void ) //报告出错信息的函数
{
    cout<< "输入有错误"<<endl;
    exit( 1 );
}

int main ()
{
    cout<<"***************************************\n";
    cout<<"请从键盘上直接输入表达式,以回车键结束.";
    cout<<"***************************************\n\n";
    int result;  //运算的结果
    cout<<"请输入表达式: ";
    calculator c1;
    c1.token = getchar(); //载入第一个符号
    result = c1.exp(); //进行计算
    if ( c1.token == '\n' ) // 是否一行结束
        cout<< " >> 表达式的计算结果为 : "<<result<<endl;
    else c1.error(); //出现了例外的字符
    return 0;
}
搜索更多相关主题的帖子: 解释 编写 计算器 
2010-03-29 19:32
胡马平
Rank: 2
等 级:论坛游民
帖 子:18
专家分:54
注 册:2010-3-16
收藏
得分:5 
很抱歉,没看懂,等待高人吧!!!
2010-03-30 06:00
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:5 
我也不懂
2010-03-30 07:49
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:5 
你具体是哪块儿看不懂呢?
光这样泛泛的说求详细解释不行啊

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-03-30 09:11
james230932
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:162
专家分:629
注 册:2008-1-20
收藏
得分:5 
一个计算器类里面有那么几个方法。就是根据实例化对象的时候调用各个方法嘛。哪里不懂了?不懂的是那些方法吧。?
整体了解了是怎么个调用方法后,就根据一个个函数慢慢参透呗。总不可能要别人一句一句的注释给你看吧...

老天给了我十根纤纤玉指,我却用它们来挖鼻屎。
2010-03-30 10:45
快速回复:求助!!求这个用C++编写的计算器的详细解释。多谢!!
数据加载中...
 
   



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

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