免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3288 | 回复: 3
打印 上一主题 下一主题

[C++] 求教C++计算器程序问题: [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 12:48 |只看该作者 |倒序浏览
#include <iostream.h>
void main()
{
        double t1,t2,t3;
        char a;
        cout<<"输入第一个数:";
        cin>>t1;
                cout<<"输入第二个数:";
        cin>>t2;
        if(t1>=0&&t2>=0)
        {
                cout<<" 输入计算符:";
                        cin>>a;
                switch(a)
                {
                case '+':  t3=t1+t2;cout<<"结果:"<<t3;break;
                case '-':  t3=t1-t2;cout<<"结果:"<<t3;break;
                case '*':  t3=t1*t2;cout<<"结果:"<<t3;break;
                case '/':   
                         if(t2!=0)
                                                 {
                                t3=t1/t2;
                                        cout<<"结果:"<<t3;break;
                        }
                        else
                                        cout<<"t2不符合条件."<<endl;break;
                }
        }
        else
                cout<<"输入的不是数字."<<endl;
        cout<<endl;
}
这是一个计算器程序
怎样在这个程序上加一个循环使得这个程序更加的完美
那位大侠能帮忙解决一下,同时对于此程序有哪些缺点希望各位大侠多提宝贵意见
谢谢

论坛徽章:
0
2 [报告]
发表于 2007-04-15 00:34 |只看该作者
#include<iostream>
#include<stack>
#include<cassert>

using namespace std;

int main()
{
        stack<int>intstack(20);
        stack<int>reverseintstack(20);
        stack<char>charstack(20);
        stack<char>reversecharstack(20);

        char oper;
        char ch;
        int num;
        int num1,num2,num3;
        cout<<"enter a number: ";
        cin>>num;
        intstack.push(num);
        cout<<endl;
        cout<<"enter oper: ";
        cin>>oper;
        charstack.push(oper);
        //cout<<"enter a number: ";
        //cin>>num;
        //intstack.push(num);
        while(oper!='#')
        {
                cout<<"enter a number: ";
                cin>>num;
                intstack.push(num);
                if(oper=='*')
                {
                        charstack.pop();
                        num1=intstack.top();
                        intstack.pop();
                        num2=intstack.top();
                        intstack.pop();
                        num3=num1*num2;
                        intstack.push(num3);
                }
        if(oper=='/')
                {
                        charstack.pop();
                        num1=intstack.top();
                        intstack.pop();
                        num2=intstack.top();
                        intstack.pop();
                        num3=num2/num1;
                        intstack.push(num3);
                }
                if(oper=='+'||oper=='-')
                        charstack.push(oper);
                if(oper!='*'||oper!='/'||oper!='+'||oper!='-')
                {
                        cerr<<" wrong operator,enter a operator again."<<endl;
                        cin>>oper;
                }
               
                cout<<"enter a oper: ";
            cin>>oper;
            charstack.push(oper);
            cout<<endl;
            //cout<<"enter num: ";
            //cin>>num;
            //intstack.push(num);
            //cout<<"enter a number: ";
            //cin>>num;
            //intstack.push(num);       
        }
        while(!intstack.isemptystack())
        {
                num1=intstack.top();
                reverseintstack.push(num1);
                intstack.pop();
        }
        while(!charstack.isemptystack())
        {
                ch=charstack.top();
                reversecharstack.push(ch);
                charstack.pop();
        }
        while(!reverseintstack.isemptystack())
        {
                num1=reverseintstack.top();
                reverseintstack.pop();
                if(reverseintstack.isemptystack())
                        cout<<num1;
                else
                {
                        num2=reverseintstack.top();
                        reverseintstack.pop();
                        oper=reversecharstack.top();
                        reversecharstack.pop();
                        if(oper=='+')
                        {
                                num1=num1+num2;
                                reverseintstack.push(num1);
                        }
                        if(oper=='-')
                        {
                                num1=num1-num2;
                                reverseintstack.push(num1);
                        }
                }
        }
}


这个结构比较混乱,没考虑异常,也没考虑括号!

[ 本帖最后由 spdf 于 2007-4-15 00:37 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-04-15 14:43 |只看该作者
不要搞那么多case if 用个类把操作符封起来,用函数指针调用比较好看比如,而且有现成的标准四元表达式算法,和后续表达式算法去放狗搜就好了typedef double (*compute)(double , double);

[ 本帖最后由 zhoujianxin 于 2007-4-15 20:26 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-04-17 17:45 |只看该作者
谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP