fork download
  1. #include<stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp;
  5. void push(double value);
  6. double pop(void);
  7. int isFull(void);
  8. int isEmpty(void);
  9. void answer(void);
  10. void reset(void);
  11. int main(void)
  12. {
  13. reset();
  14. sp=2;
  15. stack[0]=2;
  16. stack[1]=3;
  17.  
  18. int resp;
  19. double a,b,c;
  20. while(1){
  21. printf("1:足し算 2:引き算 3:掛け算 4:割り算 5:データ入力 9:計算結果の表示\n");
  22. if (scanf("%d", &resp) != 1) break;
  23. if(!resp) break;
  24.  
  25. switch(resp){
  26. case 1:printf("足し算\n");
  27. b=pop();
  28. printf("%lf\n",b);
  29. a=pop();
  30. printf("%lf\n",a);
  31. push(a+b);
  32. break;
  33. case 2:printf("引き算\n");
  34. b=pop();
  35. a=pop();
  36. push(a-b);
  37. break;
  38. case 3:printf(" 掛け算\n");
  39. b=pop();
  40. a=pop();
  41. push(a*b);
  42. break;
  43. case 4:printf("割り算\n");
  44. b=pop();
  45. a=pop();
  46. push(a/b);
  47. break;
  48. case 5:printf("データ入力");
  49. scanf("%d",&c);
  50. push(c);
  51. break;
  52. }
  53. printf("%d\n",sp);
  54. answer();
  55. return 0;
  56. }
  57. }
  58.  
  59. void push(double value){
  60. if (!isFull()){
  61. stack[sp] = value;
  62. sp++;
  63. }
  64. }
  65. double pop(void){
  66. if (!isEmpty()) {
  67. sp--;
  68. return stack[sp];
  69. }
  70. return 0;
  71. }
  72. int isFull(void){
  73. if (sp >= SIZE) {
  74. return 1;
  75. } else {
  76. return 0;
  77. }
  78. }
  79. int isEmpty(void){
  80. if (sp == 0) {
  81. return 1;
  82. } else {
  83. return 0;
  84. }
  85. }
  86. void answer(void){
  87. if (!isEmpty()) {
  88. printf("answer:%lf\n", stack[sp - 1]);
  89. }
  90. }
  91. void reset(void){
  92. sp = 0;
  93. }
Success #stdin #stdout 0s 5316KB
stdin
3
stdout
1:足し算 2:引き算 3:掛け算 4:割り算 5:データ入力 9:計算結果の表示
	掛け算
1
answer:6.000000