사용자에게 몇년 몇월 몇일인지를 입력받아,
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 |
---|