zoukankan      html  css  js  c++  java
  • 打印指定年份的日历

    输入年份,打印出该年的日历:

    #include <stdio.h>
    void PrintEnter(int mod);
    void PrintSkip(int lastday);
    void PrintTitle(int year,int month);
    int JudgeDays(int year, int month);
    void PrintMonth(int year, int mod, int lastday);
    int main()
    {
        int year;
        //每一个月的最后一天
        int lastday = 1;
        printf("请输入年份:");
        scanf("%d",&year);
        //判断这一年的第一天为星期几
        //公式: (5(year-1)/4-(year-1)/100+(year-1)/400)%7+1
        int flag = (5 * (year-1) / 4 - (year-1) / 100+(year-1)/400) % 7+1;
    
        //计算开头有几个	
        int skip = flag - 1;
    
        //判断是否需要换行 判断每月最后一天
        int mod = skip;
    
        //直接调用PrintMonth函数打印月历
        PrintMonth(year,mod,lastday);
        return 0;
    }
    
    /**
     * @brief JudgeDays 判断月份的天数
     * @param year      判断年份是否为闰年
     * @param month     需要判断的月份
     * @return          返回值为月份的天数
     */
    int JudgeDays(int year, int month) {
    
            if(month==4||month==6||month==9||month==11)
                return 30;
            else if(month==2) {
                //判断年份是否为闰年
                if(year % 400 == 0 || (year % 100 !=0 && year % 4 == 0))
                    return 29;
                else
                    return  28;
            }
            else
                return 31;
    
    }
    
    /**
     * @brief PrintTitle    打印月份的开头
     * @param month         需要打印的月份
     */
    void PrintTitle(int year, int month) {
        printf("
    ");
        printf("%d年%d月
    ",year,month);
        printf("--------------------------------
    ");
        printf("一   二   三   四   五   六   日
    ");
    }
    
    /**
     * @brief PrintSkip 解决每一月开头的空格问题
     * @param lastday   上一月份的最后一天
     */
    void PrintSkip(int lastday) {
        int i;
        for(i = 0;i < lastday;i++) {
            printf("     ");
        }
    }
    
    /**
     * @brief PrintEnter    判断是否换行
     * @param mod           换行的标志(判断是否是七的倍数)
     */
    void PrintEnter(int mod) {
        if(mod % 7 ==0)
            printf("
    ");
    }
    
    /**
     * @brief PrintMonth    打印月历
     * @param year          月历的年数
     * @param mod           换行的标志
     * @param lastday       每个月最后一天的标识
     */
    void PrintMonth(int year, int mod, int lastday) {
    
        //打印月历的头
        PrintTitle(year,1);
    
        //打印空格
        PrintSkip(lastday);
    
        //打印一月月历
        int i;
        for(i = 1;i <= 31;i++) {
            mod++;
            printf("%-5d",i);
    
            //换行
            PrintEnter(mod);
    
            //判断一月的最后一天
            if(i == 31)
                lastday = mod % 7;
        }
    
        //每打印一个月换一行
        printf("
    ");
        int month;
        for(month = 2;month < 13;month++) {
    
            //打印月历的头
            PrintTitle(year,month);
    
            //打印空格
            PrintSkip(lastday);
    
            //打印二月到十二月的日历
            int i;
            for(i = 1;i <= JudgeDays(year, month);i++) {
                mod++;
                printf("%-5d",i);
    
                //换行问题
                PrintEnter(mod);
    
                //判断每月的最后一天
                if(i == JudgeDays(year, month))
                    lastday = mod % 7;
            }
            //每打印一个月换一行
            printf("
    ");
        }
    }

  • 相关阅读:
    解决Maven下载速度缓慢问题
    IntelliJ IDEA 最新激活码
    Googel 浏览器 模拟发送请求工具--Advanced REST Client
    Firefox火狐 浏览器接口调试工具 JSON 格式化
    修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
    解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid
    configure: error: You need a C++ compiler for C++ support.[系统缺少c++环境]
    解决编译apache出现的问题:configure: error: APR not found . Please read the documentation
    centos6 Linux安装redis 2.6.14
    Nginx+Tomcat负载均衡配置
  • 原文地址:https://www.cnblogs.com/TomHe789/p/12423209.html
Copyright © 2011-2022 走看看