[자료구조] : 다차원 배열 예시(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

좋은 웹페이지 즐겨찾기