わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ifとelseを使いこなそう~3. 曜日

あるアルゴリズムは,年と月と日を表す整数値を入力にとり,曜日を表す1個の整数値を求めます.1は月曜日,2は火曜日,…,6は土曜日,そして7は日曜日にそれぞれ対応します*1.年月日のうち日を表す英単語はdayなのに対し,曜日はday of weekとなりますので頭文字をとってdowという名前で変数を宣言し,そこに,曜日を表す整数値を格納したとします.そしてその値に応じて,何曜日なのかを出力することにします.
これはifを並べて,書くことができます.こうです.

if (dow == 1) {
  printf("月曜日\n");
}
if (dow == 2) {
  printf("火曜日\n");
}
if (dow == 3) {
  printf("水曜日\n");
}
if (dow == 4) {
  printf("木曜日\n");
}
if (dow == 5) {
  printf("金曜日\n");
}
if (dow == 6) {
  printf("土曜日\n");
}
if (dow == 7) {
  printf("日曜日\n");
}

else ifを使って,書き直してみましょう.

if (dow == 1) {
  printf("月曜日\n");
} else if (dow == 2) {
  printf("火曜日\n");
} else if (dow == 3) {
  printf("水曜日\n");
} else if (dow == 4) {
  printf("木曜日\n");
} else if (dow == 5) {
  printf("金曜日\n");
} else if (dow == 6) {
  printf("土曜日\n");
} else if (dow == 7) {
  printf("日曜日\n");
}

どちらも同じ動作をします.
序数の接尾辞の件では,else ifを用いましたが,今回,else ifにしてもしなくても,同じ結果になります.今回のプログラムでは,dowの値は,1から7までの整数値です.if文を7つ並べたソースコードで,条件式が真になるのはちょうど1つであり,printfの呼び出しもちょうど1回になる,というわけです.
ここまでの3つの記事について,担当している授業の内容の一部です.この曜日出力のプログラムは,Cの授業の2回目の学習です*2.除数の接尾辞のプログラムは,制御文と関連づけて3回目に,配列を用いた野球の得点計算は,4回目の学習内容なのでした.

*1:ツェラーの公式では,7で割った余りを求めますので,日曜日の値は7ではなく0です.この記事で,そのようにしていないのは,来年度以降の授業のコピペ対策です.

*2:データ型が中心テーマですが,ツェラーの公式を適用するにあたり,1月・2月は,前の年の13月・14月にしておく必要があり,if文についても解説しています.if〜elseとelse ifは,この回では説明していません.整数値に応じて曜日を出力するよう,コードを変更する指示をすると,毎年何人かはswitch〜caseを使用しています.