Шрифт:
РИС. 12.3. Двумерный массив.
Используем этот двумерный массив в метеорологической программе. Цель нашей программы - найти общее количество осадков для каждого года, среднегодовое количество осадков и среднее количество осадков за каждый месяц. Для получения общего количества осадков за год следует сложить все данные, находящиеся в нужной строке. Чтобы найти среднее количество осадков за данный месяц, мы сначала складываем все данные в указанном столбце. Двумерный массив позволяет легко представить и выполнить эти действия. Рис. 12.4 содержит программу.
/* найти общее количество осадков для каждого года, среднего */
/* довое, среднемесячное количество осадков, за несколько лет */
#define TWLV 12 /* число месяцев в году */
#define YRS 5 /* число лет */
main
{
static float rain [YRS][TWLV] = {
{10.2, 8.1, 6.8, 4.2, 2.1, 1.8, 0.2, 0.3, 1.1, 2.3, 6.1, 7.4},
{9.2, 9.8, 4.4, 3.3, 2.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 5.2},
{6.6, 5.5, 3.8, 2.8, 1.6, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 4.2},
{4.3, 4.3, 4.3, 3.0, 2.0, 1.0, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6},
{8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.2}
};
/* инициализация данных по количеству осадков за 1970-1974 */
int year, month;
float subtot, total;
printf("ГОД КОЛИЧЕСТВО ОСАДКОВ (дюймы)\n\n");
for(year = 0, total = 0; year < YRS; year++)
{ /* для каждого года, суммируем количество осадков для каждого месяца */
for(month = 0, subtot = 0; month < TWLV; month++)
subtot + = rain [year][month];
printf("%5d %15.lf\n", 1970 + year, subtot);
total + = subtot; /* общее для всех лет */
}
printf(" \n среднегодовое количество осадков
составляет %.lf дюймов. \n \n ", total/YRS );
printf(" Янв. Фев. Map. Апр.Май Июн.Июл. Авг.Сент.");
printf(" Окт. Нояб. Дек.\n" );
for(month = 0; month < TWLV; month++)
{ /* для каждого месяца, суммируем
количество осадков за все годы */
for(year = 0, subtot = 0; year < YRS; year++)
subtot += rain[year][month];
printf(" %4.lf ", subtot/YRS); }
printf(" \n");
}
РИС. 12.4. Метеорологическая программа.
ГОД КОЛИЧЕСТВО ОСАДКОВ (дюймы)
1970 50.6
1971 41.9
1972 28.6
1973 32.3
1974 37.8
Среднегодовое количество осадков составляет 38.2 дюйма.
ЕЖЕМЕСЯЧНОЕ КОЛИЧЕСТВО:
Янв. Фев. Mар. Апр. Mай. Июн. Июл. Авг. Ceнт. OКТ. Нояб. Дек.
7.8 7.2 4.1 3.0 2.1 0.8 1.2 0.3 0.5 1.7 3.6 6.l
В этой программе следует отметить два основных момента: инициализацию и вычисления. Инициализация сложнее, поэтому мы сначала рассмотрим вычисления.
Чтобы найти общее количество осадков за год, мы не изменяем year, а заставляем переменную month пройти все свои значения. Так выполняется внутренний цикл for, находящийся в первой части программы. Затем мы повторяем процесс для следующего значения year. Это внешний цикл первой части программы. Структура вложенного цикла, подобная описанной, подходит для работы с двумерным массивом. Один цикл управляет одним индексом, а второй цикл - другим.
Вторая часть программы имеет такую же структуру, но теперь мы изменяем year во внутреннем цикле, a month во внешнем. Помните, что при однократном прохождении внешнего цикла внутренний цикл выполняется полностью. Таким образом, программа проходит в цикле через все годы, прежде чем изменится месяц, и дает нам общее количество осадков за пять лет для первого месяца, затем общее количество за пять лет для второго месяца и т. д.