程序2
#include "StdAfx.h"
#include <stdlib.h>
#include "stdio.h"
#include "string.h"
#include "conio.h"
double calculate(double m,double n,char op)
{
switch(op)
{
case'+':return m+n;break;
case'-':return m-n;break;
case'*':return m*n;break;
case'/':return m/n;break;
}
}
void transform(char *ch)
{
struct
{
double data[50];
int top;
}value;
struct
{
char data[50];
int top;
}opstack;
int i=-1;
double x,y;
char number[50];
opstack.top=-1;
value.top=-1;
while(*ch!='\0')
{
if(*ch>='0'&&*ch<='9')
{ int m=-1;
while(*ch>='0'&&*ch<='9'||*ch=='.')
{
number[++m]=*ch;
ch++;
}
number[++m]='\0';
double num=atof(number);
value.top++;
value.data[value.top]=num;
}
else
{
switch(*ch)
{
case'+':while(opstack.top!=-1 && opstack.data[opstack.top]!='(')
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
opstack.top++;
opstack.data[opstack.top]=*ch;
break;
case'-':while(opstack.top!=-1 && opstack.data[opstack.top]!='(')
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
opstack.top++;
opstack.data[opstack.top]=*ch;
break;
case'*':while(opstack.data[opstack.top]=='*'||opstack.data[opstack.top]=='/')
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
opstack.top++;
opstack.data[opstack.top]=*ch;
break;
case'/':while(opstack.data[opstack.top]=='*'||opstack.data[opstack.top]=='/')
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
opstack.top++;
opstack.data[opstack.top]=*ch;
break;
case'(':
opstack.top++;
opstack.data[opstack.top]=*ch;
break;
case')':while(opstack.data[opstack.top]!='(')
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
opstack.top--;
break;
}
ch++;
}
}
while(opstack.top!=-1)
{
x=value.data[value.top];
value.top--;
y=value.data[value.top];
value.top--;
value.top++;
value.data[value.top]=calculate(y,x,opstack.data[opstack.top]);
opstack.top--;
}
double result=value.data[value.top];
printf("计算结果为:%f\n",result);
}
void main()
{
char exp[50];
printf("请输入计算表达式:\n");
scanf("%s",exp);
transform(exp);
getch();
}