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;

}

 


 

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

60191. Свято «Прощавай, початкова школа!» 53.5 KB
  Звучить святкова музика. Лунають фанфари. 1учень. Слухайте! 2 учень. Слухайте! 1учень. І не кажіть, що ви не чули! 2учень. І не кажіть, що ви не бачили! 1 учень. Сьогодні в нашому шкільному королівстві – свято!
60192. Сценарій тематичного вечора Дня Матері на тему «Рідна мати моя» 73 KB
  Спливли роки мов човник по воді І ведмежа стареньке десь поділось Та очі мами сині та сумні Моїм дитинством вранці подивились Анастасія Клєцова Руда Дитинство Ведуча 2 Кожна мама дає дитині свій наказ свою любов.
60193. Сценарій виховного заходу «Від зернини до хлібини» 72 KB
  Мета: Поглибити знання учнів про походження хліба, розвивати знання про професії, повязані з вирощуванням зернових культур,різновиди зернових культур. Виховувати любов до хліба, та бережливе ставлення до нього; повагу і пошану до людей хліборобської професії.
60195. Я люблю Україну, Позакласний захід для учнів початкової школи 90 KB
  Чи вірите що є такі квіти кульбабки та куль дідки Ні. Чи вірите що соком калини можна лікуватися від простудних захворювань і від авітамінозі Так. що сич заморожує на зиму в дуплі як у холодильникумишей і птахів Так. що в Карпатах ростуть смереки Так.
60196. В гостях у доктора Пилюлькина. Устный журнал для учащихся 2 - 4 классов 46 KB
  Цели: расширить знания учащихся о вирусных заболеваниях, создать условия для формирования навыков здорового образа жизни, развивать творческие способности учащихся, воспитывать чувство товарищества.
60197. Життя без насильства 42 KB
  Мета ознайомити дітей з документами які захищають їх права; теоретично обґрунтувати сутність насильства зясувати основні причини насильства над дітьми в середовищі сімї та виявлення шляхів його подолання.
60198. ТЕХ ДНЕЙ НЕ СТЕРЕТЬ ИЗ ПАМЯТИ ЛЮДСКОЙ 69.5 KB
  Оформление доски: Уж больше полвека остывши молчат батареи И мирную землю не рвет не терзает фугас Но кажется памяти нашей ни чуть не старея Умершие так же как прежде сегодня живут среди нас...