我是c编程的初学者。我试着写一个代码来反转数组的元素。这是我写的
#include <stdio.h>
int main(void)
{
int a[5], i, j, b[5], k=5;
printf("enter 5 numbers");
for (i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<5;i++)
{
for(j=k; j>=1; j--)
{
b[j] = a[i];
k--;
break;
}
}
for(j=1; j<5; j++)
{
printf("%d\n",b[j]);
}
return 0;
}
在输出中,我只得到3个倒数而不是全部5个。 有人可以帮帮我吗?
答案 0 :(得分:2)
你真的不需要循环内的循环。它可以通过一个轻松完成:
for(i=0; i<5; i++)
{
b[i] = a[4-i];
}
答案 1 :(得分:1)
首先,数组索引从0
开始,而不是从1
开始。因此,如果您声明大小为4的数组,则有效索引为0 - 3.为了更清楚地理解这一点,请参阅https://www.tutorialspoint.com/cprogramming/c_arrays.htm
现在你要做的只能用单循环完成!像这样:
#include <stdio.h>
int main(void) {
int a[5],i,j,b[5],k=5;
printf("enter 5 numbers");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
//see this :
for(i=0;i<5;i++)// runs from 0 to 4
{
int bIndex = 4 - i;//get index of array b to store element of array a
b[bIndex] = a[i];
}
for(j=0;j<5;j++)
{
printf("%d\n",b[j]);
}
return 0;
}
答案 2 :(得分:1)
#include <stdio.h>
int main(void)
{
int a[5], i, j, b[5], k=5;
printf("enter 5 numbers");
for (i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
`for(i=0;i<5;i++)`//see here begin
{
`for(j=5-k; j>=0; j++)`
{
b[j] = a[i];
k--;
break;
}
}
`for(j=0; j<5; j++)`
{
printf("%d\n",b[j]);
}
return 0;
}
答案 3 :(得分:0)
我相信,你的第一个问题是在循环条件中写为
for(j=k; j>=1; j--)
您使用j
进行索引编制。这使得b[j]
一个接一个。你应该把它改成
for(j=k-1; j >= 0; j--)
那就是说,
k--;
break;
循环内部的错误也是错误的。实际上你不需要两个循环。简化如下。
for(i=k-1, j =0; j < k; j++, i--) //j goes up, i goes down.
{
b[j] = a[i];
}
for(j=0; j<5; j++) //j starts from 0.....
{
printf("%d\n",b[j]);
}