• 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;
    }
    
  • 相关阅读:
    121devg笔记 003
    java并发和排序的简单例子(Runnable+TreeSet)
    java的ConCurrentHashMap
    tortoisegit 配置ssh登录
    springboot支持http2
    MySQL数据库远程按日期备份windows脚本
    java web项目 jetty容器启动时,访问.jsp页面失败的问题。
    Oracle解决ora01653 无法通过1024扩展 解决Oracle表空间扩展问题
    vue3 [Vue warn]: onMounted is called when there is no active component instance to be associated with
    vue echarts There is a chart instance already initialized on the dom
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14335653.html
Copyright © 2020-2023  润新知