プログラミングに関する質問です。 キーボードから西暦年と月を入力し、その年のその月の日数を表示するプログラムを作成せよ。 教えてください。お願いします。

プログラミングに関する質問です。 キーボードから西暦年と月を入力し、その年のその月の日数を表示するプログラムを作成せよ。 教えてください。お願いします。

C言語関連1,346閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

このベストアンサーは投票で選ばれました

0

pqx6kit9eimhdさん int main(){ int year,month,day; scanf("%d%d",&year,&month); if(month == 2) { day=28; if(year%4 == 0 && year%100 != 0 || year%400 == 0) //Wikipediaより ++day; } else { day = 30; if(month > 7) ++month; if(month & 1 > 0) ++day; } printf("%d\n",day); return 0; }

その他の回答(5件)

0

#include <stdio.h> int main(void) { int y, m; scanf("%d %d", &y, &m); printf("%d\n", 30 + (((m < 8) && (m & 1)) || ((m > 7) && !(m & 1))) - (m == 2) - ((y % 4) || (!(y % 100) && (y % 400)))); return 0; }

0

/* 0506_123443その年のその月の日数.c pqx6kit9eimhdさん プログラミングに関する質問です。 キーボードから西暦年と月を入力し、その年のその月の日数を表示するプログラムを作成せよ。 教えてください。お願いします。 */ #define__CRT_SECURE_NO_WARNINGS #include_<stdio.h> int_main(void){ __int___day[13]={0,_31,28,31,30,31,30,31,31,30,31,30,31}; __int___yr;___//_西暦年 __int___mn;___//_月 __int___dy;___//_日数 __int___leap;_//_閏年フラグ __printf("西暦年_>_");_scanf("%d",&yr); __printf("____月_>_");_scanf("%d",&mn); __leap_=_(yr%400==0)_||_((yr%100>0)&&(yr%4==0)); __if(leap)_day[2]++; __dy_=_day[mn]; __printf("\n"); __printf("その月は%d日です\n",dy); __printf("正常終了\n"); __return_0; } /*_出力: 西暦年_>_2012 ____月_>_2 その月は29日です 正常終了 続行するには何かキーを押してください_._._. */

0

>>qwertyuio3456さんのプログラムはうるう年の2月以外の日数がデタラメです。 >コンパイルエラーにならないだけマシ。。。とも言える?^^ コピペミスでした。 下記2行と取り替えてください scanf("%d%d",&y,&m); printf ( "%d年%d月は%d日までです\n",y,m,ym2day((y*12+m)/12,(y*12+m)%12+1)-ym2day(y,m)); #include <stdio.h> int ym2day(int y,int m){ m=y*12+m-3; y=m/12; m=m%12; return y*365+y/400-y/100+y/4+(m*306+34)/10; } int main(void){ int y,m; scanf(%d%d",&y,&m); printf ( "%d年%月は%d日までです\n",ym2day((y*12+m)/12,(y*12+m)%12+1)-ym2day(y,m)); return 0; } qwertyuio3456さんのプログラムはうるう年の2月以外の日数がデタラメです。 k032yfさんのプログラムは演算子の使い方が変です。 「if(month & 1 > 0)」は「if(month & (1 > 0))」の意味で「if(month & 1)」と同じことをやっています。 「if((month & 1) > 0)」としたかったのでしょうか? 「if(month & 1)」でも正常に動きますが。

0

qwertyuio3456さんの回答はひどすぎます。 少なくともご自分で検証されていません。 アルゴリズムとしては、 平年の毎月の月数のテーブルを持ち、 平年ならそのまま該当する月の日数を答えとし、 閏年かつ2月なら+1を答えとする。 それだけです。 閏年の判定ですが、 基本的に4で割り切れるなら閏年、 しかし、100で割り切れ、かつ400で割り切れないなら閏年にしない。 コードにするとこんな感じ。 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

0

#include <stdio.h> int main(void){ int d[]={31,28,31,30,30,30,31,31,30,31,30,31}; int y,m,ds; printf("西暦を入力して下さい=>"); scanf("%d",&y); printf("月を入力して下さい=>"); scanf("%d",&m); ds=d[m-1]; if(y%4==0)ds=ds+1; if(y%4==100)ds=ds-1; if(y%4==400)ds=ds+1; printf("\n西暦%dの%d月の日数は%dです\n",y,m,ds); return 0; }