ログイン
kid's world

今月は何日まである?

ではここで,if文とswitch文を使った,少し役に立つプログラムを作成してみよう。それは,指定した月の日数を表示するプログラムである。たとえば,「2002年10月は何日まであるか?」と問えば,「31日まである」と答えるようにする。

ご存じのとおり,1,3,5,7,8,10,12月は31日まであり,4,6,9,11月は30日まである。そして厄介なのは2月で,普通は28日までだが,「閏年」は29日まである。

まずはわかりやすくするために,2月は28日までとすると,プログラムはList 11のように書くことができる。

List 11:日数を返すプログラム

#include <stdio.h>

main()
{
  int year, month, day;
  
  printf("年:");
  scanf("%d",&year);
  printf("月:");
  scanf("%d",&month);
  
  switch(month){
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    day=31;
    break;
  case 4:
  case 6:
  case 9:
  case 11:
    day=30;
    break;
  case 2:
    day=28;
    break;
  default:
    day=0;
  }
  
  if(day==0)
    printf("正しい月を入力してください。\n");
  else
    printf("%d年%d月は、%d日まであります。\n", year, month, day);
}

変数year,month,dayはそれぞれ年,月,日数を入れるための変数である。最初にユーザに年と月を入力してもらい,switch文で月に従って分岐し,適切な日数をdayに代入している。もし月が正しい値でなければ,dayには0を代入する。

そして最後に結果を表示するときに,dayが0なら正しい月を入力するように表示し,そうでなければ結果を表示する。

では,このプログラムを閏年に対応させよう。閏年の決め方は実は複雑で,「4の倍数の年は閏年である」というほかに,「100の倍数の年は閏年ではない。ただし,400の倍数の年は閏年である」というただし書きがついてくる。

まず,「4の倍数なら閏年」ということだけを考えよう。「yearが4の倍数」というのは,いい換えると「yearを4で割った余りが0」ということになる。余りを計算するには「%」という演算子を使う。よって,

if(year % 4 ==0)
  day=29;
else
  day=28;

と書けば,dayにはyearが4の倍数のとき29,そうでないとき28が代入される。次に付加条件を考える。100の倍数の年は閏年ではないのだから,論理演算子を使って,

year % 4 ==0 && year % 100 != 0

とすればよい。しかし400の倍数の年は閏年なので,さらに論理演算子を使って,

year % 4 ==0 && year % 100 !=0 || year % 400 == 0

とする。よって,List 11のcase 2:の部分をList 12で置き換えれば,閏年に対応したプログラムとなる。

List 12: case 2の部分のうるう年対応版

  case 2:
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
      day=29;
    else
      day=28;
    break;

それでは,実行例をFig. 4に示そう。ちなみに,例はdom.cという名前でソースファイルをコンパイルしている。

/c/condition-fig4.png

おわりに

if文やswitch文を,条件を演算する演算子といっしょに使うことによって,いろいろな条件判断ができることがわかったと思う。この2つの制御文を使うだけでも,実用的なプログラムが作れるようになる。

次回は,残りの制御文について解説する。制御文を使うと,繰り返し処理ができるようになる。自分なりにプログラムをいくつか作ってみて,関係演算子や論理演算子の使い方や制御文に慣れていただきたい。


文を繰り返し実行する」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告