4866

Одномерные и многомерные массивы

Лекция

Информатика, кибернетика и программирование

Одномерные и многомерные массивы Массив представляет собой набор переменных одного типа. Элементы массива размещаются в памяти последовательно и индексируются начиная с 0. Доступ к элементам осуществляется напрямую по индексу. Размерность массива оп...

Русский

2012-11-28

36.5 KB

18 чел.

Одномерные и многомерные массивы

Массив представляет собой набор переменных одного типа. Элементы массива размещаются в памяти последовательно и индексируются начиная с 0. Доступ к элементам осуществляется напрямую по индексу. Размерность массива определяется при его объявлении и может быть либо явно задана константным выражением либо выведена исходя их количества элементов при инициализации:

// Объявление массива из 100 элементов,

// все элементы неинициализированы

 char mas1[100];

 // Объявление массива с одновременной инициализацией,

 // размерность массива равна количеству элементов в списке: 5

 int mas2[] = { 16, 8, 4, 2, 1 };

 // Объявление массива из 10 элементов, инициализированы

 // только первые 3 элемента (с индексами 0, 1, 2), остальные

// элементы инициализированы нулями

 long mas3[10] = { 10, 20, 30 };

Доступ к элементам массива осуществляется по соответствующему индексу с помощью оператора []. Первый элемент массива размерности N имеет индекс 0, последний – N-1. В следующем примере массив заполняется значениями, введенными пользователем, и выводится в обратном порядке:

const short N = 5;

 double mas[N];

 for ( int i = 0; i < N; ++i )

 std::cin >> mas[i];

 for ( int i = N-1; i >= 0; --i )

 std::cout << mas[i] << " ";

std::cout << std::endl;

Скопировать один массив в другой или сравнить массивы можно только поэлементно:

const unsigned int N = 5;

int A[N] = { 1, 2, 3, 4, 5 };

int B[N];

// Копируем массив A в массив B

for ( int i = 0; i < N; ++i )

  B[i] = A[i];

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

Многомерные массивы объявляются и инициализируются аналогично:

 // Объявление многомерного массива размерности 3x4x5,

 // все элементы неинициализированы

 double mas4[3][4][5];

// Объявление многомерного массива с одновременной

// инициализацией.

 int mas5[3][3] = { { 11, 12, 13 }

                 , { 21, 22, 23 }

    , { 31, 32, 33 }

    };

Все элементы многомерных массивов также располагаются в памяти последовательно, причем первыми меняются значения самого правого индекса. Например, для массива char mas[2][3] будет выделено 6 байт памяти, в которых элементы массива будут размещены в следующем порядке:

 mas[0][0] mas[0][1] mas[0][2] mas[1][0] mas[1][1] mas[1][2]

         1           2           3           4           5         6

Двумерные массивы удобно интерпретировать как матрицы, при этом первый индекс определяет номер строки, второй – столбца. Следующий пример реализует заполнение матрицы случайными числами и её транспонирование.

#include <iostream>

int main()

{

setlocale( 0, "Rus" );

 

 const short N = 5;

 double mas[N][N];

 // Заполнение матрицы случайными числами

std::cout << "Исходная матрица" << std::endl;

 for ( int i = 0; i < N; ++i )

{

 for ( int j = 0; j < N; ++j )

 {

  mas[i][j] = rand() % 100;

  std::cout << mas[i][j] << "\t";

 }

 std::cout << std::endl;

}

std::cout << std::endl;

 // Транспонирование матрицы

 for ( int i = 0; i < N; ++i )

{

 for ( int j = i + 1; j < N; ++j )

 {

  double temp = mas[i][j];

  mas[i][j] = mas[j][i];

  mas[j][i] = temp;

 }

}

 

 // Вывод на экран

std::cout << "Транспонированная матрица" << std::endl;

 for ( int i = 0; i < N; ++i )

{

 for ( int j = 0; j < N; ++j )

  std::cout << mas[i][j] << "\t";

 std::cout << std::endl;

}

system( "pause" );

 return 0;

}

 


 

А также другие работы, которые могут Вас заинтересовать

18054. ТИПИЧНЫЕ ОШИБКИ ПРИ НАЧИСЛЕНИИ НАЛОГОВ И СТРАХОВЫХ ВЗНОСОВ 2.87 MB
  ТИПИЧНЫЕ ОШИБКИ ПРИ НАЧИСЛЕНИИ НАЛОГОВ И СТРАХОВЫХ ВЗНОСОВ Ф.Н. Филина И.А. Толмачев Под редакцией Т.Н. Межуевой. НАЛОГ НА ПРИБЫЛЬ 1.1. Доходы В соответствии со ст. 41 Налогового кодекса РФ доходом признается экономическая выгода в денежной или натурал...
18055. Анализ деятельности коммерческого банка 1.36 MB
  Л.В. КОХ Ю.В. КОХ Анализ деятельности коммерческого банка Учебное пособие Раскрываются основные направления экономического анализа деятельности коммерческого банка. Рассматриваются вопросы анализа состояния и использования собственных и привлеченных средств...
18056. Організація, планування та управління підприємствами галузі: Конспект лекцій 1.35 MB
  Стахурський В.О. Організація планування та управління підприємствами галузі: Конспект лекцій для студ. напрямів 0902 Інженерна механіка 0905 Енергетика 0925 Автоматизація та компютерно-інтегровані технології всіх форм навчання. К. : НУХТ 2009. 113 с. АНОТАЦІЯ К
18057. Базы данных, учебное пособие 1.41 MB
  Базы данных Допущено Учебно-методическим объединением вузов по образованию в области автоматизированного машиностроения УМО АМ в качестве учебного пособия для студентов высших учебных заведений обучающихся по направлениям подготовки бакалавров и магистров.
18058. Проблемы подростковой адаптации с позиций профилактики и психотерапии личностных и поведенческих расстройств и зависимости от психоактивных веществ 1.06 MB
  Проблемы подростковой адаптации с позиций профилактики и психотерапии личностных и поведенческих расстройств и зависимости от психоактивных веществ М. 325 с. Вместо введения. История создания книги Психическая адаптация к требованиям социальной среды. Базисные ком...
18059. Практикум по арбитражному процессу 1.2 MB
  Практикум по арбитражному процессу Учебное пособие для студентов юридических вузов и факультетов Под редакцией доктора юридических наук профессора В. В. Яркова и кандидата юридических наук доцента С.Л. Дегтярева 2е издание переработанное и дополненное .: ...
18060. ИСТОРИЯ ДЕНЕЖНО-КРЕДИТНОЙ СИСТЕМЫ РОССИИ 1.53 MB
  История денежнокредитной системы России В пособии раскрывается процесс зарождения и формирования денежной системы возникновение банковского дела становления и развития банковской системы России. В первой части излагается процесс формирования и развития денежной с...
18061. Філософія права. Підручник 966 KB
  Підручник присвячено філософії права. У ньому висвітлюються зміст призначення та історичний розвиток філософії права а також її основні проблеми: правова онтологія правова антропологія правова аксіологія тощо. Значну увагу у виданні приділено аналізу сучасних філо...