C言語のプログラミングについて質問です。 int a=2,b=5; double x=2.0,y=5.0;のとき (double)b/a (double)(b/a) (a<b)&&(x<y)
C言語のプログラミングについて質問です。 int a=2,b=5; double x=2.0,y=5.0;のとき (double)b/a (double)(b/a) (a<b)&&(x<y) の式の値はそれぞれ何になりますか? 最後の式は何を表しているのかが全くわからないので解説ありでお願いしたいです。
ベストアンサー
それぞれ以下のようになります。 (double)b/a b の値を double 型に変えて a の値で割る → b の値は 5 であり、それが 5.0 (double型)に変換される → a の値は 2 である → 5.0 を 2 で割る → 2.5 (double型)が答えとなる (double)(b/a) b の値を a の値で割ってその結果を double 型に変える → b の値は 5 である → a の値は 2 である → 5 を 2 で割る → 2 (int型)が得られる → 2.0 (double型)に変換される → 2.0 (double型)が答えとなる (a<b)&&(x<y) a < b でありなおかつ x < y である…というブール値を得る → a の値は 2 である → b の値は 5 である → a < b は 2 < 5 となる → a < b は成立すると分かったので次に進む → x の値は 2.0 である → y の値は 5.0 である → x < y は 2.0 < 5.0 となる → x < y は成立すると分かる → 1 が結果となる。 《解説》 ~割り算とキャスト演算子~ 整数型の値同士の割り算では答えも整数となることに注意が必要です。ですから、5 / 2 は 2 となります。 小数点付きの答えを得たい場合はどちらか一方を double か float 型に変えることが必要となってきます。 (double)b というのは b の値を double 型に変えるという意味となり、この (double) をキャスト演算子と言います。 ~比較について~ a < b は、a < b が成立すれば真(1)、そうでなければ偽(0)の値を持ち、printf("%d\n", a < b); とすると a < b なら 1が、そうでなければ 0 が出力されます。 a < b などという記述は if 文や while 文専用ではなく、単なる式であり、式を書けるところであればどこに書いても構いません。。 これは >, <=, >=, ==, != でも同じとなります。 ~論理演算子について~ ① && ② の記述は①、②双方が真である場合に限って真(1)、そうでなければ偽(0)となります。 ① || ② の記述は①、②双方が偽である場合に限って偽(0)、そうでなければ真(1)となります。 a < b && x < y の記述は a < b が成立し、なおかつ x < y も成立すると 1 となり、いずれかが成立しないと 0 となります。 && と || もまた if 文、while 文専用でなく単なる演算子であり、式の中で自由に使うことが出来ます。 《参考》 && と || は左側を先に調べ、その次に必要がある場合に限って右側を調べます。(必要が無い場合は右側を調べません。)
質問者からのお礼コメント
とても丁寧な解説でわかりやすかったです。 キャスト演算子のこともよくわかっていなかったのでとても助かりました。 これからもC言語の勉強頑張ります。 ありがとうございました。
お礼日時:1/24 7:34