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 |
---|