чтобы оптимизировать процессы вычислений компилятор и процессор старается не вычислять числа с плавающией точкой если только не заданно явно чисел с плавающей точкой c = (double) a / b;
Строго говоря - выводит число double. Но вот a и b - числа целые. Результат операции над целыми числами - целое число. 400/3 = 133 в данном случае. А вот уже ПОСЛЕ деления, данное число преобразуется к double и приравнивается к c. Для исправления ситуации следует или объявить a или b как double или привести их непосредственно при делении: c = double(a) / b;