用C++编写一个具有如下功能的万年历与日历查询系统:显示某一年的全年日历(每天要有对应的星期);已知1980年1月1日是星期二。
时间: 2023-05-25 10:03:30 浏览: 241
c++实现一个万年历
5星 · 资源好评率100%
以下是可能的C语言代码实现:
```c
#include <stdio.h>
int isLeapYear(int year) { // 判断闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
} else {
return 0;
}
}
int getDayOfWeek(int year, int month, int day) { // 计算星期几(0表示星期一)
int days = 0;
for (int i = 1980; i < year; i++) {
days += 365 + isLeapYear(i);
}
for (int i = 1; i < month; i++) {
switch (i) {
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
case 2:
days += 28 + isLeapYear(year);
break;
default:
days += 31;
}
}
days += day - 1;
return (days + 2) % 7;
}
void printCalendar(int year) { // 打印日历
printf(" %d\n", year);
printf("Mon Tue Wed Thu Fri Sat Sun\n");
int dayOfWeek = getDayOfWeek(year, 1, 1);
for (int i = 0; i < dayOfWeek; i++) {
printf(" ");
}
for (int i = 1; i <= 31; i++) {
printf("%-5d", i);
if ((dayOfWeek + i) % 7 == 0) {
printf("\n");
}
}
for (int i = 2; i <= 12; i++) {
switch (i) {
case 4:
case 6:
case 9:
case 11:
printf("\n");
for (int j = 0; j < 7; j++) {
printf(" ");
}
for (int j = 1; j <= 30; j++) {
printf("%-5d", j);
if ((dayOfWeek + 31 + (i - 3) * 30 + j) % 7 == 0) {
printf("\n");
}
}
break;
case 2:
printf("\n");
for (int j = 0; j < 7; j++) {
printf(" ");
}
for (int j = 1; j <= 28 + isLeapYear(year); j++) {
printf("%-5d", j);
if ((dayOfWeek + 31 + 4 * 30 + j) % 7 == 0) {
printf("\n");
}
}
break;
default:
printf("\n");
for (int j = 0; j < 7; j++) {
printf(" ");
}
for (int j = 1; j <= 31; j++) {
printf("%-5d", j);
if ((dayOfWeek + 31 + 7 + (i - 5) * 31 + j) % 7 == 0) {
printf("\n");
}
}
}
}
printf("\n");
}
int main() {
int year;
printf("Input year: ");
scanf("%d", &year);
printCalendar(year);
return 0;
}
```
这段代码先定义了两个函数,一个用于判断闰年,另一个用于计算某一天的星期几。接下来是主程序,它首先接受用户输入的年份,然后调用一个名为printCalendar的函数打印该年的整个日历。打印方法如下:
- 先打印年份;
- 再打印星期的标头;
- 根据1980年1月1日是星期二,算出该年1月1日是星期几,然后在该星期的前面输出空格;
- 分别处理1月份到12月份,每个月分为以下几步:
- 输出该月的空行;
- 分别处理该月中的每一天,每五个字符占一列;
- 如果该天是该周的最后一天,就换行。
此外,需要注意每个月的天数不同,需要根据实际情况进行处理。这段代码采用了一个switch语句,根据每个月的月份数字判断天数。对于2月,需要根据闰年与否判断天数。
阅读全文