Советую повнимательнее взглянуть сюда:
return (sym/s); - опять то же самое)) Результат-то будет типа double) Но средним значением чисел {1, 1, 2} будет 1.0

Проблема не в типе. Тип как раз верный. А вот результат вычислений косячный. У Вас будет целочисленное деление, а затем приведение к типу double. Тип правильный, а результат косячный.

Почему ругается, я тоже сказал.
max=0 и min=0.
Если у Вас нет отрицательных значений, то как раз и будут проблемы. У вас не встретится ни одного числа, которое бы удовлетворяло условию:
Код

if(a[i]<min)
{
    imin=i;
    min=a[i];
}

В итоге imin останется непроинициализированным. А Вы к нему таки обратитесь в конце.

Моё конструктивное предложение:
int imin=0, imax=0, min=a[0], max=a[0];

Я обычно делаю так.