马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
想请教一下各位大佬,下面的代码是只能处理操作数是一位的情况,要怎样修改代码才能处理操作数是小数的情况?
#include <stdio.h>
#include <string.h>
int Compute(char *str); /*函数声明,计算表达式str的值*/
int Comp(char str1, char str2); /*函数声明,比较str1的str2优先级*/
/*此程序只能处理操作数是一位的情况*/
int main()
{
char str[100]; /*定义尽可能大的字符数组以接收键盘的输入*/
int result;
printf("请输入一个表达式:");
scanf("%s", str); strcat(str, "#"); /*接收键盘输入并加上定界符*/
result = Compute(str); /* result保存计算结果*/
printf("表达式的值是:%d\n", result);
getchar(); getchar();
return 0;
}
int Compute(char *str)
{
char OPND[100], OPTR[100]; /*定义两个顺序栈*/
OPTR[0] = '#'; /*栈OPTR初始化为定界符*/
int top1 = -1, top2 = 0; /*初始化栈OPND和OPTR的栈顶指针*/
int i, k, x, y, z, op;
for (i = 0; str[i] != '\0'; ) /*依次扫描每一个字符*/
{
if (str[i] >= 48 && str[i] <= 57) /*数字0的ASCII码是48*/
OPND[++top1] = str[i++] - 48; /*将字符转换为数字压栈*/
else if (str[i] == '(' && str[i+1] == '-')
{
OPTR[++top2] = '(';
OPND[++top1]= 0;
i++;
}
else
{
k = Comp(str[i], OPTR[top2]);
if (k == 1)
OPTR[++top2] = str[i++]; /*str[i]的优先级高*/
else if (k == -1)
{ /*str[i]的优先级低*/
y = OPND[top1--]; /*从运算对象栈出栈两个元素*/
x = OPND[top1--];
op = OPTR[top2--]; /*从运算符栈出栈一个元素*/
switch (op) /*op为字符型,进行相应运算*/
{
case '+': z = x + y; break;
case '-': z = x - y; break;
case '*': z = x * y; break;
case '/': z = x / y; break;
default: break;
}
OPND[++top1] = z; /*运算结果入运算对象栈*/
}
else
{ /*str[i]与运算符栈的栈顶元素优先级相同*/
top2--; i++; /*匹配str[i],扫描下一个字符*/
}
}
}
return OPND[top1]; /*运算对象栈的栈顶元素即为运算结果*/
}
|