zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14335653.html
Copyright © 2011-2022 走看看