윤년을 계산 방법
1. 기본적으로 4의 배수가 되는 해는 윤년.
2. 다만 100의 배수가 되는 해는 윤년이 아니다.
3. 그중에서 또 400의 배수가 되는 해는 윤년.
요일 구하는 방법
1년부터 구하고자 하는 달 1일까지 모든 일수를 구한다.
예를 들면 2007년 3월 달력을 구하고자 할때
1년 부터 2007년 3월 1일 까지 모든 날수를 구한다.
모든 일수를 7로 나눠서 나머지가
0 이면 일요일
1 이면 월요일
2 이면 화요일
3 이면 수요일
....
// 달력과 요일
#include <stdio.h>
void calendar(int year,int mon); //윤년계산과 요일계산
void calendar_p(); //달력 출력함수
int i,j;
int day,mon,year;
int remain;
char week[7][3]={"일","월","화","수","목","금","토"};
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void main(){
int num;
char restart;
do{
printf("1.달력 2.요일\n");
printf("번호 : ");
scanf("%d",&num);
if(num==1){
printf("연도 입력 : ");
scanf("%d", &year);
printf("달 입력 : ");
scanf("%d", &mon);
calendar(year,mon);
calendar_p();
}
else if(num==2){
printf("연도 입력 : ");
scanf("%d", &year);
printf("달 입력 : ");
scanf("%d", &mon);
printf("일 입력 : ");
scanf("%d", &day);
calendar(year,mon);
printf("\n %d일은 %s요일입니다.\n",day,week[i]);
}
fflush(stdin);
printf("다시 입력 하시겠습니까 (Y/N) : ");
scanf("%c",&restart);
}while(restart=='Y' || restart=='y');
}
void calendar(int year,int mon){
int allday;
//윤년 계산과 그달의 1일의 요일계산
allday=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400);
for(i=0; i<mon; i++){
if(i==1 && ((year%4==0 && year%100 !=0) || year%400==0)){
month[1]+=1;
}
allday += month[i];
}
allday -= month[i-1];
remain=(allday+1) % 7;
i=(remain+day-1)%7; //요일계산
}
void calendar_p(){
int count=1;
printf("\n\n %d년 %d월\n",year,mon);
printf(" 일 월 화 수 목 금 토\n");
for(i=0; i<6; i++){
for(j=0; j<7; j++){
if(i==0 && j<remain){
printf(" ");
continue;
}
else if(count>=month[mon-1]+1){
break;
}
printf("%4d",count);
count++;
}
printf("\n");
}
}
'프로그래머의 길 > C & C++' 카테고리의 다른 글
콘솔상에서 상자를 그려 위치 이동시키는 프로그램 (0) | 2007.03.23 |
---|---|
#define 함수 활용 (0) | 2007.03.23 |
데이터를 파일로 입출력하는 프로그램 (0) | 2007.03.22 |
파일 삭제, 이름 변경 함수 unlink(), rename() (0) | 2007.03.22 |
getchar()와 getche(), getch()의 차이점 (0) | 2007.03.22 |