求帮遍一个C++程序。

模拟计算器程序

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

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

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

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

5. 选做内容
如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。
有错误。

第1个回答  2013-06-26

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:;           /* 标识符*/

}

第2个回答  2013-06-24
#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;
}
}
}

求帮遍一个C++程序。
1、 要实现计算器的+、-、*、\/、=,首先进行变量定义,要有scanf函数对数字进行输入,并对输入的符号进行判断,然后执行相应的计算。2、 对字符的判断我用的是if语句,如果所输入的字符对应于+、-、*、\/中的一个然后我就对其进行标记。3、 然后用多分支选择结构switch语句对进行选择计算,分别进行...

编写一个完整的c++程序,实现:求两个整数的最大值
include <iostream> using namespace std;int main(){ int a = 10;int b = 100;int c = a - b;\/\/ int sr[] = { a, b };int i = unsigned(c) >> (sizeof(int)* 8 - 1);\/\/推断c的最高位是0或者1,0则c是正数,1则c是负数。由此能够得出大小。\/\/unsigned类型的数字,往...

求达人帮写一个c++程序读取一行文本,将所有4字母单词替换成单词“love...
||第一个C++程序如下:include<iostream> include<string> using namespace std;void main()string str;printf("Input a line:");cin>>str;for(string::iterator iter = str.begin(); iter != str.end(); ++iter){ if( ((*iter >= 'a' ) && (*iter <= 'z')) ||du((*iter >...

用c++编写一个程序,要求创建一个类,输入若干个学生的数据,包括学号,姓名...
void print(Student s[], int);}stu[MAX];void Student::input(Student s[], int n){for (int i = 0; i < n; i++){cout << "输入第" << i + 1 << "个学生的学号:";4、cin >> s[i].num;cout << "输入第" << i + 1 << "个学生的姓名:";cin >> s[i].nam...

求以下c++代码(大一新生,课没上,实验要做)
if (c >= 'A' && c <= 'Z') { printf("%c\\n", c + 32);} else if (c >= 'a' && c <= 'z') { printf("%c\\n", c - 32);} else { printf("%c\\n", c);} return 0;} 以上所有程序都可以编译运行,并且符合题目要求。

编一个c++程序,输入十个数,输出最大值跟最小值.
int main(){ int a[10],n,max,min,maxxiabiao,minxiabiao;for(n=0;n<=9;n++){ scanf("%d",&a[n]);} max=min=a[0];maxxiabiao=minxiabiao=0;for(n=0;n<=9;n++){ if(a[n]>max){ max=a[n];maxxiabiao=n;} else if(a[n]<min){ min=a[n];minxiabiao=n;} } p...

C语言(最好C++)编一下这个程序
若女利用Fp链接进以 printf("Pls enter the information of teacher:\\n注意中间一空格间隔,性别只可为大写的F或M,Ex:张三 187 M\\n");for (int i = 0; i < n; i++){ cin >> teacher->name >> teacher->weight >> teacher->sex;if (teacher->sex == 'M')...

用c++编写一个程序
楼主稍等片刻,我正在帮你编,快好了,写好后我会将代码献上。以下是代码:include<iostream>#include<string>using namespace std;\/*编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为...

怎么用c++编写一个输入输出整数的程序?
1、首先打开DEV C++软件,点击“新建源代码”,在编辑页面输入以下代码。2、因为题目要求我们先输入一个整数,所以在定义变量时,就应该将其定义为整数型,注意,在输入,输出函数中,整数型对应的是“%d”。3、接下来就要对输入的整数进行判断,在C语言中,if是判断语句,所以用它来对整数进行判断。if...

C++如何编程简单的程序
1、首先我们打开Visual Studio软件,打开新建项目界面,如下图所示 2、接下来在应用程序设置界面中选择控制台程序,然后选择空项目选项,如下图所示 3、然后我们在C++项目的源文件文件夹下面新建C++文件,如下图所示 4、最后我们在C++文件中简单的输出一些内容即可,如下图所示 工具\/材料 Visual Studio ...

相似回答
大家正在搜