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;

}

 


 

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

82686. Нахождение дроби от числа. Нахождение числа по его части, выраженной дробью 87 KB
  Закрепить понятия: обыкновенная дробь, числитель дроби, знаменатель дроби; сформировать умение записывать и читать обыкновенные дроби, изучить правила нахождения дроби от числа и числа по его дроби. Создавать у школьников положительную мотивацию к выполнению умственных и практических занятий.
82687. Действия над многочленами 88 KB
  Задачи: систематизировать материал по данной теме. провести диагностику усвоения системы знаний и умений и её применения для выполнения практических заданий стандартного уровня с переходом на более высокий уровень. развивать познавательные процессы, память, мышление, внимание...
82688. Добрые дела живут на белом свете 28.9 KB
  Цель: закреплять представления детей о добрых делах, понимать, что вежливые слова помогают людям в общении; упражнять в грамотном построении ответов на заданные вопросы. Развивать способность детей к сопереживанию, устанавливать причинно-следственные связи. Упражнять в подборе слов-антонимов, воспитывать чувство доброты.
82689. Переключательная схема 127 KB
  Переключательная схема это схематическое изображение некоторого устройства состоящего из переключателей и соединяющих их проводников а также из входов и выходов на которые подаётся и с которых снимается электрический сигнал.
82690. Будова атома 40.22 KB
  Освітня: повторити і узагальнити знання про будову атома шляхом інтеграції наукових знань, отриманих на уроках фізики і хімії; встановити рівень засвоєння навчального матеріалу з теми «Будова атома»; підготувати учнів до освоєння матеріалу по наступній темі.
82691. Чи модно бути патріотом? 60.5 KB
  Кожен з присутніх має можливість висловити власну думку чи точку зору. Можливо, наша сьогоднішня зустріч допоможе вам знайти відповіді на запитання, які вас хвилюють. Я запрошую всіх, кому не байдуже наше майбутнє, до обговорення.
82692. Приготовление рассольника ленинградского 66.5 KB
  Цели урока: Обучающая – формирование системы умений по осуществлению полного технологического цикла приготовления рассольника ленинградского. Развивающая – освоение репродуктивных умений комплексного планирования профессиональных действий, выбора наиболее рационального их сочетания и чередования...
82693. Абагульняючы ўрок-гульня па беларускай літаратуры ў 6 класе 52.5 KB
  Настаўнік. На працягу першай і другой чвэрці вы, дарагія сябры, пазнаёміліся з цікавымі творамі на розныя тэмы. Спадзяюся, што яны пакінулі ў вашых сэрцах незабыўны след, што вам запомнілася вобразнасць мастацкага слова і вы не засталіся абыякавымі да лёсу літаратурных герояў.
82694. Зв’язок іменників з прикметниками у реченні 67.5 KB
  Мета уроку: поглиблювати знання учнів про роль прикметників у мовленні, про зв’язок прикметників з іменниками, вчити розпізнавати прикметники, ставити до них питання; розвивати навички правильної вимови і написання словникових слів; виховувати повагу і любов до матері, естетичні почуття.