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++内存管理!


相关推荐
TDengine (老段)11 小时前
TDengine C/C++ 连接器进阶指南
大数据·c语言·c++·人工智能·物联网·时序数据库·tdengine
a35354138211 小时前
设计模式-代理模式
c++·设计模式·代理模式
EveryPossible12 小时前
穿透iframe
学习
木木木一12 小时前
Rust学习记录--C7 Package, Crate, Module
开发语言·学习·rust
落羽凉笙18 小时前
Python学习笔记(3)|数据类型、变量与运算符:夯实基础,从入门到避坑(附图解+代码)
笔记·python·学习
Quintus五等升18 小时前
深度学习①|线性回归的实现
人工智能·python·深度学习·学习·机器学习·回归·线性回归
会周易的程序员19 小时前
多模态AI 基于工业级编译技术的PLC数据结构解析与映射工具
数据结构·c++·人工智能·单例模式·信息可视化·架构
jz_ddk19 小时前
[学习] 卫星导航的码相位与载波相位计算
学习·算法·gps·gnss·北斗
华清远见成都中心20 小时前
人工智能要学习的课程有哪些?
人工智能·学习
hssfscv20 小时前
Javaweb学习笔记——后端实战2_部门管理
java·笔记·学习