谁帮我做一个用vc++ 的计算器?

要一个和windows自带的差不多的,用vc++编写的,用到mfc的,当然是可以运行的了!有就发给我吧 853196275@qq.com ,谢谢了!

第1个回答  2008-08-04
主函数
#include <iostream>
#include "stack.h"
#include <string>
#include <cmath>
using namespace std;
const int calculate_times=100; //计算的次数,可修改
int main()
{
double calculator();
for(int i=0;i<calculate_times;i++) //可注释
{
calculator();
cout<<endl;
}
return 0;
}
int operator_order(char p) //用于判断运算符优先级
{
switch(p)
{
case '=': return 0;
case '#': return 1;
case '(':
case ')': return 2;
case '+':
case '-': return 3;
case '*':
case '/': return 4;
default: return -1;
}
}
double operate(double a,double b,char p) //用于操作两个数与字符,如2*3
{
switch(p)
{
case '+': return (a+b);
case '-': return (a-b);
case '*': return (a*b);
case '/': return (a/b);
default: return -99999;
}
}
bool Is_number(char p) //判断输入的字符是否为数字
{
if(p>='0'&&p<='9'||p=='.')
return true;
return false;
}
double calculator()
{
stack<char> stack_operator; //装有操作符的栈
stack<double> stack_operand,stack_string_to_number; //装有操作数的栈及暂时存储连续的数字字符的栈
int count1=0,count2=0,dot_position=0,dot_exist=0,negative_exist=0; //记录是否是负数,小数以及小数点的位置的变量
double result=0,value1=0,value2=0,temp;
string string_input;
char *p,top;
cout<<"请输入表达式:(如要计算-3.2+2*(4-6)则输入-3.2+2*(4-6)=后按回车键即可)"<<endl;
cin>>string_input;
p=&string_input[0];
stack_operator.push('#'); //先将栈底放一字符
while(*p!='=')
{
if(Is_number(*p)==0&&operator_order(*p)==-1) //输入非法字符时的提示
{
cout<<"输入有有误,请查证后重新输入!"<<endl;
return 0;
}
if(Is_number(*p)) //用于将读入的连续的数字字符转换成数字
{
while(Is_number(*p)) //存储连续数字字符
{
if(*p=='.') //记录小数点所在位置
{
dot_exist=1;
dot_position=stack_string_to_number.length();
p++;
continue;
}
temp=(int(*p)-48); //字符换成数字
stack_string_to_number.push(temp);
p++;
if(Is_number(*p)==0&&operator_order(*p)==-1) //输入非法字符时的提示
{
cout<<"输入有有误,请查证后重新输入!"<<endl;
return 0;
}
}
while(stack_string_to_number.empty()==0) //读出连续存储字符,化为数字
{
stack_string_to_number.top(temp);
if(stack_string_to_number.length()>dot_position&&dot_exist==1) //判断是小数点前的数还是小数点后的数
{
count1=stack_string_to_number.length()-dot_position;
value1+=(temp*pow(10,(-count1))); //转换小数部分
}
else
{
value1+=(temp*pow(10,count2)); //转换整数部分
count2++;
}
stack_string_to_number.pop();
}
if(negative_exist==1) //负数的情况
value1=-1*value1;
count1=0;count2=0;dot_position=0;dot_exist=0;negative_exist=0; //还原,以不影响下次运行
stack_operand.push(value1); //装换完的数进栈
value1=0;
}
if(Is_number(*p)==0)
{
if(stack_operator.length()==1&&*p=='-') //判断是负号还是减号
{
negative_exist=1;
p++;
}
while(Is_number(*p)==0)
{
stack_operator.top(top);
while((operator_order(*p)>operator_order(top)||*p=='('||top=='(')&&Is_number(*p)==0) //满足条件的操作符入栈
{
stack_operator.push(*p);
if(Is_number(*p)==0&&*p!=')'&&*(p+1)=='-') //判断是负号还是减号
{
negative_exist=1;
p++;p++;
break;
}
p++;
if(Is_number(*p)==0&&operator_order(*p)==-1) //输入非法字符时的提示
{
cout<<"输入有有误,请查证后重新输入!"<<endl;
return 0;
}
}
while(Is_number(*p)==0&&operator_order(*p)<=operator_order(top)) //要入栈的运算符优先级低于栈顶的运算符时先取出元素进行运算
{
if(*p==')'&&top=='(') //若左右括号相遇,同时消去
{
stack_operator.pop();
p++;
if(Is_number(*p)==0&&operator_order(*p)==-1) //输入非法字符时的提示
{
cout<<"输入有有误,请查证后重新输入!"<<endl;
return 0;
}
stack_operator.top(top);
continue;
}
if(stack_operator.length()==1||stack_operand.length()==1) //判断是否栈中元素不足
{
break;
}
stack_operand.top(value2); //开始取元素进行元算
stack_operand.pop();
stack_operator.pop();
stack_operand.top(value1);
stack_operand.pop();
if(fabs(value2)<=pow(10,-12)&&top=='/') //判断除数是否为0,若为0,停止
{
cout<<"除数为0!"<<endl;
return -99999;
}
result=operate(value1,value2,top);
cout<<"value1:"<<value1<<'\t'<<"value2:"<<value2<<'\t' //用于输出每步的结果,可注释掉
<<"operator:"<<top<<'\t'<<"result:"<<result<<endl;
stack_operand.push(result);
value1=0;
stack_operator.top(top);
if(*p=='='&&top=='#') //遇到'='且栈stack_operator中只剩下'#'号时结束
break;
}
if(*p=='=')
break;
}
}
}
cout<<string_input<<result<<endl; //输出结果
return result;
}

头文件stack.h
#include <iostream>
using namespace std;
const int max_len=110;
enum error_code{overflow,underflow,success}; //报错
template <class T>
class stack
{
public:
stack(); //对栈实行初始化
bool empty() const; //判断栈是否为空
bool full() const; //判断栈是否为满
int length() const; //返回栈长度
error_code top(T &x); //取栈顶元素
error_code push(const T &x); //入栈(压栈)从栈顶插入一元素
error_code pop(); //出栈(弹栈)从栈顶删除一元素
private:
T array[max_len]; //用数组存储栈
int count; //表示栈中元素的多少
};
template <class T> stack<T>::stack()
{
count=0;
}
template <class T> bool stack<T>::empty() const
{
if(count==0)
return true;
else
return false;
}
template <class T> bool stack<T>::full() const
{
return count==max_len;
}
template <class T> int stack<T>::length() const
{
return count;
}
template <class T> error_code stack<T>::top(T &x)
{
if(empty())
return underflow;
else
{
x=array[count-1];
return success;
}
}
template <class T> error_code stack<T>::push(const T &x)
{
if(full())
return overflow;
else
{
array[count++]=x;
return success;
}
}
template <class T> error_code stack<T>::pop()
{
if(empty())
return underflow;
else
{
count--;
return success;
}
}
以前学数据结构时自己写的VC++环境下编译运行没什么问题,能算正负整数或小数的加减乘除,任意层小括号
只不过自己没怎么看mfc,没有图形化界面
一个例子
请输入表达式:(如要计算-3.2+2*(4-6)则输入-3.2+2*(4-6)=后按回车键即可)
-3.2+2*(4-6)=
value1:4 value2:6 operator:- result:-2
value1:2 value2:-2 operator:* result:-4
value1:-3.2 value2:-4 operator:+ result:-7.2
-3.2+2*(4-6)=-7.2
第2个回答  2008-08-04
i_you_love的程序原理,加上MFC界面就OK了
第3个回答  2008-08-04
要是真的是从头写代码,还要实现跟windows自带的差不多的功能,别说是20分,200元估计才能勉强找到人
第4个回答  2008-08-05
200元,开玩笑,windows自带的科学计数器你给2000也没人接.
第5个回答  2008-08-04
你怎么会那么懒

求用VC++编辑加减乘除的计算器程序,具体操作步骤。(有图最好)_百度知...
把输入的算式当作一个链表,可以单链表,也可以双链表,随你。链表中有两种结点,数字结点和运算符结点。数字结点:有一个double类型的数据域,有一个指针域,指向运算符结点。运算符结点:有一个char类型的数据域,存放运算符,还有一个指针域,指向下一个操作数。链表结构大概是: head——>操作数...

用C++编写一道加减乘除计算器的程序 ?
以下是一个C#计算器的源码,我写有注释,你可以看下思想,把它换成VC++的using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace 计算器{ \/\/\/ \/\/\/ Form1 的摘要说明。 \/\/\/ public class Form1 : System.Windows.Forms...

MFC编写计算器具体步骤 方法 代码,拜托高手急用!
1、首先打开VS2013,新建一个VC++ MFC项目,命名为 gongzi。2、然后在程序类型中,选择“基于对话框”,点击“完成”按钮。3、然后在弹出的对话框中,删除原先的Static Text,添加相应的控件到窗体上。4、接着在应发工资编辑框右击添加变量。 变量名称是 m_editTotal, 变量类型是 double, 类别为 v...

用c语言做一个加减乘除还有乘方的计算器,做出来界面要好看好看好看。一...
给你个程序:刚写的,我也是初学者,只可以计算小数,括号和四种基本运算,单不能乘方,我用的是VC++6.0:代码如下:include "stdio.h"include "string.h"include "math.h"const int N=30;\/\/定义数组长度,可以修改更大;计算能力更强 char unnum[N];\/\/模拟栈符号数组,用来存放运算符 int i...

用C++编一个一元多项式计算器 大虾们 谢谢啦!!!
Polyn CreatePolyn(Polyn head,int m)\/\/建立一个头指针为head、项数为m的一元多项式 { int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial));head->next=NULL;for(i=0;i<m;i++){ p=(Polyn)malloc(sizeof(struct Polynomial));\/\/建立新结点以接收数据 cout<<"请输入第"<<i+...

如何用VC++6.0 MFC 实现计算器
如何用VC++6.0 MFC 实现计算器  我来答 1个回答 #热议# 蓝洁瑛生前发生了什么?java118 2005-12-22 · TA获得超过9311个赞 知道小有建树答主 回答量:1387 采纳率:100% 帮助的人:514万 我也去答题访问个人页 关注 展开全部 Figure 8-10. The DlgCalc application. DlgCalc.h\/\/ Dlg...

怎样用vc++实现一个带图形界面的简单计算器,跪求步骤,代码。
...计算器 还不简单啊。。。先基于MFC 建立一个基于对话框的程序然后 编辑资源 设置 1 ~10 和+-*\/按钮 再设置一个编辑框属性为不可用状态 用来显示数的。每个按钮关联一个单击事件,在单击事件里面获取按下的相应数字。手打真累。。。简单的说就在不同的按钮事件里面错里不同的事情。。。

vc++6.0计算器代码
, 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("")...

...计算器程序 那怎么弄一个界面呢 像我们手机上用的那种
打开VC++6.0系统,新建一个源文件,把你编的程序粘贴进去,然后保存,连接,编译,运行,就OK了!

求用VC++6、MFC(基本对话框)编一个计算器的具体步骤。 请也给我发一...
void main(){ float x,y;char ch;printf("please enter :\\n");scanf("%f",&x);scanf("%c",&ch);scanf("%f",&y);switch(ch){ case'+':printf("%.2f",x+y);break;case'-':printf("%.2f",x-y);break;case'*':printf("%.2f",x*y);break;case'\/':printf("%.2f",x\/...

相似回答
大家正在搜