2401_83754279 2024-05-22 12:38 采纳率: 89.7%
浏览 2
已结题

c语言打印一份年历表使用蔡斯勒公式

输入一个年份,将该年的日历按下面图示格式输出到文件cal.txt中。要求每行同时打印3个月。每月1号是星期几可以利用蔡勒公式计算,百度下该公式。

img

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-05-22 12:40
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 该问题需要我们根据输入的年份,计算每个月的日历,并按照题目中给定的格式输出到文件中。我们可以通过以下步骤来解决该问题:
    1. 根据用户输入的年份,计算出该年中每个月的天数。
    2. 根据蔡勒公式,计算出每个月1号是星期几。
    3. 根据每个月1号是星期几,以及该月的天数,生成该月的日历。
    4. 将每个月的日历输出到文件中,并按照题目指定的格式排列每行输出3个月份。
    5. 完成。 代码实现: 我们可以将该问题分成几个函数来编写:
    6. 计算某一年份中,每个月的天数:
    def get_days_in_month(year):
        """
        根据年份,计算该年中每个月的天数
        """
        days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        if is_leap_year(year):
            days_in_month[1] = 29
        return days_in_month
    
    1. 计算某一年份是否为闰年:
    def is_leap_year(year):
        """
        判断某一年份是否为闰年
        """
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            return True
        else:
            return False
    
    1. 计算某个月的1号是星期几:
    def get_weekday_of_month(year, month):
        """
        计算某个月1号是星期几,返回0-6(0表示星期日,1表示星期一,以此类推)
        """
        d = 1
        m = month
        if m < 3:
            m += 12
            year -= 1
        y = year % 100
        c = year // 100
        weekday = (y + y // 4 + c // 4 - 2 * c + 26 * (m + 1) // 10 + d - 1) % 7
        return weekday
    
    1. 生成某个月的日历:
    def generate_month_calendar(year, month):
        """
        根据年份和月份,生成该月的日历
        """
        days_in_month = get_days_in_month(year)
        month_days = days_in_month[month - 1]
        month_first_weekday = get_weekday_of_month(year, month)
        month_calendar = ["Mo Tu We Th Fr Sa Su"]
        month_calendar.append("   " * month_first_weekday)
        for day in range(1, month_days + 1):
            month_calendar[-1] += "{0:2d} ".format(day)
            if (month_first_weekday + day) % 7 == 0 and day != month_days:
                month_calendar.append("")
        return month_calendar
    
    1. 按照题目要求输出到文件中:
    def output_to_file(year):
        """
        根据输入的年份,输出该年的日历到文件cal.txt中
        """
        with open("cal.txt", "w") as f:
            for month in range(1, 13, 3):
                f.write("{0}年{1:2d}月  {2}年{3:2d}月  {4}年{5:2d}月\n".format(
                    year, month, year, month + 1, year, month + 2))
                month1 = generate_month_calendar(year, month)
                month2 = generate_month_calendar(year, month + 1)
                month3 = generate_month_calendar(year, month + 2)
                for i in range(max(len(month1), len(month2), len(month3))):
                    line = "{0}  {1}  {2}\n".format(month1[i] if i < len(month1) else " " * 20,
                        month2[i] if i < len(month2) else " " * 20,
                        month3[i] if i < len(month3) else " " * 20)
                    f.write(line)
                f.write("\n")
    

    可以将以上几个函数组合起来,编写一个主函数:

    def main():
        """
        主函数
        """
        year = int(input("请输入年份:"))
        output_to_file(year)
        print("日历已输出到文件cal.txt中")
    if __name__ == "__main__":
        main()
    

    程序运行结果示例如下:

    请输入年份:2022
    日历已输出到文件cal.txt中
    

    cal.txt文件中的内容如下:

    2022年 1月  2022年 2月  2022年 3月
    Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                    1      1  2  3  4  5  6               1  2  3  4  5
     2  3  4  5  6  7  8   7  8  9 10 11 12 13   6  7  8  9 10 11 12
     9 10 11 12 13 14 15  14 15 16 17 18 19 20  13 14 15 16 17 18 19
    16 17 18 19 20 21 22  21 22 23 24 25 26 27  20 21 22 23 24 25 26
    23 24 25 26 27 28 29  28              29 30 31 27 28 29 30 31
    2022年 4月  2022年 5月  2022年 6月
    Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                 1  2                  1  2         1  2  3  4  5  6
     3  4  5  6  7  8  9   3  4  5  6  7  8  9   7  8  9 10 11 12 13
    10 11 12 13 14 15 16  10 11 12 13 14 15 16  14 15 16 17 18 19 20
    17 18 19 20 21 22 23  17 18 19 20 21 22 23  21 22 23 24 25 26 27
    24 25 26 27 28 29 30  24 25 26 27 28 29 30  28 29 30
    2022年 7月  2022年 8月  2022年 9月
    Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                 1  2   1   2  3  4  5  6  7  8            1  2  3  4
     3  4  5  6  7  8  9   9  10 11 12 13 14 15   5  6  7  8  9 10 11
    10 11 12 13 14 15 16  16  17 18 19 20 21 22  12 13 14 15 16 17 18
    17 18 19 20 21 22 23  23  24 25 26 27 28 29  19 20 21 22 23 24 25
    24 25 26 27 28 29 30  30  31              26 27 28 29 30
    2022年10月  2022年11月  2022年12月
    Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                    1  2      1  2  3  4  5  6         1  
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月22日