演習7-5 K&R プログラミング言語C
2010年03月10日
演習7-5
#include <stdio.h> #define MAXVAL 100 #define MAXSIZE 100 int sp = 0; double val[MAXVAL]; void push(double); double pop(void); int main(void) { double op1, op2; char c, sep; char s[MAXSIZE]; while (scanf("%s%c", s, &sep) == 2) { if (sscanf(s, "%lf", &op1) == 1) { push(op1); } else if (sscanf(s, "%c", &c) == 1) { switch (c) { case '+': push(pop() + pop()); break; case '*': push(pop() * pop()); break; case '-': op2 = pop(); push(pop() - op2); break; case '/': op2 = pop(); if (op2 == 0) { fprintf(stderr, "error : zero divisor\n"); } else { push(pop() / op2); } break; default: fprintf(stderr, "error : unknown command %s\n", s); break; } } if (sep == '\n') { printf("\t%.8g\n", pop()); } } return 0; } void push(double f) { if (sp < MAXVAL) { val[sp++] = f; } else { fprintf(stderr, "error : stack full, can't push %g\n", f); } } double pop(void) { if (sp > 0) { return val[--sp]; } else { fprintf(stderr, "error : stack empty\n"); return 0.0; } }
実行結果
$ ./calc 10 2 - 5 + 3 / 2 - 2.3333333
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726