要求转换过程由函数int zeller(int yint m int d) 完成,main 函数只负责输入年月日、检查年月日是否合法(假设年份范围1900-2100)以及输出转换后的星期值。
时间: 2024-05-20 11:19:37 浏览: 43
以下是实现代码:
#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;
}
相关问题
#include <stdio.h> typedef enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat} Weekday; Weekday zeller(int y,int m,int d) { int c; Weekday w; c=y/100 ;y=y%100; w=(c/4-2*c+y+y/4+13*(m+1)/5+d-1)%7; return w; } int main() { int y,m,d,w; printf("请输入一个日期(yyyy-mm-dd):"); scanf("%d-%d-%d",&y,&m,&d); w=zeller(y,m,d); switch(w){ case Sun: printf("星期天\n");break; case Mon: printf("星期一\n");break; case Tue: printf("星期二\n");break; case Wed: printf("星期三\n");break; case Thu: printf("星期四\n");break; case Fri: printf("星期五\n");break; case Sat: printf("星期六\n"); } return 0; }zeller公式计算日期y-m-d对应的星期数w时,需要在m=1或2时,将月份变成上一年的13或14月,为此,需要更正实验步骤1中zeller函数,在第4行Weekday w;之后添加y和m的变换代码,请给出该代码。在实验第1步中,要显示main函数第6行w对应的星期名该如何做?
在第6行switch语句中,可以根据枚举类型的值进行判断,并输出对应的星期名称,例如:
```
switch(w){
case Sun: printf("星期天\n");break;
case Mon: printf("星期一\n");break;
case Tue: printf("星期二\n");break;
case Wed: printf("星期三\n");break;
case Thu: printf("星期四\n");break;
case Fri: printf("星期五\n");break;
case Sat: printf("星期六\n");
}
```
要更正实验步骤1中zeller函数,在第4行Weekday w;之后添加y和m的变换代码,可以如下实现:
```
Weekday zeller(int y,int m,int d) {
int c;
//将1月、2月看成上一年的13月、14月
if(m==1 || m==2){
m+=12;
y--;
}
c=y/100 ;y=y%100;
Weekday w=(c/4-2*c+y+y/4+13*(m+1)/5+d-1)%7;
return w;
}
```
#include <stdio.h> typedef enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat} Weekday; Weekday zeller(int y,int m,int d) { int c; Weekday w; c=y/100 ;y=y%100; w=(c/4-2c+y+y/4+13(m+1)/5+d-1)%7; return w; } int main() { int y,m,d,w; printf("请输入一个日期(yyyy-mm-dd):"); scanf("%d-%d-%d",&y,&m,&d); w=zeller(y,m,d); switch(w){ case Sun: printf("星期天\n");break; case Mon: printf("星期一\n");break; case Tue: printf("星期二\n");break; case Wed: printf("星期三\n");break; case Thu: printf("星期四\n");break; case Fri: printf("星期五\n");break; case Sat: printf("星期六\n"); } return 0; }要显示main函数第6行w对应的星期名该如何做
在main函数第6行调用zeller函数后,根据返回的星期数w,可以使用switch语句输出对应的星期名称,例如:
```
switch(w){
case Sun: printf("星期天\n");break;
case Mon: printf("星期一\n");break;
case Tue: printf("星期二\n");break;
case Wed: printf("星期三\n");break;
case Thu: printf("星期四\n");break;
case Fri: printf("星期五\n");break;
case Sat: printf("星期六\n");break;
}
```
这样就可以根据zeller函数计算得到的星期数,输出对应的星期名称了。
阅读全文