Проблема в C: как правильно вызвать функцию внутри main - PullRequest
0 голосов
/ 21 марта 2019

Итак, в структурах данных есть этот проект, с которым мне приходится иметь дело в этом семестре, и он требует, чтобы мне пришлось писать код на C.Проблема в том, что я немного заржавел в C и имею дело с основными проблемами.Одна из проблем заключается в том, что мне нужно написать простую программу на C, которая реализует BubbleSort.Алгоритм BubbleSort должен быть отдельной функцией и вызывать ее в основной программе.Вот мое усилие.Проблема в том, что он не набирает отсортированный массив.Я надеюсь, что вы можете мне помочь .

КОД:

int calculateRand()
{
    int num;
    num = (rand())%(UPPER-LOWER+1)+LOWER;
    return num;
}

void swap(int *xp, int *yp)
{
    int temp=*xp;
    *xp=*yp;
    *yp=temp;
}

void BubbleSort(int S[], int n)
{
    int up=n;
    int i,j;

    while(up>1)
    {
        j=0;
        for(i=1; i<up-1; i++)
        {
            if(S[i]>S[i+1])
            {
                swap(&S[i], &S[i+1]);
                j++;
            }
        }
    }
    for(i=0; i<n; i++)
    {
        printf("%d\n", S[i]);
    }

}


int main()
{
    int n,i;
    printf("Parakalw dwste mia timh sto n: \n");
    scanf("%d", &n);

    int S[sizeof(n)];


    printf("O mi taxinomimenos pinakas einai o exis \n");
    for(i=0; i<n-1; i++)
    {
        S[i]=calculateRand();
        printf("%d\n", S[i]);
    }

    printf("O pinakas meta thn taxinomisi einai \n");
    BubbleSort(S[sizeof(n)], n);


    return 0;
}

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Таким образом, если мы начнем сверху, в функции calculateRand() возникнет проблема, поскольку вы не объявляете переменные UPPER и LOWER или не передаете их в качестве параметров в функцию.Функция свопа в порядке.В функции BubbleSort() вам нужно уменьшить значение переменной up после цикла for.

while(up>1)
{
    for(i=1; i<up-1; i++)
    {
        if(S[i]>S[i+1])
        {
            swap(&S[i], &S[i+1]);
            j++;
        }
    }
    up--;
}

Также с этого момента вы должны начать итерацию с 0 вместо 1, так как массивы начинаются с индекса 0. Таким образом, for(i=0; i<up-1; i++) - правильный путь.

Наконец, в *Функция 1012 *, когда вы объявляете переменную массива S, вы не должны передавать sizeof(n), поскольку n является целым числом, а размер целого числа равен 4. Вместо этого вы хотите использовать n как есть int S[n];

Для заполнения цикла массив должен доходить до n, а не n-1, если вы хотите заполнить все элементы массива.Однако, если вы измените это, вам нужно будет сделать аналогичное изменение в функции BubbleSort().

И, наконец, в вызове функции BubbleSort() вы передаете последний элемент массива, который является целым числом, тогда какФункция ожидает, что вы передадите массив.Это должно выглядеть так BubbleSort(S, n);.

1 голос
/ 21 марта 2019
  1. sizeof (n) не имеет ничего общего со значением переменной n.Это размер переменной n, т. Е. В основном 4 байта для современных архитектур.
  2. Современные варианты C допускают массивы переменного размера, поэтому

    int S[n]; было бы допустимо.В противном случае

    int *S = (int *)malloc(n*sizeof(int));

    поможет.

  3. Когда вы вызываете BubbleSort, ваш аргумент должен быть S, а не S [sizeof (n)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...