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;

}

 


 

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

13666. Дарендорф. Кто умеет справиться с конфликтами путем их признания, берет под свой контроль ритм истории 14.32 KB
  Кто умеет справиться с конфликтами путем их признания берет под свой контроль ритм истории. Р.Дарендорф. Зададимся вопросом: А что значит конфликт Ученые дают такие варианты определений Конфликты представляют собой особый тип социального взаимодействия субъе...
13667. Личность – это человек как носитель сознания 13.9 KB
  Личность это человек как носитель сознания К.К. ПлатоновЧеловек вечная проблема. Наши предки считали что человек предназначен для жизни бесконечной. И что свою суть он должен познавать в течение всей свой земной жизни а может быть и за пределами ее. И сейчас немало ...
13668. Личность человека, ни в каком смысле не является предсуществующей по отношению к его деятельности, как и его сознание, она ею порождается 13.85 KB
  Личность человека ни в каком смысле не является предсуществующей по отношению к его деятельности как и его сознание она ею порождается А.Н. ЛеонтьевЛеонтьев Алексей Николаевич советский психолог занимавшийся проблемами сознания и деятельности.Личность это конкр
13669. Люди рождаются только с чистой природой, лишь потом отцы делают их иудеями, христианами или огнепоклонниками 14.77 KB
  Люди рождаются только с чистой природой лишь потом отцы делают их иудеями христианами или огнепоклонниками. Саади Сложно не согласиться с данным высказыванием. Человек существо биосоциальное. От рождения мы обладаем по словам поэта Саади чистой природой. Мале...
13670. Люди существуют друг для друга 16.04 KB
  Люди существуют друг для друга Марк АврелийЧеловек по своей природе существо социальное. Такими нас сделала природа: с самых древних времен люди живут социумом т.е. коллективом. И даже когда не было создано речи люди общались с помощью жестов и звуков. Человек не мож
13671. Национализм малых народов есть проявление изоляции и самодовольства. Национализм больших народов есть империалистическая экспансия 14.14 KB
  Национализм малых народов есть проявление изоляции и самодовольства. Национализм больших народов есть империалистическая экспансия. Н. Бердяев На протяжении развития общества существовало много различных мнений по поводу того какой этнос считать нацией. Так н...
13672. Нация - это общество людей, которые через единую судьбу обретают единый характер 14.71 KB
  Нация это общество людей которые через единую судьбу обретают единый характер.О. ПауэрПомимо классов и других социальных групп социальную структуру общества составляют исторически сложившиеся общности людей: племена народности нации. Постараемся ответить на вопр...
13673. Неравенство - такой же хороший закон природы, как и всякий другой 14.56 KB
  Неравенство такой же хороший закон природы как и всякий другой. И.Шерр Все формы общности людей можно разделить на естественноисторические этноисторические и социально исторические. Естественно исторические формы общности людей это раса поколение пол и т.д...
13674. Неравенство – такой же хороший закон природы, как и всякий другой. И. Шерр 16.69 KB
  Неравенство такой же хороший закон природы как и всякий другой И. Шерр. Как следует понимать слова известного немецкого публициста и общественного деятеля 18 в. Иоганна Шерра Шерр говорит что неравенство является таким же хорошим законом природы как и всякий дру