본문 바로가기

전공/C

[Playing with C] 9장 연습문제 4번(윤년 판별하여 몇번째 날인지 계산)

4. 날짜(연, 월, 일)를 입력받아서 그해에서 그 날이 몇 번째 날인지 출력하는 프로그램을 작성하라. 입력된 날짜가 올바른 날짜인지 먼저 판별해야 한다. 이 때, 해당 연도가 윤년인지 아닌지 판별하는 것이 중요하다. 왜냐하면 윤년이면 2월 29일을 허용해야 할 것이고 그렇지 않으면 허용해서는 안 되기 때문이다. 윤년 여부는 입력된 날짜가 3월 이후일 때에도 중요하다. 해당 날짜가 윤년인지 아닌지를 판단하는 기준은 6장 연습문제 7번에 나타나 있으니 참고하기 바란다.

 

윤년여부 -> 4로 나눠지며 100으로 나누어 떨어지지 않는 or 400으로 나누어 떨어지는


C 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void get_Year(int *y, int *m, int *d);
int check_Year(int year);
void print_Day(int c_year, int month, int day);

int main() {
	int c_year, year = 0, month = 0, day = 0;
	int* p_year, * p_month, * p_day;
	p_year = &year;
	p_month = &month;
	p_day = &day;

	get_Year(p_year, p_month, p_day);
	printf("%d년 %d월 %d일은 ", year, month, day);
	c_year = check_Year(year);
	print_Day(c_year, month, day);


}
void get_Year(int* y, int* m, int* d) {

	printf("년, 월, 일을 입력하시오 : ");
	scanf("%d%d%d", y, m, d);
	while (*m > 12 || *d > 31) {
		printf("년, 월, 일을 올바르게 입력하시오 : ");
		scanf("%d%d%d", y, m, d);
	}

}

int check_Year(int year) {

	if (year % 400 == 0) {
		return 0;
	}
	else if (year % 4 == 0 && year % 100 != 0) {
		return 0;
	}
	else return 1;

}

void print_Day(int c_year, int month, int day) {
	int date = 0;
	int months[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

	for (int i = 0; i < month-1; i++) {
		date = date + months[i];
	}
	date += day;

	if (c_year == 0) {
		printf("윤년이므로 ");
		if (month > 1)
			date++;
	}
	else {
		printf("윤년이 아니므로 ");
	}
	printf("%d번째 날입니다.\n", date);
}

 

연습한 코드여서 틀릴 수 있음! 이상한 부분은 댓글로 알려주세요!

'전공 > C' 카테고리의 다른 글

[C언어] 제곱 구하는 함수  (0) 2022.01.26