gpt4 book ai didi

c - 在 C 编程中反转数组元素

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

我是 C 语言的新手,我遇到了一个问题。我需要在下面的程序中反转数组的元素。我能否得到一个非常简单的解释,说明我做错了什么以及如何继续解决问题?

这是我得到的输出:

Enter number 0: 0Enter number 1: 1Enter number 2: 2Enter number 3: 3Enter number 4: 4Enter number 5: 5Enter number 6: 6Enter number 7: 7Element 0 is: 7Element 1 is: 6Element 2 is: 5Element 3 is: 4Element 4 is: 4Element 5 is: 5Element 6 is: 6Element 7 is: 7

My code:

#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;
}

最佳答案

为避免被误导,在反转之后写输出,而不是在反转期间:

#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;
}

现在您会注意到数组根本没有变化。那是因为你将数组中的每个元素交换两次:一次到它相反的位置,然后回到它原来的位置。要解决这个问题,只循环遍历数组的前半部分,即 while 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--;
}
}

关于c - 在 C 编程中反转数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43083284/

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