C++学习之旅【实战全面解析C++类和对象】


🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法初阶》

《C++初阶知识内容》

✨逆境不吐心中苦,顺境不忘来时路! 🎬 博主简介:

引言:前篇文章,小编已经将我所学的C++类和对象的相关知识介绍完了,俗话说的好,温故知新,可以为师矣.那么本篇文章让我们通过做题全面解析C++类和对象,加深自己对知识的理解!废话不多说,带着这些疑问,下面跟着小编的节奏🎵一起学习吧!

目录

1.选择题(全面解析)































2.编程题(全面解析)

2.1计算日期到天数转换

cpp 复制代码
#include <iostream>
using namespace std;
// 判断是否为闰年
bool isLeap(int year) {
    // 闰年规则:能被4整除且不能被100整除,或能被400整除
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
    int year, month, day;
    // 输入年、月、日(需确保输入为合法日期)
    cin >> year >> month >> day;
    int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    // 闰年则修改2月天数为29
    if (isLeap(year)) {
        months[1] = 29;
    }
    // 累加前month-1个月的总天数
    int totalDays = 0;
    for (int i = 0; i < month - 1; ++i) {
        totalDays += months[i];
    }
    totalDays += day;
    // 输出结果
    cout << totalDays << endl;
    return 0;
}

2.2日期差值

cpp 复制代码
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// 判断闰年
bool isLeap(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算date(YYYYMMDD)对应的"当年第几天"
int dateToDayOfYear(int date) {
    int year = date / 10000;
    int month = (date / 100) % 100;
    int day = date % 100;
    int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (isLeap(year)) {
        months[1] = 29;
    }
    int total = 0;
    for (int i = 0; i < month - 1; ++i) {
        total += months[i];
    }
    return total + day;
}
// 计算两个日期(YYYYMMDD)之间的天数差
int dateDiff(int date1, int date2) {
    // 确保date1 <= date2,方便计算
    if (date1 > date2) {
        swap(date1, date2);
    }
    int year1 = date1 / 10000;
    int year2 = date2 / 10000;
    int day1 = dateToDayOfYear(date1);
    int day2 = dateToDayOfYear(date2);
    int total = 0;
    // 处理中间完整的年份
    for (int y = year1 + 1; y < year2; ++y) {
        total += isLeap(y) ? 366 : 365;
    }
    // 处理year1剩余的天数 + year2已过的天数
    if (year1 == year2) {
        total = day2 - day1 + 1; // 同一年,直接相减+1(如12到22是11天)
    } else {
        int daysInYear1 = isLeap(year1) ? 366 : 365;
        total += (daysInYear1 - day1 + 1) + day2;
    }
    return total;
}
int main() {
    int date1, date2;
    // 多组输入(直到输入结束)
    while (cin >> date1 >> date2) {
        cout << dateDiff(date1, date2) << endl;
    }
    return 0;
}

2.3打印日期

cpp 复制代码
#include <iostream>
using namespace std;
// 判断是否为闰年
bool isLeap(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
    int y, n;
    // 处理多组输入
    while (cin >> y >> n) {
        // 平年各月天数(索引0对应1月)
        int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        // 闰年修改2月天数
        if (isLeap(y)) {
            months[1] = 29;
        }
        int month = 1;
        // 推算月份和日期
        for (; month <= 12; ++month) {
            if (n <= months[month - 1]) {
                break;
            }
            n -= months[month - 1];
        }
        // 按yyyy-mm-dd格式输出(补前导零)
        printf("%04d-%02d-%02d\n", y, month, n);
    }
    return 0;
}

2.4日期累加

cpp 复制代码
#include <iostream>
using namespace std;
// 判断闰年
bool isLeap(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取指定年、月的天数
int getDays(int year, int month) {
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        case 2:
            return isLeap(year) ? 29 : 28;
        default:
            return 0; // 无效月份(实际不会触发)
    }
}
int main() {
    int m;
    cin >> m; // 样例个数
    while (m--) {
        int y, mon, d, add;
        cin >> y >> mon >> d >> add;
        d += add; // 累加天数到"日"
        // 调整日期至合法范围
        while (true) {
            int days = getDays(y, mon);
            if (d <= days) break; // 日合法,退出循环
            d -= days; // 减去当月天数
            mon++;
            if (mon > 12) { // 月份超12,年份进位
                y++;
                mon = 1;
            }
        }
        // 按格式输出
        printf("%04d-%02d-%02d\n", y, mon, d);
    }
    return 0;
}

敬请期待下一篇文章内容-->C++内存管理!


相关推荐
懂AI的老郑2 小时前
深入理解C++中的堆栈:从数据结构到应用实践
java·数据结构·c++
胡萝卜3.02 小时前
现代C++特性深度探索:模板扩展、类增强、STL更新与Lambda表达式
服务器·开发语言·前端·c++·人工智能·lambda·移动构造和移动赋值
丝斯20112 小时前
AI学习笔记整理(30)—— 计算机视觉之动作识别相关算法
人工智能·笔记·学习
晚风(●•σ )2 小时前
C++语言程序设计——12 排序算法-桶排序
c++·算法·排序算法
淀粉肠kk2 小时前
【数据结构】哈希表
数据结构·c++
郝学胜-神的一滴2 小时前
Linux C++会话编程:从基础到实践
linux·运维·服务器·开发语言·c++·程序人生·性能优化
AA陈超2 小时前
LyraStarterGame_5.6 Experience系统分析
开发语言·c++·笔记·学习·ue5·lyra
烤麻辣烫2 小时前
黑马大事件学习-16 (前端主页面)
前端·css·vue.js·学习
SadSunset2 小时前
(5)spring的set注入
java·笔记·spring·架构