primero no es necesario utilizar el if en
if(strlen(frase) >25)
{
frase[25]='\0';
}
con solo poner
frase[25] ='\0'; es mas k suficiente
en cuanto al for lo mejor es hacer lo de la siguiente forma(además como dicen en una de las respuestas el fraseNueva tambien deberia ser una cadena de caracteres).
int limite = strlen(frase);
for(int cont = 0; cont < limite; cont++)
{
fraseNueva[cont] = (cont%2 == 0)? upper(frase[cont]):lower(frase[cont]);
}
condicion?si condición es verdadera:si condición es falsa; es un operador condicional ternario, el unico que existe en C/C++. en cualquier libro de C/C++ podras encontrar mas información.
En cuanto a por que utilice una variable para almacernar la longitud de la cadena. es por que asi se evita llamar a la funcion en cada ciclo. es mera optimizacion