DMarlon Studio

Lección 10 · 10 de 20

Arrays · C

Guarde muchos valores del mismo tipo en un array de C: las temperaturas de una semana, su media y su máximo, con índices que empiezan en 0.

C · Arrays en DMarlon Studio: el código del ejemplo y su salida en la terminal

Un array guarda varios valores del mismo tipo, uno detrás de otro en la memoria. double temps[7] = {...} reserva sitio para siete double y les da sus valores entre llaves. days es otro array, de siete char.

Cada elemento se alcanza con su índice entre corchetes, y los índices empiezan en 0: temps[0] es el lunes y temps[6], el domingo. El número de elementos se calcula con sizeof(temps) / sizeof(temps[0]): el tamaño total entre el de uno. temps[2] = 20.0 cambia el miércoles.

Un for de 0 a count - 1 recorre el array: escribe cada día, suma las temperaturas en sum y guarda la mayor en max, junto con su posición en hottest. Con eso se calcula la media y se sabe cuál fue el día más caluroso.

Si se dan menos valores que el tamaño, el resto empieza en 0: en votes[4] = {3, 5} las opciones 3 y 4 valen 0. Cuidado: C no comprueba los límites, y temps[7] leería memoria que no es del array sin avisar.

Código · main.c

#include <stdio.h>int main(void) {    // An array keeps several values of the same type, one after another.    double temps[7] = {18.5, 21.0, 19.5, 24.0, 26.5, 22.0, 17.5};    char days[7] = {'M', 'T', 'W', 'T', 'F', 'S', 'S'};    int count = sizeof(temps) / sizeof(temps[0]);  // 7 elements    // Positions start at 0: temps[0] is the first, temps[6] the last.    printf("First: %.1f, last: %.1f\n", temps[0], temps[count - 1]);    temps[2] = 20.0;  // change one element    double sum = 0, max = temps[0];    int hottest = 0;    for (int i = 0; i < count; i++) {        printf("%c %5.1f\n", days[i], temps[i]);        sum += temps[i];        if (temps[i] > max) {            max = temps[i];            hottest = i;        }    }    printf("Average: %.2f\n", sum / count);    printf("Hottest: day %d (%c), %.1f degrees\n", hottest + 1, days[hottest], max);    // Elements without a value start at 0.    int votes[4] = {3, 5};    votes[3] += 2;    for (int i = 0; i < 4; i++) printf("Option %d: %d votes\n", i + 1, votes[i]);    return 0;}

Salida · cc main.c -o main && ./main

First: 18.5, last: 17.5
M  18.5
T  21.0
W  20.0
T  24.0
F  26.5
S  22.0
S  17.5
Average: 21.36
Hottest: day 5 (F), 26.5 degrees
Option 1: 3 votes
Option 2: 5 votes
Option 3: 0 votes
Option 4: 2 votes

Para recordar

  • Un array guarda varios valores del mismo tipo.
  • Los índices van de 0 a tamaño - 1.
  • sizeof(a) / sizeof(a[0]) da el número de elementos.
  • Los elementos sin valor inicial valen 0.
  • C no comprueba si el índice se sale del array.

Ejercicio

Añada la temperatura mínima y su día, y cuente cuántos días pasaron de 20 grados.