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

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

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

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

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

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

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

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

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

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