夏季五輪、冬季五輪、五輪なしの計算方法

このQ&Aのポイント
  • 西暦年を入力し、その年が夏季五輪、冬季五輪、または五輪なしのどれかを計算するプログラムです。
  • 年を2で割って余りで計算し、0なら夏季五輪、2で割れて余りが0でないなら冬季五輪、2で割れないなら五輪なしと指定します。
  • 具体例として、2018年を入力した場合、冬季五輪と表示されます。これは例題であり、実際にその年に冬季五輪が開催されるわけではありません。
回答を見る
  • ベストアンサー

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

#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文を使ってやっていたのですが、この例題は何か意味があるのでしょうか?

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

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

オリンピック開催年は、 夏季が西暦を4で割ってあまりが出ない年。 冬季は西暦を2で割ってあまりが出ないが、4で割るとあまりが出る年。 となっています。 もちろん有史以来ということでは、なくそれぞれ夏は、1896年第一回アテネ大会以降、冬は1994年リレハメル大会以降ですが、上記はそこまで考慮されていません。(出展 Wikipedia 夏季オリンピック、冬季オリンピックより) この例題は、この条件を記述した、%演算子の使い方や、if分のand条件などの例題(演習?)ということでしょう。 上の二つのif分は、まさに夏季、冬季の開催年の定義通りの条件式で、三番目の条件式はそれ以外(即ち奇数年)は開催なし、という条件式になっています。

situmonyou4989
質問者

お礼

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

その他の回答 (1)

回答No.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; }

situmonyou4989
質問者

お礼

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

関連するQ&A

  • 五輪が開催される年の判定

    #include<stdio.h> int main(void){ int year; printf("西暦年を入力してください:"); scanf("%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; } この部分は、     if (year % 4 == 0) printf("夏季五輪\n"); if (year % 2 == 0 && year % 4 != 0) printf("冬季五輪\n"); if (year % 2 != 0) printf("五輪なし\n"); なぜこうなるのか説明してください。 五輪が開催されるのは、4年ごとらしいのですが、 レベルの低いかもしれない、質問ですが、どうか解りやすく なぜこうなるのか教えて下さい、よろしくお願いします。

  • C言語入門者です。プログラムの添削をお願いします。

     任意の西暦年を入力し、その年がオリンピックの開催年(夏季・冬季問わず)かどうかを判定するプログラムを作ろうと思っています。  #include<stdio.h> int main(void) {     int year, rest;     rest = year % 4;     printf("オリンピック(夏季・冬季問わず)が開催される年(西暦)を一つ答えなさい。");     scanf("%d", year);     if(rest == 0) printf("正解!夏季五輪!");     if(rest == 2) printf("正解!冬季五輪!");     if(!(rest == 0 || rest == 2)) printf("不正解!");     return 0; } 夏季五輪開催年を入力した場合、「正解!夏季五輪!」 冬季五輪開催年を入力した場合、「正解!冬季五輪!」 それ以外の場合、「不正解!」 と画面に表示されるようにしたいのです。    しかし、year にどんな数値を入力しても、「正解!夏季五輪!」としか表示されません。どこが間違っているのでしょうか?添削よろしくお願いします。

  • 冬季五輪開催地(候補)

    こんばんは。 2021年7月に行われた東京夏季五輪ですが、冬季五輪の開催について教えて下さい。将来的に冬の五輪開催についても東京都では可能だと思い、聞いてみました。よろしくお願いします。

  • 冬季夏季五輪日韓全面協力

    冬季夏季五輪日韓全面協力 http://sankei.jp.msn.com/sports/news/130910/oth13091011270012-n1.htm に反対する国民の声を集めて、活かしてくれる議員は、誰ですか?

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • 入力値のチェック(西暦、万年カレンダ)C言語

    入力値が範囲内であるかの判定、違ったらもう一度繰り返すプログラムを作成したいのですが、うまく出来ません。よろしくお願いします。 初心者なので、判りやすく説明していただけると助かります。 #include <stdio.h> void main(){ int a , year ; printf(" 西暦入力--> "); scanf("%d",year); for( a = 0 ; a < 1 ;){ if( year >= 1 && year <=9999 ){ a = a + 1 ; }else{ printf("1年~9999年で入力せよ\n"); } } } scanf()の辺りを変えなければと思っているのですが、どうすればよいのかわかりません。scannf()意外に何を使った方が良いですか? パラメータはどうすればよいですか? 祝日を判定するやり方もわかれば教えていただけませんか? サイトがあったら、URLお願いします。 @@@@@ ↑のプログラムがすべて左よりになってしまったのですが、どうすれば段差をつけれますか?

  • カレンダー作成

    C言語初心者です。 西暦と月を入力してその月のカレンダーを作成するプログラムの問題なのですが #include <stdio.h> #define MMAX 12 #define COMP (year - 1) int main(void) {  int i, j, year, month, day, youbi, ycnt, mcnt = 0;  int mday[MMAX] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  printf("西暦と月を入力して下さい-->");  scanf("%4d%2d, &year, &month");  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)   mday[1] = 29;  for (i = 0; i < [A]; i++) {   mcnt += mday[i];  }  mcnt++;  [B] = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;  printf("\n%4d 年%2d 月\n", year, month);  printf("----------------------------\n");  printf(" 日 月 火 水 木 金 土\n");  for (j = 0, ycnt = 0; j < youbi; j++, ycnt++) {   printf(" ");  }  for (day =1; day <= mday[month - 1]; day++) {   if ([C])    printf("[%2d]", day);   else    printf(" %2d ", day);   ycnt++;   if ([D]) {    printf("\n");    ycnt = 0;   }  }  return (0); } [A]、[B]、[C]、[D]に答えを入れなきゃいけないのですが私が考えた答えだと カレンダーの表示すらされません。どこがいけないのでしょうか? #include <stdio.h> #define MMAX 12 #define COMP (year - 1) int main(void) {  int i, j, year, month, day, youbi, ycnt, mcnt = 0;  int mday[MMAX] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  printf("西暦と月を入力して下さい-->");  scanf("%4d%2d, &year, &month");  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)   mday[1] = 29;  for (i = 0; i < month; i++) {   mcnt += mday[i];  }  mcnt++;  youbi = ((COMP + COMP / 4 - COMP / 100 + COMP / 400) + mcnt) % 7;  printf("\n%4d 年%2d 月\n", year, month);  printf("----------------------------\n");  printf(" 日 月 火 水 木 金 土\n");  for (j = 0, ycnt = 0; j < youbi; j++, ycnt++) {   printf(" ");  }  for (day =1; day <= mday[month - 1]; day++) {   if (youbi = 0)    printf("[%2d]", day);   else    printf(" %2d ", day);   ycnt++;   if (youbi > 7) {    printf("\n");    ycnt = 0;   }  }  return (0); } よろしくお願いします。

  • C言語 関数問題

    西暦年yearを引数として受け取り,閏年かどうかの判定結果を戻り値として返す関数leap_year()を作成せよ. ただし,leap_year()は,閏年の場合は1を返し,そうでない場合は0を戻り値として返すものとする. 提出するプログラムは,関数leap_year()だけでなく,メイン関数main()も含む下記プログラムを完成させる形で作成する #include <stdio.h> /* ここに関数leap_year()のプロトタイプ宣言を記述する */ int main() { int i, year[3]; for (i=0; i<3; i++) { printf("西暦年を入力してください"); scanf("%d", &year[i]); if (leap_year(year[i]) == 1) { printf("閏年です.\n"); } else { printf("閏年ではありません.\n"); } } } /* ここに関数leap_year()を定義する */

  • エラー処理

    万年カレンダーを作っています。 while(1){ printf(" 西暦年>"); scanf("%d",&year); /*西暦年入力*/ printf("   月>"); scanf("%d",&month); /*月入力*/ if(year>0 && month>0 && month<13){     break; } else{ printf("正しく入力してください\n"); } 上記のように、数字のエラー処理をしたのですが、これに数字以外のモノが入力された場合のエラー処理も追加しなければなりません。

  • 2018年平昌冬季五輪の1部を長野で開催しろ?

     2018年平昌冬季五輪をめぐり、莫大な費用負担を懸念する韓国の市民団体が12日、ソウルで記者会見を開き、他都市での「分散開催案」を提示した。  1998年冬季五輪が行われた長野県や、北朝鮮東部の馬息嶺スキー場での開催案も盛り込まれている。  一方、朴クネは、 「競技場の工事が進行中で議論は無意味」と一蹴。  IOCも今年1月、韓国での全競技実施計画を受け入れ、 「会場変更で議論の余地はもうない」としている。(産経ニュースより抜粋) http://www.sankei.com/world/news/150313/wor1503130003-n1.html ・しかし、韓国様は金がないから日本や北朝鮮など他国の了解も取り付けずに、勝手に長野や馬息嶺に開催を盛り込もうとしているのか? ・それとも韓国で開催するから、競技場の工事に掛る金をお人好しの「日本(東京)が負担するニダ!」と強請タカリをして来る気なのか? ご回答をよろしくお願いします。

専門家に質問してみよう