ここから本文です

西暦と月(ともに整数型)を入力し、その月の日数を出力する。ただし、以下の場 合に...

bqa********さん

2020/6/3013:59:57

西暦と月(ともに整数型)を入力し、その月の日数を出力する。ただし、以下の場 合にはエラー表示する。

・ 西暦が0以下のとき
・ 月が1以上12以下でない場合 なお、西暦が以下のいずれかのときはうるう年である。
・ 4の倍数で、かつ100の倍数でない ・ 400の倍数
論理和、論理積を用いること

これを実行するためのプログラムを教えてください

補足まだprintf関数とscanf関数、if文くらいしか習ってないので、そこらへんでできるプログラムでお願いします

閲覧数:
23
回答数:
1

違反報告

ベストアンサーに選ばれた回答

ひろみさん

2020/7/615:16:47

たぶんC言語ですよね?
私はC言語を使ったことがなくて,割り算の「余り」を算出するC言語の計算式を知らないので,ベーシック風に,しかも文章スタイルで書きます。
意味は十分に通じると思うから,あとはご自分でC言語に直してください。
なお,紀元前が入ると面倒なので,西暦はプラスの整数とします。
というか,グレゴリオ歴は1582年に作られたので,1582年以前には当てはまらないけど…。


西暦をy,月をm,うるう年かどうかをu(平年=0,閏年=1)としたら,プログラムの流れは次の通りになります。

① if (y<0)or(m<0)or(m>12) then printf("エラーです");goto end
② if (西暦y年が400で割り切れる,つまり,y/400の商が0)then u=1;goto③
else if(y/100の商が0) then u=0;goto③
else if (y/4の商が0) then u=1;goto③
③ if (m=1)or(M=3)or(m=5)or(m=7)or(M=8)or(m=10)or(m=12)
printf("西暦”,y,"年”,m,"月は31日まであります");goto end
④ if (m=4)or(m=6)or(m=9)or(m=11)
printf("西暦”,y,"年”,m,"月は30日まであります");goto end
⑤ if u=1
then printf("西暦”,y,"年は閏年なので2月は29日まであります");goto end
else printf("西暦”,y,"年は閏年でないので2月は28日までです");goto end
➅ end :
printf("これでどうでしょうか?")


①の部分は西暦と月が正しいかどうかをチェックする部分
②の部分が西暦y年がうるう年かどうかを判定する部分
③から⑤がその月の日数を印刷するする部分です。
➅はオマケ。

  • ひろみさん

    2020/7/615:26:55

    「y/400の商が0」「y/100の商が0」「y/4の商が0」と書いてしまったけど,「y/400の余りが0」(以下同)が正解でした。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる