用c语言写请编程统计:从1900年1月1日(当天是星期一)开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、……、星期日的次数分别是多少?请使用循环和数组实现。
时间: 2023-12-03 17:45:29 浏览: 221
C写了一个简单的1900-2100日历
这是一个比较有趣的编程题目,下面是实现过程:
```c
#include <stdio.h>
int main()
{
int year, n, i, j, day, weekday, count[7] = {0};
scanf("%d", &n); // 输入需要计算的年数
day = 0; // 初始为1900年1月1日,星期一,对应0
for (year = 1900; year <= 1900 + n - 1; year++) // 循环计算每一年
{
for (i = 1; i <= 12; i++) // 循环计算每一月
{
weekday = (day + 1) % 7; // 计算该月1号是星期几
for (j = 1; j <= 31; j++) // 循环计算该月的天数
{
if (i == 2) // 二月特殊处理
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) // 闰年
{
if (j <= 29)
{
weekday = (weekday + 1) % 7;
if (j == 13) count[weekday]++; // 判断是否为13号
}
else break;
}
else // 平年
{
if (j <= 28)
{
weekday = (weekday + 1) % 7;
if (j == 13) count[weekday]++;
}
else break;
}
}
else if (i == 4 || i == 6 || i == 9 || i == 11) // 小月
{
if (j <= 30)
{
weekday = (weekday + 1) % 7;
if (j == 13) count[weekday]++;
}
else break;
}
else // 大月
{
if (j <= 31)
{
weekday = (weekday + 1) % 7;
if (j == 13) count[weekday]++;
}
else break;
}
}
day = (day + j - 1) % 7; // 更新下一个月1号是星期几
}
}
printf("Monday: %d\n", count[0]); // 输出结果
printf("Tuesday: %d\n", count[1]);
printf("Wednesday: %d\n", count[2]);
printf("Thursday: %d\n", count[3]);
printf("Friday: %d\n", count[4]);
printf("Saturday: %d\n", count[5]);
printf("Sunday: %d\n", count[6]);
return 0;
}
```
在实现过程中,我们使用了数组 `count` 来存储每个星期的13号出现的次数。在计算每个月的13号的时候,我们需要先计算该月1号是星期几,然后根据每个月的天数循环计算星期几,同时判断是否为13号,如果是则更新相应的 `count` 数组。
需要注意的是,闰年的2月有29天,平年的2月有28天。我们在计算2月的时候需要特别处理。在代码中,我们使用了 `year % 4 == 0 && year % 100 != 0 || year % 400 == 0` 判断是否为闰年。
最后,我们输出 `count` 数组中每个元素的值即可。
阅读全文