Estoy tratando de agregar los elementos en una matriz. Es solo un programa simple para calcular el promedio de las calificaciones de los estudiantes. Sé que esta es probablemente una forma rudimentaria de codificar esto, estoy buscando hacerlo de manera más eficiente. Sin embargo, mi código no devuelve el promedio. Agradecería mucho cualquier ayuda. Intenté esto con un bucle for pero obtuve la misma respuesta incorrecta.
#include <stdio.h> int main() { int grades[6]; int average; int sum = 0; printf("Please enter your five test scores:\n"); scanf("%d", &grades[0]); scanf("%d", &grades[1]); scanf("%d", &grades[2]); scanf("%d", &grades[3]); scanf("%d", &grades[4]); scanf("%d", &grades[5]); sum = sum + grades[6]; average = sum / 5; printf("The average of the students test scores is %d:\n", average); return 0; }Debe sumar todas las calificaciones y luego dividirlas por su cantidad (en su caso, es 6, no 5, porque la matriz de grades tiene 6 elementos). Aquí hay una muestra de código:
#include <stdio.h> int main() { int grades[6]; int average; int sum = 0; printf("Please enter your six test scores:\n"); scanf("%d", &grades[0]); scanf("%d", &grades[1]); scanf("%d", &grades[2]); scanf("%d", &grades[3]); scanf("%d", &grades[4]); scanf("%d", &grades[5]); for (int i = 0; i < 6; i++) sum = sum + grades[i]; average = sum / 6; printf("The average of the students test scores is %d:\n", average); return 0; }Estoy tratando de agregar los elementos en una matriz.
Tal vez ya sea una pista incorrecta con respecto al título (y el código) donde se trata de promediar elementos en una matriz .
La forma en que construya la matriz depende de usted; Elijo la forma más sencilla. Una decisión importante es: ¿el tamaño de la matriz y el número de valores son iguales? Eso es lo que hace n_grades . Los cuatro ceros en la inicialización del arreglo ilustran la diferencia.
Lo más probable es que un promedio sea un número de punto flotante.
Un problema desagradable con los promedios es el desbordamiento al acecho. Muy poco probable en esta configuración, pero hay un algoritmo más robusto (y elegante). El reparto (double) es la parte poco elegante, pero es necesario porque la división es entre dos números enteros . Aún así, este es el núcleo compacto:
for (i = 0; i < n_grades; i++) aver += (double) grades[i] / n_grades;correspondiente a la fórmula matemática:
i<n A = Sum G_i/n i=0("Suma" es el gran Sigma)
#include <stdio.h> int main() { int grades[] = {10,10,9,10,11,11,0,0,0,0}; int n_grades = sizeof grades / sizeof*grades; // use all elements //n_grades = 6; // use only first n elements double aver = 0; for (int i = 0; i < n_grades; i++) aver += (double) grades[i] / n_grades; printf("The average of the students test scores is %f (n= %d):\n", aver, n_grades); return 0; }Ahora imprime:
The average of the students test scores is 6.100000 (n= 10):o, sin comentar, es decir, limitado a 6 grados:
The average of the students test scores is 10.166667 (n= 6):Está suponiendo que grades[6] contiene la suma de todos los valores en la matriz de grades , lo cual es incorrecto, por supuesto.
Necesitas algo como:
for (int i = 0; i < 6; i++) sum = sum + grades[i];