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

C语言指针应用:找出首个数组中不在第二个数组的最大元素

解决思路与代码修改

你的需求是从第一个数组中找出不属于第二个数组的最大元素,并获取它的位置。原代码已经实现了单数组找最大值的逻辑,但缺少两个关键部分:第二个数组的输入处理,以及验证元素是否存在于第二个数组的判断逻辑,同时还要处理“最大值在第二个数组中”的情况——这时候需要往下找次大的符合条件的元素。

完整修改后的代码

#include <stdio.h>

// 用指针实现:检查target是否存在于arr数组中,size是数组长度
int isPresent(long *arr, long size, long target) {
    long *end = arr + size; // 数组末尾的下一个位置指针
    while (arr < end) {
        if (*arr == target) {
            return 1; // 找到,返回1
        }
        arr++; // 指针移动到下一个元素
    }
    return 0; // 没找到,返回0
}

int main()
{
    long array1[100], array2[100];
    long size1, size2, c;
    long max_val = -1; // 初始化最大符合条件的值,可根据实际数值范围调整
    long location = -1; // 初始化位置,-1表示未找到符合条件的元素

    // 输入第一个数组
    printf("Enter the number of elements in first array\n");
    scanf_s("%ld", &size1);
    printf("Enter %ld integers\n", size1);
    for (c = 0; c < size1; c++)
        scanf_s("%ld", &array1[c]);

    // 输入第二个数组
    printf("Enter the number of elements in second array\n");
    scanf_s("%ld", &size2);
    printf("Enter %ld integers\n", size2);
    for (c = 0; c < size2; c++)
        scanf_s("%ld", &array2[c]);

    // 遍历第一个数组,找出不在第二个数组中的最大元素
    long *ptr = array1; // 用指针遍历第一个数组
    long current_index = 0;
    while (ptr < array1 + size1) {
        // 如果当前元素不在第二个数组,且比当前记录的最大值大
        if (!isPresent(array2, size2, *ptr) && *ptr > max_val) {
            max_val = *ptr;
            location = current_index + 1; // 位置从1开始计数
        }
        ptr++;
        current_index++;
    }

    // 输出结果
    if (location != -1) {
        printf("Maximum element not in second array is present at location number %ld and it's value is %ld.\n", location, max_val);
    } else {
        printf("All elements of first array are present in second array.\n");
    }
    return 0;
}

关键改动说明

  • 添加第二个数组处理:新增了第二个数组的输入逻辑,确保能获取对比的数据源。
  • 指针实现的存在检查函数:isPresent函数用指针遍历数组,避免下标操作,更贴合你学习指针的需求。函数通过移动指针遍历数组,判断目标值是否存在。
  • 调整最大值查找逻辑:不再只找全局最大值,而是遍历第一个数组的每一个元素,先验证它是否不在第二个数组中,再更新最大符合条件的值和位置。这样能确保找到的是所有符合条件元素中的最大值,而不是先找全局最大值再判断(如果全局最大值在第二个数组中,这种方式会自动找下一个更大的符合条件元素)。
  • 异常情况处理:如果第一个数组的所有元素都在第二个数组中,会输出提示信息,避免无效输出。

额外优化建议

如果第一个数组元素较多,可以先对第一个数组排序(从大到小),然后遍历排序后的数组,找到第一个不在第二个数组中的元素,这样能减少遍历次数,提升效率。不过如果是学习阶段,当前的逻辑更直观,适合理解指针和数组的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:46