プログラミングを始めると,作ったプログラムに間違いがあってコンパイル時に
エラーが表示されることがよくあります.メッセージを良く読むとどこが間違っ
ているのかわかるのですが,ただ単に英語で書いてあるというだけで見ない人が
多くいるようです.基本的なパターンは決まっているので,これも慣れさえすれ
ばわかるようになるので,必ず見るようにしてください.
本日の授業で扱うのは「整数」の演算です.計算機は2進数で内部処理している
のはみなさんもよく知っていると思いますが,2進数で小数点を持つ実数を扱う
のは,ちょっと面倒な処理が必要です.そのため,計算機の心臓部であるCPUで
は整数型と実数型の演算は別の機能として分けて行いますので,数値の「型」,
すなわち整数なのか実数なのかが重要なポイントです.教科書にあるように,変
数定義のときに,
- 除算の注意
整数型の演算ですから,扱える数は整数だけです.なので,4割る3は1,3割る4
は0です.ある数をそれよりも大きい数で割った場合,その答えは必ず0になるこ
とに注意してください.
- 剰余
「四則演算」というと,通常は加減乗除の4つですが,プログラミングではもう一つ
「剰余」というのが重要なので,それも含めて四則演算と言います.剰余とは割っ
た余りです.
皆さんは,小学校で少数を習って以来,それ以前に使用していた「余り」につい
て無視する癖が付いてしまっています.これからはそれを直していく必要があり
ますので,注意してください.以下にポイントを示しますので,一刻も早く慣れ
ることが重要です.
- 剰余の動作
教科書のp.17に出ているように,% の記号は剰余を表します.以下の
ような動作にります.
とすると,5割る3の除算を実行し,余りは2ですので,2を出力します.
- 剰余の使い道
例えば任意の整数を6で割る場合,その余りは0から5までの6つの整数になります.
1つずつ増えていく数列に対して剰余を求めると,特定の範囲の数だけが繰り返
されることになります.先ほどのように6の剰余を求めると,1から100までの数
列ですと,1からはじまり5まで行くと0に戻りまた5まで,ということを繰り返し
ます.
カレンダーの表示のようなものもわかりやすい例かと思いますが,
今月ですと,1から30までの日付が7つの曜日に分類されるのは日付を7で割った
余りを使用して実行できます.すなわち,今日の25日を7で割ると余りは4ですが,
余りが4になる日は全て月曜日です.
今後乱数を活用してプログラミングに偶然性を取り込みますが,その際に使用す
るのもこの剰余です.最初の週にgeditの使用例として挙げたプログラムに以下のものがあり
ます.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned) time(NULL));
printf("%d\n", rand() % 6 + 1);
return(0);
}
|
printf の行が乱数に関係する部分ですが,出てきた乱数 rand()
の6で割った余り(0, 1, 2, 3, 4, 5の6種類のどれか)に1を加えています.そうす
ると,結局1から6のどれかの整数が表示されることになるのですが,それがコン
ピュータで実現する「サイコロ」です.このような利用法もあります.
- 剰余のツボ
先ほどから何度か紹介していますが,ある整数で割った余りの種類(個数)はその
割った数と同じです.すなわち,6で割った余りの種類は6種類というこ
とですが,これが重要なポイントです.
- 単項演算子
教科書のp.17に算術演算子の一覧が出ています.四則演算といいながら演算子は
剰余を加えた5つではなく,さらに多い6種類あります.最初にある「負の符号」
というのも演算子ですが,単項演算子と分類されるもので,ちょっと注意が必要
です.その表には,一番右のコラムに「演算順位」というものがあり,この負号
は第1位になっています.この順位は「結合の強さ」とも呼ばれるもので,乗算
と除算は加算と減算よりも優先されるという小学校で習った規則を意味していま
す.つまり
2 + 3 * 4 - 5
という計算の答えは9になりますが,プログラミングでも同じようになっている
ということです.さて,では優先順位第1位の負号ですが,これは数学とは違う
プログラミング言語に固有のもので,以下のような演算を可能にするためにあり
ます.
動作は自分で確認してください.
- 演算子の前後のスペース
教科書の例題を見ると分かるように,四則演算をプログラム中に記述する場合,
演算子ならびに代入記号の前後にスペースが入っています.前項のような単項演
算子の負号のような場合もありますので,必ずスペースを入れるようにしましょ
う.ただし,後で出てくる if 文の条件式などのように入れない場合もあ
ります.