En este post de programación en C, también conocido como ANSI C vamos a resolver un ejercicio propuesto que trabaja con matrices, calificaciones, alumnos, materias y promedios. Es un ejercicio que voy a resolver, el mismo dice así:
Escriba un programa que tenga implementadas las siguientes funciones:
- Que reciba una matriz de nombre calificaciones y la llene de manera aleatoria con calificaciones de n alumnos y m materias. En la última columna de la matriz se calculará el promedio de cada alumno respectivamente.
- Reciba la matriz anterior y una matriz con los nombres de los alumnos. La función imprimirá los datos de nombres y calificaciones de cada alumno, organizados como una tabla. Así mismo, calculará e imprimirá el menor y mayor promedio correspondiente al alumno o los alumnos respectivamente.
Veamos entonces el código
Explicación del algoritmo
Vamos a dividir los problemas. Primero veamos el de llenar la matriz de manera aleatoria, para ello vamos a hacer un ciclo for que va a recorrer toda la matriz y va a ir colocando un valor aleatorio en cada posición.
Después vamos a definir la segunda función que recibe la matriz para imprimirla, usando las alineaciones de printf para dibujar la tabla y los algoritmos para obtener el menor y mayor.
He colocado los enlaces anteriores para que profundices en caso de que no entiendas algo explicado aquí.
Definiendo matriz y constantes
Veamos la definición de constantes usando #define
, veremos por ejemplo la cantidad de materias, alumnos, longitudes, etcétera.
Recuerda que en este caso puedes cambiar los valores a tu gusto. Fíjate en que estamos definiendo también la calificación máxima y mínima para el caso de los números aleatorios. Por cierto, la función que vamos a usar es la siguiente:
Llenar matriz de manera aleatoria
Ahora veamos la función que rellena la matriz con calificaciones aleatorias y coloca el promedio de las mismas en la última columna:
El promedio es calculado en la línea 14. Además, la calificación es asignada en la línea 11.
Antes de imprimir tabla: imprimir línea
Antes de pasar al segundo requerimiento, veamos una función que nos va a ayudar a imprimir una línea que va a separar la tabla. Te repito que si quieres aprender más sobre cómo alinear o rellenar al usar printf
veas el enlace que dejé anteriormente.
Básicamente esa función del lenguaje C hará que se imprima una línea como la siguiente:
+----------+--------+--------+--------+--------+
Imprimir tabla de calificaciones con promedios
Ahora sí pasemos al segundo requisito. En este caso simplemente se trata de imprimir los valores y acomodarlos de una manera limpia. También debemos calcular el menor promedio y el mayor promedio, así como el nombre del alumno al que le pertenece cada uno:
Solo por si no lo sabes, usamos memcpy para asignar una cadena, ya que en C no podemos hacer algo como:
cadenaDeclaradaAnteriormente = "nueva cadena";
Poniendo todo junto
Recuerda que debes invocar a srand
pasándole un valor distinto en la ejecución del programa para que los valores aleatorios sean distintos. Como sea, la función main junto con las demás funciones queda así:
Yo lo he ejecutado y funciona perfectamente:

Por otro lado, puedes leer más sobre C en mi blog.