21xrx.com
2024-11-25 05:12:42 Monday
登录
文章检索 我的文章 写文章
如何编写万年历c语言
2023-06-18 19:40:26 深夜i     --     --
万年历 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;

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章