fork download
  1. #include<stdio.h>
  2.  
  3. #define SIZE 10
  4. double stack[SIZE];
  5. int sp;
  6.  
  7. void push(double value);
  8. double pop(void);
  9. int isFull(void);
  10. int isEmpty(void);
  11. void answer(void);
  12. void reset(void);
  13.  
  14. int main(void)
  15. {
  16. reset();
  17. printf("1:+ 2:- 3:* 4:/ 5:入力 9:答え\n");
  18. while(1){
  19. int res=0,i;
  20. double data=0;
  21. scanf("%d",&res);
  22. if(!res) break;
  23. switch(res){
  24. case 1: pop(); pop(); data=stack[sp]+stack[sp+1]; push(data); break;
  25. case 2: pop(); pop(); data=stack[sp]-stack[sp+1]; push(data); break;
  26. case 3: pop(); pop(); data=stack[sp]*stack[sp+1]; push(data); break;
  27. case 4: pop(); pop(); data=stack[sp]/stack[sp+1]; push(data); break;
  28. case 5: scanf("%lf",&data); printf("入力したデータ=%lf\n",data); push(data); break;
  29. case 9: res=0;break;
  30. }
  31. //printf("sp=%d\n",sp);
  32. }
  33. answer();
  34. return 0;
  35. }
  36. void push(double value){
  37. if(isFull()){
  38. printf("スタックは満タン\n");
  39. }else{
  40. stack[sp++]=value;
  41. }}
  42. double pop(void){
  43. if(isEmpty()){
  44. printf("スタックは空\n");
  45. return 0;
  46. }else{
  47. return stack[--sp];
  48. }}
  49. int isFull(void){
  50. if(sp>=SIZE){
  51. return 1;
  52. }else{
  53. return 0;
  54. }}
  55. int isEmpty(void){
  56. if(sp<0){
  57. return 1;
  58. }else{
  59. return 0;
  60. }}
  61. void answer(void){
  62. pop(); printf("答えは%lfです。",stack[sp]);
  63. }
  64. void reset(void){
  65. sp=0;
  66. }
Success #stdin #stdout 0.01s 5292KB
stdin
5
1
5
2
1
9
stdout
1:+ 2:- 3:* 4:/ 5:入力 9:答え
入力したデータ=1.000000
入力したデータ=2.000000
答えは3.000000です。