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

C语言中两个数组求交集时遇到的问题

问题分析与修正方案

你的交集功能存在几个核心问题,同时并集代码也有数组越界的隐患:

  • 交集重复输出/存储:当r中的元素在s里多次出现时,会重复打印该元素,不符合交集元素唯一的定义;而且你只打印了匹配值,没有把结果存入定义好的y数组。
  • 并集数组越界:原代码合并r和s到x时,循环次数超出了两个数组的实际长度,会导致非法内存访问。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>

int main() {

    int r[10];
    int s[20];
    int x[30];
    int y[10];
    
    int i, j, k = 0;
    
    // 初始化并打印r数组
    for (i = 0; i < 10; i++) {
        r[i] = rand() % 10;
        printf("\nR - 位置 %d,数值 %d", i + 1, r[i]);
    } 
    
    printf("\n--------------------------------------\n");
    
    // 初始化并打印s数组
    for (i = 0; i < 20; i++) {
        s[i] = rand() % 20;
        printf("\nS - 位置 %d,数值 %d", i + 1, s[i]);
    }
    
    printf("\n--------------------------------------\n");
    
    // 修正并集:先复制r的10个元素
    for (i = 0; i < 10; i++) {
        x[i] = r[i];
    }
    // 再复制s的20个元素到x的后续位置
    for (i = 0; i < 20; i++) {
        x[i + 10] = s[i];
    }
    // 打印并集x
    for (i = 0; i < 30; i++) {
        printf("\nX - 位置 %d,数值 %d", i + 1, x[i]);
    }
    
    printf("\n--------------------------------------\n");
    
    // 修正交集:遍历r数组找匹配项
    for (i = 0; i < 10; i++) {
        int already_in_y = 0;
        // 先检查当前元素是否已经在交集中,避免重复
        for (int m = 0; m < k; m++) {
            if (y[m] == r[i]) {
                already_in_y = 1;
                break;
            }
        }
        if (already_in_y) continue;
        
        // 检查是否在s数组中
        for (j = 0; j < 20; j++) {
            if (r[i] == s[j]) {
                y[k++] = r[i]; // 存入交集数组
                printf("\nY - 位置 %d,数值 %d", k, r[i]);
                break; // 找到一次就退出,避免重复打印
            }
        }
    }
    
    // 无交集时的提示
    if (k == 0) {
        printf("\nY数组中无交集元素");
    }
    
    return 0;
}

关键修改说明

  1. 并集越界修复:拆分原错误循环,分别按r和s的实际长度复制元素,避免非法内存访问。
  2. 交集去重:加入前置检查,确保同一元素不会被多次存入y数组。
  3. 结果存储:用变量k记录交集数组的有效元素数量,把匹配值存入y,而不是仅打印。
  4. 避免重复输出:找到s中的匹配项后立即退出内层循环,防止同一元素多次打印。

内容的提问来源于stack exchange,提问作者Gabriel Sá

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:14:50