2013年12月21日星期六

万年历程序

#include
#include
#include

int week(int y,int m,int d);//函数声明

void main()
{
    //初始化月份的天数
    int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    int y,w,i,m=1,d=1;
    printf("请输入一个年份yyyy:\n");
    scanf("%d",&y);

    //如果是闰年,修改第二个月天数
    if ( (y % 4 == 0 && y % 100 != 0)|| y % 400 == 0 ){
        monthday[1]=29;
    }


    for(m=1;m<=12;m++){
        //循环打印每个月
        printf("\n %d年,%d月\n",y,m);
        printf(" 日  一  二  三  四  五  六 \n");

        for (d=1;d<=monthday[m-1];d++){
            //获取对应的星期
            w=week(y,m,d);
            if(d==1){
                //打印每月第一天前面的空格
                for (i=0;i                    printf("%3c ",' ');
                }
            }

            printf("%3d ",d);

            //每星期换行
            if(w==6) printf(" \n");
        }

        printf("\n\n输入任意字符继续\n");
        getch();
    }

    system("pause");
}

int week (int y,int m,int d)
{
    //http://hi.baidu.com/wlzqi/blog/item/65b16b606403df44ebf8f8a2.html
    int w;
    if((m==1)||(m==2)){
        y--;
        m+=12;
    }
    w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
    return w;
}

没有评论:

发表评论