c语言 编写一个函数,对于给定的公历年月日,计算出其是星期几,并判断该年份是否为闰年。要求函数的返回值为第5题中的字符串(可直接调用第5题中的函数),是否为闰年以指针形式从形参传递给实参。char * getweek(int year,int mon,int day,int *pleap)
时间: 2024-03-11 09:51:22 浏览: 61
好的,以下是实现该函数的代码:
```c
char *getweek(int year, int mon, int day, int *pleap) {
int days[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; // 每月1日到当年1月1日的天数
char *weeks[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // 星期字符串数组
int leap = 0; // 是否为闰年标志
int y, m, d;
y = year;
m = mon;
d = day;
if (m < 3) {
y--;
m += 12;
}
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7; // Zeller公式计算星期
int daysOfYear = days[m - 1] + d; // 当前日期在当年中的天数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 判断是否为闰年
leap = 1;
}
*pleap = leap;
char *res = (char *) malloc(sizeof(char) * 20); // 分配返回字符串的内存空间
sprintf(res, "%s %s", weeks[week], isleap(*pleap)); // 使用sprintf函数将星期字符串和是否为闰年的字符串拼接成最终字符串
return res;
}
```
其中,isleap函数是第5题中的函数,用于判断是否为闰年,代码如下:
```c
char *isleap(int leap) {
if (leap == 1) {
return "Leap Year";
} else {
return "Common Year";
}
}
```
建议在调用getweek函数之后,记得要手动释放返回字符串的内存空间,以免造成内存泄漏。
阅读全文