天真的小白 发表于 2023-5-22 20:39:08

数组排序调换输出

#include <stdio.h>
int main()
{
        int i,j;
        int a={11,22,33,44,56,67,78,98,93,100};
        int *p=a;
       
        for(i=0,j=9;i<10;i++,j--)
        {
               
                *(p+j)=*(a+i);
        }
        for(i=0;i<10;i++)
        {       
                printf("%d\n",*(p+i));       
        }
        for(i=0;i<10;i++)       
        {       
                printf("%d",*(p+i));       
        }
        return 0;
}
求大佬帮忙求解{:5_109:}

isdkz 发表于 2023-5-22 20:41:12

这个程序试图反转一个数组,但是实现有问题。当i和j同步增减时,你会在数组的前半部分进行交换,然后在后半部分又将它们换回来,所以这个数组并没有被反转。你应该只在i < j时交换a]和a 。

这是一个正确的实现方法:

#include <stdio.h>
int main()
{
    int i,j;
    int a={11,22,33,44,56,67,78,98,93,100};
    int temp;

    for(i=0,j=9;i<j;i++,j--)
    {
      // 使用临时变量 temp 进行交换
      temp = a;
      a = a;
      a = temp;
    }
    for(i=0;i<10;i++)
    {
      printf("%d\n", a);
    }
    return 0;
}


在这个新的程序中, i和j从数组的两端开始,并向中心移动,只在i < j时交换元素,以确保每对元素只交换一次。

天真的小白 发表于 2023-5-22 20:48:37

能不能用指针

天真的小白 发表于 2023-5-22 20:49:45

{:10_266:}{:10_266:}{:10_266:}
页: [1]
查看完整版本: 数组排序调换输出