前缀表达式

 1 #include<stdio.h>
 2
 3 //函数声明
 4 int Add(int x,int y); //加
 5 int Subtract(int x,int y); //减
 6 int Multiply(int x,int y);//乘
 7 int Divide(int x,int y); //除
 8
 9 //主函数
10 int main()
11 {
12     int i=0,j=0;
13     char pre_expr[8]; //用于存放前缀表达式字符串
14     int x=0,y=0,result; //x,y: 用于记录运算对象1,2;result:用于记录运算结果
15     int space_num=0; //用于在遍历前缀表达式的过程中记录找到的空格的个数
16
17     //输入前缀表达式字符串
18     gets(pre_expr);
19
20     //获得运算对象x和y
21     while(pre_expr[++i]!=0) //遍历前缀表达式
22     {
23         if(pre_expr[i]==‘ ‘) //找到空格
24         {
25
26             ++space_num; //记录当前找到的空格的个数
27             if(space_num==1) //如果当前找到的空格的个数等于1
28             {
29                 j=i++; //j指向当前找到的空格;i指向该空格后的第一个数字字符
30                 while(pre_expr[++j]!=‘ ‘); //寻找下一个空格的位置
31                 if((j-i)==1) //两空格之间有1个数字字符
32                     x+=pre_expr[i]-‘0‘;
33                 else if((j-i)==2) //两空格之间有2个数字字符
34                     x+=(pre_expr[i]-‘0‘)*10+(pre_expr[i+1]-‘0‘);
35             }
36             else if(space_num==2) //如果当前找到的空格的个数等于2
37             {
38                 j=i++; //j指向当前找到的空格;i指向该空格后的第一个数字字符
39                 while(pre_expr[++j]!=0); //寻找下一个空格的位置
40                 if((j-i)==1) //两空格之间有1个数字字符
41                     y+=pre_expr[i]-‘0‘;
42                 else if((j-i)==2) //两空格之间有2个数字字符
43                     y+=(pre_expr[i]-‘0‘)*10+(pre_expr[i+1]-‘0‘);
44             }
45         }
46     }
47
48     //根据运算符对运算对象做相应运算
49     if(pre_expr[0]==‘+‘)
50         result=Add(x,y);
51     else if(pre_expr[0]==‘-‘)
52         result=Subtract(x,y);
53     else if(pre_expr[0]==‘*‘)
54         result=Multiply(x,y);
55     else if(pre_expr[0]==‘/‘)
56         result=Divide(x,y);
57
58     //输出运算结果
59     printf("%d\n",result);
60
61     return 0;
62 }
63
64 //加
65 int Add(int x,int y)
66 {
67     return x+y;
68 }
69
70 //减
71 int Subtract(int x,int y)
72 {
73     return x-y;
74 }
75
76 //乘
77 int Multiply(int x,int y)
78 {
79     return x*y;
80 }
81
82 //除
83 int Divide(int x,int y)
84 {
85     return x/y;
86 }
时间: 2024-11-05 17:20:41

前缀表达式的相关文章

02-线性结构3. 求前缀表达式的值(25)

02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算前缀表达式的结果值. 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,只包含+.-.*.\以及运算数,不同对象(运算数.运算符号)之

前缀表达式的求值

前面发了中缀表达式和后缀表达式的求值方法,在这儿,前缀表达式也差不多 #include<iostream> #include<stack> #include<string> using namespace std; int judge(char popx,char x); int func(string String,int *i); int calculate(int x,int y,char str); int main() { int n,i; string a;

算法训练 前缀表达式 (蓝桥杯)

算法训练 前缀表达式 时间限制:1.0s   内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开.要求:对于加.减.乘.除这四种运算,分别设计相应的函数来实现. 输入格式:输入只有一行,即一个前缀表达式字符串. 输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,

求前缀表达式的值

算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算前缀表达式的结果值. 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,只包含+.-.*.\以及运算数,不同对象(运算数.运算符号)之间以空格分隔. 输出格式说明: 输出前缀表达式的运算结果,精确到小数点后1位,或错误信息“ERROR”. 样例输入与输出: 序号 输入 输出 1 + +

【Zhejiang University PATest】02-3. 求前缀表达式的值

算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算前缀表达式的结果值. 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,只包含+.-.*.\以及运算数,不同对象(运算数.运算符号)之间以空格分隔. 输出格式说明: 输出前缀表达式的运算结果,精确到小数点后1位,或错误信息“ERROR”. 样例输入与输出: 序号 输入 输出 1 + +

pat02-线性结构3. 求前缀表达式的值(25)

02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算前缀表达式的结果值. 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,只包含+.-.*.\以及运算数,不同对象(运算数.运算符号)之

NYOJ 128 前缀表达式的计算

前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 4) 5) ) 把括号去掉就是:+ 2 * + 3 4 5 最后这个式子就是该表达式的前缀表示. 给你一个前缀表达式,请你计算出该前缀式的值. 比如: + 2 * + 3 4 5的值就是 37 输入 有多组测试数据,每

3-07. 求前缀表达式的值(25) (ZJU_PAT数学)

题目链接:http://pat.zju.edu.cn/contests/ds/3-07 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算前缀表达式的结果值. 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,只包含+.-.*.\以及运算数,不同对象(运算数.运算符号)之间以空格分隔. 输出格式说明: 输出前缀表达式的运算结果,精确到小

中缀表达式转换成前缀表达式和后缀表达式

35,15,+,80,70,-,*,20,/                   //后缀表达方式 (((35+15)*(80-70))/20)=25           //中缀表达方式 /,*,+,35,15,-,80,70, 20                 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制.就对2,3,4,8,16等进制不知所措一样~~! 人们习惯的运算方式是中缀表达式.而碰到前缀,后缀方式..迷茫其实仅仅是一种表达式子的方式而已(不被你习惯的方式)我

[转]中缀表达式、前缀表达式、后缀表达式的相互转换

--------------------------------后缀转中缀---------------------------------------------- 1.建立一个栈,从左向右扫描后缀表达式,遇到运算数则压入栈: 2.遇到运算符就把栈顶两个元素出栈,执行运算,得到的结果作为新的运算符再压入栈: 3.依次走到表达式结尾: 例:把逆波兰式(即后缀表达式)ab+c*转换为中缀表达式: 1)a入栈(0位置) 2)b入栈(1位置) 3)遇到运算符"+",将a和b出栈,执行a+b的