要求转换过程由函数int zeller(int yint m int d) 完成,main 函数只负责输入年月日、检查年月日是否合法(假设年份范围1900-2100)以及输出转换后的星期值。
时间: 2024-05-20 19:19:37 浏览: 39
以下是实现代码:
#include <stdio.h>
int zeller(int y, int m, int d) {
if (m == 1 || m == 2) {
m += 12;
y--;
}
int c = y / 100;
y %= 100;
int w = (c / 4) - (2 * c) + (y + (y / 4)) + ((13 * (m + 1)) / 5) + d - 1;
if (w < 0) {
w = (w % 7 + 7) % 7;
} else {
w %= 7;
}
return w;
}
int main() {
int y, m, d;
printf("请输入年月日:");
scanf("%d%d%d", &y, &m, &d);
if (y < 1900 || y > 2100 || m < 1 || m > 12 || d < 1 || d > 31) {
printf("输入的日期不合法!\n");
return 0;
}
int w = zeller(y, m, d);
printf("星期%d\n", w);
return 0;
}
相关问题
c语言 输入年月日,输出年月日星期几
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year, month, day;
printf("请输入年月日(格式为 yyyy mm dd):\n");
scanf("%d %d %d", &year, &month, &day);
// 判断输入的日期是否合法
if (year < 1900 || year > 2100 || month < 1 || month > 12 || day < 1 || day > 31) {
printf("日期输入有误!\n");
return 0;
}
// 计算星期几
int y = year, m = month, d = day;
if (m == 1 || m == 2) {
m += 12;
y--;
}
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
char* weekdays[] = {"日", "一", "二", "三", "四", "五", "六"};
// 输出结果
printf("%04d年%02d月%02d日是星期%s\n", year, month, day, weekdays[week]);
return 0;
}
```
该程序先通过 `scanf` 函数获取用户输入的年月日,然后判断输入的日期是否合法。接着,它根据输入的日期计算出星期几,最后输出结果。
计算星期几的方法是使用蔡勒公式(Zeller's congruence),这是一种通过年月日计算星期几的数学公式。具体实现可以参考上述代码。
C语言输出输入年月日是这一年的第几天。
在C语言中,要计算给定日期是一年中的第几天,可以使用蔡勒公式(Zeller's congruence),它是一个古老的算法,用于确定儒略日(Julian day number)。这是一个常见的编程练习,涉及到对闰年规则的理解以及模运算。以下是一个简单的示例:
```c
#include <stdio.h>
#include <time.h>
int zeller_congruence(int year, int month, int day) {
if (month < 3) { // 如果是1月或2月,调整年份和月份
year -= 1;
month += 12;
}
int q = day;
int m = month;
int k = year % 100; // 年份的最后两位数
int j = year / 100; // 去掉最后两位后的年份
int result = (q + ((13 * (m + 1)) / 5) + k + (k / 4) + (j / 4) - (2 * j));
if (j >= 1900) {
result -= (j / 100) * 5; // 纠正20世纪的额外天数
}
return result;
}
int main() {
int year, month, day;
printf("请输入年月日(格式:YYYY MM DD): ");
scanf("%d %d %d", &year, &month, &day);
int julian_day = zeller_congruence(year, month, day);
printf("该日期是一年中的第%d天.\n", julian_day);
return 0;
}
```
在这个程序中,`zeller_congruence`函数接受年、月、日作为参数,返回对应的儒略日。然后在`main`函数中获取用户输入并计算结果。