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
相关产品推荐
相关产品推荐

