Я не уверен, как трассируется массив кода? - PullRequest
0 голосов
/ 19 февраля 2019

Я не понимаю, как трассируется массив.Я чувствую, что знаю это, но потом снова все испортил.Я понимаю, как меняются значения, но я все еще путаюсь.Я написал свои вопросы в качестве комментариев помимо моего кода.Может ли кто-нибудь помочь мне отследить эту часть?

#include <stdio.h>

int main()
{
    int a[5]={1,2,3,4,5};
    int i,j,temp;

    for (j=1; j<5; j++) 
        for (i=0; i<5-j; i=i+2) 
        {
            printf("%d %d\n",i,i+j); //I got this part right
            temp = a[i]; //from here I get confused
            a[i] = a[i+j]; //how is the addition inside working??
            a[i+j] = temp; //temp = the index's value
        }
            for (i=0; i<5; i++)
            printf("a[%d] = %d\n",i,a[i]);//what is i supposed to be here??
}

Output:
0 1
2 3
0 2
2 4
0 3
0 4
a[0] = 2 //from here on I get lost
a[1] = 1
a[2] = 5
a[3] = 4
a[4] = 3

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Полагаю, вы мало что знаете о программировании на Си.Итак, немного о массивах:

  1. Массив (здесь: int a[5]={1,2,3,4,5}) - это непрерывно распределенные блоки памяти.
  2. Массив a [n] имеет размер 'n'(хранит n значений типа массива, здесь int) и имеет индекс от 0 до n-1.Это означает, что к каждому из n значений обращаются от a[0] до a[n-1].
  3. . Существуют многомерные массивы (читайте это!).

Логика приведена здесь:

temp = a[i];   //temp gets a[i]'s value and not the value of i
a[i] = a[i+j];
a[i+j] = temp;

Это стандартная операция обмена (a, b) с использованием временной переменной temp.Просто 'a' и 'b' здесь являются элементами массива.

Циклы сконструированы таким образом, чтобы получать доступ к различным элементам массива в каждой итерации.Это перемешивает массив.

Так очевидно:

printf("a[%d] = %d\n",i,a[i]); // i here is the index used to access a's ith element
0 голосов
/ 20 февраля 2019

Я узнал, что я делаю неправильно.Я просто пытался сделать математику и изменить значение этой позиции.Я должен открыть пробел и переместить старый номер, чтобы вставить новый номер. Тогда старый номер уйдет в оставшееся свободное место.На самом деле это просто замена, но это помогает увидеть это лучше.

Так что в {1,2,3,4,5}, если я попытаюсь поместить [3] = 4 в [1] = 2, значение 4 перейдет к a [1].
a [1], у которого было 2, должно будет выйти, а [3], у которого было 4, придет.
2, которое было выброшенобудет идти в том месте, где раньше было 4 в a [3] = 2.

Так что теперь a [1] = 4 и a [3] = 2.Таким образом, замененный массив теперь будет выглядеть как {1,4,3,2,5}

0 голосов
/ 19 февраля 2019

Почему бы вам не распечатать весь ваш массив в каждом цикле, чтобы вы могли видеть, как значения перемещаются, например, на шаге по замене элемента 0,1, поэтому массив равен {2,1,3,4,5}, затем 2,3 т. {2,1,4,3,5}, затем 0,2 т. {4,1,2,3,5}, 2,4, => {4,1,5,3, 2}, 0,3 {3,1,5,4,2}, 0 4 {2,1,5,4,3}

...