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

C语言实现数组奇数筛选存入新数组并打印的问题求解

C语言数组奇数筛选实现

将用户输入的数组arr中的奇数存储到新数组arr1中,随后进行打印输出。
请先运行查看输出结果

原始代码

#include <stdio.h>
int main()
{
    int i;
    int arr1[100];
    int arr[5] = {2, 3, 8, 9, 11};
    for (i = 0; i <= 5; i++)
    {
        for (int x = 1; x < 12; x++)
        {
            if (x == arr[i])
            {
                arr1[i] = arr[i];
            }
            x += 1;
        }
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d\n", arr1[i]);
    }

    return 0;
}

原始代码存在的问题

  • 数组越界访问:arr数组长度为5,合法下标范围是0~4,外层循环条件i <=5会访问arr[5]的非法内存,触发未定义行为
  • 奇数判断逻辑错误冗余:不需要嵌套内层循环遍历数值匹配,判断奇数直接用arr[i] % 2 != 0即可;且内层循环中x每次循环会自增2(循环条件自带x++,又手动加了x +=1),遍历逻辑完全错误
  • 新数组存储逻辑错误:arr1未初始化,且直接用原数组下标i赋值,偶数对应的arr1位置会保留随机垃圾值,打印时输出异常内容

修复后代码

#include <stdio.h>
int main()
{
    int i, valid_count = 0;
    int arr1[100];
    int arr[5] = {2, 3, 8, 9, 11};
    // 筛选奇数存入新数组
    for (i = 0; i < 5; i++)
    {
        if (arr[i] % 2 != 0)
        {
            arr1[valid_count] = arr[i];
            valid_count++;
        }
    }
    // 仅打印有效奇数
    for (i = 0; i < valid_count; i++)
    {
        printf("%d\n", arr1[i]);
    }
    return 0;
}

正确输出结果

3
9
11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:01