vc 计算器程序 有追加

界面就2个编辑框和一个按钮,其中一个输入算数式,另一个输出答案.算数式很简单,能算4个和加减乘除带括号就可以~~~
哪位高手帮帮忙~~有追加滴~~~~
要快...急....
我不是自找麻烦~~~~要做24点游戏~~~需要到表达式的求值~~~~

如果是没有窗口的就可以,要窗口用VC编写简直是自找麻烦。用MFC可以实现,纯用C貌似太麻烦了………………如果没有窗口的话就简单。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

typedef struct
{
char *base;
char *top;
int stacksize;
}stack;

void Initstack(stack &s,stack &m)
{

s.base=(char*)malloc(1000*sizeof(char));
if(!s.base)
{
printf("memory error,please restart it.");
system("pause");
exit(0);
}
s.top=s.base;
s.stacksize=1000;
m.base=(char*)malloc(1000*sizeof(char));
if(!m.base)
{
printf("memory error,please restart it.");
system("pause");
exit(0);
}
m.top=m.base;
m.stacksize=1000;
}

void Push(int i,char e,stack &s,stack &m)
{
if(i) *s.top++=e;
else *m.top++=e;
}

char pop(int i,stack &s,stack &m)
{
if(i&&(s.top!=s.base))
return *--s.top;
if(!i&&m.top!=m.base)
return *--m.top;
else return 0;
}

double calculate(stack &s,stack &m)
{
double f=0,x=0,g[80]={0};
int i=1,k=2,t=1;
char e;
while(m.top!=m.base)
{
e=pop(0,s,m);
if(e>47&&e<58)
{
t=0;
f=e-'0'+f*10.0;
}
else if(e=='.')
{
while(e)
{
e=pop(0,s,m);
if(e>47&&e<58)
x=(e-'0')/pow(10,i++)+x;
else
{
i=1;
f+=x;
break;
}
}
}
if(e<48||e>57)
{
if(!t)
{
g[k++]=f;
t=1;
}
f=0;
x=0;
}
switch(e)
{
case '@':g[k-2]=pow(g[k-1],pow(g[k-2],-1));k--;break;
case '~':g[k-2]=pow(g[k-2],g[k-1]);k--;break;
case '+':g[k-2]+=g[k-1];k--;break;
case '-':g[k-2]=g[k-2]-g[k-1];k--;break;
case '*':g[k-2]*=g[k-1];k--;break;
case '/':g[k-2]=g[k-2]/g[k-1];k--;break;
default:continue;
}
}
return g[k-1];
}

void main()
{
char e;
double f;
int i=0,j=1;
stack s,m;
Initstack(s,m);
printf(" **********************************************************\n");
printf(" * 说 明 *\n");
printf(" * 本程序为简易计算器,应用能力强. *\n");
printf(" * 输入表达式(包含括号),如果要用到 *\n");
printf(" * 指数运算,例如2的3次方,用~表示. *\n");
printf(" * 2~3即代表2的3次方. e+回车为退出. *\n");
printf(" * 3@8代表8开3次方. @为根号 *\n");
printf(" **********************************************************\n\n");
loop: printf(" 输表达式:");
while((e=getchar())!=10)
{
if(e=='e') exit(0);
if((e>47&&e<=57)||e=='.')
{
j=0;
if(e=='.')
{
if(s.top==s.base)
Push(1,'0',s,m);
else if(*(s.top-1)<48&&*(s.top-1)>57&&s.top!=s.base)
Push(1,'0',s,m);
}
Push(1,e,s,m);
}
if(e=='+'||e=='-'||e=='*'||e=='/'||e=='('||e==')'||e=='~'||e=='@')
{
if(s.top!=s.base&&*(s.top-1)!=32)
Push(1,' ',s,m);
if(e=='~'||e=='('||e=='@')
{
if(e=='(')
j=1;
Push(0,e,s,m);
}
else if(e=='+'||e=='-')
{
if(j)
{
Push(1,'0',s,m);
Push(1,' ',s,m);
}
if(*(m.top-1)!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,pop(0,s,m),s,m);
Push(0,e,s,m);
}
else Push(0,e,s,m);
}
else if(e=='*'||e=='/')
{
if(j)
{
Push(1,'0',s,m);
Push(1,' ',s,m);
}
if(*(m.top-1)!='+'&&*(m.top-1)!='-'&&*(m.top-1)!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,pop(0,s,m),s,m);
Push(0,e,s,m);
}
else Push(0,e,s,m);
}
else if(e==')')
while((e=pop(0,s,m))!='(')
{
if(*(s.top-1)==32)
s.top--;
Push(1,e,s,m);
}
else
{
printf("输入错误!\n");
system("pause");
exit(0);
}
}
}
while(m.top!=m.base)
Push(1,pop(0,s,m),s,m);
while(s.top!=s.base)
Push(0,pop(1,s,m),s,m);
f=calculate(s,m);
printf(" 计算结果:%f\n\n",f);
goto loop;
}//这个程序可以输入复杂表达式求值。如果有什么BUG或者好的建议请Q324073442
温馨提示:内容为网友见解,仅供参考
无其他回答

vc 计算器程序 有追加
如果是没有窗口的就可以,要窗口用VC编写简直是自找麻烦。用MFC可以实现,纯用C貌似太麻烦了………如果没有窗口的话就简单。include<stdio.h> include<stdlib.h> include<math.h> include<string.h> typedef struct { char *base;char *top;int stacksize;}stack;void Initstack(stack &s,stack ...

vc中计算器的自加怎么实现 举例 1+3=4;再按一次=号输出应为7,而不应...
首先定义一个全局变量用来接收被加数,这样只要不加就会保持被加数不变。然后做一个=的操作符重载,一个是传参的,一个是不传参的,如果调用+就调用传参的=,直接按=就调用不传参的,但是里面已经用全局变量进行加了

怎么让C语言写的计算器计算完一组数以后不让程序结束,返回再重新计算别...
}else{printf("两数之商a\/b为%f\\n",a\/b);}getchar(); \/\/ 后加的语句 printf("\\n y 继续计算,

[VC6 MFC]为什么使用CToolTipCtrl后,程序无法正常运行
断点调试,找到出问题的行。BOOL xxxx::PreTranslateMessage(MSG* pMsg) \/\/拦截回车消息{\/\/ TODO: Add your specialized code here and\/or call the base classif(pMsg->message == WM_KEYDOWN) if(int(pMsg->wParam) == VK_RETURN )return TRUE;return CDialog::PreTranslateMessage(pMsg);...

用C语言.编写一个计算器程序.要在VC6.0中能运行
\/*1.有简单运算选择界面 2.采用循环实现菜单显示 3.采用switch结构实现菜单的选择 4.运算对象为两个操作数,从键盘输入 5.运算结果输出 6. 可以返回再运算*\/ include<stdio.h> include<stdlib.h> include<conio.h> double Add(double num1, double num2) \/\/加法 { return num1 + num2;...

我用VC环境编了个计算器程序(用的是C语言),我想要更换可执行文件的图...
2楼的方法,可以改这个可执行文件的图标,2+3楼的方法可以改运行后主窗口左上角的图标跟任务栏的图标.总起来就是:在资源(Resource)窗口下,有一个Icon文件夹,IDR_MAINFRAME就是应用程序的图标,请根据需要选择格式一般是标准(32*32),然后把你需要的图标拷进去,也可以自己手工描绘,这样,主图标(也...

用C语言编一个简单的计算器小程序
int add(int x,int y) {return x+y;} int sub(int x,int y) {return x-y;} int mul(int x,int y) {return x*y;} int div(int x,int y) {return x\/y;} int (*func[])()={add,sub,mul,div};int num,curch;char chtbl[]="+-*\/()=";char corch[]="+-*\/...

...我用C语言编了一个小计算器,但是学校还要求将程序变为.exe形式,怎么...
不知道你是用的什么编译器 vc6.0 还是vs2005 还是vs2010 所以没办法给你具体的做法。但是你需要这样做,在编译设置里面选择release模式(默认的是debug),选择完后按F7编译,就会生成一个你需要的exe。

用VC6.0制作一个简易计算器,比如在DOS窗口下打入3*(2+1)=,就会显示9...
我们要做的就是把中缀表达式转成后缀表达式 如果学过算法的话就好理解了 没学过可能理解起来有点困难 我以前写过一个科学计算器 可以处理加减乘除括号小数 但是不能处理表达式中数据为负数的情况 给个传送门:http:\/\/blog.163.com\/ghost_wzf\/blog\/static\/8959217120091268594778\/ ...

你好,请问VC计算器中backspace如果m_result是用int型怎么实现呢?_百度...
这段程序看起来没什么错,正确答案是9而不是900就应该从别的地方找错误,可能是字符串处理的问题

相似回答
大家正在搜