21条回答 默认 最新
关注
获得0.45元问题酬金 引自免费微信小程序:皆我百晓生
首先,我们将按照要求逐步分解并实现这个C++程序,涉及的主要部分包括四个函数和两个类的设计与实现:
判断闰年的函数:
int leap(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return 1; // 1 表示是闰年 else return 0; // 0 表示不是闰年 }
判断日期合法性的函数:
int f(int y, int m, int d, int* m1, int* m2) { bool isLeap = leap(y); int daysInMonth[] = (isLeap ? m2 : m1); if (m < 1 || m > 12 || d < 1 || d > daysInMonth[m - 1]) return 0; // 0 表示日期不合法 else return 1; // 1 表示日期合法 }
定义
date
类:
class date { private: int year, month, day; public: date(int y, int m, int d) { year = y; month = m; day = d; } int get_year() { return year; } int get_month() { return month; } int get_day() { return day; } void show() { cout << year << "/" << month << "/" << day; } };
4.定义
week
类:class week { private: date d1; int m1[12], m2[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int m2_leap[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int w; public: week(int y, int m, int d) { d1 = date(y, m, d); int *p1 = m1, *p2 = m2_leap; if (!leap(y)) p2 = m2; if (f(y, m, d, p1, p2)) { int sum = 0; for (int i = 2000; i < y; ++i) { sum += leap(i) ? 366 : 365; } for (int i = 1; i < m; ++i) { sum += (*p2)[i - 1]; } sum += d; w = (sum + 5) % 7; // 2000年1月1日是星期六,所以加上5后模7得到对应星期几(0-6) } else { w = -1; // 若日期非法,则设置为-1 } } int days() { // 此处省略,因为days()功能已经在构造函数里实现了 } void fun0() { // 此处无需额外实现,因为在构造函数里已计算出w值 } void print() { if (w == -1) { cout << "非法日期"; } else { cout << "是星期" << (w == 0 ? "天" : (w == 1 ? "一" : (w == 2 ? "二" : ...))); } } }; int main() { int y, m, d; cin >> y >> m >> d; week wd(y, m, d); wd.print(); return 0; }
以上代码定义了一个
date
类用于表示日期,并实现了一个week
类用于计算给定日期是星期几。在week
类的构造函数中,通过累加从2000年1月1日到给定日期的总天数,然后根据此天数计算出对应的星期几。最后,在main函数中实例化week
对象并对输入的日期进行测试。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 Stata链式中介效应代码修改
- ¥15 latex投稿显示click download
- ¥15 请问读取环境变量文件失败是什么原因?
- ¥15 在若依框架下实现人脸识别
- ¥15 网络科学导论,网络控制
- ¥100 安卓tv程序连接SQLSERVER2008问题
- ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错