1. O & é sempre necessário, pois mostra o endereço da variável, onde o C++ deve armazenar o valor.
Obs:Futuramente você verá vetores e que não precisa fazer isso para o primeiro endereço, mas por enquanto não ligue para isso.
2. você tá fazendo a operação apenas com inteiros, n1 e n2 são inteiros, o resultado logo também é inteiro, então sem decimais. Para resolver esse problema basta adicionar um modelador(casts):
Código: media = (float) (n1 + n2) / 2 ---- Quando somar n1 com n2 transforma em float e divide por 2, aí acho que dará p/ ver o decimal