为何条件语句结果错误?如何遍历数组后分别输出奇偶元素
问题解答
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
相关产品推荐
相关产品推荐

