こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

夏季五輪冬季五輪開催と開催しない年の計算

#include<stdio.h>

int main(void) {

int year;

printf("西暦年を入力して下さい:");
scanf_s("%d", &year);

if (year % 4 == 0) printf("夏季五輪\n");
if (year % 2 == 0 && year % 4 != 0)printf("冬季五輪\n");
if (year % 2 != 0) printf("五輪なし\n");

return 0;
}
まずこれを見ると解る通り、yearに何が入るか解りませんが
適当な西暦の年の数値を入力して2か4で割って余りで計算して0になればいいっていう
例題なんですが、全く意味が解りません。
例えば2018年と入力して冬季五輪と出るのですが、
いったいどういう意味なのかさっぱり解りません。
2018年に冬季五輪がやるという事でしょうか?
適当な数値を入力しているだけだからそんな訳ではないですよね。
if文を使ってやっていたのですが、この例題は何か意味があるのでしょうか?

投稿日時 - 2018-11-07 17:23:12

QNo.9555487

困ってます

質問者が選んだベストアンサー

オリンピック開催年は、
夏季が西暦を4で割ってあまりが出ない年。
冬季は西暦を2で割ってあまりが出ないが、4で割るとあまりが出る年。
となっています。
もちろん有史以来ということでは、なくそれぞれ夏は、1896年第一回アテネ大会以降、冬は1994年リレハメル大会以降ですが、上記はそこまで考慮されていません。(出展 Wikipedia 夏季オリンピック、冬季オリンピックより)

この例題は、この条件を記述した、%演算子の使い方や、if分のand条件などの例題(演習?)ということでしょう。

上の二つのif分は、まさに夏季、冬季の開催年の定義通りの条件式で、三番目の条件式はそれ以外(即ち奇数年)は開催なし、という条件式になっています。

投稿日時 - 2018-11-07 18:20:24

お礼

なるほどそうでしたか^^;
回答ありがとうございました。

投稿日時 - 2018-11-07 18:29:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> まずこれを見ると解る通り、yearに何が入るか解りませんが
具体的な年を判定すると

(...省略)
if ( year == 2012) printf( "冬季五輪\n" );
if ( year == 2014) printf( "夏期五輪\n" );
if ( year == 2016) printf( "冬季五輪\n" );
if ( year == 2018) printf( "夏期五輪\n" );
(省略...)

などと判定文を何十行何百行と延々と羅列しなければならなくなってしまうので、
夏期五輪と冬季五輪が開催される年の法則を見つけて
それを元に判定処理するのがプログラムがコンパクトになり良い方法です。
開催年の法則は(正確にいうと1994年以降の開催年ということになりますが)
・4の倍数が夏期五輪
・2の倍数だが4の倍数でない場合冬季五輪
となります。
(冬季五輪は夏期五輪と2年ずらして4年おきに開催というほうが人間にとって
わかりやすいのですが判定の書き方の都合で上のような法則とします。)

年が「○○の倍数」かどうかを区別するには「year % ○○」が0であるかどうかを
判定するようにします。
以下のようにプログラムに「year % 2」や「year % 4」の計算結果を
いれて実行して値を確認するとわかりやすいかもしれません。

#include<stdio.h>

int main(void) {

int year;

printf("西暦年を入力して下さい:");
scanf("%d", &year);

printf( "year %% 4 = %d\n", year % 4 );
printf( "year %% 2 = %d\n", year % 2 );

if (year % 4 == 0) printf("夏季五輪\n");
if (year % 2 == 0 && year % 4 != 0)printf("冬季五輪\n");
if (year % 2 != 0) printf("五輪なし\n");

return 0;

}

投稿日時 - 2018-11-07 18:34:56

お礼

遅くなりました、ベストアンサーしてから気づきました;
回答ありがとうございました。

投稿日時 - 2018-11-08 07:29:34

あなたにオススメの質問