★分岐構造:ネスト3★
では、西暦を入力し、うるう年かどうか判断するプログラムを作ってみましょう。
色々なソフトには「カレンダー機能」がついています。
もちろん、Windowsにもカレンダーがありますよね。
うるう年とは→Wikipedia「閏年」を見てください。
リンク先にもありますが、うるう年かどうかの計算には次の条件を満たしている必要があります。
1.西暦が4で割り切れること
2.西暦が4で割り切れる年のうち、100で割り切れる年はうるう年ではない(平年)
3.西暦が4で割り切れ、100で割り切れる年のうち、400で割り切れる年はうるう年
ということは、近い年で言うと、
2006年は、「4で割り切れません」ので、平年です。
2004年は、「4で割り切れて100で割り切れません」ので、うるう年です。
2000年は、「4で割り切れて、100でも割り切れます」が「400で割り切れる」ため、うるう年です。
1900年は、「4で割り切れて、100でも割り切れます」が「400で割り切れません」ので、平年です。(近い年ではないですが・・・)
さて、これをプログラムにしてみましょう。
実行結果は、うるう年であれば、「○○年はうるう年です。」と表示し、平年であれば何も表示しないということにします。
やはり、図に書いて考えた方が分かりやすいかもしれません。
解答例です。
<sample program 014-01>
#include <stdio.h>
int main( void )
{
int year;
printf( "西暦を入力してください:" );
scanf( "%d", &year );
if( ( year % 4 ) == 0 ) {
if( ( year % 100 ) != 0 ) {
printf( "%d年はうるう年です。\n", year );
}
else {
if( ( year % 400 ) == 0 ) {
printf( "%d年はうるう年です。\n", year );
}
}
}
return 0;
}
|
<実行結果1 VC++ Express Edition>
西暦を入力してください:2006
続行するには何かキーを押してください・・・
<実行結果2 VC++ Express Edition>
西暦を入力してください:2004
2004年はうるう年です。
続行するには何かキーを押してください・・・
<実行結果3 VC++ Express Edition>
西暦を入力してください:2000
2000年はうるう年です。
続行するには何かキーを押してください・・・
<実行結果4 VC++ Express Edition>
西暦を入力してください:1900
続行するには何かキーを押してください・・・
まず、大前提となるのが「4で割り切れる」という点です。
「4で割り切れる」西暦のうち「100で割り切れなければ」平年確定です。
「4で割り切れて、100で割り切れる」場合は、「400で割り切れれば」うるう年です。
さて、2つ以上の条件がある場合に「ネスト」を使ったプログラムを紹介してきましたが、次は別の書き方を紹介します。
その前に、if文でよくある間違いについて書きましょう。