gpt4 book ai didi

c - 反转数组(不使用第二个数组)

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:33 24 4
gpt4 key购买 nike

我试图在不使用任何第二个数组的情况下反转数组。这是我编写的代码,但由于某种原因它似乎无法正常工作。

#include<stdio.h>
#include<conio.h>
void getarrayvalues();
void main()
{
int k,n;
int i=0;
int a[100];
printf("Enter the value of n");
scanf("%d", &n);
printf("Ener the values of array");
for(i=0;i<n;i++)
{
scanf("%d", &a[i]);
}
k=n;
if(n%2==0)
{
for(i=0;i<n;i++)
{
a[i]=a[k];
k--;
}
}
else
{
for(i=0;i<n;i++)
{
if(k==((n/2)+1))
{
continue;
}
else
{
a[i]=a[k];
k--;
}
}
}
printf("reverse values are");
for(i=0;i<n;i++)
{
printf("%d", a[i]);
}
}

输入数组值后,返回蓝色代码编写屏幕,不打印输出。有什么想法吗?

最佳答案

我看到的第一个错误是您将 k 作为 n 开始。好吧,数组 a 的位置 n 是最后一个元素之后的一个,因为数组索引从零开始。你应该开始它:

k=n-1;

第二,当你这样做

for(i=0;i<n;i++)
{
a[i]=a[k];
k--;
}

您用倒置的后半部分覆盖了数组的前半部分,但在此过程中丢失了前半部分的原始值。如果您不在其他地方保存 a[i] 的先前值,它将在赋值时丢失。放置 a[i] 的值的一个好地方是,因为您正在反转数组,在其对称的相反位置,它恰好是 a[k]。代码如下所示:

for(i=0;i<n;i++)
{
int temp = a[i];
a[i]=a[k];
a[k]=temp;
k--;
}

但是这样做,当 i == n/2 时,你已经交换了整个数组,因此你必须到此为止:

for(i=0;i<=(n/2);i++)
{
int temp = a[i];
a[i]=a[k];
a[k]=temp;
k--;
}

最后,不需要区别对待n是奇数还是偶数的情况,因为如果是奇数,中间的元素已经在它需要的地方了...

关于c - 反转数组(不使用第二个数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com