Como te dijo gbianchi en los comentarios, una manera sencilla de determinar el mayor elemento, es que vayas ingresando cada nota y compares si es mayor o igual que la nota ingresada previamente.
Para tal fin haremos uso de una variable auxiliar, a la cual nombraremos aux
. Esta variable nos servirá para ir almacenando de manera temporal cada nota que ingresemos mientras recorremos el bucle for
. Por otro lado, inicializaremos la variable may
a cero: may = 0
. De esta forma tenemos el siguiente pequeño algoritmo:
aux = cal;
if (aux >= may)
{
may = aux;
}
Nota que al ser el valor inicial de may
cero, entonces garantizamos que se pueda acceder al cuerpo del if
en la primera iteración de modo que podamos asignar el valor de aux
, que es el primer valor de cal
, a may
. Luego, ya se irá comparando sucesivamente cada valor nuevo de aux
con el valor previo de may
para encontrar finalmente la mayor nota. Todo esto se hace dentro del bucle for
.
A parte de eso, hay pequeños errores como no inicializar la variable suma
al momento de declarar. Siempre es bueno inicializar las variables que van a trabajar como contadores o acumuladores. En este caso, es conveniente asignar inicialmente el valor de 0
a suma
. Otro error es que la división suma / alumnos
siempre te va a devolver un valor entero. Si quieres que sea de tipo float
debes hacer que al menos uno de los operandos sea de dicho tipo. Esto se consigue con un simple casteo: float(suma)
.
Luego está el hecho de que no especificas el espacio de nombres de los objetos cout
y cin
. Esto se resuelve haciendo uso de la instrucción using namespace std;
, si bien esta no es considerada una buena práctica, creo que un pequeño ejercicio como este no tiene nada de malo. Alternativamente puedes escribir std::cout
y std::cin
cada vez que uses dichos objetos.
Finalmente, aunque aceptado por diferentes compiladores, es mejor que declares la función main
de la forma int main()
y al final utilices la instrucción return 0;
para garantizar que tu programa ha funcionado correctamente. Más sobre esto en este enlace.
Después de todas estas correciones tu codigo debería quedar algo así:
#include <iostream>
using namespace std;
char nom[20];
float prom, cal, may = 0, aux;
int alumnos, x, suma = 0;
int main()
{
cout << "Cantidad de alumnos: ";
cin >> alumnos;
for(x = 0; x < alumnos; x++)
{
cout << "Nombre: ";
cin >> nom;
cout << "Calificacion: ";
cin >> cal;
suma = suma + cal;
aux = cal;
if (aux >= may)
{
may = aux;
}
}
prom = (float)suma / alumnos;
cout <<"El promedio es: " << prom << "\n";
cout << "La mayor calificacion es: " << may;
return 0;
}
Hay otro pequeños detalles que se pueden mejorar, como hacer uso de cin.getline()
en lugar de cin
, pero creo que eso daría para otra pregunta. Como recomendación te diría que experimentes ingresando un nombre con sus apellidos respectivos y veas que sucede con tu programa.