Buenas, el problema está en:
Cuando usas el operador
& estás especificando la dirección en la memoria donde está almacenado la variable
promedio más no los datos que están en dicha variable. La solución es sencilla, solo quitarle el operador
& y listo.
Tengo dos recomendaciones para ti, creo que es mejor tratarlas ahora.
La primera recomendación, usar la librería
conio.h es una mala práctica de programación. Primero, porque no es portable a otro sistema operativo, y segundo al usuario final, lo que interesa es que el programa funcione correctamente, posicionar el texto ya está de más. Si de igual forma quieres hacerlo, puedes usar otras librerías como
ncurses que si es portable haciendo solo unos pocos cambios.
Y como segunda recomendación, la función
gets desde hace bastante tiempo está resaltada como peligrosas en la mayoría de los compiladores, ¿por qué? fácil, no tiene un limite de caracteres a introducir en la variable. Supongamos que quieres introducir en la variable
matricula un texto mayor a los 20 caracteres que especificaste, esto hace que el programa tenga un error inesperado y se cierre, porque escribe en una parte de la memoria donde no debería escribir, y esto es un fallo grande en la seguridad de tu programa, donde se pudieran hacer diferentes tipos de ataques comprometiendo al usuario final.
Como solución, puedes usar la función fgets, para introducir un string en una variable. Ejemplo:
Saludos.