求帮遍一个C++程序。 10

模拟计算器程序1.问题描述设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。2.基本要求程序运行时,显示一个窗... 模拟计算器程序

1. 问题描述
设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。

2. 基本要求
程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入’=’ 符号后,窗口显示出结果。

3. 测试数据
程序输入不少于5种不同的表达式进行测试。

4. 实现提示
可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。

5. 选做内容
如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。
有错误。
展开
 我来答
maregul1
2013-06-26 · TA获得超过181个赞
知道答主
回答量:37
采纳率:0%
帮助的人:21.9万
展开全部

1、实现思路

   本设计只要求程序支持算术运算+、-、*、/、=、以及C(清除)、Q(关闭)操作。对此对程序作如下分析:

1、 要实现计算器的+、-、*、/、=,首先进行变量定义,要有scanf函数对数字进行输入,并对输入的符号进行判断,然后执行相应的计算。

2、 对字符的判断我用的是if语句,如果所输入的字符对应于+、-、*、/中的一个然后我就对其进行标记。

3、 然后用多分支选择结构switch语句对进行选择计算,分别进行加减乘除。最后用printf函数输出结果(result)

4、 接着编写清除程序,要清屏,开头要包括windows和stdlib函数。当执行完输出语句后要对接下来的输入的字符进行判断,如果输入为C则执行清屏语句system("CLS"),然后用goto语句进行循环使程序跳到loop1即开始新的计算,如果输入为Q,则程序跳到loop2,使程序关闭。

5、 程序的N—S流程图如下


2、实现过程

#include<stdio.h>

#include<windows.h>

#include<stdlib.h>

void main()         /* 主函数*/  

{int act,x;          /*定义整型变量*/

float num1=0,num2=0,result;       /*定义浮点型变量*/

char c;             /*定义字符型变量*/

loop1:scanf("%f%c%f",&num1,&c,&num2);       /*输入*/

if(c=='+')        /*判断*/

{act=1;

}       /*做计算加法标志值*/

if(c=='-')

{act=2;

}       /*做计算减法标志值*/

if(c=='*')

{act=3;

}       /*做计算乘法标志值*/

if(c=='/')

{act=4;}       /*做计算除法标志值*/

switch(act)    /*根据运算符号运算*/

{case 1:result=num1+num2;break;     /*做加法*/

case 2:result=num1-num2;break;      /*做减法*/

case 3:result=num1*num2;break;      /*做乘法*/

case 4:result=num1/num2;break;      /*做除法*/

}

printf("%.2f\n",result);        /*输出结果*/

x=getchar();         /*输入一个字符*/

if(x=='c')           /*判断字符*/

system("CLS");     /*清屏*/

if(x=='q')

goto loop2;        /*跳到loop2(结尾)*/

goto loop1;        /*跳到loop1(循环)*/

loop2:;           /* 标识符*/

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Lim
2013-06-24 · 知道合伙人软件行家
Lim
知道合伙人软件行家
采纳数:152 获赞数:1014
资深研发工程师,敏捷教练ScrumMaster

向TA提问 私信TA
展开全部
#include  <stdlib.h>
#include<iostream.h> 
#include <ctype.h>  
# define MAX 1000  
class calculator  {  
private:  
   struct save1                /* 存储数字  */
   {  
     double n[MAX];  int top; } stack1;  
   struct save2        /* 存储运算符  */
   {  
   char n[MAX];  int top;   } stack2;  
public:  
   calculator()
   {
   };                          /* 空的构造函数 bool stack1empty(save1 s); bool stack2empty(save2 s);  */
void push1( save1  & s, double num );  void push2( save2  & s, char op );  
void pop1( save1  & s, double  & num );  void pop2( save2  & s, char  & op );  int in( char op );  int out( char op );  
void count( double a, char op, double b );  void cal();   };    
 
bool calculator::stack1empty( save1 s )         /* 判断数字栈是否为空 {  */
if ( s.top == -1 )
return 1;
 else return 0;   }    
bool calculator::stack2empty( save2 s )         /* 判断运算符栈是否为空 {  */
if ( s.top == -1 )
return 1;
 else return 0;
}
void calculator::push1( save1 &s, double num )  /* 将数据压入数字栈 { */
if ( s.top == MAX - 1 )
{
cout << "栈已满 ";
} else {
s.top++;
s.n[s.top] = num;
} }
void calculator::push2( save2 &s, char op ) /* 将运算符压入运算符栈 { */
if ( s.top == MAX - 1 )
{
cout << "栈已满";
} else {
s.top++;
s.n[s.top] = op;
} }
void calculator::pop1( save1 &s, double &num ) /* 将栈顶的数据元素取出,存放在num中 { */
if ( s.top == -1 )
{
cout << "栈为空" << endl;
} else{
num = s.n[s.top]; s.top--;
}
}
void calculator::pop2( save2 &s, char &op ) /* 将栈顶的运算符取出,存放在op中 { */
if ( s.top == -1 )
{
cout << "栈为空" << endl;
} else{
op = s.n[s.top]; s.top--;
}
}
int calculator::in( char op )                           /* 在栈内优先级的判断 { */
if ( op == '-' || op == '+' )
return(2);
else if ( op == '*' || op == '/' )
return(4);
else return(-1); }
int calculator::out( char op )                          /* 早栈外优先级的判断 { */
if ( op == '-' || op == '+' )
return(1);
else if ( op == '*' || op == '/' )
return(3);
else return(-1); }
void calculator::count( double a, char op, double b )   /* 进行计算并将所得的结果压入栈顶 { */
double sum; switch ( op )
{
case '+': sum = a + b; break; case '-': sum = a - b; break; case '*': sum = a * b; break; case '/': sum = a / b; break; default: break;
}
push1( stack1, sum ); }
void calculator::cal( void )
{
int i = 0, j; double a, b, c;
char expression[MAX], operate, temp[20]; cout << "请输入表达式(输完之后请加=):"; cin >> expression;
stack1.top = -1;                        /* 清空数字栈 stack2.top=-1;//清空运算符栈 */
while ( expression[i] != '=' )          /* 以=号结尾 { */
if ( isdigit( expression[i] ) ) /*若读入的字符为数字,则继续判断下一个字符,直到下个字符不是数字或者不是小数点,即可保证该操作数是完整的小数,然后将该数入操作数栈*/
{
j = 0;
while ( isdigit( expression[i] ) || expression[i]
== '.' )
{
temp[j++] = expression[i]; i++;
}
temp[j] = '\0';
c= atof( temp );                                                         /* char类型进行转换 push1(stack1,c); } else { */
if ( expression[i] == '-' || expression[i]
    == '+' || expression[i] == '*' || expression[i]
    == '/' )                                                                   /* 若读入的字符为运算符的情况 { */
if ( in( stack2.n[stack2.top] ) < out( expression
      [i] ) || stack2empty( stack2 ) ) /* 读入的运算符与运算符栈顶元素相比,并进行相应的操作 { */
push2( stack2, expression[i] );
i++;
} else {
pop1( stack1, a ); pop1( stack1, b );
pop2( stack2, operate );
count( b, operate, a );         /* 先进后出原则 }  } } } */
while ( stack2.top != -1 )      /* 读入结束后,继续进行操作,直到运算符栈为空 { */
pop1( stack1, a );
pop1( stack1, b );
pop2( stack2, operate ); count( b, operate, a );
}
cout << stack1.n[stack1.top] << endl;
}
void main()
{
cout << "\t****************************************\n";   cout << "\t            模拟计算器程序             \n"; cout << endl;
cout << "    \t****    制作人:陈露              \n"; cout << "    \t****    指导老师:徐静         \n"; cout << "    \t****    专业班级:08网工(1)班   \n"; cout << "    \t****    制作时间:2009年6月19日   \n";
cout << "    \t*****************************************\n"; cout << endl;
part1:
cout << "----------欢迎使用本计算器--------" << endl; calculator mycal;  mycal.cal();
cout << "继续计算吗?" << endl;
cout << "y(是) n(否) A(退出)" << endl; char choice;
cout << "请输入你的选择:";
cin >> choice;
while ( choice != 'A' )
{
if ( choice == 'y' )
{
system( "cls" ); /* 进行全清除 */
goto part1;
} /* goto语句跳转到part1再次进行计算 else  { */
cout << "谢谢使用!" << endl; break;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式