这是我的代码。我想反转 array1 中的数字。我除了给定100,90,80,70,60,50,40,30,20,10这个编程之外。但我的程序显示了这个结果:100,90,80,70,60,70,80,90,100。我真的不知道为什么这段代码显示这个结果。我不明白我的代码中发生了什么。
#include <stdio.h>
int main()
{
int ara1[]={10,20,30,40,50,60,70,80,90,100};
int temp,i,j;
for(i=0,j=9;i<10;i++,j--)
{
temp=ara1[j];
ara1[i]=temp;
}
for(i=0;i<10;i++)
{
printf("%d\n",ara1[i]);
}
return 0;
}
最佳答案
循环中的第一次迭代您交换了元素 0
和 9
,对吗?然后交换元素 1
和 8
、2
和 7
、3
和 6
、4
和5
。和我走到这一步了?
然后循环继续交换刚刚交换过一次的元素 5
和 4
,然后是 6
和 3
、7
和 2
、8
和 1
最后是 9
和0
。
如果你中途停止循环,它就会起作用。当然,当我说“交换”时,我是自由派,因为正如 lkrabbe 所指出的,你实际上并没有交换元素。你需要做例如
temp = ara1[j];
ara1[j] = ara1[i];
ara1[i] = temp;
如果您尝试在调试器中单步执行代码,上述两个问题都会非常明显,因此这里的教训不是如何修复循环,而是学习如何使用调试器自己找出这些东西。
关于c - 我不明白我的代码中发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232978/