- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で電卓を作成する。修正お願いします。)
C言語で電卓を作成する修正方法
このQ&Aのポイント
- C言語で電卓を作成するプログラムの修正方法についてお知らせします。
- 現在のプログラムでは、割り算が最初に出てくる場合に計算結果がおかしくなってしまう問題があります。
- この問題を解決するために、int型の変数宣言を変更せずに計算結果が正しく出るようにする方法をご指導します。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (7)
- R_Earl
- ベストアンサー率55% (473/849)
回答No.7
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.6
- TT414
- ベストアンサー率18% (72/384)
回答No.5
- asuncion
- ベストアンサー率33% (2127/6290)
回答No.4
- phoenix343
- ベストアンサー率15% (296/1946)
回答No.3
- R_Earl
- ベストアンサー率55% (473/849)
回答No.2
- papapa0427
- ベストアンサー率25% (371/1472)
回答No.1
補足
いいです。 高精度な計算結果は求めていません。 自分が途中まで出来たのを入れます。 条件分岐を入れてみましたが、最終的な結果はおかしくなってしまいます。 下記にソースを入れます。修正箇所を教えて頂けますか? #include <stdio.h> #include <stdlib.h> /* int check_num(int *x, char *op) { int i; while(*op != '=') { for(i=0; i<10; i++) { x[i] == *(x + i); if(*(op + i) == '='){ calc(x, op , 1); } } } } */ int calc(int *x, char *op, int mode) /* x=項、op=演算子、mode=0か1で処理を分岐*/ { while (*op != '=') { /*opに'='が代入されるまで回す*/ if (mode==0) { /*mode=0の処理(mode=1で得た計算結果を最後に加算する)*/ *(x + 1) = *(x+1) + (*x); x++; /*配列に入れられた値を更新*/ op++; /*'='が出されるまでopを更新*/ } if (mode==1) { /*mode=1の処理(乗算、除算、減算を行って、計算結果を配列に入れる)*/ if((*op == '/') && (*(op + 1) == '*')) { /*op='/'、op+1='*'が入った時*/ *x = (*x) * (*(x + 2)); printf("answer1 = %d\n",*x); *(x + 2) = *x / *(x + 1) ; printf("answer2 = %d\n",*(x + 2)); return *x; } switch (*op) { /*乗算*/ case '*': *(x + 1) = (*x) * (*(x + 1)); /*例:x+1=4(x)×2(x+1)*/ *x = 0; break; /*除算*/ case '/': *(x + 1) = *x / *(x + 1); /*例:x+1=4(x)÷2(x+1)*/ *x = 0; break; /*減算*/ case '-': /*例:x+1=2×(-1)*/ *(x + 1) = *(x+1) * (-1); /*最後に加算を行うので値をマイナスにして配列に入れる*/ break; } x++; op++; } } return *x; } int main(void) { int x[10]; /* 項 */ char op[10]; /* 演算子 */ int i; while (1) { printf("式を入力してください\n"); printf("例:1*2+5=enter \n"); printf("式:"); for (i = 0; i<10; i++) { /*10項まで計算可*/ scanf("%d %c", x + i, op + i); if (*(op + i) == '=') /*op='='が代入されるまで回し続ける*/ break; } calc(x, op, 1); printf("答え:%d\n", calc(x, op, 0)); /*mode=0の処理へ移行(最後に加算をして結果を出力)*/ } /* return 0;*/ }