일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 무료 동영상 강의
- 동영상
- 졸업 작품 소재
- c언어
- 클래스 다이어그램
- 산책하기 좋은 곳
- 강의
- 캡슐화
- 동영상 강의
- c#
- 알고리즘
- 실습
- C++
- 충남 천안
- Windows Forms
- 유튜브 동영상 강의
- 프로젝트
- 소스 코드
- 졸업 작품
- 표준 라이브러리 함수
- 표준 입출력
- 언제나휴일
- 원격 제어 프로그램
- 네트워크 프로그래밍
- 소켓 통신
- 파이썬
- 안드로이드 앱 개발
- 추천
- 언제나 휴일
- 실습으로 다지는 c#
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
년도 입력하면 달력 출력하기 본문
유튜브 동영상 강의
윤년 계산하기
4로 나누어 떨어지는 해는 대부분 윤년입니다.
이 중에 100으로 나누어 떨어지는 해는 대부분 평년입니다.
이 중에 400으로 나누어 떠러지면 윤년입니다.
윤년(년도)
….(년도는 4의 배수 and 년도는 100의 배수가 아님) or 년도는 400의 배수
1월 1일의 첫 번째 요일 찾기
평년은 365일로 요일이 하나 증가합니다.
윤년은 366일로 요일이 하나 더 증가합니다.
따라서 특정 년도는 “년도 + 윤년 개수”만큼 증가합니다.
달 출력하기
월 출력(m,시작 요일)
….월 출력
….반복(w:1->시작 요일)
……..공백 출력
….반복(d:1->월별 날짜[월])
……..시작 요일 1 증가
……..조건(시작 요일 is equal 7)
…………시작 요일:= 0
…………개행 출력
….시작 요일 반환
소스 코드
#include <stdio.h>
int find_first_weekday(int year);//1월 1일 요일 찾기
int DrawMonth(int month, int start);//달 출력(달(0~11), 시작요일:0~6), 반환값은 다음 달 시작요일
int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
const char* wname[7] = { "일","월","화","수","목","금","토" };
const char* bars[2] = //데코레이션 바
{
"=====================================================\n",
"-----------------------------------------------------\n"
};
int main(void)
{
int year, start;
int i = 0;
printf("년도:");
scanf_s("%d", &year);
start = find_first_weekday(year);
if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))//윤년 판단
{
days[1] = 29;//2월달의 날 수를 29로 설정
}
printf("[ %d년 ]\n", year);
for (i = 0; i < 12; i++)
{
start = DrawMonth(i, start);
}
return 0;
}
int find_first_weekday(int year)
{
//평년은 365일로 요일이 하나 증가합니다.
//윤년은 366일로 요일이 하나 더 증가합니다.
//따라서 년도만큼 요일이 증가하고 추가로 윤년 횟수만큼 더 증가합니다.
//증가한 값을 7로 나눠주면 1월 1일의 요일을 찾을 수 있어요.(일요일:0)
return (year+(year / 4 - year / 100 + year / 400))%7;
}
int DrawMonth(int month, int start)
{
int i = 0;
printf(" << %d 월>>\n", month + 1);//달 출력
printf(bars[0]);//데코레이션 바 출력
for (i = 0; i < 7; i++)//요일 출력
{
printf("%7s", wname[i]);//폭을 7로 설정
}
printf("\n");
printf(bars[1]);//데코레이션 바 출력
for (i = 0; i < start; i++)//첫 주 시작일까지 공백 출력
{
printf("%7s", " ");//폭을 7로 설정
}
for (i = 0; i < days[month]; i++)//일 출력
{
printf("%7d", i + 1);//폭을 7로 설정
start++;
if (start == 7)//요일이 7이면
{
start = 0;//0으로 변경
printf("\n");//개행 출력
}
}
printf("\n");//개행 출력
printf(bars[0]);//데코레이션
return start;//다음 달 시작 요일 반환
}
'C & C++ > C언어 예제 및 소스' 카테고리의 다른 글
삽입 정렬 (Insertion Sort) (1) | 2024.01.02 |
---|---|
선택 정렬 (Selection Sort) 알고리즘 (0) | 2024.01.01 |
버블 정렬 (Bubble Sort) 알고리즘 (1) | 2023.12.31 |
순차 정렬(Sequential Sort) 알고리즘 (1) | 2023.12.30 |
디지털 시계 (1) | 2023.12.29 |
1/100 초 단위의 시계 (0) | 2023.12.28 |
1월 1일 요일 입력받아 달력 출력 (3) | 2023.12.26 |
년도와 일수 입력받아 날짜 계산하기 (0) | 2023.12.24 |