Что не так с определением середины? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Я пытаюсь разбить список на два, ну вы все можете увидеть сами:
Листинг программы
  1. head1 = head;
  2. p = head1;
  3. i=1;
  4. while (i<(n/2)) //4/2 == 2; 3/2 == 1,5 = 2;
  5. {
  6. p = p->next;
  7. i++;
  8. }
  9. head2 = p->next;
  10. p->next = NULL;
Вот только выводит у меня в случае нечетного кол-ва элементов первый список на 1 короче второго, а надо бы наоборот. Что не так здесь записано? Даже на бумажке проверил, что я упустил? Вывод списков у меня такого вида:
Листинг программы
  1. p = head1;
  2. while (p!=NULL) //такое произойдет, когда уже выведется последний элемент, и указатель упрется в грань
  3. {
  4. printf("->%.2f \n",p->content);
  5. p = p->next;
  6. }
  7. printf("\n");
Структура:
Листинг программы
  1. typedef struct list
  2. {
  3. float content;
  4. struct list *next;
  5. } list;
Переменные:
Листинг программы
  1. int n;
  2. int i;
  3. short size_list = sizeof(list);
  4. list *head;
  5. list *head1;
  6. list *head2;

Решение задачи: «Что не так с определением середины?»

textual
Листинг программы
  1. int n=3/2;

Объяснение кода листинга программы

  1. В первой строке кода объявлена переменная n и ей присваивается значение 3/2.
  2. Значение переменной n равно 1.5.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут