No entiendo que es lo que tu no entiendes.
Bucle dice:
while (! feof (alumnos) && ! existe)
Mientras No se alcance el final del archivo alumnos.txt y a su vez No sea == a No
Ahí tenemos 2 condiciones. Y ambas deben cumplirse para que el bucle se detenga.
Estas condiciones en el bucle while dicen:
-Mientras no se lea todo el archivo hasta el final.
&&
-Mientras la variable exista no tenga el valor contrario a false.
Se ejecutará el contenido del bucle.
Esta comparación es posible porque la propia funcion feof devuelve falso o verdadero.
Lo que dice ese condicional al final es que, se ejecute el bucle hasta que feof devuelva true y existe valga true. Es decir, que ambos devuelvan true.
El programa lo que hace es que mientras no se llegue al final del archivo, y no le cambies el valor a existe, se siga buscando en el archivo alumnos.txt