사용자에게 몇년 몇월 몇일인지를 입력받아,


 1년 1월 1일부터 몇일이 지났는지를 구하고, 윤년인지 아닌지를 구하는 프로그램


ex) 


날짜를 입력하세요... yyyy mm dd


yyyy년 mm월 dd일은 *****번째 날이고 #요일이면서 윤년입니다.


=====================================


#include <stdio.h>

int main()

{


int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 일 배열


int year,month,day=0,yun= 0,hapyear=0; // 년, 월,일,윤년 여부 변수 선언


printf("년 : "); // 년 입력


scanf("%d", &year);


printf("월 : "); // 월 입력


scanf("%d", &month);


if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 윤년 공식


yun = 1; // 만약 윤년이면 yun=1


}

if (month == 2 && yun == 1) // 월이 2월이고 , 윤년이라면

{

printf("일 (29일) : ");  // 일 입력

scanf("%d", &day);

}


else {

printf("일 (28일) : "); // 아니라면 그냥 일 입력

scanf("%d", &day);

}


if (1 <= month && month <= 12) { // month가 1월~12월 이고, day가 1~31일 안에 있을 때,

if (yun == 1)

{

printf("**윤년**\n\n");

printf("%d년 %d월 %d일은 \n", year, month, day); // 년 월 일 출력

}

else

{

printf("**평년**\n\n");

printf("%d년 %d월 %d일은 \n", year, month, day); // 년 월 일 출력

}

}

else {

printf("조건에 맞지 않습니다. 다시 입력해주세요.\n"); // 아니라면 재귀함수

main();

}


hapyear = (int)((year - 1)*365.2422 + (month - 1)*(365.2422 / 12) + day)-1; // 지난 일수 공식


// 2000년 5월 5일 입력시 1년 1월 1일부터 시작이므로 2000년 까지는 1999년이 지남 따라서 1999 * 365.2422

// 365.2422/12 = 1달기간이므로 입력한 달 전 달까지 4개월 치 계산 후 나머지 일을 더한다.



weeks(year,month,day,hapyear); // weeks 함수에 년 월 일 인자값


printf("1년 1월 1일 로부터 %d일 지났습니다.\n",hapyear+1); // 지난 일수 출력

}


int weeks(int year, int month, int day,int hapyear) // 년 월 일 인자값으로 받음


{


switch (hapyear % 7)

{

case 0: printf("월요일 이고,"); break;


case 1: printf("화요일 이고, "); break;


case 2: printf("수요일 이고,"); break;


case 3: printf("목요일 이고,"); break;


case 4: printf("금요일 이고,"); break;


case 5: printf("토요일 이고,"); break;


case 6: printf("일요일 이고,"); break;

}


return 0;

}


'IT > Programing' 카테고리의 다른 글

Dovelet / 여왕 벌/bumblebee  (0) 2016.04.03

+ Recent posts