- ベストアンサー
C言語で電卓を作成する修正方法
R_Earlの回答
ANo.2, 7です。 ANo.7ではcalc関数を修正しない方が良いと言いましたが、 ちゃんと計算できるように追加コード部分を修正してみました。 修正箇所は 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; } の部分です。これを 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文は不要 // 以下5行が追加コード *x = 0; *(x + 1) = 0; x = x + 2; op = op + 2; continue; } と直すと上手くいきます (インデントに全角スペースを使っているので注意して下さい)。 *x = 0や*(x + 1) = 0が必要な理由は、 calc関数内のswitch文で*x = 0が実行されている理由と同じなのですが、 何故このコードが必要なのかは分かりますか? この修正をすれば10/4*4のように、 「わり算1回、かけ算1回を行う式」には上手く対応できます。 しかし10/4/5*5*4や10/4/5*4*5のように、 「わり算が2回以上連続して続いた後にかけ算がある式」には対応できません。 これは追加コードでは、隣り合うわり算、かけ算のみを処理しているのが原因です。 例えば10/4/5*5*4では/5と*5は追加コード部分でうまく処理されるのですが、 位置が離れている/4と*4は処理されません。 これで妥協するかどうかは質問者さんに任せます。 妥協したくないなら、このコードを更に修正するか、 あるいは別の方法を取る事になります。
関連するQ&A
- c言語プログラム
加減乗除および剰余の演算記号(+-* / %)と2つの整数を入力し、入力した2つの整数に対して入力した演算を施して表示するプログラムをif文ではなくswitch文を用いて作成しなさいなお、演算記号入力の際に間違った記号(+ - * / % 以外)を入力した場合は+を入力したものとして計算するものとしなさい。 ヒントで 変数としては入力演算記号に対応する変数op、入力する2つの整数に対応する変数m,n、答えに対応する変数ansを使うとよいでしょう宣言についてはopは記号なのでcharで宣言しますが、あとはすべて整数ですのでintで宣言 まずやることは演算記号以外の場合に+であることを表示するプログラムを組むと思うんですけど どうしたらいいのかわかりません力を御貸しください
- ベストアンサー
- C・C++・C#
- VBA電卓について
こんにちは、VBA初心者です。 計算機(電卓)をつくっているのですが、 小数点を入力させる仕組みにしたいのですが、 どうのようにしたら良いのでしょうか? 変数はLONGにしているので、小数点(.)はSTRINGに なってしましいうまくいきません。 お手数ですがよろしくお願いします。
- ベストアンサー
- SE・インフラ・Webエンジニア
- 切捨てのできる電卓
例えば、計算の結果が小数点第3位以下で切り捨てできるような電卓を探すには、ラウンドセレクターと小数点セレクターが付いた電卓を買えばいいのでしょうか。 2,000円までであるでしょうか。 できるだけ安いのがいいのですが、具体的なメーカーや型番をご存知なら教えて欲しいです。 よろしくお願いします。
- ベストアンサー
- その他(インターネット・Webサービス)
- c言語のプログラムです
2つの生の整数の割り算a÷bはaからbを繰り返し引いていき、引くことが出来なくなるまでの回数を商、その時の残りを剰余をすることで、引き算だけを用いて実現することができる。このことを考慮して、while文と引き算だけを用いて割り算を実現しなさい。という問題なんですけどどのようにプログラムを作っていいやらわかりません 一様ヒントはあります ・変数としては、入力する二つの整数に対応する変数m,n、商に対応する変数q、剰余に対応する変数rを使うとよいでしょう。すべて整数ですのでintで宣言する。 皆さんのご協力お願いします
- ベストアンサー
- C・C++・C#
- C言語で電卓を作成する。
C言語を用いて三項まで計算できる電卓を作りたいのですが、どうも上手くいきません。 四則演算(+、-、×、÷)の優先順位を用いたプログラミング方法が分かりません。 以下に自分で作成したソースを添付します。 このソースに修正や追加して3項までの四則演算できるプログラミングを教えていただけますか? 宜しくお願いします。 #include <stdio.h> int main(void) { int answer; /*答え*/ int x,y,z; /*x=第一項,y=第二項,第三項*/ char op1,op2; /*演算子1、演算子2*/ while(1){ printf("式を入力してください\n"); printf("式:"); scanf("%d %c %d %c %d" ,&x,&op1,&y,&op2,&z); if((op1=='+'|'-'|'*'|'/') && (op2=='+'|'-'|'*'|'/')){ switch(op2){ case '+': answer=y+z; break; case '-': answer=y-z; break; case '*': answer=y*z; break; case '/': if(z==0){ printf("ERROR\n"); return 0; } answer=y/z; break; default: printf("ERROR\n"); return 0; } switch(op1){ case '+': answer=x+answer; break; case '-': answer=x-answer; break; case '*': answer=x*answer; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/answer; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } else { switch(op1){ case '+': answer=x+y; break; case '-': answer=x-y; break; case '*': answer=x*y; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/y; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } } } 左辺に×、÷が来ても優先的に計算されません。
- ベストアンサー
- C・C++・C#
- 関数電卓での角度を用いた計算
SHARPの関数電卓(EL-5120)を使用しているのですが、例えばsin○○°○○′○○″等を電卓上で表示するにはどうしたらいいのでしょうか?また、それを用いた計算方法(掛算、割り算)の方法を教えて下さい。
- 締切済み
- 数学・算数
- C言語の電卓におけるincludeについて
C言語の電卓におけるincludeについて C言語の電卓におけるincludeについて質問です。 プログラミング言語C第2版 ANSI規格準拠 B.W.カーニハン・D.M.リッチー著 質問1. 4章にある電卓プログラムですが、getch.cがcalc.hをincludeしないのはなぜですか? 解説よろしくお願いします calc.h #difine NUMBER '0' main.c #include <stdio.h> #include <stdlib.h> #include "calc.h" #difine MAXOP 100 getop.c #include <stdio.h> #include <ctype.h> #include "calc.h" stack.c #include <stdio.h> #include "calc.h" #difine MAXVAL 100 getch.c #include <stdio.h> 質問2. 第4章までしか読んでいませんが、「関数で返さない値はゴミ(garbage)になる」と書いていました。 関数で返さない値は、関数から抜けると消えるものと思っていたので驚きました。 関数で返さない値の後処理はどうすればいいのですか? 質問3. 外部変数と静的変数の違いは? ―メモ― 局所変数 自動変数 main内の変数 int x; static int x; 永久的なメモリが与えられることを意味する 外部変数 main外の変数 static int x; 静的変数 関数内の変数 static int x; レジスタ変数 変数をレジスタに置く register int x; 以上、有識者の方、教えてくださいmm
- ベストアンサー
- C・C++・C#
- 電卓の使い方について、例 1,000×20%=200-=800はぜですか?
こんにちは、みなさん。 電卓の使い方を伺いたいのですが、 Q1例 1,000×20%=200-=800になるのは なぜでしょうか? 1,000×20%=200を押した後にマイナス(-) キーを押すと 前に計算した、1,000-200を計算してくれます。 使えれば、大変良い機能なのですが、原理を知りたいです。 Q2 RM(リターンメモリー)した数字は普通にその後、足し算、引き算、掛け算、割り算が行えるのですか? 例 100(M+)100(M+)(MR)200 ←この200に対して、普通に足し算、引き算、掛け算、割り算が行えるのですか? 以上2点、ご存知の方いらっしゃいましたら、教えて下さい。よろしくお願い致します。
- ベストアンサー
- 財務・会計・経理
- C#で電卓のプログラムを組んでいるのですが
質問です。 電卓のプログラムにおいて、小数点のボタンがありますよね。それを重複して入力されないようにしたいのですが。何か良い方法はないでしょうか? よろしくお願い致します。
- ベストアンサー
- C・C++・C#