• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このC言語プログラムでどこをいじればいいのか教えて下さい。)

C言語プログラムの繰り返し実行方法と注意点

このQ&Aのポイント
  • C言語のプログラムで、和、差、積、商を計算し表示する方法を教えてください。
  • C言語のプログラムを繰り返し実行する方法として、whileループを使用することができます。
  • 注意点として、大きな値を使用すると足し算や割り算が正しく表示されないことがあります。実数の場合も異なる結果が出る可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>これを繰り返し実行する形にしたいです。できれば今勉強中のwhileでお願いします。 #1の_yasuoさんとは異なる方法で、scanfの戻り値を利用する方法もあります。 while(scanf("%d %d",&a,&b) == 2) { ... } scanfは変換に成功した引数(この場合は&aと&b)の数を戻すので、整数が2個入力されなかったらループが終了となります。 >また間違っている部分、指摘などありましたら宜しくお願いします。 割り算の場合のb==0をチェックしていないところ。 >大きな値をいれると足し算がダメになったり、割り算がおかしくなります。 大きな値を計算するためには、専用の演算ルーチンと入力のための処理が必要です。 unsigned int a[8],b[8]; のように定義をして、手計算と同じ方法で演算をします。また入力は数字の文字列から変換します。慣れたら作ってみましょう(^ ^)ノ >また実数の時はどうなのかなど教えて下さい。 scanfで"%d"を指定すると、小数点'.'までを数字として取り込み停止します。どうなるかは簡単なので試してみてくださいね。

その他の回答 (2)

回答No.3

ざっとしか見ていませんが、繰り返し違った値を入れて計算したいならこうですね。 中断したい場合は、Ctrl-Cを押してください。 #include<stdio.h> int main(void) { int a,b,wa,sa,seki,syou; while(1) { scanf("%d %d",&a,&b); wa=a+b; sa=a-b; seki=a*b; syou=a/b; printf("%d+%d=%d\n",a,b,wa); printf("%d-%d=%d\n",a,b,sa); printf("%d*%d=%d\n",a,b,seki); printf("%d/%d=%d\n",a,b,syou); } return (0); } でも、説明できない1という値が出てくるのが嫌なので、無限ループを作る場合はfor (;;) { ~ } と書くことが多いです。(C99以降はtrueやfalseを使えるのでこれらを使うならwhileでもいいでしょう。) int型で表現できる数は16bit OSで2の15乗から1を引いた値までで、32bit OS、64bit OSで2の31乗から1を引いた値までなのでそれを超える値の足し算をすると計算できる範囲を超えて計算を続けてしまって、負の値が出ると思います。なお、この現象のことをオーバーフローと言います。この現象は足し算よりも掛け算の方でよく見る現象ではないかと思います。 ...割り算では間違えて0で割った時くらいしか変な動きはしないような気がします。その場合はプログラムが異常終了すると思いますが。 実数の場合はintの代わりにdoubleを使い、scanfやprintfで%dの代わりに%fを使うとよいでしょう。sinやcos、log、累乗の計算など数学的な計算に使用するmath.hの関数を呼んでいるわけではないので、それ以外は基本的に同じです。 余談ですが、お金の計算などdoubleやfloatを使って計算することで生じる誤差が許されない場合には巨大なint型を計算をするためのライブラリを使います。GNU gmpがこれをするための有名なライブラリです。

  • _yasuo
  • ベストアンサー率41% (16/39)
回答No.1

たとえば 0 0 を入力するまでとか、Ctrl+Cを押すまでループなら 2行足せばOK(whileの行と、}の行です) //2 つの整数を入力し、和、差、積、商を計算し表示する。 #include<stdio.h> int main(void) { int a,b,wa,sa,seki,syou; scanf("%d %d",&a,&b); while(a != 0 && b != 0){ wa=a+b; sa=a-b; seki=a*b; syou=a/b; printf("%d+%d=%d\n",a,b,wa); printf("%d-%d=%d\n",a,b,sa); printf("%d*%d=%d\n",a,b,seki); } printf("%d/%d=%d\n",a,b,syou); return (0); }

関連するQ&A

専門家に質問してみよう