大一新生

在这里插入图片描述

<think> 根据要求,我们需要设计一个适合大一新生水准的温度监控系统。考虑到大一新生对指针和数组的理解可能还在初级阶段,我们将设计一个简单但完整的系统,包含以下功能: 1. 使用指针存储和访问温度数据:动态分配数组存储多个房间的温度。 2. 温度查询:通过房间索引查询温度。 3. 温度更新:更新指定房间的温度。 4. 计算平均温度:求所有房间的平均温度。 我们将创建一个菜单驱动的控制台应用程序,以便用户交互。 以下是完整的C++程序: ```cpp #include <iostream> #include <iomanip> // 用于格式化输出 using namespace std; int main() { int roomCount; cout << "请输入房间数量: "; cin >> roomCount; // 动态分配数组存储温度 double* temperatures = new double[roomCount]; // 输入每个房间的温度 cout << "请依次输入每个房间的温度(单位:℃):" << endl; for (int i = 0; i < roomCount; i++) { cout << "房间 " << i + 1 << ": "; cin >> *(temperatures + i); // 使用指针算术输入 } int choice; do { // 显示菜单 cout << "\n===== 温度监控系统 =====\n"; cout << "1. 查询房间温度\n"; cout << "2. 更新房间温度\n"; cout << "3. 显示平均温度\n"; cout << "4. 退出\n"; cout << "请选择操作: "; cin >> choice; switch (choice) { case 1: { // 查询房间温度 int roomIndex; cout << "请输入房间号(1-" << roomCount << "): "; cin >> roomIndex; // 验证房间号是否有效 if (roomIndex < 1 || roomIndex > roomCount) { cout << "无效的房间号!" << endl; } else { // 使用指针访问温度 double temp = *(temperatures + roomIndex - 1); cout << "房间 " << roomIndex << " 的温度: " << fixed << setprecision(1) << temp << " ℃" << endl; } break; } case 2: { // 更新房间温度 int roomIndex; double newTemp; cout << "请输入要更新的房间号(1-" << roomCount << "): "; cin >> roomIndex; cout << "请输入新温度: "; cin >> newTemp; if (roomIndex < 1 || roomIndex > roomCount) { cout << "无效的房间号!" << endl; } else { // 使用指针更新温度 *(temperatures + roomIndex - 1) = newTemp; cout << "房间 " << roomIndex << " 的温度已更新为 " << newTemp << " ℃" << endl; } break; } case 3: { // 计算并显示平均温度 double sum = 0.0; for (int i = 0; i < roomCount; i++) { sum += *(temperatures + i); // 使用指针访问元素 } double average = sum / roomCount; cout << "所有房间的平均温度: " << fixed << setprecision(1) << average << " ℃" << endl; break; } case 4: // 退出 cout << "退出系统。" << endl; break; default: cout << "无效的选择,请重新输入!" << endl; } } while (choice != 4); // 释放动态分配的内存 delete[] temperatures; return 0; } ``` ### 代码解释: 1. **动态内存分配**: ```cpp double* temperatures = new double[roomCount]; ``` 根据用户输入的房间数量动态分配一个数组,用于存储温度值。 2. **使用指针算术访问元素**: ```cpp // 输入 cin >> *(temperatures + i); // 访问 double temp = *(temperatures + roomIndex - 1); // 更新 *(temperatures + roomIndex - 1) = newTemp; ``` 这里使用指针算术(指针加偏移量)来访问数组元素,而不是使用数组下标。`*(temperatures + i)` 等同于 `temperatures[i]`。 3. **计算平均温度**: ```cpp double sum = 0.0; for (int i = 0; i < roomCount; i++) { sum += *(temperatures + i); } double average = sum / roomCount; ``` 通过循环遍历数组,累加所有温度值,然后除以房间数得到平均温度。 4. **内存管理**: ```cpp delete[] temperatures; ``` 在程序结束前,使用`delete[]`释放动态分配的数组内存,避免内存泄漏。 5. **格式化输出**: ```cpp cout << fixed << setprecision(1); ``` 设置浮点数输出为固定小数点格式,并保留1位小数。 ### 运行示例: ``` 请输入房间数量: 3 请依次输入每个房间的温度(单位:℃): 房间 1: 22.5 房间 2: 23.0 房间 3: 24.5 ===== 温度监控系统 ===== 1. 查询房间温度 2. 更新房间温度 3. 显示平均温度 4. 退出 请选择操作: 1 请输入房间号(1-3): 2 房间 2 的温度: 23.0 ℃ ===== 温度监控系统 ===== 1. 查询房间温度 2. 更新房间温度 3. 显示平均温度 4. 退出 请选择操作: 2 请输入要更新的房间号(1-3): 2 请输入新温度: 25.5 房间 2 的温度已更新为 25.5 ℃ ===== 温度监控系统 ===== 1. 查询房间温度 2. 更新房间温度 3. 显示平均温度 4. 退出 请选择操作: 3 所有房间的平均温度: 24.2 ℃ ===== 温度监控系统 ===== 1. 查询房间温度 2. 更新房间温度 3. 显示平均温度 4. 退出 请选择操作: 4 退出系统。 ``` §§相关问题§§: 1. 在C++中,动态分配数组和静态数组有什么区别? 2. 如果用户输入的房间数量为0或负数,程序会怎样?如何改进? 3. 使用指针访问数组元素和数组下标访问在性能上有区别吗? 4. 如何修改程序以支持房间名称(字符串)而不仅仅是房间编号? </think> # 适合大一新生的温度监控系统(C++实现) 下面是一个简洁、易于理解的温度监控系统实现,专门为大一新生设计。代码使用基础的指针操作和数组管理,同时包含了详细的注释说明: ```cpp #include <iostream> #include <iomanip> // 用于格式化输出 using namespace std; int main() { // 系统初始化 int roomCount; cout << "欢迎使用智能家居温度监控系统!\n\n"; cout << "请输入要监控的房间数量: "; cin >> roomCount; // 动态分配数组存储温度数据 double* temperatures = new double[roomCount]; // 输入初始温度 cout << "\n请为每个房间输入初始温度(单位:℃):\n"; for (int i = 0; i < roomCount; i++) { cout << "房间 " << (i+1) << ": "; cin >> *(temperatures + i); // 使用指针存储数据 } // 主菜单循环 int choice; do { // 显示菜单 cout << "\n===== 温度监控菜单 =====\n"; cout << "1. 查看所有房间温度\n"; cout << "2. 查询特定房间温度\n"; cout << "3. 更新房间温度\n"; cout << "4. 计算平均温度\n"; cout << "5. 退出系统\n"; cout << "请选择操作 (1-5): "; cin >> choice; switch (choice) { case 1: // 查看所有房间温度 cout << "\n当前房间温度:\n"; cout << "-----------------\n"; for (int i = 0; i < roomCount; i++) { // 使用指针访问数据 cout << "房间 " << (i+1) << ": " << fixed << setprecision(1) // 保留1位小数 << *(temperatures + i) << "℃\n"; } cout << "-----------------\n"; break; case 2: // 查询特定房间温度 { int roomIndex; cout << "请输入要查询的房间号 (1-" << roomCount << "): "; cin >> roomIndex; if (roomIndex < 1 || roomIndex > roomCount) { cout << "错误:无效的房间号!\n"; } else { // 使用指针访问数据 double temp = *(temperatures + roomIndex - 1); cout << "房间 " << roomIndex << " 的温度: " << fixed << setprecision(1) << temp << "℃\n"; } } break; case 3: // 更新房间温度 { int roomIndex; double newTemp; cout << "请输入要更新的房间号 (1-" << roomCount << "): "; cin >> roomIndex; cout << "请输入新的温度值: "; cin >> newTemp; if (roomIndex < 1 || roomIndex > roomCount) { cout << "错误:无效的房间号!\n"; } else { // 使用指针更新数据 double oldTemp = *(temperatures + roomIndex - 1); *(temperatures + roomIndex - 1) = newTemp; cout << "房间 " << roomIndex << " 的温度已更新: " << oldTemp << "℃ → " << newTemp << "℃\n"; } } break; case 4: // 计算平均温度 { double sum = 0.0; // 使用指针遍历数组 for (int i = 0; i < roomCount; i++) { sum += *(temperatures + i); } double average = sum / roomCount; cout << "\n房间数量: " << roomCount << endl; cout << "平均温度: " << fixed << setprecision(1) << average << "℃\n"; } break; case 5: // 退出系统 cout << "\n感谢使用温度监控系统!再见!\n"; break; default: cout << "无效选择,请重新输入!\n"; } } while (choice != 5); // 释放动态分配的内存 delete[] temperatures; return 0; } ``` ## 代码解释(适合大一新生的理解) ### 1. 动态内存分配 ```cpp double* temperatures = new double[roomCount]; ``` - `new` 操作符在堆内存中分配数组空间 - `double*` 是指向double类型的指针 - 数组大小由用户输入的 `roomCount` 决定 ### 2. 指针访问数据 ```cpp // 存储数据 cin >> *(temperatures + i); // 访问数据 double temp = *(temperatures + roomIndex - 1); // 更新数据 *(temperatures + roomIndex - 1) = newTemp; ``` - `*(pointer + offset)` 相当于 `array[index]` - 偏移量计算:数组索引转换为内存偏移 ### 3. 指针遍历数组 ```cpp double sum = 0.0; for (int i = 0; i < roomCount; i++) { sum += *(temperatures + i); } ``` - 使用循环和指针访问每个元素 - 累加温度值计算总和 ### 4. 内存管理 ```cpp delete[] temperatures; ``` - 使用 `delete[]` 释放动态分配的数组 - 防止内存泄漏 ## 运行示例 ``` 欢迎使用智能家居温度监控系统! 请输入要监控的房间数量: 3 请为每个房间输入初始温度(单位:℃): 房间 1: 22.5 房间 2: 23.0 房间 3: 21.8 ===== 温度监控菜单 ===== 1. 查看所有房间温度 2. 查询特定房间温度 3. 更新房间温度 4. 计算平均温度 5. 退出系统 请选择操作 (1-5): 1 当前房间温度: ----------------- 房间 1: 22.5℃ 房间 2: 23.0℃ 房间 3: 21.8℃ ----------------- ===== 温度监控菜单 ===== 1. 查看所有房间温度 2. 查询特定房间温度 3. 更新房间温度 4. 计算平均温度 5. 退出系统 请选择操作 (1-5): 3 请输入要更新的房间号 (1-3): 2 请输入新的温度值: 24.5 房间 2 的温度已更新: 23.0℃ → 24.5℃ ===== 温度监控菜单 ===== 1. 查看所有房间温度 2. 查询特定房间温度 3. 更新房间温度 4. 计算平均温度 5. 退出系统 请选择操作 (1-5): 4 房间数量: 3 平均温度: 22.9℃ ===== 温度监控菜单 ===== 1. 查看所有房间温度 2. 查询特定房间温度 3. 更新房间温度 4. 计算平均温度 5. 退出系统 请选择操作 (1-5): 5 感谢使用温度监控系统!再见! ``` ## 学习重点 1. **指针基本操作**: - 指针声明:`double* ptr;` - 指针赋值:`ptr = temperatures;` - 指针解引用:`*ptr` 获取指针指向的值 2. **动态内存管理**: - `new` 分配内存 - `delete` 释放内存 - 避免内存泄漏 3. **数组与指针的关系**: - 数组名是指向第一个元素的指针 - 指针算术:`ptr + i` 移动到第i个元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值