создание, объявление и инициализация и вывод на примерах
В этом уроке мы научимся работать с массивами. Мы научимся объявлять, инициализировать и получать доступ к элементам массива в программировании на C++ с помощью примеров. В С++ массив – это переменная, которая может хранить несколько значений одного типа.
Например: Предположим, в классе 27 учеников, и нам нужно сохранить оценки всех их. Вместо того, чтобы создавать 27 отдельных переменных, мы можем просто создать массив:
double grade[27];
Здесь grade – это массив, который может содержать не более 27 элементов типа double.
В C++ размер и тип массивов не могут быть изменены после его объявления.
Объявление массива
dataType arrayName[arraySize];
Например:
int x[6];
Здесь:
- int – тип сохраняемого элемента;
- x – имя массива;
- 6 – размер массива.
Доступ к элементам в массиве
В C++ каждый элемент массива связан с числом. Число известно, как индекс массива. Мы можем получить доступ к элементам массива, используя эти индексы.
// syntax to access array elements array[index];
Рассмотрим массив x, который мы видели выше.
Несколько вещей, которые следует помнить:
- Индексы массива начинаются с 0. Это означает, что x [0] – это первый элемент, сохраненный с индексом 0.
- Если размер массива равен n, последний элемент сохраняется по индексу (n-1). В этом примере x [5] – последний элемент.
- Элементы массива имеют последовательные адреса. Например, предположим, что начальный адрес x [0] – 2120d. Тогда адрес следующего элемента x [1] будет 2124d, адрес x [2] будет 2128d и так далее. Здесь размер каждого элемента увеличивается на 4. Это потому, что размер int равен 4 байтам.
Инициализация
В С++ можно инициализировать массив во время объявления. Например:
// declare and initialize and array int x[6] = {19, 10, 8, 17, 9, 15};
Другой способ инициализации массива при объявлении:
// declare and initialize an array int x[] = {19, 10, 8, 17, 9, 15};
Здесь мы не упомянули размер массива. В таких случаях компилятор автоматически вычисляет размер.
Массив с пустыми членами
В C++, если массив имеет размер n, мы можем хранить до n элементов в массиве. Однако что произойдет, если мы сохраним менее n элементов.
Например:
// store only 3 elements in the array int x[6] = {19, 10, 8};
Здесь массив x имеет размер 6. Однако мы инициализировали его всего тремя элементами.
В таких случаях компилятор присваивает оставшимся местам случайные значения. Часто это случайное значение просто 0.
Как вставить и распечатать элементы массива?
int mark[5] = {19, 10, 8, 17, 9} // change 4th element to 9 mark[3] = 9; // take input from the user // store the value at third position cin >> mark[2]; // take input from the user // insert at ith position cin >> mark[i-1]; // print first element of the array cout << mark[0]; // print ith element of the array cout >> mark[i-1];
Пример 1: отображение элементов
#include <iostream> using namespace std; int main() { int numbers[5] = {7, 5, 6, 12, 35}; cout << "The numbers are: "; // Printing array elements // using range based for loop for (const int n : numbers) { cout << n << " "; } cout << "\nThe numbers are: "; // Printing array elements // using traditional for loop for (int i = 0; i < 5; ++i) { cout << numbers[i] << " "; } return 0; }
Выход:
The numbers are: 7 5 6 12 35 The numbers are: 7 5 6 12 35
Здесь мы использовали цикл for для итерации от i = 0 до i = 4. На каждой итерации мы выводили числа [i].
Мы снова использовали цикл for на основе диапазона для вывода элементов массива.
Примечание. В нашем цикле на основе диапазона мы использовали код const int n вместо int n в качестве объявления диапазона. Однако более предпочтительным является const int n, потому что:
- Использование int n просто копирует элементы массива в переменную n во время каждой итерации. Это неэффективно с точки зрения памяти. n, однако, использует адрес памяти элементов массива для доступа к их данным, не копируя их в новую переменную. Это эффективно с точки зрения памяти.
- Мы просто печатаем элементы массива, а не изменяем их. Поэтому мы используем const, чтобы случайно не изменить значения массива.
Пример 2: получение входных данных от пользователя и сохранение их в массиве
#include <iostream> using namespace std; int main() { int numbers[5]; cout << "Enter 5 numbers: " << endl; // store input from user to array for (int i = 0; i < 5; ++i) { cin >> numbers[i]; } cout << "The numbers are: "; // print array elements for (int n = 0; n < 5; ++n) { cout << numbers[n] << " "; } return 0; }
Выход:
Enter 5 numbers: 11 12 13 14 15 The numbers are: 11 12 13 14 15
И снова мы использовали цикл for для итерации от i = 0 до i = 4. На каждой итерации мы брали ввод от пользователя и сохраняли его в числах [i].
Затем мы использовали другой цикл for для печати всех элементов массива.
Пример 3: отображение суммы и среднего значений элементов, используемых для цикла
#include <iostream> using namespace std; int main() { // initialize an array without specifying size double numbers[] = {7, 5, 6, 12, 35, 27}; double sum = 0; double count = 0; double average; cout << "The numbers are: "; // print array elements // use of range-based for loop for (const double n : numbers) { cout << n << " "; // calculate the sum sum += n; // count the no. of array elements ++count; } // print the sum cout << "\nTheir Sum = " << sum << endl; // find the average average = sum / count; cout << "Their Average = " << average << endl; return 0; }
Выход:
The numbers are: 7 5 6 12 35 27 Their Sum = 92 Their Average = 15. 3333
В этой программе:
- Мы инициализировали
двойной массив с именем numbers, но не указали его размер. Мы также объявили три двойных переменных sum, count и average . Здесь sum = 0 и count = 0. - Затем мы использовали цикл for на основе диапазона для печати элементов массива. На каждой итерации цикла мы добавляем текущий элемент массива к sum.
- Мы также увеличиваем значение count на 1 на каждой итерации, чтобы мы могли получить размер массива к концу цикла for.
- После печати всех элементов мы печатаем сумму и среднее всех чисел. Среднее значение чисел определяется как среднее значение = сумма/количество.
Примечание: мы использовали ранжированный цикл for вместо обычного цикла for.
Обычный цикл for требует, чтобы мы указали количество итераций, которое задается размером массива. Но для цикла с ранжированием такие спецификации не требуются.
Если мы объявим массив размером 10, то массив будет содержать элементы с индекса 0 до 9.
Однако, если мы попытаемся получить доступ к элементу с индексом 10 или более 10, это приведет к неопределенному поведению.
НОУ ИНТУИТ | Лекция | Использование языка Free Pascal для обработки массивов
< Лекция 10 || Лекция 5: 123456
Ключевые слова: массив, множества, temperature, определение, структурированный тип, список, матрица, free, Pascal, тип данных, перечислимый тип, переменная, константы, операция присваивания, ПО, операции, значение, блок-схема, Произведение, единица, алгоритм, if, сортировка, место, индекс, распределение памяти, нижняя граница, верхняя граница, Размещение, память, программа, цикла, функция, длина, MAX, основание, остаток, деление, формальный параметр, приложение, поле, метка, таблица
5.1 Общие сведения о массивах
В предыдущих главах мы рассматривали задачи, в которых использовались скалярные переменные. Однако при обработке однотипных данных (целочисленных значений, строк, дат и т. п.) оказывается удобным использовать массивы. Например, можно создать массив для хранения значений температуры в течении года. Вместо создания множества (365) переменных для хранения каждой температуры, например temperature1, temperature2, temperature3,… temperature365 можно использовать один массив с именем temperature, где каждому значению будет соответствовать порядковый номер (см. табл. 5.1).
№ элемента | 1 | 2 | 3 | 4 | … | 364 | 365 |
temperature | -1. 5 | -3 | -6.7 | 1 | … | 2 | -3 |
Таким образом, можно дать следующее определение.
Массив — структурированный тип данных, состоящий из фиксированного числа элементов одного типа.
Массив, представленный в таблице 5.2, имеет 7 элементов, каждый элемент сохраняет число вещественного типа. Элементы в массиве пронумерованы от 1 до 7. Такого рода массив, представляющий собой просто список данных одного и того же типа, называют простым, или одномерным массивом. Для доступа к данным, хранящимся в определённом элементе массива, необходимо указать имя массива и порядковый номер этого элемента, называемый индексом.
Если возникает необходимость хранения данных в виде таблиц, в формате строк и столбцов, то необходимо использовать многомерные массивы.
Элементы массива | ||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
-1.5 | -3.913 | 13.672 | -1.56 | 45. 89 | 4.008 | -3.61 |
В таблице 5.3 приведён пример массива, состоящего из трёх строк и четырёх столбцов. Это двумерный массив (матрица). Строки в нём можно считать первым измерением, а столбцы вторым. Для доступа к данным, хранящимся в этом массиве, необходимо указать имя массива и два индекса: первый должен соответствовать номеру строки, а второй номеру столбца, в которых хранится необходимый элемент.
Номера столбцов | |||||
1 | 2 | 3 | 4 | ||
Номера строк | 1 | 6. 3 | 4.3 | -1.34 | 5.02 |
2 | 1.1 | 4.7 | 8.12 | 8.5 | |
3 | -2.4 | -6.2 | 11.23 | 8.18 |
После общего знакомства с понятием «массив», рассмотрим работу с массивами в языке Free Pascal.
5.2 Описание массивов
Для описания массива служат служебные слова array of. Описать массив можно двумя способами.
Первый — ввести новый тип данных, а потом описать переменные нового типа. В этом случае формат оператора type следующий:
type
имя_типа = array [ тип_индекса ] of тип_компонентов;
В качестве типа_индекса следует использовать перечислимый тип. Тип_компонентов — это любой ранее определённый тип данных, например:
type massiv=array [ 0.. 1 2 ] of real; //Тип данных massiv из 13 элементов, которые нумеруются от 0 //до 12. dabc=array [ - 3.. 6 ] of integer; //Тип данных dabc из 10 элементов, которые нумеруются от //-3 до 6. var x, y : massiv; z : dabc;
Можно не вводить новый тип, а просто описать переменную следующим образом:
var переменная : array [ тип_индекса ] of тип_переменных;
Например:
var z, x : array [ 1.. 2 5 ] of word; //Массивы z и x из 25 значений типа word, которые нумеруются //от 1 до 25. g : array [ - 3.. 7 ] of real; //Массив g из 11 значений типа real, которые нумеруются от -3 //до 7.
Для описания массива можно использовать предварительно определённые константы:
const n=10; m=12; var a : array [ 1.. n ] of real; b : array [ 0..m] of byte;
Константы должны быть определены до использования, так как массив не может быть переменной длины!
Двумерный массив (матрицу) можно описать, применив в качестве базового типа (типа компонентов) одномерный:
type massiv=array [ 1.. 2 0 0 ] of real; matrica=array [ 1.. 3 0 0 ] of massiv; var ab : matrica;
Такая же структура получается при использовании другой формы записи:
type matrica = array [ 1.. 3 0 0, 1.. 2 0 0 ] of real; var ab : matrica;
или
var ab : array [ 1. . 3 0 0, 1.. 2 0 0 ] of real;
При всех трёх определениях мы получали матрицу вещественных чисел, состоящую из 300 строк и 200 столбцов.
Аналогично можно ввести трёхмерный массив или массив большего числа измерений:
type abc=array [ 1.. 4, 0.. 6, _ 7.. 8, 3.. 1 1 ] of real; var b : abc;
Дальше >>
< Лекция 10 || Лекция 5: 123456
Программа для чтения и печати массива на языке C
Описание программы:
Напишите программу для чтения и печати массива на языке C. Программа должна принимать целые числа от пользователя и сохранять их как элементы массива, а затем печатать их на стандартном выводе (консоли)
Пример ввода и вывода:
Ввод:
Все, что я хочу, с любым значением атрибута здесь: .
Вывод:
Все, что я хочу, с любым значением атрибута здесь: .
Предварительные требования:
Поскольку мы собираемся использовать массивы в этой программе, рекомендуется знать основы массивов C. Пожалуйста, прочитайте следующие статьи, чтобы узнать больше о массивах в C
- Введение в массивы C — как объявить, получить доступ и изменить массивы
- Двумерные массивы в C с примерами программ
- с к функциям в C
Чтение и печать массива в C Программа Объяснение:
- Запустите программу, объявив
массив размером
Глобальная константа SIZE –
целый массив [РАЗМЕР];
- Мы создали глобальная константа SIZE и инициализируется с помощью 10. Итак, размер массива 10. Так же используем макрос вместо глобальной константы — константа int SIZE = 10;
- Чтение массива: Нам нужно получить ввод от пользователя и обновить элементы массива. Используйте цикл for для перебора массив и запрашивать у пользователя входные значения для каждого элемента массива ( множество). Затем прочитайте значения, используя scanf и сохранить их в соответствующем элемент массива.
- Печать массива: Используйте цикл for для вывода элементов массива на консоль. Цикл for начнется с и идет до SIZE
Программа для чтения и печати массива на языке C:
Напишем программу.
Все, что я хочу, с любым значением атрибута здесь: .
В приведенной выше программе нам не нужно использовать size в качестве дополнительного параметра функции. Поскольку у нас уже есть глобальная константа SIZE, мы можем использовать ее напрямую.
Выход программы:
Давайте скомпилируем программу, используя GCC (любой компилятор)
gcc read-print-arr.c
Приведенная выше команда создает исполняемый файл аут
Запустить программу.
Все, что я хочу, с любым значением атрибута здесь: .
Как видно из приведенной выше программы, программа считывает ввод пользователя и выводит его обратно на консоль.
Альтернативный способ: чтение и печать массива в C:
Вместо того, чтобы печатать массив поэлементно, давайте напечатаем его в одну строку.
Все, что я хочу, с любым значением атрибута здесь: .
Вывод программы:
Скомпилируйте и запустите программу
Все, что я хочу, с любым значением атрибута здесь: .
Чтение и печать массива с помощью функций языка программирования C:
Чтение и печать массива с помощью функции Объяснение программы:
- Создайте константу с именем ARRAY_SIZE с размером массива.
- В функции main() объявить целочисленный массив обр с ARRAY_SIZE элементов.
- Позвоните
функция read() из
функцию main() и передать
arr и его размер в качестве аргументов.
Функция read() предложит пользователю ввести значения для каждого элемента массива и обновит массив.
- Функция read() принимает целочисленный указатель обр и его размер как формальные аргументы – void read(int *arr, int size)
- Затем он запрашивает у пользователя входные значения для каждого элемента массива( обр. ).
- Значения считываются с помощью scanf() и сохраняется в соответствующем массиве( обр) элемент.
- Позвоните
функцию print() и передать
arr и его размер в качестве аргументов.
Функция print() напечатает элементы массива до
- . функция печати также принимает целочисленный указатель обр и размер как формальные аргументы – void print(int arr[], int size)
- Затем он использует цикл for для перебора каждого элемента arr, он печатает индекс элемента и соответствующее ему значение.
Чтение и печать массива с использованием функциональной программы:
Все, что я хочу, с любым значением атрибута здесь: .
📢В вышеуказанной программе Нам не нужно проходить size в качестве дополнительного параметра функции, так как у нас уже есть глобальная константа SIZE.
Вывод программы:
Скомпилируйте и запустите программу
Все, что я хочу, с любым значением атрибута здесь: .