您的位置:首页 > 编程语言 > C语言/C++

C语言 程序 打印日历

2016-07-17 16:00 525 查看
请打印出任意年份的日历

这个题目理解起来很简单,也没什么高深的算法,就是有一点点“啰嗦”。

#include <stdio.h>

int print_mon(int year,int mon ,int week)

{

    int day;

    int i;

    if(mon < 1 || mon > 12 || week < 0 || week > 6)//出现不可能的值退出程序

    {
exit(1);

    }

    switch(mon) //每个月的日期不同

    {
case 1:
{
   printf("1\n");
   day = 31;
   break;
}
case 2:
{
   printf("2\n");
   if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
   {
day = 29; 
   }
   else
   {
day = 28;
   }
   break;
}
case 3:
{
   printf("3\n");
   day = 31;
   break;
}
case 4:
{
   printf("4\n");
   day = 30;
   break;
}
case 5:
{
   printf("5\n");
   day = 31;
   break;
}
case 6:
{
   printf("6\n");
   day = 30;
   break;
}
case 7:
{
   printf("7\n");
   day = 31;
   break;
}
case 8:
{
   printf("8\n");
   day = 31;
   break;
}
case 9:
{
   printf("9\n");
   day = 30;
   break;
}
case 10:
{
   printf("10\n");
   day = 31;
   break;
}
case 11:
{
   printf("11\n");
   day = 30;
   break;
}
case 12:
{
   printf("12\n");
   day = 31;
   break;
}
default:
{
   exit(1);
}

    }

    printf("Sun Mon Tue Wed Thu Fir Sat\n");

    for(i = 0;i < week * 4;i++)//判断第一天星期几,输出空格

    {
printf(" ");

    }

    for(i = 1;i <= day;i++)

    {
if(i < 10)//对齐
{
   printf(" ");
}
printf("%d  ",i);
if((i + week - 1) % 7 == 6)//输出周六后换行
{
   printf("\n");
}

    }

    printf("\n\n");

    return (day + week) % 7;//返回下个月第一天星期几

}

int main()

{

    int year;

    int mon;

    int week;

    printf("please input the year\n");

    scanf("%d",&year);

    week = (year + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 ) % 7;//本年第一天星期几

    for(mon = 1;mon <= 12;mon++)//12个月循环

    {
week = print_mon(year,mon,week);

    }

    return 0;

}

这个程序理解起来简单,但总觉得会有更好的算法。

一个在努力中的未来程序员,如果有更好的想法,欢迎评论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 程序