プロが教えるわが家の防犯対策術!

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回あります。

A 回答 (4件)

こんな感じでしょうか。


(体裁上、各行先頭のスペースは全角スペースにしてあるので、コピペするとコンパイルできないと思います)

#include <stdio.h>

static int
checkYear (int year)
{
 if ((year % 4) == 0)
 {
  if ((year % 100) == 0)
  {
   if ((year % 400) == 0)
    return (1);
  }
  else
   return (1);
 }

 return (0);
}

int
main (int argc, char * argv[])
{
 int count = 0;
 int year, start, end;

 printf ("西暦を入力:");
 scanf ("%d", &start);
 printf ("西暦を入力:");
 scanf ("%d", &end);

 if (start > end)
 {
  year = end;
  end = start;
  start = year;
 }

 for (year = start; year <= end; year++)
 {
  if (checkYear (year) == 1)
  {
   printf ("%d年\n", year);
   count++;
  }
 }
 if (count != 0)
  printf ("閏年は%d回あります。\n", count);
 else
  printf ("閏年はありません。\n");

 return;
}
    • good
    • 0

閏年の判定条件は、条件3、条件2、条件1 の順番に適用した方がはるかに簡単になります。

    • good
    • 0

えっと。

。。(^^;

> (ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。)

というプログラムの「閏年であれば」の判定を

> 条件1 西暦年が4で割り切れる年は閏年である
> 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない
> 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である

で行えばよいだけです。
それがチンプンカンプンという場合は「C言語の文法をほぼ知らない」、「いきなり背伸びし過ぎ」ということで、この問題を行う前に有名なHello worldからやるのがよいです。

ちなみにプログラミング言語云々以前に、やりたい機能仕様とそれを実現するための処理手順を日本語で具体的かつ明確に書けますか? ちまりは設計ですね。
それがしっかり出来るのであれば、処理手順を使用するプログラミング言語に翻訳するだけです。

参考まで。
    • good
    • 2

いつも思うんですけど


質問がざっくりすぎなんですよね

作成方法ってなんですかね
なにが知りたいのでしょうか
あなたのC言語の質問いくつか回答していると思うのですが
まともに返事が返ってきたことが無い気がするのですよ

お礼がほしいとかではなく
解決できたかな?と気になるのですよね

どうせ大学の講義中の課題とかなんでしょうけど
もうちょっと自分で考えてみては?
    • good
    • 6

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!