Почему программа падает при вводе отрицательного числа?
Ваш код не может нормально работать хотя бы потому что вы создаете массив nums[N]; с N=0;. Когда вы в него пишете, каждый раз рискуете поймать ошибку доступа к памяти.
При нахождении минимального значения вы явно опечатались nums[i] = min;, должно быть наоборот))
int min = nums[0];. min должен быть тоже float, иначе вы получите немного не то что ожидаете.
В языке С++ не разрешается использовать неконстантые выражения в качестве размера при объявлении массива. Поэтому ни о каком "все нормально пока я не введу отрицательные числа" речи быть не может. Ваш код не является кодом на С++ вообще. Нужно все переделывать с самого начала.

 В качестве массива используйте std::vector<double>. И, разумеется, не float, а double. Почему у вас в коде вдруг используется тип float?