c++实现万年历,用户输入年份,输出这一年的年历,要求:利用循环方法产生年历数据,使用数据缓冲区存储和输出,将缓冲区看作一个二维平面,设计年历坐标系 ,按坐标填入星期表头,计算每天的坐标,填入日期内容,最后一起输出。 将一个月作为一个子程序,循环调用月内按天循环,事先存储每个月的天数
时间: 2023-10-07 17:06:52 浏览: 104
下面是一个简单的C++程序,实现了万年历的功能:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 存储每个月的天数
const int daysInMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断是否是闰年
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取某年某月的天数
int getDaysInMonth(int year, int month) {
if (month == 2 && isLeapYear(year)) {
return 29;
}
return daysInMonth[month];
}
// 获取某年某月1号是星期几
int getFirstDayOfWeek(int year, int month) {
int y = year, m = month;
if (m == 1 || m == 2) {
m += 12;
y--;
}
int c = y / 100, d = y % 100;
int w = (c / 4) - 2 * c + d + (d / 4) + ((13 * (m + 1)) / 5) + 1;
return (w % 7 + 7) % 7;
}
int main() {
int year, month;
cout << "请输入年份:";
cin >> year;
cout << "请输入月份:";
cin >> month;
int days = getDaysInMonth(year, month); // 获取该月天数
int firstDayOfWeek = getFirstDayOfWeek(year, month); // 获取该月1号是星期几
// 打印日历头部
cout << "日\t一\t二\t三\t四\t五\t六" << endl;
// 定位到第一天所在的星期
for (int i = 0; i < firstDayOfWeek; i++) {
cout << "\t";
}
// 输出日期
for (int i = 1; i <= days; i++) {
cout << i << "\t";
if ((i + firstDayOfWeek) % 7 == 0) { // 换行
cout << endl;
}
}
return 0;
}
```
该程序主要思路是先计算出某年某月的天数和该月1号是星期几,然后根据这些信息输出日历。在输出日历时,我们需要先打印日历头部,然后定位到第一天所在的星期,最后按天输出日期。
阅读全文