用VC6.0制作一个简易计算器,比如在DOS窗口下打入3*(2+1)=,就会显示9这样的程序

是这样的,想请教下,用VC6.0制作一个简易计算器,比如在DOS窗口下打入3*(2+1)=,就会显示9这样的程序
最新回答
浮临子

2024-09-07 12:30:21

这是科学计算器 不是你想象中那么容易搞出来的
至少要学过数据结构与算法才好理解

确实如楼上所说用栈来实现
不过还要知道什么是中缀表达式 什么是后缀表达式(逆波兰表达式)
像你的3*(2+1)这是中缀表达式 我们看容易理解 计算机就看不懂了
如果要计算机来计算必须转成后缀表达式如 321+*

用栈来处理:
扫描并压入3,2,1
扫描到+时弹出1,2进行+运算得到3后压入栈 栈中就是3,3
扫描到*时弹出栈顶的3,3进行*运算得到9压入栈 栈中就是9
然后表达式扫描结束 栈中剩下9就是结果
后缀表达式就没有括号了 但是运算顺序还是正确的
我们要做的就是把中缀表达式转成后缀表达式

如果学过算法的话就好理解了 没学过可能理解起来有点困难
我以前写过一个科学计算器 可以处理加减乘除括号小数 但是不能处理表达式中数据为负数的情况
给个传送门:
http://blog.163.com/ghost_wzf/blog/static/8959217120091268594778/
总有贱妇计谋本宫

2024-09-07 03:48:04

#include<stdio.h>
main()
{
int a,b,c;
scanf("%d,%d",&a,&b);
printf("%d,%d,%d,%d",a+b,a-b,a*b,a/b);
}
懵蓝初梦

2024-09-07 09:12:46

#include<stdio.h>
#include<math.h>
int symb(char a){
switch(a){

case 94:return 3;
case 42:
case 47:
case 37:return 2;
case 43:
case 45:return 1;
default:return 0;
}
}
float work(float a,char b,float c){
switch(b){
case 94:return pow(a,c);
case 42:return a*c;
case 47:return a/c;
case 37:return float((int)a%(int)c);
case 43:return a+c;
case 45:return a-c;
}
}

void main(){

char s[20],sym[10],pri[10],ps=0,*q=s;
float f[10],*asd[10];
float ff=0;short z=0, y=0;char ne=0;
printf("请输入表达式:\n");
scanf("%s",s);
while(*q){
if(!symb(*q))
if(*q=='.')z=10;
else if(*q=='('){

if(*(q-1)>47&&*(q-1)<58||*(q-1)==')'){
f[ps]=ff;
z=0;
ff=0;
sym[ps]='*';
pri[ps]=2+y;
ps++;}
y=y+4;
}

else if(*q==')')y=y-4;
else if(z==0)
if(ne)
ff=ff*10-(*q-48);
else
ff=ff*10+(*q-48);
else{
if(ne)
ff=ff-float(*q-48)/z;
else
ff=ff+float(*q-48)/z;

z=z*10;}
else{
if((*q=='-'||*q=='+')&&(symb(*(q-1))))////////////
ne=!ne;
else{

f[ps]=ff;
z=0;
ff=0;
sym[ps]=*q;
pri[ps]=symb(*q)+y;
ps++;}

}
q++;

}

if(!symb(sym[0])){
printf("%f\n",ff);
main();
}
f[ps]=ff;

char i=1;
char a;
for(asd[0]=&f[0];i<ps;i++){
asd[i]=&f[i];
for(a=i-1;a>=0;a--){
if(pri[a]>=pri[i])
asd[i]=&f[a];

else

break;

}

}

i=0;

while(1){
for(;i<=ps;i++){
if(pri[i]>pri[a])
a=i;}
if(!pri[a])break;
*asd[a]=work(*asd[a],sym[a],f[a+1]);
pri[a]=0;

i=a=0;
}
printf("%f\n",f[0]);

main();

}
祁梦

2024-09-07 07:36:50

我以前用栈做的(C语言),代码150行左右,功能比较强大,+,-,*,/,(,)都能实现,
你给的分太低了,所以我也不能给你啦,呵呵!
一杯清酒当人生

2024-09-07 07:52:01

分都没有,你以为是三五行代码就行了啊