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

C语言奇偶数组拆分程序运行结果相反,求错误原因

问题原因

你代码的核心问题是赋值逻辑错误:判断完arr[i]的奇偶性后,错误把**数组下标i**存入了目标数组,而非数组元素arr[i]本身。
具体为什么会出现结果相反的现象:

  • 原始数组arr的元素和下标的对应关系为arr[0]=1(奇数)、arr[1]=2(偶数)、arr[2]=3(奇数)、arr[3]=4(偶数)……以此类推
  • 当你判断到arr[i]是偶数时,存入的是下标i:比如arr[1]=2是偶数,就存1到偶数数组,arr[3]=4是偶数就存3到偶数数组,最终偶数数组里存的全是值为奇数的下标,看起来就像存了奇数
  • 同理判断到arr[i]是奇数时,存入的下标i都是偶数,最终奇数数组里存的全是值为偶数的下标,看起来就像存了偶数

修正方案

只需要把赋值部分的i替换为arr[i]即可,同时可以简化判断逻辑(非偶即奇,不需要二次判断),修正后的完整代码如下:

#include <stdio.h>

int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int arr_chan[10];
int arr_le[10];

int i, chan=0,le=0;
for(i=0;i<10;i++){
    if(arr[i]%2==0){
        arr_chan[chan]=arr[i];
        chan++;
    }
    else{
        arr_le[le]=arr[i];
        le++;
    }
}

printf("\nMang ban dau -> ");
for(i=0;i<10;i++){
    printf("%d ",arr[i]);
}
printf("\nMang chan -> ");
for(i=0;i<chan;i++){
    printf("%d ",arr_chan[i]);
}
printf("\nMang le -> ");
for(i=0;i<le;i++){
    printf("%d ",arr_le[i]);
}
printf("\n");
}

运行后可以得到预期结果:

Mang ban dau -> 1 2 3 4 5 6 7 8 9 0 
Mang chan -> 2 4 6 8 0 
Mang le -> 1 3 5 7 9 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:36:02