You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找数组最大最小元素的C++代码逻辑错误该如何排查?

代码问题分析
  • 数组越界访问
    两个函数的遍历条件都是for (int i = 0; i < b; i++),循环内访问a[i+1],当i等于b-1时,i+1等于数组长度b,超出了数组合法下标范围(C++数组下标从0开始,合法范围是0~b-1),越界访问属于未定义行为,会输出随机值甚至程序崩溃。
  • 线性搜索逻辑冗余
    你设计的是线性搜索定位最值,不需要每次比较相邻两个元素,直接遍历每个元素和当前存储的最值比较即可,现有逻辑属于不必要的复杂写法,反而容易出错。
  • 非标准可变长度数组
    main函数中int arr[n];的写法是C语言的VLA扩展,不属于C++标准语法,可移植性差,建议改用标准库容器vector存储动态长度数组。
修正后代码
#include <iostream>
#include <climits>
#include <vector>
using namespace std;

void maxElement(const vector<int>& a)
{
    int maxNum = INT_MIN;
    for (int num : a) {
        maxNum = max(maxNum, num);
    }
    cout << maxNum << endl;
}

void minElement(const vector<int>& c)
{
    int minNum = INT_MAX;
    for (int num : c) {
        minNum = min(minNum, num);
    }
    cout << minNum << endl;
}

int main()
{
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    minElement(arr);
    maxElement(arr);
    return 0;
}

如果你要保留原有C风格数组的写法,仅调整循环逻辑即可:

// maxElement调整示例,minElement同理修改
void maxElement(int a[], int b)
{
    int maxNum = INT_MIN;
    for (int i = 0; i < b; i++) {
        maxNum = max(maxNum, a[i]);
    }
    cout << maxNum << endl;
}

内容的提问来源于stack exchange,提问作者Parth Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:54:01