[자료구조] : 다차원 배열 예시(C)
한 해의 지난 날 수를 계산하는 프로그램을 구현해보자.
전체코드
#include <stdio.h>
int mdays[][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int isleap(int year)
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int dayofyear(int y, int m, int d)
{
int i;
int days = d;
for (i = 1; i < m; i++)
{
days += mdays[isleap(y)][i - 1];
}
return days;
}
int main()
{
int year, month, day;
int retry;
do {
printf("년 : "); scanf_s("%d", &year);
printf("월 : "); scanf_s("%d", &month);
printf("일 : "); scanf_s("%d", &day);
printf("%d년의 %d일째입니다.", year, dayofyear(year, month, day));
prinif(" 다시 할까요? (1....예 / 2... 아니요) : ");
scanf_s("%d", &retry);
} while (retry == 1);
return 0;
}
<결과>
핵심코드 <1>
int dayofyear(int y, int m, int d)
{
int i;
int days = d;
for (i = 1; i < m; i++)
{
days += mdays[isleap(y)][i - 1];
}
return days;
}
-
isleap함수는 매개변수 year로 받은 연도가 윤년이면 1 / 평년이면 0 반환
-
평년 1월 , 2월 ,,,, 12월의 수
- 인덱스가 0인 행의 구성요소는 mdays[0][0], mdays[0][1],,,mdays[0][11]이다.
-
윤년 1월, 2월 ,,,, 12월의 수
- mdays[1][0], mdays[1][1], mdays[1][11]이다.
핵심코드 <2>
int mdays[][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int isleap(int year)
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
- 윤년을 구하는 방법은 간단하다.
- 4의 배수 가운데, 100의 배수를 제외하고, 제외한 100의 배수 가운데 400의 배수를 다시 포함 시킨다.
- 윤년의 2월의 날 수는 29일이다.
- (평년) 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
(윤년) 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
Author And Source
이 문제에 관하여([자료구조] : 다차원 배열 예시(C)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@qlwb7187/자료구조-다차원-배열-예시C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)