Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我不明白代码中发生了什么_C_Arrays_For Loop - Fatal编程技术网

C 我不明白代码中发生了什么

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;

这是我的密码。我想在数组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;
    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;i
for(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;
}