C语言编程练习33:日历本

题目描述

我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。

输入

输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。

输出

对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。

样例输入 Copy

2010

样例输出 Copy

                              2010                              

      January               February               March        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2      1  2  3  4  5  6      1  2  3  4  5  6
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   7  8  9 10 11 12 13
10 11 12 13 14 15 16  14 15 16 17 18 19 20  14 15 16 17 18 19 20
17 18 19 20 21 22 23  21 22 23 24 25 26 27  21 22 23 24 25 26 27
24 25 26 27 28 29 30  28                    28 29 30 31         
31                                                              
       April                  May                   June        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3                     1         1  2  3  4  5
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30         
                      30 31                                     
        July                 August              September      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3   1  2  3  4  5  6  7            1  2  3  4
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   5  6  7  8  9 10 11
11 12 13 14 15 16 17  15 16 17 18 19 20 21  12 13 14 15 16 17 18
18 19 20 21 22 23 24  22 23 24 25 26 27 28  19 20 21 22 23 24 25
25 26 27 28 29 30 31  29 30 31              26 27 28 29 30      
                                                                
      October               November              December      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2      1  2  3  4  5  6            1  2  3  4
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   5  6  7  8  9 10 11
10 11 12 13 14 15 16  14 15 16 17 18 19 20  12 13 14 15 16 17 18
17 18 19 20 21 22 23  21 22 23 24 25 26 27  19 20 21 22 23 24 25
24 25 26 27 28 29 30  28 29 30              26 27 28 29 30 31   
31                                                              


机构平台标程
#include <stdio.h>
char *cal_title[12][2] =
{
        {
                "      January       ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "      February      ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "       March        ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "       April        ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "        May         ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "        June        ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "        July        ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "       August       ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "     September      ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "      October       ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "      November      ",
                "Su Mo Tu We Th Fr Sa"
        },
        {
                "      December      ",
                "Su Mo Tu We Th Fr Sa"
        }
};
int month[12][6][7];
int days_num[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int first_day(int year);
int sp_year (int year);
int main (void)
{
        int Y;
        while (scanf ("%d", &Y) == 1)
        {
                for (int a = 0; a < 12; a++)
                        for (int b = 0; b < 6; b++)
                                for (int c = 0; c < 7; c++)
                                        month[a][b][c] = 0;
                //printf ("偏移%d
", first_day (Y));
                printf ("                              %d                              

", Y);
                if (sp_year (Y))
                        days_num[1] = 29;
                int first = first_day (Y);
                for (int x = 0; x < 12; x++)
                {
                        for (int i = 0; i < days_num[x]; i++)
                        {
                                *(*(month[x])+(i + first)) = i + 1;
                        }
                        first = (first + days_num[x]) % 7;
                }
                //printf ("%d
", *(*(month[0])+33));
                for (int y = 1; y <= 4; y++)
                {
                        for (int j = 0; j < 2; j++)
                        {
                                for (int x = 1; x <= 3; x++)
                                {
                                        printf ("%s", cal_title[(y - 1) * 3 + x - 1][j]);
                                        printf (x == 3? "
": "  ");
                                }
                        }
                        for (int j = 0; j < 6; j++)
                        {
                                for (int x = 1; x <= 3; x++)
                                {
                                        for (int i = 0; i < 7; i++)
                                        {
                                                if (month[(y - 1) * 3 + x - 1][j][i] == 0)
                                                        printf ("  ");
                                                else
                                                        printf ("%2d", month[(y - 1) * 3 + x - 1][j][i]);
                                                if (i != 6) printf (" ");
                                        }
                                        printf (x == 3? "
": "  ");
                                }
                        }
                }
        }
        return 0;
}

int first_day (int year)
{
        int first = 3;
        for (int i = 1800; i < year; i++)
        {
                first++;
                if (sp_year (i))
                {
                        first++;
                }
        }
        return (first % 7);
}
int sp_year (int year)
{
        if (year % 100 == 0)
        {
                return year % 400 == 0;
        }
        else
                return year % 4 == 0;
}
原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14335653.html