Еще об инициализации массива




ОПиБД 10КС

Тема лекции. МАССИВЫ

Литература:

1. Прата, Стивен. П70 Язык программирования С++. Лекции и упражнения,6-е изд.:: Пер. с англ.- М.: ООО "И.Д. Вильямс", 2012.-1248с.

2. Страуструп, Бьярне. С83 Программирование: принципы и практика использования С++.: Пер. с англ.- М.: ООО "И.Д. Вильямс", 2011.-1248с.:

Задание:

1. Лекцию изучить.

2. ПРОГРАММУ выполнить. Скрин выполненной программы прислать личным сообщение ВК - https://vk.com/id9418169.

Ребята, там несколько программ. Хорошо, если вы все их скопируете и выполните

 

План.

1. Определения

2. Массив как производный тип данных

3. пример программы

 

Массив — это тип данных, который может содержать несколько значений, все одного типа. Каждое значение сохраняется в отдельном элементе массива, и компьютер хранит все элементы массива пос­ледовательно в памяти.

Для создания массива используется оператор объяв­ления. Объявление массива должно содержать три аргу­мента:

• Тип каждого элемента

• Название массива

• Число элементов в массиве

В C++ это реализуется путем изменения объявления простой переменной путем добавления скобок, которые содержат число элементов. Например, объявление

short months [12];//создает массив из 12 элементов типа short

создает массив с названием months, который содержит 12 элементов, каждый из которых может хранить значе­ние типа short. Каждый элемент, в сущности, является переменной, и их можно обрабатывать как обычные переменные.

Общая форма для объявления массива выглядит так:

typeName arrayName[arraySize];

Выражение arraySize, которое задает число элемен­тов, должно быть значением типа const, например 10, или другим значением типа const, либо постоянным вы­ражением, например, 8 * sizeof (int), для которого все значения уже известны во время трансляции. В частно­сти, arraySize не может быть переменной, значение ко­торой устанавливается в то время, когда программа вы­полняется. Однако далее вы увидите, как использовать оператор new, чтобы обойти это ограниче­ние.

Массив как производный тип данных

Массив именуется производным типом данных, потому что он основан на другом типе данных. Вы не можете просто объявить, что что-то является массивом; это всегда дол­жен быть массив какого-либо специфического типа. Не существует обобщенного типа массива. Вместо этого имеются много специфических типов массивов, таких как массив типа char или long. Например, рассмотрим следу­ющее объявление:

float loans[20];

Тип loans — не "массив"; скорее, это "массив элементов типа float". Это подчеркивает, что массив loans является производным от типа данных float.

Многие полезные свойства массива обусловлены тем фактом, что можно обращаться к элементам массива по отдельности. Для этого нужно использовать субиндекс, или индекс, для перечисления элементов. Массив в C++ нумеруется, начиная с 0. (Это правило нельзя изменить). В C++ используется запись с индексом в квад­ратных скобках, чтобы определить элемент массива. Например, months[0] — первый элемент массива months, a months[11] — последний элемент. Обратите внимание, что индекс последнего элемента на единицу меньше, чем размер массива. Таким образом, объявление массива дает возможность создать множество перемен­ных одним объявлением, а затем можно использовать индекс, чтобы идентифицировать отдельные элементы.

В программе, которая приведена в листинге показано несколько свойств массивов, включая объявление массива, присвоение значений элементам массива и инициализацию массива.

 

Листинг Программа arrayone.cpp.

 

// arrayone.cpp — маленький массив типа int

#include <iostream>

using namespace std;

int main()

{

int yams[3];// создание массива из 3 элементов

yams[0]= 7;// присваивает значение первому элементу

yams[1]= 8;

yams[2]= 6;

int yamcosts[3]={20,30,5};//создается и инициализируется //массив

// Примечание: если компилятор или транслятор

// C++ не может инициализировать этот массив, используйте

// static int yamcosts[3] вместо int yamcosts[3]

cout «"Total yams = ";

cout «yams[0] + yams[l] + yams[2] «"\n";

cout «"The package with " «yams[l] « " yams costs ";

cout «yamcosts[l] «" cents per yam.\n";

int total = yams[0]*yamcosts[0]+ yams[l]*yamcosts[1];

total = total + yams[2]*yamcosts[2];

cout<<”The total yam expense is ”<< total<<” cents.\n”;

cout<<”\nSize of yams array = “ <<sisteof yams<<” bytes.”;

cout<<”\nSize of one element =“<<sisteof yams[0]<<” bytes.”;

return 0;}

 

Результат выполнения программы из листинга:

Total yams = 21

The package with 8 yams costs 30 cents per yam.

The total yam expense is 410 cents.

Size of yams array = 12 bytes.

Size of one element = 4 bytes.

 

Примечания к программе

Прежде всего, программа создает трехэлементный мас­сив, называемый yams. Поскольку yams имеет три эле­мента, они пронумерованы от 0 до 2, и программа arrayone.cpp использует значения индекса в диапазоне 0-2, чтобы присвоить значения трем отдельным элемен­там. Каждый отдельный элемент yams имеет тип int со всеми правами и привилегиями типа данных int, и, та­ким образом, arrayone.cpp может присваивать значения элементам, а также добавлять, умножать и отображать элементы.

Программа использует длинный способ присвоения значений элементам yam. C++ также позволяет иници­ализировать элементы внутри инструкции объявления. В листинге используется этот короткий способ, что­бы присвоить значения массиву yamcosts:

int yamcosts[3]={20,30,5};

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

Затем программа использует значения массива в не­скольких вычислениях. Эта часть программы выглядит беспорядочной из-за индексов и скобок. Цикл for предоставляет мощный способ для обращения с массивами и устраняет необхо­димость записывать каждый элемент явно.

Оператор sizeof возвращает размер в байтах типа или объекта данных. Заметьте, что если используется оператор sizeof с названием массива, то выводится число байтов в целом массиве. Но если ис­пользуется sizeof с элементом массива, получается раз­мер в байтах элемента. Это поясняет то, что yams — мас­сив, но yams[l] — всего лишь элемент типа int.

Еще об инициализации массива

Язык C++ имеет несколько правил относительно ини­циализации массива. Они носят ограничительный харак­тер, когда массиву присваиваются значения, и опреде­ляют, что случится, если число элементов массива не соответствует числу значений в строке инициализации. Давайте исследуем эти правила.

Можно использовать форму инициализации только при определении массива. Вы не можете использовать ее позже, а также невозможно присвоить один массив целиком другому:

int cards[4]={3,6,8,10}; // правильно
int hand[4]; // правильно

hand[4]={5,6,7,9}; // неправильно

hand = cards; // неправильно

Однако можно использовать индексы и присваивать значения элементам массива индивидуально.

При инициализации массива можно присваивать меньшее количество значений, чем количество элемен­тов в массиве. Например, следующая инструкция ини­циализирует только первые два элемента массива hotelTips:

float hotelTips[5] = {5.0, 2.5};

Если массив инициализируется частично, то транс­лятор устанавливает оставшиеся элементы равными нулю. Таким образом, можно присвоить всем элементам массива нуль — нужно только явно присвоить нуль пер­вому элементу и позволить компилятору инициализиро­вать нулем оставшиеся элементы:

float totals[500] = {0};

Если при инициализации массива квадратные скоб­ки оставить пустыми, компилятор C++ будет подсчиты­вать элементы массива. Предположим, например, вы­полняется такое объявление:

short things[] = {1, 5, 3, 8};

Компилятор создает массив things из четырех элемен­тов.

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

short things[ ] = {1,5,3,8};

int num_elements = sizeof things / sizeof (short);

Является ли это полезным или нет — зависит от обстоя­тельств.

В случае многомерных массивов показывают столько пар скобок, какова размерность массива, а число внутри скобок показывает размер массива по данному измерению.

Например, описание двумерного массива выглядит так: int a[2][5];. Такое описание можно трактовать как матрицу из 2 строк и 5 столбцов.

Для обращения к некоторому элементу массива указывают его имя и индекс, заключенный в квадратные скобки (для многомерного массива - несколько индексов, заключенные в отдельные квадратные скобки): a[1][3], a[0][k+2].

Двумерный массив можно инициировать так:

static int matr[2][5] = {{3,4,0,1,2},{6,5,1,4,9}};

Матрица хранится в памяти построчно, т.е. самый правый индекс в наборе индексов массива меняется наиболее быстро.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-06-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: