【8時間目】変数を使って計算してみよう
前回までで、キーボードから入力を受け取ることができました。さてこれから、その入力されたデータをもとに計算をしてみましょう。
計算して、代入
プログラミングにおいての計算は、2ステップで行います。「計算」して「代入」です。算数や数学と同じように、「+(プラス)」や「-(マイナス)」などを使って計算し、その結果を、別の変数に「代入」するのです。
計算
数字どうしの計算は、ふつうの算数や数学と同じようにできます。代表的なものを表にしてまとめてみました。
記号 | 意味 | 使い方 | 算数での書き方 |
---|---|---|---|
+ | 加算(足し算) | A + B | A + B |
- | 減算(引き算) | A - B | A - B |
* | 乗算(かけ算) | A * B | A × B |
/ | 除算(わり算) | A / B | A ÷ B |
% | 余り(剰余算) | A % B | A mod B |
またその他に、とくしゅな記号もあります。少し難しいので、今は理解できなくても大丈夫です。
記号 | 意味 | 使い方 |
---|---|---|
& | ビットAND | A & B |
| | ビットOR | A | B |
^ | ビットXOR | A ^ B |
<< | 左シフト | A << B |
>> | 右シフト | A >> B |
^ | ビットXOR | A ^ B |
~ | ビット反転 | ~A |
&& | AND | (評価式A) && (評価式B) |
|| | OR | (評価式A) || (評価式B) |
! | NOT | !(評価式A) |
代入
「計算」した結果を代入します。代入の方向は「=」を挟んで必ず右から左です。
消費税を計算してみよう
では、前回までのプログラムで金額を入力してもらえるようになりました。今回は、入力された金額に8%の消費税(2017年10月現在)をつけて、税込みでいくらになるか計算するソフトを作ってみましょう。
消費税の求め方は「税抜き価格 × 1.08」でできますよね。それをC言語のコードにしてみましょう。前回のプログラムの変数名を少し変えました。
ちょうど15行目が計算の部分になります。税抜きの変数に1.08をかけた計算結果を、zeikomi変数に代入しています。では実行してみたいと思います。
このように、好きに数字を入れれば、その税込み価格を計算して表示してくれます。
あれ、なにかおかしい
一番最後、1240円の結果がおかしいのに気づきましたか?するどい人は気がついたかもしれませんね。
普通、電卓を使って計算すると、1240円の1.08掛けは「1339.2円」が正しい結果です。しかし、この結果では.2が消えてしまっています。なぜでしょうか。
int型の性質
注目すべきなのは、zeikomi変数を定義している16行目です。zeikomi変数はint型の変数、すなわち、整数しか受け付けないのです。その為、計算時には1399.2と結果が出ますが、それを代入する時点で1399に切り捨てられてしまった、というわけです。
実は、この「切り捨て」に対する警告を、Visual Studioが出してくれています。
「doubleからintへの変換です。データが失われる可能性があります。」という警告です。そして現に、0.2のデータが失われています。これは「エラー」ではなく「警告」なので、設定を変えていなければコンパイルには成功します(実行できる)。
正確な計算結果を表示したい
今回は「金額」なわけで、本当は1399円が正しいのですが、結果を「1399.2円です」と表示したい場合はどうすればよいでしょうか。zeikomi変数をdouble型に変えてあげれば大丈夫そうですね。そこで新たに、double型の変数「zeikomi_d」を作って、同じく計算してあげます。少数のprintf文は%dではなく%fを使うことを忘れないでください。
すると結果はこのようになります。
double型で計算すると、ちゃんと小数点まで含めて計算されることがわかります。
zeinuki * 1.08の計算の結果は、int型とdouble型の掛け算で、結果は自動的にdouble型になります。その結果をint型に無理やり入れている、というのが今回のコードです。この型を変えて無理やり入れる動作を、キャストといいます。
この、warning C4244の「doubleからintへの変換です。データが失われる可能性があります。」という警告は、「暗黙的なキャスト」、つまりdouble型のコードをそのままint型の変数に無理やり入れることになります。
この際、今回みたいに小数点以下は全て切り捨てられて代入されますが、それが果たして「プログラマーは分かっているけど、あえてそうしているのか」、それとも「変数に代入したけど知らないうちに切り捨てられているのか」、Visual Studio側は不安になり、このような警告を出すのです。
今回は詳しくキャストについてやりませんが、プログラムで「私はそれをわかっててキャストしますよ!」というやり方があります。これを「明示的なキャスト」と言います。そうすれば、VisualStudio側も「わかってるんだな」と安心して、警告を出さなくなります。以下のコードが明示的なキャストをしたときのコードになります。
この時間のまとめ
足し算は「+」、引き算は「-」、掛け算は「*」、割り算は「/」、あまりは「%」と書き、算数や数学と同じように計算ができる
「=」の右側で「計算」した後は、左側へ「代入」する
代入する側の型によっては、計算結果が正しく記録されないことがある
いよいよプログラムの大御所「IF文」
お待たせしました。次はいよいよ、プログラミングに欠かせない超基本的なパーツ、「IF文」(イフぶん)についてやっていこうと思います。
今回はここまでです。お疲れ様でした。