21xrx.com
2025-03-30 15:06:33 Sunday
文章检索 我的文章 写文章
如何编写万年历c语言
2023-06-18 19:40:26 深夜i     12     0
万年历 C语言 蔡勒公式 日期处理 程序实现

文章内容:

万年历,又称永历、永历表、日历。是人类文明发展历史中的一个重要的工具。一个好的万年历可以帮助人们更好地了解历史、文化、气象、节气和时令等各种信息。本篇文章将介绍如何使用C语言编写一个简单的万年历程序。

首先,我们需要思考如何表示时间和日期。一种常见的表示方法是使用结构体,例如:

struct date
  int year;
  int month;
  int day;
;

接着,我们就可以编写一个函数,根据输入的日期,计算出该日期是星期几。这个函数可以使用蔡勒公式来实现:

int dayOfWeek(struct date d) {
  int c = d.year / 100;
  int y = d.year % 100;
  int m = d.month <= 2 ? d.month + 12 : d.month;
  int d = d.day;
  int w = (y + y / 4 + c / 4 - 2 * c + 13 * (m + 1) / 5 + d - 1) % 7;
  if (w < 0) w += 7;
  return w;
}

接下来,我们就可以编写主函数,根据输入的年份和月份,打印出整个月的日历。具体操作如下:

1. 计算该月的第一天是星期几;

2. 打印出星期几的标头;

3. 循环打印出该月的每一天,每七天换行。

代码实现:

#include 
struct date
  int year;
  int month;
  int day;
;
int dayOfWeek(struct date d) {
  int c = d.year / 100;
  int y = d.year % 100;
  int m = d.month <= 2 ? d.month + 12 : d.month;
  int d = d.day;
  int w = (y + y / 4 + c / 4 - 2 * c + 13 * (m + 1) / 5 + d - 1) % 7;
  if (w < 0) w += 7;
  return w;
}
int daysOfMonth(int year, int month) {
  int days[] = 31;
  if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
    return 29;
   else {
    return days[month - 1];
  }
}
void printCalendar(int year, int month) {
  printf("   %d月 %d\n", month, year);
  printf("日 一 二 三 四 五 六\n");
  struct date d = 1;
  int w = dayOfWeek(d);
  int i;
  for (i = 0; i < w; i++) {
    printf("  ");
  }
  int days = daysOfMonth(year, month);
  for (i = 1; i <= days; i++) {
    printf("%2d ", i);
    if ((w + i) % 7 == 0) {
      printf("\n");
    }
  }
  printf("\n");
}
int main() {
  int year, month;
  printf("请输入年份:");
  scanf("%d", &year);
  printf("请输入月份:");
  scanf("%d", &month);
  printCalendar(year, month);
  return 0;
}

通过以上步骤,我们就成功地编写了一个简单的万年历程序。你可以根据自己的需要进行修改和添加功能。

  
  

评论区

请求出错了