计算器(表达式计算-后缀表达式实现)
Posted tuoniao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算器(表达式计算-后缀表达式实现)相关的知识,希望对你有一定的参考价值。
【问题描述】
从标准输入中读入一个整数算术运算表达式,如24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 )= ,计算表达式结果,并输出。
要求:
1、表达式运算符只有+、-、*、/,表达式末尾的=字符表示表达式输入结束,表达式中可能会出现空格;
2、表达式中会出现圆括号,括号可能嵌套,不会出现错误的表达式;
3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。
4、要求采用逆波兰表达式来实现表达式计算。
【输入形式】
从键盘输入一个以=结尾的整数算术运算表达式。操作符和操作数之间可以有空格分隔。
【输出形式】
在屏幕上输出计算结果(为整数,即在计算过程中除法为整除)。
【样例输入】
24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 ) =
【样例输出】
18
【样例说明】
按照运算符及括号优先级依次计算表达式的值。
【题解】
1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 5 #define MAXSIZE 100 6 7 typedef struct 8 { 9 char stcak[MAXSIZE]; 10 int top; 11 }Sequence; 12 typedef struct 13 { 14 int data[MAXSIZE]; 15 int top; 16 }Operate; 17 18 int isEmpty(Sequence *s); 19 int push(Sequence *s,char c); 20 int pop(Sequence *s,char *c); 21 int getTop(Sequence *s,char *c); 22 void translate(char s1[],char s2[]); 23 int calculate(char a[]); 24 25 int main(void) 26 { 27 char str1[MAXSIZE],str2[MAXSIZE]; 28 int result; 29 fgets(str1,100,stdin); 30 translate(str1,str2); 31 result=calculate(str2); 32 printf("%d ",result); 33 34 return 0; 35 } 36 37 int isEmpty(Sequence *s) 38 { 39 if(-1==s->top) 40 return 1; 41 else 42 return 0; 43 } 44 int push(Sequence *s,char c) 45 { 46 if(MAXSIZE==s->top) 47 return 0; 48 49 s->top++; 50 s->stcak[s->top]=c; 51 return 1; 52 } 53 int pop(Sequence *s,char *c) 54 { 55 if(isEmpty((s))) 56 return 0; 57 58 *c=s->stcak[s->top]; 59 s->top--; 60 return 1; 61 } 62 int getTop(Sequence *s,char *c) 63 { 64 if(isEmpty((s))) 65 return 0; 66 67 *c=s->stcak[s->top]; 68 return 1; 69 } 70 void translate(char s1[],char s2[]) 71 { 72 Sequence s; 73 char ch,e=‘