- ベストアンサー
万年カレンダーのC言語プログラムを教えてください
西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください!お願いします!
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>ありがとうございます。さっそくプログラムを動かしてみました。でも第一週と第二週の日付がうまくつながっていないです。これはどうしてでしょうか? ごめんなさい。 htmlの半角スペースを連続して書くと1個にされてしまう事を忘れていました。 下から7行目の printf(" "); の半角スペース1個は半角スペース3個にしてください。
その他の回答 (5)
- funaho
- ベストアンサー率58% (43/74)
以下のプログラムを試して下さい。 #include<stdio.h> int dayofw(int ,int ,int ); void main() { int y, m, dw, i, cnt; char week[7][4]={"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; int mday[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; printf("西暦年入力->"); scanf("%d", &y); printf("月入力->"); scanf("%d", &m); dw=dayofw(y, m, 1); cnt=dw; printf("%d/%d\n ", y, m); for(i=0; i<7; i++){ printf("%s ", week[i]); } printf("\n"); for(i=0; i<dw; i++){ printf(" "); } for(i=1; i<=mday[m-1]; i++){ printf(" %3d ", i); cnt++; if(cnt==7){ printf("\n"); cnt=0; } } printf("\n"); } int dayofw(int y, int m, int d) { int y1, yobi; y1=(y+(y/4)-(y/100)+(y/400)+(2.6*m+1.6)+d); yobi=y1%7; return(yobi); }
- Tacosan
- ベストアンサー率23% (3656/15482)
ひとつ気になるのですが, グレゴリオ暦以前は考えなくていいのですか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> でも第一週と第二週の日付がうまくつながっていないです。 気に入らないならご自分で正しいコードをお書きになってください。'おんぶにだっこ'はあんまりではないですか?
補足
自分で書けないのと、わからないから説明をお願いしているんですけど・・・。
- arukamun
- ベストアンサー率35% (842/2394)
暇つぶしに作ってみました。 ツェラーの公式ですね。 #include <stdio.h> int weekday(int y,int m,int d) { if ( m < 3 ){ m += 12 ; y -- ; } return (y+y/4-y/100+y/400+(m*13+8)/5+d)%7 ; } int main() { int y,m,d,sw,ew ; printf("年 : "); scanf("%d",&y); printf("月 : "); scanf("%d",&m); sw = weekday(y,m,1); ew = weekday(y,m+1,1); if ( sw <= ew ){ ew = ew - sw + 28 ; } else { ew = 35 - sw + ew ; } printf("%4d / %d\n",y,m); printf("日 月 火 水 木 金 土"); for (d=0 ;d<37 ;d++){ if ( !(d%7) ){ printf("\n"); } if ( d < sw || d >= ew+sw ){ printf(" "); } else { printf("%2d ",d-sw+1); } } return 0 ; }
補足
ありがとうございます。さっそくプログラムを動かしてみました。でも第一週と第二週の日付がうまくつながっていないです。これはどうしてでしょうか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
西暦年と月からその月の1日が何曜日かを求めるコードを書けばいい。 検索サイトで "ゼラーの公式" を探しましょう。
お礼
丁寧に最後まで説明していただいて、ありがとうございました!