前節では、100+200=300 と言う式を画面に表示させましたが、
あの時は、100,200,300 と言う数値を直接並べました。
つまり 300 と言う答えの部分は、人間が先に計算していたのです。
しかし、これでは、コンピュータを使っている意味がありません。
この様な
計算はコンピュータにやらせるべきでしょう。
C言語では、計算するには
数式を記述するだけで済みます。
次のプログラムは、100+200 の計算をコンピュータにやらせる例です。
int main(void)
{
100 + 200;
}
このプログラムの実行結果は、次の通りになります。
画面には、何の結果も表示されていません。
これは当然で、先ほどのプログラムは、100+200 を計算しろとしか書かれておらず、
計算した結果を表示しろ、とは一切書かれていないからです。
この様に、コンピュータは頑固であり素直でもあります。
要するに、与えられた命令はすべてその通りに素直に実行しますが、
それ以外のことは一切やってくれないという頑固さも持っています。
人間からすれば、計算したら結果を表示するのが当然ですが、
コンピュータにはそんな気配りはまったくありません。
では、計算した結果を表示するにはどうするのでしょうか?
もちろん、画面への表示にはprintf関数を使用します。
printf関数で文字を表示したり、数値を数字に変換して表示する方法は知っています。
実は、数式を渡して、数式の計算結果を数字に変換することも可能です。
次のプログラムは、100+200 を計算させて表示する例です。
#include <stdio.h>
int main(void)
{
printf("%d\n", 100 + 200);
return 0;
}
このプログラムの実行結果は、次の通りになります。
このプログラムで注目すべきところは、printf関数に渡されるのは、
100+200 と言う式ではなく、その結果である 300 であると言う点です。
100+200 の部分は(printf関数に関係なく)勝手に計算され、300 に変換されます。
そして、その 300 がさらに数字に変換され、画面に 300 と表示されたのです。
前項では、加算(足し算)を行いましたが、もちろん他の計算も可能です。
C言語の基本的な演算子は、次の表の通りです。
C言語での記号 |
数学での記号 |
機能 |
+ |
+ |
加算(足し算) |
- |
- |
減算(引き算) |
* |
× |
乗算(掛け算) |
/ |
÷ |
除算(割り算) |
% |
… |
剰余算(割り算の余り) |
この表を見ると、
数学とは異なる記号を使うことがあることに気づくと思います。
一般的なコンピュータのキーボードで表現できる記号には×や÷はないため、
C言語に限らず、多くのプログラミング言語では、数学とは別の記号が使われています。
演算子の使い方は数学とまったく同じです。
次のプログラムは、ここで紹介した演算子をひととおり使ってみる例です。
#include <stdio.h>
int main(void)
{
printf("%d\n", 10 + 3);
printf("%d\n", 10 - 3);
printf("%d\n", 10 * 3);
printf("%d\n", 10 / 3);
printf("%d\n", 10 % 3);
return 0;
}
このプログラムの実行結果は、次の通りになります。
このプログラムで注目してほしい部分は、
10/3(10÷3)の計算結果が 3 と表示されていることです。
電卓なら、3.3333333 と表示されるのが普通ですが、
ここではどの数値も整数として計算しているので、結果も整数になります。
なお、整数計算の結果は四捨五入ではなく
切り捨てとなります。
なぜなら、四捨五入を行うと、商×割る数、の逆計算を行ったときに、
その結果が、元の割られる数よりも大きいという矛盾が生じるためです。
実は、この計算は、安物電卓と高級電卓を区別する手軽な方法です。
皆さんもお手持ちの電卓で 10÷3×3 と計算してみてください。
筆者が所持している高級電卓では、10 と表示されましたが、
100円ショップの電卓では 9.9999999 と表示されました。
高級電卓では、誤差をなるべく少なくする計算方法が採用されています。
C言語で計算できるのは、単純な式だけではありません。
もっと複雑な式であっても、問題なく計算できます。
次のプログラムは、1~100までの合計を公式で計算する例です。
#include <stdio.h>
int main(void)
{
printf("%d\n", (1 + 100) * 100 / 2);
return 0;
}
このプログラムの実行結果は、次の通りになります。
C言語でも、
数式での優先順位は、数学と同じです。
乗算や除算は、加算や減算よりも先に計算されます。
優先順位を変えたい時には、() をつけるのも、数学とまったく同じです。
ただし、数学では、2重の () には {} を使いますが、C言語では違います。
C言語では、何重の () であっても、() の記号を使用します。