Si ejecutas tu código, verás que no funciona.
Al margen de unas pequeñas correciones necesarias en la sintaxis, cuando el programa inicia solo conseguimos un bucle infinito.
El for ni siquiera funciona, porque usas la variable n como límite, la cuál no tiene ningún valor inicial, por lo que toma valor 0 así que el for no llega a activarse.
Pero es que de todos modos no necesitas ningún bucle for.
Solo necesitas un bucle do while, que es el que se te repite infinitamente por la condición que has puesto:
while (opcion[0])
¿Qué significa esa condición?
Las condiciones de los bucles han de ser expresiones que den como resultado true o false.
opcion[0] es simplemente el primer char que contiene el array llamado opcion,
Eso no te sirve como condición del while. Y no necesitas ningún array de char para nada.
Fíjate en la condición que puse yo en mi bucle while:
while (calificacion != 0);
"Mientras calificación sea distinto de 0".
¿Por qué esa condición?
Porque eso es lo que pide el enunciado:
programa que lea calificaciones del 5 al 10, hasta que se le capture un 0
Es decir, leemos calificaciones (en una variable llamada calificación) y MIENTRAS lo leído sea distinto de 0, seguiremos pidiendo calificaciones.
Tampoco necesitas ninguna función para calcular el promedio.
Quizás me equivoco, pero parece que hayas encontrado el código de esa función por algún sitio y lo has copiado con la esperanza de que te sirva.
No uses nunca código que no entiendas. Porque viendo el código de esa función es evidente que no es aplicable para este ejercicio.
Mira, añado al código que puse las líneas necesarias para calcular el promedio.
¡¡Solo he necesitado añadir 3 líneas!! (Las resalto en color azul)
#include <iostream>
using namespace std;
int main()
{
int calificacion = 0; //Para leer calificaciones por teclado
int contador = 0; //Para contar las calificaciones introducidas
int suma = 0; //Aquí sumamos calificaciones para luego calcular promedio.
do {
cout << "\nIntroduzca calificación: ";
cin >> calificacion;
if (calificacion != 0) {
if (calificacion >= 5 && calificacion <= 10) {
//Calificación es válida
contador++; //Contamos la calificación introducida
suma = suma + calificacion; //Sumamos la calificación
}
else
cout << "Calificación no es válida, solo valores entre 5 y 10\n";
}
else //Ha introducido 0, fin del bucle
cout << "\nFin de lectura de calificaciones\n";
} while (calificacion != 0);
//Resultados
cout << "\nCalificaciones introducidas: " << contador;
cout << "\nNota promedio: " << (suma/(float)contador);
cout << "\n\t\tFIN DE PROGRAMA";
}
Puedes verlo y ejecutarlo desde este enlace:
https://www.online-ide.com/9nyPO5lxRGFíjate que no ha sido necesario usar ningún array (por ahora), ni ninguna función.
Analiza el código que he compartido. Asegúrate de que entiendes cada línea y que puedes seguir el flujo que sigue el programa.
Te dejo un diagrama de flujo (no se me dan muy bien) para que se entienda mejor la lógica del programa.
Cuando tengas todo claro, podemos pasar a ver como informar en la salida de resultados cuál ha sido la calificación MAYOR introducida.