鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c++ > >

逆波兰计算器

来源:互联网 作者:佚名 时间:2016-06-06 10:04
通过使用逆波兰法编译出简单计算器的功能 无 #includestdio.h#includestdlib.h#define MAXOP 100#define NUMBER '0'int getop(char[]);void push(double);double pop(); int main() { int type; double op2; char s[MAXOP]; while((type=getop(s))!=EOF){ swi
通过使用逆波兰法编译出简单计算器的功能 <无>
#include<stdio.h>
#include<stdlib.h>
#define MAXOP 100
#define NUMBER '0'
int getop(char[]);
void push(double);
double pop();
 int main()
 {
 	int type;
 	double op2;
 	char s[MAXOP];
 	while((type=getop(s))!=EOF){
 		switch(type){
 			case NUMBER :
 				push(atof(s));  break;
 			case '+' :
 				push(pop()+pop()); break;
			case '*' :
			    push(pop()*pop()); break;
			case '-' :
				op2=pop();
				push(pop()-op2); break;
			case '/' :
				op2=pop();
				if(op2!=0.0)
				push(pop()/op2);
				else
				    printf("error: zero divisor\n");
				    break;
			case '\n' :
				printf("\t%.8g\n",pop());
				break;
			default:
				printf("error:unknown command %s\n",s);
				break;
			}
	 }
	 return 0;
 }
 #define MAXVAL 100
 int sp=0;
 double val[MAXVAL];
 void push(double f)
 {
 	if(sp<MAXVAL)
 	val[sp++]=f;
 	else printf("error: stack full,csn't push %g\n",f);
 }
 double pop(void)
 {
 	if(sp>0)
 	return val[--sp];
 	else{
 		printf("error:stack empty\n");
 		return 0.0;
	 }
 }
 #include<ctype.h>
 int getch(void);
 void ungetch(int);
 int getop(char s[])
 { 
 	int c,i;
 	
 	while((s[0] = c = getch()) == ' ' || c == '\t')
 	;
 	s[1]='\0';
 	if(!isdigit(c)&&c!='.')
 	return c;
 	i=0;
 	if(isdigit(c))
 	while (isdigit(s[++i]=c=getch()))
 	;
 	if(c=='.')
 	while(isdigit(s[++i]=c=getch()))
 	;
 	s[i]='\0';
 	if(c!=EOF)
 	ungetch(c);
 	return NUMBER;
 }
 #define BUFSIZE 100
 char buf[BUFSIZE];
 int bufp = 0;
 int getch(void)
 {
 	return (bufp>0)?buf[--bufp] : getchar();
 }
 void ungetch(int c)
 {
 	if(bufp>=BUFSIZE)
 	printf("ungetch: too many characters\n");
 	else 
 	 buf[bufp++] = c;
 }
网友评论
<