画谱 2022-12-16 20:52 采纳率: 100%
浏览 101
已结题

C++插值计算水位练习(visual studio 2022)

使用函数完成以下功能,并得到一个完整的可以运行的程序:
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)

  • 写回答

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月16日
  • 已采纳回答 12月16日
  • 修改了问题 12月16日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大