• 7-21 求前缀表达式的值(25 分)


    算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

    输入格式:

    输入在一行内给出不超过30个字符的前缀表达式,只包含+-*以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

    输出格式:

    输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR

    输入样例:

    + + 2 * 3 - 7 4 / 8 4
    

    输出样例:

    13.0
    
     个人感觉这道题有一些些难吧,最后是参考一个C++的程序写出来的,很巧妙!!
     这里面atof(),是C 语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数,所使用的头文件为<stdlib.h>。
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 double exp();
     5 
     6 int main()
     7 {
     8     printf("%.1f",exp());
     9     return 0;
    10 }
    11 
    12 double exp()
    13 {
    14     char a[10];  //存储第一个非空格字符
    15     scanf("%s",a);
    16 
    17     if( !a[1])
    18     {
    19         //a[1]为空只有一位
    20         switch( a[0])
    21         {
    22         case '+' :
    23             return exp()+exp();
    24         case '-' :
    25             return exp()-exp();
    26         case '*' :
    27             return exp()*exp();
    28         case '/' :
    29         {
    30             double fenzi = exp();
    31             double fenmu = exp();
    32             if(fenmu !=0) return fenzi/fenmu;
    33             else
    34             {
    35                 printf("ERROR");  //分母为0
    36                 exit(0);   //程序结束
    37             }
    38         }
    39         default :
    40             return atof(a);   //字符串转换为浮点数
    41         }
    42     }
    43     else
    44     {
    45         
    46         if( a[0]=='-' || a[0]=='+')
    47         {
    48             char flag = a[0];  //记录符号
    49             int i =0 ;
    50             while(a[i])
    51             {
    52                 a[i] = a[i+1];
    53                 i++;
    54             }
    55             if(flag=='-')
    56                 return 0-atof(a);
    57             else return atof(a);
    58         }
    59         else return atof(a);
    60     }
    61 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    [PHP] Layui + jquery 实现 实用的文章自定义标签
    个人总结第五周
    个人总结第四周
    个人总结第三周
    个人总结第二周
    个人总结第一周
    用户体验评价
    第二阶段scrum冲刺
    单词统计
    用户模块和用户场景
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8400659.html
Copyright © 2020-2023  润新知