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谢谢你的建议,不检查奇数的可能性。这减少了我的程序的长度,最终使它更有效。请考虑添加一些评论,描述这个代码如何工作。请考虑添加一些注释,描述这个代码是如何工作的。