我是C的新手,我遇到了问题。我需要在以下程序中反转数组的元素。我可以得到一个非常简单的解释,说明我做错了什么以及如何继续修复它?
这是我得到的输出:
Enter number 0: 0 Enter number 1: 1 Enter number 2: 2 Enter number 3: 3 Enter number 4: 4 Enter number 5: 5 Enter number 6: 6 Enter number 7: 7 Element 0 is: 7 Element 1 is: 6 Element 2 is: 5 Element 3 is: 4 Element 4 is: 4 Element 5 is: 5 Element 6 is: 6 Element 7 is: 7
我的代码:
#include <stdio.h>
void reverse(int a[], int i)
{
int j=7,b;
for (i=0; i<=7; i++)
{
b=a[i];
a[i]=a[j];
a[j]=b;
printf("Element %d is: %d\n", i,a[i]);
j--;
}
}
int main(void)
{
int a[8];
int i;
for(i=0;i<=7;i++)
{
printf("Enter number %d: ",i);
scanf("%d", &a[i]);
}
reverse(a, 8);
return 0;
}
答案 0 :(得分:0)
为避免被误导,请在反转后写入输出,而不是在输出期间:
#include <stdio.h>
void reverse(int a[], int i)
{
int j = 7, b;
for (i = 0; i <= 7; i++)
{
b = a[i];
a[i] = a[j];
a[j] = b;
j--;
}
}
int main(void)
{
int a[8];
int i;
for (i = 0; i <= 7; i++)
{
printf("Enter number %d: ",i);
scanf("%d", &a[i]);
}
reverse(a, 8);
for (i = 0; i <= 7; i++)
{
printf("Element %d is: %d\n", i, a[i]);
}
return 0;
}
现在您会注意到阵列根本没有变化。那是因为你要交换数组中的每个元素两次:一次到它的反转位置,然后回到原来的位置。要解决这个问题,只能在数组的前半部分循环,即i < 4
。
这可能也是为了使第二个参数为reverse
的长度,所以你应该使用它而不是硬编码7或4:
void reverse(int a[], int length)
{
int i, j = length - 1, b;
for (i = 0; i < length / 2; i++)
{
b = a[i];
a[i] = a[j];
a[j] = b;
j--;
}
}
答案 1 :(得分:0)
您还可以在新阵列中复制数组:
#include <stdio.h>
void reverse(int a[], int i)
{
int b[i];
int j;
for(j=0; j<i; j++){
b[j] = a[i-1-j];
printf("Element %d is: %d\n", j, b[j]);
}
}
int main(void)
{
int a[8];
int i;
for(i=0;i<=7;i++)
{
printf("Enter number %d: ",i);
scanf("%d", &a[i]);
}
reverse(a, 8);
return 0;
}
答案 2 :(得分:0)
你想做什么它只穿过阵列长度的一半,否则你将两次翻转阵列。
void reverse(int a[], int len)
{
int i;
int j=len-1,b;
for(i=0;i<len/2;i++)
{
b=a[i];
a[i]=a[j];
a[j]=b;
j--;
}
for(i = 0; i < len; i++) {
printf("Element %d is: %d\n", i,a[i]);
}
}
答案 3 :(得分:0)
The Principe is simple. just stand at the middle of the table and reverse the elements as follow. so pose n is lent of the table. then the last element is n-1.
so you ave to reverse position t[0] and t[n-2]
reverse t[1] and t[n-3] and so on...
stop when you rich the middle of the table. try to code your self is better than for me giving you the code.
hope it helped.