SPRING :: NOTE
[C] 연수와 월수를 입력하면 달력이 출력되는 프로그램 본문
반응형
연수와 월수를 입력하면 달력이 출력되는 프로그램을 작성하시오.
조건:
1년 1월 1일은 월요일이다
4년마다 한 번씩 윤년(원래 2월은 28일까지지만, 윤년 때의 2월은 29일까지임)
그런데 100년마다는 윤년이 아니다.
그런데! 400년마다는 또 윤년이다.
(따라서 300년은 윤년이 아니지만, 2000년은 윤년)
연수를 입력하시오: 2006
월수를 입력하시오: 8
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
#include <stdio.h>
void calendar(int year, int month);
main(){
int year = 0, month = 0;
printf("연 수를 입력하시오 : ");
scanf("%d", &year);
printf("\n");
printf("월수를 입력하시오 : ");
scanf("%d", &month);
printf("\n");
printf("일\t월\t화\t수\t목\t금\t토\n");
calendar(year, month);
}
void calendar(int year, int month)
{
int day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int days = 0;
int first_date = 0;
int count = 0;
days = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
for (int i = 0; i < month - 1; i++)
{
if (i == 1){
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) //윤년(2/29)
day[1] = 29;
else
day[1] = 28;
}
days += day[i];
}
// 7일씩 나눠주면 전달에서 다음달로 넘어갈때 첫주 칸을 채울 count
first_date = days % 7;
//1년 1월 1일은 월요일. (시작은 일요을부터)
for (int i = 0; i <= first_date; i++)
{
printf("\t");
count++;
}
for (int i = 1; i <= day[month - 1]; i++)
{
if (count >= 7)
{
printf("\n");
count = 0;
}
printf("%d\t", i);
count++;
}
printf("\n\n");
}
반응형
'Development Language > C · C++ · MFC' 카테고리의 다른 글
[MFC] 폴더에서 파일 갯수 구하기 (0) | 2017.01.18 |
---|---|
파일 범위에서만 사용할 수 있습니다. 중첩된 구문에는 사용할 수 없습니다. (0) | 2017.01.05 |
[C] 단어가 회문 (앞뒤 어느 쪽에서 읽어도 같은 어구) 인지를 결정하는 프로그램 (0) | 2016.10.26 |
[C] 정수형 데이터를 갖는 3X3 행렬 2개를 입력받아, 그 곱을 출력하는 프로그램 (0) | 2016.10.26 |
[C] 크기가 5인 정수 배열을 사용하여 10 개의 정수를 입력받아, 가장 큰 두 수의 곱을 찾는 프로그램 (0) | 2016.10.26 |
Comments