C 我不明白代码中发生了什么
这是我的密码。我想在数组1中反转我的号码。除了这个程序外,我被赋予了100,90,80,70,60,50,40,30,20,10。但是我的程序显示了这个结果:100,90,80,70,60,70,80,90100。我真的不知道为什么这个代码会显示这个结果。我不明白代码中发生了什么C 我不明白代码中发生了什么,c,arrays,for-loop,C,Arrays,For Loop,这是我的密码。我想在数组1中反转我的号码。除了这个程序外,我被赋予了100,90,80,70,60,50,40,30,20,10。但是我的程序显示了这个结果:100,90,80,70,60,70,80,90100。我真的不知道为什么这个代码会显示这个结果。我不明白代码中发生了什么 #include <stdio.h> int main() { int ara1[]={10,20,30,40,50,60,70,80,90,100}; int temp,i,j;
#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;
}
#包括
int main()
{
int ara1[]={10,20,30,40,50,60,70,80,90100};
内部温度,i,j;
对于(i=0,j=9;i循环中的第一次迭代,你交换元素0
和9
,对吗?然后你交换元素1
和8
,2
和7
,3
和6
,4
和5
。到目前为止,你和我交换了吗
然后循环继续交换元素5
和4
,您只交换了一次,然后是6
和3
,7
和2
,8
和1
,最后是9
和0
当然,当我说“交换”时,我是自由的,因为正如Lkrabe所指出的,你实际上并没有交换元素
temp = ara1[j];
ara1[j] = ara1[i];
ara1[i] = temp;
如果您尝试在调试器中单步执行代码,上述两个问题将非常明显,因此这里的课程不是如何修复循环,而是学习如何使用调试器自己发现这些问题。您的交换术语
temp = ara1[j];
ara1[i] = temp;
可以简化为
ara1[j] = ara1[i];
但是你想交换,所以你应该
temp = ara1[j];
ara1[j] = ara1[i];
ara1[i] = temp;
或者最好定义一个交换表达式
#define SWAP(a,b) do {
int __temp = a;
a = b;
b = __temp;
} while(0)
和使用
SWAP(ara1[i],ara1[j]);
变量tmp实际上没有被使用。您只是在arra1[0]中放入100,在arra1[1]中放入90,…这是由于循环问题造成的
在5次迭代后,10,20,30,40,50的值将丢失,因为您必须将其保留在j
位置
像这样试试
#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/2;i++,j--)
{
temp=ara1[j];
ara1[j]=ara1[i]; // this is the change i have made
ara1[i]=temp;
}
for(i=0;i<10;i++)
{
printf("%d\n",ara1[i]);
}
return 0;
}
#包括
int main()
{
int ara1[]={10,20,30,40,50,60,70,80,90100};
内部温度,i,j;
对于(i=0,j=9;ifor(i=0,j=9;i以下代码将与您预期的单个数组一样工作
#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<5;i++,j--)
{
temp=ara1[j];
ara1[j]=ara1[i];
ara1[i] = temp;
}
for(i=0;i<10;i++)
{
printf("%d\n",ara1[i]);
}
return 0;
}
#包括
int main()
{
int ara1[]={10,20,30,40,50,60,70,80,90100};
内部温度,i,j;
对于(i=0,j=9;我‘我不知道我的代码中发生了什么’-这就是调试器被发明的原因。我是编程新手。我不知道交换表达式。我在北汽c中使用了你的代码,但有一个问题,程序显示了这个结果:10,20,30,40,50,60,70,80,90100,但我想要这个数字100,90,80,70,60,50,40,30,20,10@asad参见joachims解决方案你应该只循环一半。很高兴在这里提到调试器。当然,简单的printf调试在这里也会很完美。谢谢你的回答。现在我将用调试器检查这段代码。但是它显示了10,20,30,40…100,但我想得到这个结果100,90,…30,20,10你循环相互依赖的变量:j=L-i-1
n对于(i=0;i),您想表达什么?
#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<5;i++,j--)
{
temp=ara1[j];
ara1[j]=ara1[i];
ara1[i] = temp;
}
for(i=0;i<10;i++)
{
printf("%d\n",ara1[i]);
}
return 0;
}