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

为何条件语句结果错误?如何遍历数组后分别输出奇偶元素

问题解答

1. 条件语句判断错误的原因

你代码里用arr[i]/2==0判断偶数是逻辑完全错误的:

  • 整数除法规则下,1/2的计算结果是0,所以会被误判为偶数;
  • 2/2的结果是1,不等于0,因此被误判为奇数,这和实际奇偶性完全相反。
    正确的奇偶判断应该用取余运算符%:一个数除以2余数为0则是偶数,余数为1则是奇数,对应判断条件为arr[i] % 2 == 0。

2. 正确实现奇偶输出的方法

除了修正判断逻辑,还要修复代码里的其他bug:

  • 第一个printf语句缺少右括号,属于语法错误;
  • 循环条件i<=n错误:输入n个元素时,数组下标范围是0到n-1,用i<n才能遍历正确的n个元素,否则会多处理一个超出预期的元素。

修正后的完整代码

方案1:分两次遍历分别输出偶数、奇数

#include <stdio.h>  
int main()  
{  
    int arr[100]; 
    int n, i;
    printf("Number of Elements:-");
    scanf("%d", &n);
    // 输入n个元素,下标从0到n-1
    for (i = 0; i < n; i++)
    {
        printf("Elem %d:-", i);
        scanf("%d", &arr[i]);
    }
    // 输出所有偶数
    printf("Even numbers:\n");
    for(i = 0; i < n; i++)
    {
        if(arr[i] % 2 == 0)
        {
            printf("%d\n", arr[i]);
        }
    }
    // 输出所有奇数
    printf("Odd numbers:\n");
    for(i = 0; i < n; i++)
    {
        if(arr[i] % 2 != 0)
        {
            printf("%d\n", arr[i]);
        }
    }
    return 0;
}

方案2:一次遍历同时输出奇偶

#include <stdio.h>  
int main()  
{  
    int arr[100]; 
    int n, i;
    printf("Number of Elements:-");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        printf("Elem %d:-", i);
        scanf("%d", &arr[i]);
    }
    // 一次遍历区分奇偶输出
    for(i = 0; i < n; i++)
    {
        if(arr[i] % 2 == 0)
        {
            printf("Even: %d\n", arr[i]);
        }
        else
        {
            printf("Odd: %d\n", arr[i]);
        }
    }
    return 0;
}

关键说明

  • 用arr[i] % 2 == 0精准判断偶数,arr[i] % 2 != 0判断奇数;
  • 循环边界改为i < n,确保只处理用户输入的n个元素;
  • 修复printf语法错误,同时将非标准的void main()改为标准的int main()并添加return 0;,符合C语言规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:50:36