Прочитайте улучшенную версию этого урока «Одномерные массивы».

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 9 задач на программирование с автоматической проверкой решения
Добрый день. Сегодня поговорим о массивах. Не будем тянуть быка за хвост, а сразу же возьмем его за рога. Вот представьте, вы хотите написать программу, которая будет вычислять среднее арифметическое ваших (или вашего чада) оценок за четверть/семестр.  И при этом вы хотите не только посчитать среднее, а еще и по какому предмету, у вас максимальный средний балл, сколько пятерок получено за все предметы вместе взятые, и сколько неудов поставлено за весь период и много еще чего. Ясное дело все эти оценки надо где-то хранить. Можно конечно завести пару сотен переменных, придумать им всем разные названия, да еще и так, чтобы отличать в каких именно хранятся оценки по математике, а в которых по русскому. А как средний балл потом как считать? Складывать между собой 200 разных переменных и  результат сложения делить на 200? Ну общая идея конечно такова, но в такой реализации её может исполнить только истинный мазохист. Но есть и хорошая новость для нас с вами. Для хранения больших объемов однотипной информации можно использовать массивы.

Как себе представить массив? Да легко. Можно считать, что массив это такая таблица, точнее один столбик (или одна строчка) некоторой таблицы. Возвращаясь к нашей задаче с оценками можно, это выглядело бы так.

Рис.1 Пример целочисленного массива оценок.

Кстати, запомните, в массиве могут храниться данные только одного типа. Т.е. нельзя в одном массиве хранить данные типа int и типа float. В примере выше, все данные в массиве целые числа. Это и понятно, так как оценок 3.7, 4.2, 2.73 не предусмотрено.

Теперь разберемся с тем, как объявить массив, как с ним работать и чем он может нам помочь.

Для начала научимся объявлять массив. Ничего нового тут нет, Америку сейчас я не открою.
Итак, внимание на экран.

Рис 2. Объявление массива

Как видите, объявление массива почти не отличается об объявления переменной. Точно так же сначала записывают типа данных, которые будут храниться в массиве. Далее следует имя будущего массива.  А теперь, как говорится, десерт, а точнее именно то, что отличает массив от переменной. После имени массива в квадратных скобках пишут размерность массива. Размерность массива это количество данных, которые предполагается хранить в массиве. В нашем случае это 8. То есть мы предполагаем хранить в нашем массиве 8 элементов.

Пришло время рассказать еще об одной особенности массива. Каждый элемент массива имеет свой номер. И причем нумерация элементов начинается с нуля. Поэтому многие программисты, вероятно чувствуя свою элитарность начинают счет с нуля. Ну вы понимаете… =)))

Рис 3. Массив оценок

Кстати, это является не только поводом для шуток, но и для трудностей. Одной из самых распространенных ошибок, при работе с массивами является выход за пределы массива. Это когда у нас есть массив из 8 элементов, а мы пытаемся обратиться к элементу с номером 53. Как видите, размерность у нас 8, а последний номер элемента 7. Вроде бы ничего сложно, помни, что у тебя на один номер меньше, чем объявлял и всё. Но нет ошибались, ошибаются и будут ошибаться.

Теперь посмотрим как занести данные в массив, и как их оттуда извлечь.
Например, мы хотим сохранить данные в первый элемент массива ( помним, что это первый элемент это, элемент с цифрой 0).

Листинг 11.1
ochenka [0] = 4; // занести в нулевой элемент  значение 4
printf(«%d «, ochenka[0]); // вывести значение хранящееся в                                  // нулевом элементе

В общем и целом работа с отдельным элементом массива ничем не отличается от работы с обычной переменной. Элемент массива можно использовать везде, где вы использовали переменные. Единственно что нужно следить за типом данных, но это нужно делать и при работе с обычными переменными.

А теперь рассмотрим одну из задач, которые встречаются в ЕГЭ. Как будет выглядеть массив после выполнения следующей программы. Только не надо её переписывать в среду разработки, прокрутите программу ручками. Это называется компиляция в уме. Нарисуйте массив, и последовательно выполняйте операции, шаг за шагом.

Листинг 11.2

#include <stdio.h>

int main(){
      int A[10], k=0;

       for (int i=0; i<=9; i++)
             A[i]=9-i;
       for (int i=0; i<=4; i++){
             k = A[i];
             A[i] = A[9-i];
             A[9-i] = k;
       } 
      for (int i=0; i<=9; i++)
            printf(«%d «, A[i]);
return(0); 
}

Правильный ответ написан ниже, белым цветом.Выделите строку и сразу его увидите. Настоятельно вас прошу, проделать это упражнение самостоятельно, без помощи компьютера.
0 1 2 3 4 5 6 7 8 9

Вернемся на секундочку к нашему примеру, который мы описали в начале урока. Давайте таки найдем среднее арифметическое из оценок и посчитаем количество двоек например.

Листинг 11.3

#include <stdio.h>

int main(){
      int ochenka[8];
      for (int i=0; i<=7; i++){
            printf («Vvedite %d ochenku:», i+1);
            scanf(«%d», &ochenka[i]);
      }
int k=0; //переменная счетчик для двоек 
float s_a=0; //переменная для хранения среднего арифметического 
      for (int i=0; i<=7; i++){
            if (ochenka[i] == 2)
                  k++;
            s_a+=ochenka[i];
      }
printf(«Kolichestvo dvoek = %d srednii ball = %3.2f\n», k, s_a/8);
return(0);
}

Результат выполнения данной программы представлен на следующем рисунке.

Рис 4. Программа вычисляющая средний балл и количество двоек.

Как видите, работа с массивами подразумевает неплохое владение операторами цикла. Редко используют лишь один какой-то элемент массива. Чаще изменения затрагивают все элементы массива, поэтому используются циклические конструкции. Работать же с конкретным элементом массива, приходится уже внутри цикла.

Хотел еще написать про основные алгоритмы, используемые при работе с массивами написать, но решил оставить это на следующий урок.

Резюме урока:

  •  научились основным действия  при работе с массивами: объявление массива из нескольких элементов, присвоение конкретному элементу некоторого значение.
  •  попрактиковались выполнять программу в уме (на листочке)

 Задание для практической работы:
  • Выполнить задание, которое описано в уроке. Разобраться в нем, особенно если у вас не сразу получился правильный ответ.
  • Задан целочисленный массив из N элементов. N<=30. Пользователь задает некоторое целое число. Необходимо посчитать, количество элементов массива  меньших по модулю этого числа
  • Написать программу, которой на вход подается три массива оценок: сначала по русскому языку, потом по математике и наконец по физике. Причем, количество их заранее не известно, но не превышает 20 штук, по любому из предметов.  По разным предметам может быть введено различное количество оценок. Ввод оценок производится пользователем с клавиатуры, причем сначала он вводит одну из цифр 1, 2, 3 которая определяет,  по какому предмету эта оценка. (1 -русский язык, 2 — математика и 3 — физика)

Ввод данных заканчивает, когда пользователь введет цифру 0.
Например:
1 5
1 4
2 3
1 5
3 4
0
Такой набор исходных данных означает, что ученик получил
по русскому языку 5,4,5
по математике 3
по физике 4
Программа, должна вывести на экран все оценки ученика по каждому из предметов в формате:
rus: 5 4 5
math: 3
fiz: 4
Посчитать средний балл по каждому из предметов. Посчитать количество двоек по каждому из предметов, если их нет, то вывести 0. Посчитать средний балл по всем оценкам. Посчитать количество пятерок, которые получены по всем предметам.

Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом  Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них.   

От KaDeaT