请教一下c语言数组问题?是什么问题导致程序一会能行一会不行?
需求:实现将数组中所有元素调整为左右两部分,左边为奇数,右边为偶数。(c语言)
int main(){
int size;
printf("enter the size of arr:");
scanf("%d",&size);
int arr[size];
for(int i;i<size;i++){
scanf("%d",&arr[i]);
}
printf("that is old one:\n");
for(int j=0;j<size;j++){
printf("%d",arr[j]);
}
printf("\n");
printf("that is the new:\n");
for(int i=0;i<size;i++){
if(arr[i]%2!=0){
printf("%d",arr[i]);
}
for(int j=0;j<size;j++){
if(arr[j]%2==0){
printf("%d",arr[j]);
}
}
printf("\n");
printf("03dengsimin");
return 0;
}
中这段代码:
for(int i=0;i<size;i++){
if(arr[i]%2!=0){
printf("%d",arr[i]);
}
for(int j=0;j<size;j++){
if(arr[j]%2==0){
printf("%d",arr[j]);
}
}
能不能换成一下这个?
for(int i=0;i<size;i++){
if(arr[i]%2!=0){
printf("%d",arr[i]);
}else{
printf("%d",arr[i]);
}
}
想问问为什么可换/为什么不能换?谢谢指导,菜鸟万分感激。
回复
1个回答

test
2024-06-27
- 这并不是排序,只能说是按照某种顺序进行打印输出。
- 不能,两者并不是等价的。前者在条件表达式为
false
时,什么都不会做,但在后者中,会导致另一种输出出现。
举几个测试例子:
// 两者表现一致
[1, 3, 5, 2, 4, 6];
// 两者表现不一致
[1, 2, 3, 4, 5, 6];
可以看出来,除非数组本身已经达成了一种顺序(奇数在一端,偶数在一端),否则这种修改就会导致程序表现「不对劲」。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容