用visual c++实现一个计算器 实现加减乘除就可。
要求比较安全。。还有结果的正确性200分,好的加分不要求太好,只要是原创的1)进行加、减、乘、除基本运算2)要求能够对数据的合法性做判断邮箱weikouhendiao@1...
要求比较安全。。
还有结果的正确性
200分,好的加分
不要求太好,只要是原创的
1) 进行加、减、乘、除基本运算
2) 要求能够对数据的合法性做判断
邮箱weikouhendiao@163.com
要有界面的。。跟附件里面的差不多 展开
还有结果的正确性
200分,好的加分
不要求太好,只要是原创的
1) 进行加、减、乘、除基本运算
2) 要求能够对数据的合法性做判断
邮箱weikouhendiao@163.com
要有界面的。。跟附件里面的差不多 展开
展开全部
/*浮点数的加减乘除
输入表达式即可,如2+(3*(-45)^2)/100-5.3
可能验证做得不是很好,但这个程序绝对原创,
绝对安全稳定,一个晚上的心血啊,希望楼主喜欢
*/
#include <stdio.h>
#include <math.h>
#include <stack>
#define isdigit(a) (a>='0'&&a<='9')?true:false
char str[100];
int len;
/*所有的运算法,#是处理需要,添加的*/
const char A[10][10]={
"?+-*/^()#",
"+>><<<<>>",
"->><<<<>>",
"*>>>><<>>",
"/>>>><<>>",
"^>>>>><>>",
"(<<<<<<=?",
")>>>>>?>>",
"#<<<<<<?="
};
/*将字符串数字转化为double*/
double gainNum()
{
double re=0,i;
bool iszheng=true;
if(str[len]=='-')
{
iszheng=false;
len++;
}
while(isdigit(str[len]))
{
re=re*10+str[len]-'0';
len++;
}
if(str[len]=='.')
{
i=0.1;
len++;
while(isdigit(str[len]))
{
re=re+(str[len]-'0')*i;
len++;
i/=10;
}
}
if(iszheng)
return re;
return -re;
}
/*加减乘除操作*/
double operate(double a,double b,char theta)
{
switch(theta)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
case '^':
return pow(a,b);
}
}
/*比较算符优先级*/
char compare(char op1,char op2)
{
int i=0,j=0;
while(A[i][0]!=op1)i++;
while(A[0][j]!=op2)j++;
return A[i][j];
}
/*验证,新加的,比较简单,呵呵*/
bool yanzheng(char* s)
{
int i=0;
while(s[i])
{
if(isdigit(s[i])||s[i]
=='+'||s[i]=='-'||
s[i]=='*'||
s[i]=='/'||s[i]=='^'
||s[i]=='.'||s[i]=='('
||s[i]==')')
i++;
else
return false;
}
return true;
}
main()
{
std::stack<double> NUM;//数字栈
std::stack<char> OP;//操作符栈
char ch,theta;
double a,b;
while(gets(str))
{
if (!yanzheng(str))
{
printf("输入有误,重新输入\n");
continue;
}
len=0;
str[strlen(str)+1]='\0';
str[strlen(str)]='#';
OP.push('#');
ch=str[len];
while(ch!='#'||OP.top()!='#')
{
if(isdigit(ch)||ch=='-'&&(len==0||!isdigit(str[len-1])))
{
NUM.push(gainNum());
ch=str[len];
}
else
{
theta=OP.top();
switch(compare(theta,ch))
{
case '>':
OP.pop();
a=NUM.top();
NUM.pop();
b=NUM.top();
NUM.pop();
NUM.push(operate(b,a,theta));
break;
case '<':
OP.push(ch);
ch=str[++len];
break;
case '=':
OP.pop();
ch=str[++len];
break;
}
}
}
printf("%lf\n",NUM.top());
NUM.pop();
OP.pop();
}
}
输入表达式即可,如2+(3*(-45)^2)/100-5.3
可能验证做得不是很好,但这个程序绝对原创,
绝对安全稳定,一个晚上的心血啊,希望楼主喜欢
*/
#include <stdio.h>
#include <math.h>
#include <stack>
#define isdigit(a) (a>='0'&&a<='9')?true:false
char str[100];
int len;
/*所有的运算法,#是处理需要,添加的*/
const char A[10][10]={
"?+-*/^()#",
"+>><<<<>>",
"->><<<<>>",
"*>>>><<>>",
"/>>>><<>>",
"^>>>>><>>",
"(<<<<<<=?",
")>>>>>?>>",
"#<<<<<<?="
};
/*将字符串数字转化为double*/
double gainNum()
{
double re=0,i;
bool iszheng=true;
if(str[len]=='-')
{
iszheng=false;
len++;
}
while(isdigit(str[len]))
{
re=re*10+str[len]-'0';
len++;
}
if(str[len]=='.')
{
i=0.1;
len++;
while(isdigit(str[len]))
{
re=re+(str[len]-'0')*i;
len++;
i/=10;
}
}
if(iszheng)
return re;
return -re;
}
/*加减乘除操作*/
double operate(double a,double b,char theta)
{
switch(theta)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
case '^':
return pow(a,b);
}
}
/*比较算符优先级*/
char compare(char op1,char op2)
{
int i=0,j=0;
while(A[i][0]!=op1)i++;
while(A[0][j]!=op2)j++;
return A[i][j];
}
/*验证,新加的,比较简单,呵呵*/
bool yanzheng(char* s)
{
int i=0;
while(s[i])
{
if(isdigit(s[i])||s[i]
=='+'||s[i]=='-'||
s[i]=='*'||
s[i]=='/'||s[i]=='^'
||s[i]=='.'||s[i]=='('
||s[i]==')')
i++;
else
return false;
}
return true;
}
main()
{
std::stack<double> NUM;//数字栈
std::stack<char> OP;//操作符栈
char ch,theta;
double a,b;
while(gets(str))
{
if (!yanzheng(str))
{
printf("输入有误,重新输入\n");
continue;
}
len=0;
str[strlen(str)+1]='\0';
str[strlen(str)]='#';
OP.push('#');
ch=str[len];
while(ch!='#'||OP.top()!='#')
{
if(isdigit(ch)||ch=='-'&&(len==0||!isdigit(str[len-1])))
{
NUM.push(gainNum());
ch=str[len];
}
else
{
theta=OP.top();
switch(compare(theta,ch))
{
case '>':
OP.pop();
a=NUM.top();
NUM.pop();
b=NUM.top();
NUM.pop();
NUM.push(operate(b,a,theta));
break;
case '<':
OP.push(ch);
ch=str[++len];
break;
case '=':
OP.pop();
ch=str[++len];
break;
}
}
}
printf("%lf\n",NUM.top());
NUM.pop();
OP.pop();
}
}
展开全部
额,我只有一个我以前的课程设计,VC++做的科学计算器,可以在一般与科学间转换,你要不?要的话把邮箱发给我吧。(还有一些BUG的)
“终极版”的都发给你了....
应该会满意了吧?
“终极版”的都发给你了....
应该会满意了吧?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入表达式即可,如2+(3*(-45)^2)/100-5.3
可能验证做得不是很好,但这个程序绝对原创,
绝对安全稳定,
可能验证做得不是很好,但这个程序绝对原创,
绝对安全稳定,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好久以前自己做过,MFC的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询