请教一下c语言数组问题?是什么问题导致程序一会能行一会不行?

作者站长头像
站长
· 阅读数 10

需求:实现将数组中所有元素调整为左右两部分,左边为奇数,右边为偶数。(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个回答
avatar
test
2024-06-27
  1. 这并不是排序,只能说是按照某种顺序进行打印输出。
  2. 不能,两者并不是等价的。前者在条件表达式为 false 时,什么都不会做,但在后者中,会导致另一种输出出现。

举几个测试例子:

// 两者表现一致
[1, 3, 5, 2, 4, 6];

// 两者表现不一致
[1, 2, 3, 4, 5, 6];

可以看出来,除非数组本身已经达成了一种顺序(奇数在一端,偶数在一端),否则这种修改就会导致程序表现「不对劲」。

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