년도, 월, 일을 넘겨받아서 요일을 출력하는 함수를 만들어보자.
헤더파일에 만들어서 소스 파일에 #include 시켜서 사용할 수 있다.
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
|
// 년도를 넘겨받아 윤년/평년을 판단해 윤년이면 true(1), 평년이면 false(0)을 리턴하는 함수
bool isLeapYear(int year) {
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0;
}
// 년, 월을 넘겨받아 그 달의 마지막 날짜를 리턴하는 함수
int lastDay(int year, int month) {
// 각 달의 마지막 날짜를 기억하는 리스트를 만든다.
int m[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 인수로 넘겨받은 년도에 따른 2월의 마지막 날짜를 확정한다.
m[1] = isLeapYear(year) ? 29 : 28;
return m[month - 1];
}
// 년, 월, 일을 넘겨받아 1월 1일부터 지난 날짜를 계산해 리턴하는 함수
int totalDay(int year, int month, int day) {
int sum = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
for (int i = 1; i < month; i++) {
sum += lastDay(year, i);
}
return sum + day;
}
// 년, 월, 일을 넘겨받아 요일을 리턴하는 함수
int weekDay(int year, int month, int day) {
// 0:일요일, 1:월요일, 2:화요일, 3:수요일, 4:목요일, 5:금요일 6:토요일
// 1년 1월 1일부터 인수로 넘겨받은 년, 월, 일까지 지난 날짜의 합계를 7로 나눈 나머지를 리턴시킨다.
return totalDay(year, month, day) % 7;
}
|
cs |
소스 파일에 위의 헤더 파일을 추가하여 달력 출력하기.
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
32
33
|
#include "config.h"
#include "calendar.h"
void main() {
int year, month, day;
// 달력 모양 만들기
printf("출력할 달력의 년도와 월을 적으시오 : ");
scanf_s(" %d %d", &year, &month);
printf("=============================\n");
printf(" %4d년 %2d월\n", year, month);
printf("=============================\n");
printf(" 일 월 화 수 목 금 토 \n");
printf("=============================\n");
// 1일이 출력될 요일의 위치를 맞추기 위해 1일의 요일만큼 반복하며 빈 칸을 출력한다.
for (int i = 0; i < weekDay(year, month, 1); i++) {
printf(" ");
}
// 1일부터 달력을 출력할 달의 마지막 날짜까지 반복하며 날짜를 출력한다.
for (int i = 1; i <= lastDay(year, month); i++) {
printf(" %2d ", i);
// 출력할 날짜(i)가 토요일이고 그 달의 마지막 날짜가 아니면 줄을 바꾼다.
if (weekDay(year, month, i) == 6) {
printf("\n");
}
}
printf("=============================\n");
}
|
cs |
출력
'C, C++' 카테고리의 다른 글
C++/template/함수 템플릿/템플릿에 관하여 (0) | 2020.01.13 |
---|---|
C++/call by value, call by reference (0) | 2020.01.13 |
C++/왕복버블정렬 알고리즘 (0) | 2020.01.08 |
C++/소인수분해 알고리즘 문제/ (0) | 2020.01.08 |
C++/점수별 등급 주기/if/switch (0) | 2020.01.06 |