宇宙可爱兔 发表于 2022-5-11 13:43:31

表达式求值问题

想请教一下各位大佬,下面的代码是只能处理操作数是一位的情况,要怎样修改代码才能处理操作数是小数的情况?

#include <stdio.h>
#include <string.h>
int Compute(char *str);                  /*函数声明,计算表达式str的值*/
int Comp(char str1, char str2);             /*函数声明,比较str1的str2优先级*/
/*此程序只能处理操作数是一位的情况*/
int main()
{
    char str;                /*定义尽可能大的字符数组以接收键盘的输入*/
    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, OPTR;             /*定义两个顺序栈*/
    OPTR = '#';                        /*栈OPTR初始化为定界符*/
    int top1 = -1, top2 = 0;             /*初始化栈OPND和OPTR的栈顶指针*/
    int i, k, x, y, z, op;
    for (i = 0; str != '\0'; )                   /*依次扫描每一个字符*/
    {
      if (str >= 48 && str <= 57)          /*数字0的ASCII码是48*/
            OPND[++top1] = str - 48;          /*将字符转换为数字压栈*/
      else if (str == '(' && str == '-')
      {
            OPTR[++top2] = '(';
            OPND[++top1]= 0;
            i++;
      }
      else
      {
            k = Comp(str, OPTR);
            if (k == 1)
                OPTR[++top2] = str;            /*str的优先级高*/
            else if (k == -1)
            {                     /*str的优先级低*/
                y = OPND;            /*从运算对象栈出栈两个元素*/
                x = OPND;
                op = OPTR;             /*从运算符栈出栈一个元素*/
                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与运算符栈的栈顶元素优先级相同*/
                top2--; i++;                  /*匹配str,扫描下一个字符*/
            }
      }
    }
    return OPND;               /*运算对象栈的栈顶元素即为运算结果*/
}




豆嘉木 发表于 2022-5-12 10:49:19

本帖最后由 豆嘉木 于 2022-5-12 10:51 编辑

兄弟注释得太到位了!
我处理小数应该是要重新写一个算小数的函数和一个判断输入的类型的函数
具体咋做我不太清楚,但c应该只能分开做,你要不去csdn问问看
页: [1]
查看完整版本: 表达式求值问题