Member 14996938 Ответов: 2

Я пытаюсь решить программу buuble sort на языке Си, но есть ошибка . Нужна помощь.


//использование простых массивов в качестве параметров
//сортировка пузырьковая сортировка
//отображение каждого цикла
//легко, но неэффективно

#включить<stdio.h>
void swap(int *a ,int *b)
{
int temp =*a;
*a=*b;
*b=температура;
}
//функция для печати массива
void print_array(int how_many,int data[],char *str)
{
int i;
printf("%s",str);
for(i =0;i<how_many;i++)
{
="" printf("%d\t",data[i]);
="" }
}
="" функции="" в="" impplement="" пузырь="" рода
пустота="" пузырь(инт="" данные[],интервал="" how_many)
{
="" интервал="" Я,J;
="" продолжать;
=""
="" for="" (i="0;i<how_many;i++)
"print_array("\ninside=" "bubble\n",how_many,data);
="" printf("i="%d,input" any=" " continue:",i);
="" scanf("%d",&go_on);
="" for(j="how_many-1;j">i;j--)
{
if (data[j-1]>data[j])//сортировка
{
своп(&ампер;сведения[Дж-1],&ампер;сведения[Дж]);
}
}
}
}

тап_п(недействительными)
{
const int SIZE = 5;
инт классов[размер]={78,67,92,83,88};
print_array(размер,оценки,"мои оценки\n");
printf("\n\n");
пузырь(гарды,размер);

print_array(размеров,сортов,"мой отсортированный классов\п");
printf("\n\n");
возвращает 0;
}

Что я уже пробовал:

да, я пытался ее решить .Я также новичок в языке Си

2 Ответов

Рейтинг:
2

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
0

Rick York

Попробуй :

bubble(grades,SIZE);