c·c++/c 프로그래밍

달력출력

바로이순간 2012. 10. 10. 01:42

#include <stdio.h>

int main() {

    int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

    int year, month, week=0, leap=0;

    int i, j, k;

    printf("년 월: ");

    scanf("%d%d", &year, &month);

    if((year%4==0&&year%100!=0) || (year%400==0)) leap=1;

    days[2]+=leap;

    k=year-1;

    week=(k+k/4-k/100+k/400)%7;

    for(i=1;i<month;i+=1)  {

        week=week+days[i];

    }

    week=(week+1)%7;

    printf("\n");

    printf("      %d년 %2d월\n\n", year, month);

    printf(" 일 월 화 수 목 금 토\n");

    printf("---------------------\n");

    for(i=0;i<week;++i) printf("   ");

    while(i<days[month]+week) {

        printf(" %2d", i-week+1);

        i=i+1;

        if(i%7==0)printf("\n");

   }

    return 0;

}


================================================================

#include <stdio.h>

int main() {

    int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

    char wname[7][4]={"일", "월", "화", "수", "목", "금", "토"};

    int year, month, day, week=0, leap=0;

    int i, j, k;


    printf("연, 월, 일을 입력하세요\n");

    printf("연(1950~2050)= ");

    while(1) {

        scanf("%d", &year);

        if(1950<=year&&year<=2050) break;

        printf("에러: 년도(1950~2050)재입력= ");

    }

    if((year%4==0&&year%100!=0) || (year%400==0)) leap=1;

    days[2]+=leap;

    printf("월(1~12)= ");

    while(1) {

        scanf("%d", &month);

        if(1<=month&&month<=12) break;

        printf("에러: 월(1~12)재입력= ");

    }    

    printf("일(1~%d)= ", days[month]);

    while(1) {

        scanf("%d", &day);

        if(1<=day&&day<=days[month]) break;

        printf("에러: 일(1~%d)재입력= ", days[month]);

    }    

    k=year-1;

    // year전년도 까지의 윤년의 갯수를 구해서 year전년도에 더한 값을 week에 넣는다.

    // 이렇게 하는 이유는 평년에는 1일씩 요일이 뒤로 밀리고, 윤년에는 2일씩 요일이 뒤로

    // 밀리기 때문이다.

    week=(k+k/4-k/100+k/400)%7;

    // 이제 주어진 해의 전번달까지의 날수를 week에 더해준다.

    for(i=1;i<month;i+=1) { 

        week=week+days[i];

    }

    // 그 후에 이번달의 날을 week에 더해준 것을 7로 나눈 나머지가 요일을 나타낸다.

    week=(week+day)%7;

    printf("%d년 %d월 %d일은 %s요일 입니다.\n", 

        year, month, day, wname[week]);


    return 0;

}


===============================================================


#include <stdio.h>

int main() {

    int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

    int year, month, week=0, leap=0;

    int i, j, k;

    printf("몇 년: ");

    scanf("%d", &year);

    if((year%4==0&&year%100!=0) || (year%400==0)) leap=1;

    days[2]+=leap;

    printf("1월 1일은 몇 번째 요일<일요일은 0>: ");

    scanf("%d", &week);

    printf("[ %d년 ]\n", year);

    for(month=1;month<13;month+=1) {

        printf("                          << %2d월 >>\n", month);

        printf("========================================================\n");

        printf("  일      월      화      수      목      금      토\n");

        printf("--------------------------------------------------------\n");

        for(i=0;i<week;++i) printf("        ");

        while(i<days[month]+week) {

            printf("  %2d    ", i-week+1);

            i=i+1;

            if(i%7==0)printf("\n");

        }

        if(i%7) printf("\n");

        printf("========================================================\n");

        printf("\n");

        week=(week+days[month])%7;

    }

    return 0;

}



'c·c++ > c 프로그래밍' 카테고리의 다른 글

Newton-Raphson Method  (0) 2012.10.13
진법변환  (0) 2012.10.11
원형큐  (0) 2012.10.08
c언어에서 %[^\n] 가 의미하는 것이 무엇인가요 ?  (0) 2012.10.08
주석 제거하기  (0) 2012.10.02