c
1 2 3 4#pragma warning(disable: 4996) 5#include<stdio.h> 6 7//プロトタイプの宣言 8int januaryoneday(int year); 9int leapyear(int year); 10 11 12int main(void) { 13 14 15 enum M_LIST {JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOW,DEC, N_MONTH}; 16 enum W_LIST{SUN,MON,TUE,WED,THU,FRI,SAT , N_WEEK}; 17 18 int monthdays[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //月の日数 19 20 21 int year; //入力された西暦 22 int month; //入力された月 23 int day; //入力された日 24 int week; // 曜日 25 int judgment; //入力された値がうるう年だったかどうか 26 int sumday; // 入力された誕生日までの合計の日数 27 int birthw; //入力された誕生日の曜日 28 int monthdaysum = 0; // 入力された誕生日の月までの合計の日数 29 30 printf("西暦を入力してください(入力された西暦の1月1日の曜日が表示されます)または、誕生日の西暦月日を入力してください(例:2019 01 01)生年月日の間はスペースを入れてください)"); 31 scanf("%d%d%d", &year,&month,&day); 32 33 34 35 week = januaryoneday(year); 36 printf("%d\n",week); 37 38 judgment = leapyear(year); 39 40 if (judgment == 0) { // うるう年であれば2月を29日に変更 41 42 printf("うるう年"); 43 monthdays[FEB] = 29; 44 } 45 46 for (int i = 0; i < month; i++) { //入力された誕生日の月までの合計の日数 47 48 monthdaysum += monthdays[i]; 49 50 } 51 52 53 sumday = ((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + monthdaysum + day;// 入力された誕生日までの合計の日数 54 55 birthw = sumday % 7; 56 57 printf("%d", birthw); 58 59} 60 61 62//入力された西暦の1月1日の曜日を返す 63int januaryoneday(int year){ 64 65 int sumday; // 入力された西暦までの累計日数 66 int dayw; // 曜日計算 67 68 sumday = ((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1; //入力された1月1日までの日数 69 70 dayw = sumday % 7; 71 72 return dayw; 73} 74 75 76//入力された西暦がうるう年かの判定 77int leapyear(int year) { 78 79 int leap; 80 81 leap = (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) ? 0 : -1; 82 83 return leap; 84 85} 86
入力された西暦の一月一日の曜日と(enumの数値で返す),西暦月日の入力された曜日を返したいのですが
一月一日の 曜日は上手くいくのですが 西暦月日 の方が上手くいきません。 計算がも違ってるかもしれませんが、 アドバイス頂けると幸いです。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。