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

时间:2016-03-26 07:57:37

标签: c arrays for-loop

这是我的代码。我想在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;
}

7 个答案:

答案 0 :(得分:2)

交换元素09的循环中的第一次迭代,对吗?然后交换元素1827364和{{1} }。和我在一起这么远?

然后循环继续交换元素55,您刚交换了一次,然后463和{{ 1}},72以及最后81

如果你中途停止循环,它将起作用。当然,当我说“交换”时,我很自由,因为正如lkrabbe所说,你实际上并没有交换元素。你需要这样做

9

如果您试图在调试器中单步执行代码,上述两个问题都会显而易见非常,所以这里的教训不是如何修复循环,而是学习如何使用调试器自己找出这些东西。

答案 1 :(得分:2)

您的掉期期限

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]);

答案 2 :(得分:1)

for(i=0,j=9;i<5;i++,j--) {
   temp=ara1[i];
   ara1[i]=ara1[j];
   ara1[j]=temp;

}

那就行了。问题是你实际上没有交换任何你只是将最后一个复制到第一个中的啤酒,依此类推。

已编辑:现在可行。

答案 3 :(得分:0)

这种情况正在发生,因为随着我进入9,j正在减少。

在构建数组时,您可以替换值。因此,当j == 0时,您将从ar1 [j]获得新值,在这种情况下为100.所有缺失的数字都是如此。

创建一个包含原始数组的临时数组。然后将其用于交换。

原始[i] = temp [j] ...

因此,我是0,j是9,那么原始[0]的值将等于值为9的临时数组.1将获得8s值,2将获得7s ...您正在构建新的来自原始数组副本的数组,并且您不会覆盖您声明的问题数据。

答案 4 :(得分:0)

这是由于循环问题而发生的 经过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;
}

这是数组在5次迭代后看起来失去10 to 50

的方式

10,20,30,40,50,60,70,80,90,100 100,90,30,40,50,60,70,80,90,100 100,90,80,40,50,60,70,80,90,100 100,90,80,70,50,60,70,80,90,100 100,90,80,70,60,60,70,80,90,100 enter image description here

答案 5 :(得分:0)

以下代码将按预期使用单个数组。

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

答案 6 :(得分:-1)

实际上没有使用变量tmp。你只需在arra1 [0],90 inarra1 [1] ......

中加100