C 反转阵列(不使用第二个阵列)

C 反转阵列(不使用第二个阵列),c,arrays,C,Arrays,我正在尝试在不使用任何第二个数组的情况下反转数组。 下面是我编写的代码,但由于某些原因,它似乎不起作用 #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

我正在尝试在不使用任何第二个数组的情况下反转数组。 下面是我编写的代码,但由于某些原因,它似乎不起作用

#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]);
 }
}
#包括
#包括
void getArrayValue();
void main()
{
int k,n;
int i=0;
INTA[100];
printf(“输入n的值”);
scanf(“%d”和“&n”);
printf(“Ener数组的值”);

对于(i=0;i您只分配了[i]个值。您还需要分配[k]个值。例如:

int temp;

//code

temp = a[i];
a[i] = a[k];
a[k] = temp;
现在基本上是在复制数组的值

编辑


你还应该看看艾薇拉说的话。如果你不考虑这一点,你最终会访问空内存(你的程序会崩溃)

你只分配了一个[i]值。你还需要分配一个[k]值。例如:

int temp;

//code

temp = a[i];
a[i] = a[k];
a[k] = temp;
现在基本上是在复制数组的值

编辑


你还应该看看艾薇拉说的话。如果你不考虑这一点,你最终会访问空内存(你的程序会崩溃)

我看到的第一个错误是,您以
n
的形式启动
k
。那么,数组
a
的位置
n
在最后一个元素之后,因为数组索引从零开始。您应该以以下方式启动它:

k=n-1;
第二,当你这样做的时候

for(i=0;i<n;i++)
{
   a[i]=a[k];
   k--;
}
但这样做时,当
i==n/2
时,您将已经交换了整个数组,因此必须停止:

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

for(i=0;i我看到的第一个错误是将
k
作为
n
开始。那么,数组
a
的位置
n
在最后一个元素之后,因为数组索引从零开始。您应该将其作为:

k=n-1;
第二,当你这样做的时候

for(i=0;i<n;i++)
{
   a[i]=a[k];
   k--;
}
但这样做时,当
i==n/2
时,您将已经交换了整个数组,因此必须停止:

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

<代码> >(i=0;i ),您似乎使用C,而不是C++。您可以在没有第二个数组的情况下实现反转:
int array[SIZE];
// fill in array
for (int i = 0; i < SIZE / 2; ++i)
{
    int t = array[i];
    array[i] = array[SIZE - i - 1];
    array[SIZE - i - 1] = t;
}
int数组[SIZE];
//填充数组
对于(int i=0;i

C++解决方案可以根据需求而在几个方面进行。例如:

std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::reverse(v.begin(), v.end());
向量v={1,2,3,4,5,6,7,8,9,10}; std::reverse(v.begin(),v.end());
<代码> > p>你似乎在使用C,而不是C++。你可以在没有第二个数组的情况下完成反转:
int array[SIZE];
// fill in array
for (int i = 0; i < SIZE / 2; ++i)
{
    int t = array[i];
    array[i] = array[SIZE - i - 1];
    array[SIZE - i - 1] = t;
}
int数组[SIZE];
//填充数组
对于(int i=0;i

C++解决方案可以根据需求而在几个方面进行。例如:

std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::reverse(v.begin(), v.end());
向量v={1,2,3,4,5,6,7,8,9,10}; std::reverse(v.begin(),v.end());
就这么做吧-

for(i=0;i<n/2;++i)
swap(a+i,a+((n-1)-i));
for(i=0;i只需这样做-

for(i=0;i<n/2;++i)
swap(a+i,a+((n-1)-i));
用于(i=0;i
#包括
int main()
{
char s[]=“ratiranjankumar”;
int i,j;
整数计数=0;
对于(i=0;s[i]!='\0';i++)
{
计数++;
}
对于(j=0;j
#包括
int main()
{
char s[]=“ratiranjankumar”;
int i,j;
整数计数=0;
对于(i=0;s[i]!='\0';i++)
{
计数++;
}

对于(j=0;JOWE关于代码> STD::反向< /代码>?C++和c?挑选一个。它看起来像C。对我来说,这里是强制性的<代码>主< /代码> rA:<代码>无效主()/<代码>应该是代码> int()你做作业,你需要在调试器中逐行地逐个地逐个地跳过代码。在某个时候,代码不会做你想做的事。这就是bug所在。“怎么样?”代码> STD::“反转< /代码>?C++和c?挑选一个。它看起来像C。对我来说,这里是强制性的<代码>主< /代码> rANT:<代码>空隙主()。
应为
int main()
。如果要执行赋值,则需要在调试器中逐行交换代码步骤。在某些情况下,代码不会按您的想法执行。这就是错误所在。@Ivella这是有效的!感谢您建议不要检查偶数-奇数的可能性。这减少了我的程序长度,并最终使其更有效。@Ivella This w谢谢你的建议,不检查奇数的可能性。这减少了我的程序的长度,最终使它更有效。请考虑添加一些评论,描述这个代码如何工作。请考虑添加一些注释,描述这个代码是如何工作的。