计算器编程题 求大神帮忙 c语言编程题, 求大神帮忙,这可是竞赛题

作者&投稿:相委 (若有异议请与网页底部的电邮联系)
图片看得蛮清楚!

计算器编程题 求大神帮忙~

采纳我,给你答案,不骗你

逆波兰表示的计算器

不知道这样符合不 这是我回答过的(一个问题的问题代码)(已修改)
代码如下:
#include#include#include#define NUMBER '0'void ungetch(char c);int getch();int getop(char *s);void push(double number);double pop();/*以上为声明说明部分*/int main(){ char *s,c; double op_temp; s=(char *)malloc(100*sizeof(char)); printf("逆波兰表示的计算器
使用方法: 输入两个数值 再输入运算符号(例如:3 4 + 5 *(Enter)表示(3+4)*5)
"); printf("按可以结束程序
"); while((c=getop(s))!=EOF) { switch(c) { case NUMBER :printf("NUMBER:%s
",s);push(atof(s));break; case '+' :push(pop()+pop());break; case '-' :op_temp=pop();push(pop()-op_temp);break; case '*' :push(pop()*pop());break; case '/' :if((op_temp=pop()))push(pop()/op_temp);break; case '
':printf("result=%.8g
",pop());break; case 27:exit(0); default :printf("error,unknown %c
",c);break; } } return 0;}/*分析文本流部分*/int getop(char *s1){ char c; int i=0;//printf("c:%d
",c=getch()); while((c=getch())==' '||c==''); *s1=c; if(!isdigit(c))return c;//若 数字字符 则返回字符while((c=getch())!=EOF&&c!=13) { if(isdigit(c)){s1[++i]=c;s1[i+1]='\0';} //原 主函数只申请了一个指针s 且没有分配内存 现在却将其当成数组使用,没问题么? 个人观点,我也不是很懂 else { if(c=='.') { s1[++i]=c; continue; } else { ungetch(c); s1[++i]='\0'; return NUMBER; } } } return c;}/*获取字符和回退字符部分*//*对缓存栈中的字符数不加限制*/int cpointer[100];/*如果这里改为 int *cpointer ,计算浮点时就会出错*/int c_count=0;int getch(){ return (c_count>0)?cpointer[--c_count] : getchar();}void ungetch(char c){ cpointer[c_count++]=c;}/*进出栈部分*/double *number_stack=(double *)malloc(100*sizeof(double));int n_count=0;void push(double number){ number_stack[n_count++]=number;}double pop(){ if(n_count>0) return number_stack[--n_count]; else printf("error of pop"); return 0;}