如何用C++编写计算器

如何用C++编写计算器,回答得好就有分

思路:

    用一个变量来标记操作符(+ - * /),int flag=0;   //1为加,2为减,3为乘,4为除,0为未按操作符。

    用两个CString变量来存储第一个和第二个操作数,注意如果为除时要检测第二个操作数是否为0。

    随时检测输入框edit中输入的内容,最多只能有一个小数点,首先按小数点时显示为“0.”

    另注意一些细节:连续操作,结果数如果有小数点,末尾为0的要全部消除0等等


实现:

edit控件:增加控件变量:m_edit
新建上述button 分别更改为:IDC_0........IDC_9, IDC_AC, IDC_C , IDC_CHU(除) , IDC_C(乘) , IDC_J(减) , IDC_ADD(加) , IDC_DOT(点) , IDC_DY(等于)
全局变量: 
CString str1, str;
int flag = 0; //0为无,1为加,2为减,3为乘,4为除
bool bflag = false; //输入是否为第二个操作数

代码如下:

void CcalcDlg::OnBnClickedAc() //AC
{
flag = 0;
bflag = false;
str1 = _T("");
str = _T("");
m_edit.SetWindowTextW(_T(""));
}

void CcalcDlg::OnBnClickedC() //C
{
OnBnClickedAc();
}

void CcalcDlg::OnBnClicked1() //1
{
if (bflag==true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("1");
}
else
{
str = str + _T("1");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked2() //2
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("2");
}
else
{
str = str + _T("2");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked3() //3
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("3");
}
else
{
str = str + _T("3");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked4() //4
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("4");
}
else
{
str = str + _T("4");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked5() //5
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("5");
}
else
{
str = str + _T("5");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked6() //6
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("6");
}
else
{
str = str + _T("6");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked7() //7
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("7");
}
else
{
str = str + _T("7");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked8() //8
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("8");
}
else
{
str = str + _T("8");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked9() //9
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str == _T("0"))
{
str = _T("9");
}
else
{
str = str + _T("9");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClicked0() //0
{
if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str != _T("0"))

{
str = str + _T("0");
m_edit.SetWindowTextW(str);
}
}

void CcalcDlg::OnBnClickedDot() //点
{

if (bflag == true)
{
str1 = str;
str = _T("");
bflag = false;
m_edit.SetWindowTextW(_T(""));
}
if (str.Find('.') != -1)
return;
if (str == _T("0") || str == _T(""))
{
str = _T("0.");
}
else
{
str = str + _T(".");
}
m_edit.SetWindowTextW(str);
}

void CcalcDlg::OnBnClickedChu() //除
{
if (str != _T(""))
{
flag = 4;
bflag = true;
}
}

void CcalcDlg::OnBnClickedCheng() //乘
{
if (str != _T(""))
{
flag = 3;
bflag = true;
}
}

void CcalcDlg::OnBnClickedJ() //减
{
if (str != _T(""))
{
bflag = true;
flag = 2;
}
}

void CcalcDlg::OnBnClickedAdd() //加
{
if (str != _T(""))
{
flag = 1;
bflag = true;
}
}

void CcalcDlg::OnBnClickedDy() //等于
{
double a, b;
b = _ttof(str);
a = _ttof(str1);
CString s;
switch (flag)
{
case 1: //加

s.Format(_T("%f"), a + b);

break;
case 2: //减

s.Format(_T("%f"), a - b);

break;
case 3: //乘

s.Format(_T("%f"), a * b);

break;
case 4: //除
if (str != _T("0"))
{
s.Format(_T("%f"), a / b);
}
else
{
MessageBox(_T("除数为0"));
OnBnClickedAc();
}
break;
default:
s = _T("");
}
int f = s.Find('.');
if (f != -1)
{
int i = s.GetLength();
while ('0' == s.GetAt(i - 1))
{
s.Delete(i - 1, 1);
i--;
}
i = s.GetLength();
if ('.' == s.GetAt(i - 1))
{
s.Delete(i - 1, 1);
}
}

m_edit.SetWindowTextW(s);
str = _T("");
str1 = _T("");
flag = 0;
bflag = false;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-30
#include<iostream.h>
void main()
{
float a1,a2;
char oper;
float result;
int flag=0;
cout<<" 请输入简单的运算式:\n";
cin>>a1>>oper>>a2;
switch(oper)
{
case'+':
result=a1+a2;
break;
case'-':
result=a1-a2;
break;
case'*':
result=a1*a2;
break;
default:
cout<<"输入错误的运算符!\n";
flag=1
}
if(flag==0)
cout<<a1<<oper<<a2<<"="<<result<<endl;
}追问

是microsoft visual c++哦?还有,在C++里可以打中文的吗?

追答

可以,不过要用双引号括起来,表示要中文原样输出

追问

那为什么我安装C++时是自动安装的,那他安装在那个路径?我的是WIN7系统的。

追答

我的系统不是win7,我无法解决你的问题

本回答被提问者采纳

用c语言 (c++) 编写计算器程序
01 首先我们需要在Dev C++软件中创建一个C语言项目,项目类型选择控制台程序,如下图所示 02 接下来我们在项目下面

用C++编写一个计算器程序。用户输入两个运算数和四则运算符,输出计算结 ...
用C++编写的”输入两个运算数和四则运算符,输出计算结果”计算器程序代码具体如下:include<stdio.h> void main(){int a,b,d;char c;printf("请输入一种运算符:\\n");scanf("%c",&c);printf("请输入两个数:\\n");scanf("%d",&a);scanf("%d",&b);switch(c){ case '+':d=a+...

c++使用宏的计算器?
b) a*b#define DIVIDE(a,b) a\/bint main(){float a,b;scanf("%f %f",&a,&b);printf("%f\\n",PLUS(a,b));printf("%f\\n",MINUS(a,b));printf("%f\\n",MULTI(a,b));printf("%f\\n",DIVIDE(a,

C++ mfc做计算器 具体步骤 急!!!
1.首先做计算器界面类,界面上要用0-9, +,-,*,\/,=等(复杂点还可以做的和XP一样的科学计算器)2.添加计算逻辑,每个按建点下后,在输出栏的显示我这里有源代码,你如果要请提供邮箱附部分核心代码:1.首先做计算器界面类,界面上要用0-9, +,-,*,\/,=等(复杂点还可以做的和XP一样的科学计算器)2.添加...

[源码和文档分享]基于C++实现的多项式计算器系统
实验内容涉及设计并实现一个多项式计算器系统。利用C++的类及运算符重载特性,编写源代码,最终生成可执行程序,以实现对简单多项式的计算操作。实现步骤如下:1. 定义多项式类,包含多项式的系数和指数,并实现运算符重载以支持多项式的加、减、乘、除等基本运算。2. 设计用户接口,允许用户输入多项式表达式...

c++计算器源代码
include<string.h> include<conio.h> include<math.h> int resultprocess(char mexp[],double * result);int tokenprocess(char mexp[],double shuzhi[],char signs[]);double resultadd(double shuzhi[],char signs[],int sp);void main(){ char mexp[100];double result=0;printf("Please...

如何用c++,定义计算器类calculator?
{ public:calculator(double a=0,double b=0):a(a),b(b){ } void set(double a,double b){ this->a=a;this->b=b;} double add(){ return a+b;} double subtract(){ return a-b;} double multiply(){ return a*b;} double divide(){ if(b==0)throw "错误,除数不能为0...

如何用c++做一个计算器,能连续加减乘除的,不需要界面,最好能是用while...
str = s[i++] + '\\0'; v.push_back(make_pair<int, string> (1, str)); } else if (s[i] == ')') { str = s[i++] + '\\0'; v.push_back(make_pair < int, string>(2, str)

急:mfc编程,用C++写一个简易的计算器,有图形界面的..请求各位大虾给出详...
个人的程序步骤,参考下:1.新建一个对话框程序。2.添加计算器的各个按键及编辑框(用来显示输入和结果)3.为对话框添加一些变量:一个状态标志(计算加减乘除),一个标志(对运算两个数的哪个进行处理),两个double变量(用于运算的两个数),用类向导为编辑框绑定一个变量。定义一个计算函数(进行加减乘除...

用c++做一个四则运算计算器(支持加减乘除混合运算,支持括号,倒数,正负...
include "stdafx.h"#include <iostream>#include <stack>#include <string> using namespace std;stack <double> num;stack <char> op;void dealString(string my) { \/\/字符串转数字操作符进栈 double Nownum = 0; for (int i = 0; i<my.length(); i++) { if (my[i] >= ...

相似回答