C 语言中不使用函数查找星期几

2024年8月28日 | 阅读 4 分钟

一些日历信息

地球绕太阳公转一周的时间是一年。它接近 365.25 天。因此,如果 365 天算作一年,则 4 年总共剩余 1 天。这就导致了闰年,它有 366 天,每四年发生一次。从 0001 年开始,每四年一个数字的年份,例如 0004、0008 等,都是闰年。然而,365.25 也是一个近似值。这导致每 100 年或 400 年发生一次异常,即 0100 年、0200 年和 0300 年不是闰年,但 0400 年是。

一年共有 12 个月。它们的长度(天数)如下

2 月 28 日(如果是非闰年)和 3 月 29 日(闰年)

3 月 31 日到 4 月 30 日到 5 月 31 日到 6 月 30 日到 8 月 31 日到 9 月 30 日到 12 月 31 日

因此,总天数为 365 天(非闰年)和 366 天(闰年)。

我们通过倒推发现了一个事实,即 0001 年 1 月 1 日,即 0001 年 1 月 1 日是星期一。这构成了程序的基础。此外,我们使用了一个名为 day value 的变量,其值分别为 0、1、2、3、4 或 6,分别代表星期一、星期二、星期四、星期五、星期六和星期日。

输出

?nter a valid date ( dd / mm / yyyy ) : 05/07/2022

The day is : Tuesday
..................................................
Process executed in 1.22 seconds
Press any key to continue.

说明

总共有 12 个不同的整数可以存储在 month[12] 数组中,该数组是整数类型。该数组在声明时也进行了初始化。此数组中的每个值都表示特定月份的天数,例如,第一个值 31 表示一月有 31 天。Char [7] [10] - 这与之前提到的 month [12] 数组不同,因为它是一个字符类型的多维数组。此数组最多可以容纳七个项目,并且每个值的长度必须在九到十之间。此数组表示星期几,例如星期日、星期一等。这些整数用于记录用户提供的日期、月份和年份。用于中间计算的其他整数包括 I、r 和 s。在这里,我们使用 C 语言中的字符串复制函数 strcpy,而不是像 month[12] 数组那样在声明时初始化 char[7][10] 数组 ()。

strcpy() 方法用于初始化 week[7][10]。现在,我们请求用户输入预格式化的输入。当用户以 dd/mm/yyyy 格式输入日期时,由于我们在 scanf() 中使用 "/" 分隔每个整数,因此所有三个值都会立即存储到各自的变量中。

然后 if 语句确定用户提供的年份是否是闰年。如果该年份是闰年,则通过 month [1] = 29; 将二月的天数设置为 29。