使用函数完成以下功能,并得到一个完整的可以运行的程序:
1)定义两个数组,用来表示下列关系表:
水位 库容
112 5656
115 5954
113 5703
110 5500
111 5642
114 5841
2)将两个数组分别按从小到大排序
3)输入任意一个水位,计算对应库容
4)输入任意库容,计算水位
(注:使用插值法计算,比如水位输入112.6,首先查询到112和113米水位
对应的库容5656和5703,然后计算比例=112.6-112=0.6,最后结果就是0.6 * (5703-5656) + 5656)
C++插值计算水位练习(visual studio 2022)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- |__WhoAmI__| 2022-12-16 21:48关注
#include <iostream> #include <algorithm> using namespace std; const int N = 7; // 数组的大小 // 水位数组 int water_level[N] = {112, 115, 113, 110, 111, 114}; // 库容数组 int storage[N] = {5656, 5954, 5703, 5500, 5642, 5841}; // 计算输入的任意水位对应的库容 int calc_storage(int level) { // 在水位数组中查找第一个大于等于输入水位的数的位置 int pos = lower_bound(water_level, water_level + N, level) - water_level; if (pos == 0) { // 输入的水位小于最小的水位,返回最小水位对应的库容 return storage[0]; } else if (pos == N) { // 输入的水位大于最大的水位,返回最大水位对应的库容 return storage[N - 1]; } else { // 输入的水位在水位数组中间,使用插值法计算 int low = water_level[pos - 1]; // 输入水位的前一个水位 int high = water_level[pos]; // 输入水位的后一个水位 int low_storage = storage[pos - 1]; // 前一个水位对应的库容 int high_storage = storage[pos]; // 后一个水位对应的库容 // 计算比例 double ratio = (level - low) * 1.0 / (high - low); // 计算结果 return low_storage + ratio * (high_storage - low_storage); } } // 计算输入的任意库容对应的水位 int calc_level(int stor) { // 在库容数组中查找第一个大于等于输入库容的数的位置 int pos = lower_bound(storage, storage + N, stor) - storage; if (pos == 0) { // 输入的库容小于最小的库容,返回最小库容对应的水位 return water_level[0]; } else if (pos == N) { // 输入的库容大于最大的库容,返回最大库容对应的水位 return water_level[N - 1]; } else { // 输入的库容在库容数组中间,使用插值法计算 int low = storage[pos - 1]; // 输入库容的前一个库容 int high = storage[pos]; // 输入库容的后一个库容 int low_level = water_level[pos - 1]; // 前一个库容对应的水位 int high_level = water_level[pos]; // 后一个库容对应的水位 // 计算比例 double ratio = (stor - low) * 1.0 / (high - low); // 计算结果 return low_level + ratio * (high_level - low_level); } } int main() { // 将水位数组和库容数组按照从小到大排序 sort(water_level, water_level + N); sort(storage, storage + N); // 输入水位,计算对应库容 int level; cout << "Enter a water level: "; cin >> level; int stor = calc_storage(level); cout << "The corresponding storage is: " << stor << endl; // 输入库容,计算对应水位 cout << "Enter a storage: "; cin >> stor; level = calc_level(stor); cout << "The corresponding water level is: " << level << endl; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大