DAY2C++

1 定义学生结构体,包含私有成员年龄、性别、身高,公有成员成绩,在结构体中定义公有的函数,完成对私有成员的赋值和获取操作,要求:函数结构体内声明,结构体外定义。用class。

#include <iostream>

using namespace std;

class Stu{
    int year;
    char sex;
    int height;
public:
    float score;
    int get_privateyear();
    int get_privateheight();
    char get_privatesex();
    void set_private(int year,char sex,int height,float s);
};
int Stu::get_privateyear()
{
    return year;
}
int Stu::get_privateheight()
{
    return height;
}
char Stu::get_privatesex()
{
    return sex;
}
void Stu::set_private(int a,char b,int c,float s)
{
    year = a;
    sex = b;
    height = c;
    score = s;
}
int main()
{
    Stu s1;
    cout<<"请依次输入年龄、身高、成绩、性别"<<endl;
    int a,c;
    float s;
    char b;
    cin>>a;
    cin>>c;
    cin>>s;
    cin>>b;
    s1.set_private(a,b,c,s);
    cout<<"年龄"<<s1.get_privateyear()<<endl;
    cout<<"身高"<<s1.get_privateheight()<<endl;
    cout<<"成绩"<<s1.score<<endl;
    cout<<"性别"<<s1.get_privatesex()<<endl;

    return 0;
}

2.写一个有默认参数的函数,把声明和定义分开,并在主函数内成功调用

#include <iostream>

using namespace std;
int aa(int a,int b = 1);

int main()
{
    cout << aa(1)<< endl;
    return 0;
}
int aa(int a,int b)

{
    return a+b;
}

3.计算结构体大小

16 12 12 6 40 92 8 5 32

思维导图

<think>嗯,用户给了我一段MicroPython的代码,想要在OLED屏幕上显示RTC时钟,并且希望日期和时间分两行显示。我需要先仔细看看他们的代码哪里需要修改。 首先,原代码中日期和时间是用分号分隔,然后和时分秒连在一起,显示在同一行。用户的需求是换行显示,所以得找到合并显示的部分。在函数RTC_Run里,date_str和time_str被合并后用text输出到同一行。所以应该把这两个字符串分开,分别用text函数输出到不同的行。 接下来,我需要确定OLED的显示位置。原来的date_str + time_str是在(0,40)的位置显示。如果分成两行,可能第一行日期还在40的位置,时间则换到下一行,比如40+15=55的位置?不过要看OLED的高度。代码里oled是128x64的,所以每个字符大约8像素高。原来的文本第一行在0,第二行在15,中间间隔15像素。日期和时间如果放在40和55的位置应该合适。或者可能需要调整坐标,比如40和55或者更紧凑些。 另外,用户提到日期格式是YYYY/MM/DD,时间HH/MM/SS,中间用分号分开。现在代码里date_str结尾有一个分号,可能需要去掉,或者在换行后不需要分号了。或者用户希望日期和时间各自独立,用不同的分隔符。不过根据用户的问题,可能只需要换行,所以分号可以保留在日期后面,或者替换为换行。 具体修改步骤应该是: 1. 将date_str中的分号去掉,或者保持原样,但分两行显示。例如,date_str改成YYYY/MM/DD,然后time_str是HH/MM/SS,各自单独一行。 2. 使用两次oled.text调用,分别显示日期和时间在不同的行。比如,日期在(0,40),时间在(0,55)。 检查原代码中的坐标: 原来的文本有三行: - '01Studio'在(0,0) - 'RTC Clock'在(0,15) - 日期和时间合并显示在(0,40) 所以,如果分成两行,日期在(0,40),时间在(0, 48)可能更合适,因为每行文本的高度通常是8像素。这样,40到48是下一行,再下一行是56,但原代码可能使用的是更大的行间距,比如15像素。需要测试,但用户可能希望间隔合理。 或者,原代码中使用的是15像素的间隔,比如第一行0,第二行15,第三行30,但原日期显示在40的位置。可能用户希望日期和时间在屏幕的下方,所以分成两行,间隔8像素的话,可能40和48的位置。 或者,原来的代码中的text函数可能每个text调用是8像素高,所以每行间隔8或更多。需要确认SSD1306的text函数是如何处理行高的。通常,每个字符是8x8像素,所以每行间隔8像素的话,下一行就是当前Y坐标+8或+9。 所以,修改后的代码应该将date_str和time_str分别显示在40和48的位置。例如: oled.text(date_str, 0, 40) oled.text(time_str, 0, 48) 这样,日期和时间就分两行显示了。另外,用户提到日期输出是“年月日”和“时分秒”换行,可能需要调整字符串的格式。原代码中date_str是YYYY/MM/DD;,后面加上时间。现在分两行的话,应该把分号去掉,或者用其他格式。例如: date_str = f"{yyyy}/{mm}/{dd}" time_str = f"{hh}:{mm_time}:{ss}" 可能用户希望日期和时间使用不同的分隔符,比如日期用斜杠,时间用冒号。或者根据用户的要求保持原样。原代码中的日期后面有分号,可能用户想用分号分隔,但换行后可能不需要了。 所以,需要将date_str中的分号去掉,并分开显示。同时,调整两个text的位置,确保不重叠。 另外,检查原代码中的时区调整是否正确。RTC的设置是否正确,定时器的回调是否每300ms刷新一次,这可能会影响显示效果,但用户的问题主要是显示格式,所以这部分可能没问题。 总结修改点: 在RTC_Run函数中,将原来的合并显示改为分开两行,调整Y坐标,并可能修改字符串格式。</think>要修改代码以实现日期和时间的分行显示,可以按照以下步骤调整: ```python # ... 前面代码保持不变 ... def RTC_Run(tim): datetime = rtc.datetime() oled.fill(0) oled.text('01Studio', 0, 0) oled.text('RTC Clock', 0, 15) # 日期格式化(YYYY/MM/DD) yyyy = str(datetime[0]) # 四位年份 mm = f"{datetime[1]:02d}" # 两位月份 dd = f"{datetime[2]:02d}" # 两位日期 date_str = f"{yyyy}/{mm}/{dd}" # 修改:去掉分号 # 时间格式化(HH:MM:SS) hh = f"{datetime[4]:02d}" # 两位小时 mm_time = f"{datetime[5]:02d}" ss = f"{datetime[6]:02d}" time_str = f"{hh}:{mm_time}:{ss}" # 修改:分隔符改为冒号 # 分两行显示 oled.text(date_str, 0, 40) # 日期在第40行 oled.text(time_str, 0, 55) # 时间在第55行 oled.show() # ... 后续代码保持不变 ... ``` ### 修改说明: 1. **日期和时间分离** - 原代码中 `date_str` 和 `time_str` 被合并为一行,通过修改为两次 `oled.text()` 调用,将日期和时间分别显示在不同行。 - 调整 `date_str` 的格式,删除了末尾的分号 `;`,使日期更清晰。 2. **显示位置调整** - **日期**:显示在 Y 坐标为 40 的位置(对应屏幕中间偏下)。 - **时间**:显示在 Y 坐标为 55 的位置(日期下方,间隔 15 像素,确保不重叠)。 3. **时间格式优化** - 将时间的分隔符从 `/` 改为 `:`,更符合常规时钟显示习惯(例如 `12:30:45`)。 ### 关键代码解释: - `oled.text(date_str, 0, 40)` 将日期字符串 `date_str` 显示在屏幕的 `(0, 40)` 坐标处。 - `oled.text(time_str, 0, 55)` 将时间字符串 `time_str` 显示在屏幕的 `(0, 55)` 坐标处。 ### 效果预览: ``` 01Studio RTC Clock 2023/10/05 14:30:45 ``` ### 扩展建议: 1. **居中显示** 若希望文本居中,可根据字符串长度计算起始 X 坐标: ```python date_x = int((128 - len(date_str)*8) / 2) # 假设每个字符宽度为8像素 oled.text(date_str, date_x, 40) ``` 2. **添加星期显示** 可通过 `datetime[3]` 获取星期值,并映射为文字(如 `Mon`/`周一`)增强可读性: ```python weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] weekday_str = weekdays[datetime[3] - 1] oled.text(weekday_str, 0, 25) # 在第三行显示星期 ``` 3. **时区动态调整** 将 `time_offset` 改为从外部输入或配置文件读取,便于适配不同地区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值