| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1292 人关注过本帖, 1 人收藏
标题:c++计算器的问题
只看楼主 加入收藏
zj704102518
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-12-29
结帖率:33.33%
收藏(1)
 问题点数:0 回复次数:4 
c++计算器的问题
下面这段程序是我copy来的  我有些疑问 就是 如果不先选择运算方法(即下面的1,2,3,4,5,0)。而是直接输入数字,运算符,数字的程序该怎么做  只求一点思路  不求结果



#include <iostream.h>
#include <stdlib.h>
double cf(double x,double n)
{
    double a=1;
    for(int i=1;i<=n;i++)
        a*=x;
        return a;
}

void main()
{
  double a,b,c;                                 
  int hd;                                    
  do
  {
     
     cout<<"\t\t请选择您需要的操作:"<<endl;
     cout<<"\t**********************************"<<endl;
     cout<<"\t1.执行加运算"<<endl;
     cout<<"\t2.执行减运算"<<endl;
     cout<<"\t3.执行乘运算"<<endl;
     cout<<"\t4.执行除运算"<<endl;
     cout<<"\t5.执行a的b次方运算"<<endl;
     cout<<"\t0.退出程序"<<endl<<endl;
     cout<<"\t请选择序号:";
     cin>>hd;
     
     switch(hd)
     {
         case 1:
              cout<<"\t请输入数据(以空格分开):";
              cin>>a;cin>>b;            
              c=a+b;                                      
              cout<<"\t运算的结果为 "<<c<<endl;        
             break;
         case 2:
              cout<<"\t请输入数据(以空格分开):";
              cin>>a>>b;            
              c=a-b;
              cout<<"\t运算的结果为 "<<c<<endl;         
             break;
         case 3:
              cout<<"\t请输入数据(以空格分开):";
              cin>>a>>b;     
              c=a*b;
              cout<<"\t运算的结果为 "<<c<<endl;         
             break;
         case 4:
              cout<<"\t请输入数据(以空格分开):";
              cin>>a>>b;
              if(b==0||a==0)
              {
                  cout<<"\t被除数或除数等于0,计算没有意义,请重新输入!"<<endl;
              }
              else
              {
                c=a/b;
                cout<<"\t运算的结果为 "<<c<<endl;
              }     
             break;
         case 5:
              cout<<"\t请输入数据(以空格分开):";
              cin>>a>>b;     
              c=cf(a,b);
              cout<<"\t运算的结果为 "<<c<<endl;
             break;
         case 0:
             break;
         default:
                cout<<"\t选择错误!请重新选择!"<<endl;
                break;
     }
            system("pause");
            system("cls");
  }while(1);
}
搜索更多相关主题的帖子: 计算器 
2010-01-19 13:28
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
收藏
得分:0 

//小型计算器(功能:+、-、*、/、n次方)
#include <iostream>
using namespace std;
double add(double a,double b)
{
    return (a+b);
}
double sub(double a,double b)
{
    return (a-b);
}
double mul(double a,double b)
{
    return (a*b);
}
double div(double a,double b)
{
    if(b==0)
    {
        cout<<"输入错误!"<<endl;
        return 0;
    }
    return (a/b);
}
double nth_pow(double a,double n)
{
    for(int i=2;i<=n;i++)
        a*=a;
    return a;
}
void main()
{
    double a,b;
    char c,d;
    do
    {
        cout<<"请输入:";
        cin>>a>>c>>b;
        cout<<a<<c<<b<<"=";
        switch(c)
        {
        case '+':
            cout<<add(a,b)<<endl;
            break;
        case '-':
            cout<<sub(a,b)<<endl;
            break;
        case '*':
            cout<<mul(a,b)<<endl;
            break;
        case '/':
            cout<<div(a,b)<<endl;
            break;
        case '^':
            cout<<nth_pow(a,b)<<endl;
            break;
        default :
            cout<<"\nInput error!"<<endl;
        }
        cout<<"继续运算?是(y):否(n)\n";
        cin>>d;
    }
    while(d=='y');
}
收到的鲜花
  • zj7041025182010-02-14 13:04 送鲜花  2朵  
2010-02-03 14:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
其实计算器可以分成两部分。一个是数值计算的部分,另一个是文本解析的部分。
如果可以把这两个部分清晰的划开,那么你的程序将来改进的余地就非常大。
这两方面计算机学家都做过专门的研究,如果你对数值计算的精度,功能种类和灵活性等方面没有什么特别的要求的话,第一个部分就没什么可设计的。
剩下的就是解析文本了,怎么解析呢?这就五花八门了。
一个比较有意思的练习其实是做一做,前、后缀表达式和中缀表达式之间的相互转化。锻炼这方面的技术,绝对比单纯的做一个小计算器强~
2010-02-03 22:55
木瓜君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:144
注 册:2009-10-17
收藏
得分:0 
直接输入表达式(进行带括号的多级运算)~~应该用栈来做~~这个数据结构有讲到~
我昨天用了一天时间才写完~代码太多就不写出来了~
思想是,把运算符和操作符分开,从左到右比较操作符优先级,进行进栈或退栈操作~
每运算一次就把运算所得数值进栈,直到操作符栈没有操作符为止~
不过有强人可以用递归来写~这是他的代码,比较简洁
程序代码:
#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<<"*               递归实现的四则运算表达式求值程序               *\n";
    cout<<"****************************************************************\n";
    cout<<"使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n";
    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-02-11 03:08
taozztzz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:85
专家分:180
注 册:2008-12-21
收藏
得分:0 
这里有我写的例子:
https://bbs.bccn.net/thread-297802-1-1.html

胜利是唯一的信仰!
2010-02-20 01:02
快速回复:c++计算器的问题
数据加载中...
 
   



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

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