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;

}

 


 

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

83349. Написання не з дієсловами. Спостереження за зв’язком дієслова в реченні з іншими частинами мови 348.5 KB
  Чи любить Яринка прокидатися зранку Що вона запитала у дідуся Що порадив дідусь Чи послухає поради дідуся Яринка Давайте спробуємо сьогодні довести що праця навчання наполегливість необхідні в житті людини. Для початку зясуємо яка орфограма в імені Яринки велика буква Яким звуком починається слово...
83350. Повторення та узагальнення вивченого про дієслово як частину мови 154 KB
  Мета: Узагальнити знання про ознаки дієслова удосконалювати вміння розрізняти часові форми дієслова закріплювати навички правопису не з дієсловами. Вміння визначати до якої дієвідміни та особи належать дієслова. Обладнання: стіл накритий вишитою скатертиною на якому розміщені паска писанки...
83351. Вправи на вживання різних відмінкових форм прикметників 351 KB
  Мета: Закріпити знання про відмінювання прикметників у множині. Вчити школярів правильно вимовляти і записувати форми прикметників у множині, вживати на письмі закінчення прикметників, орієнтуючись на кінцевий приголосний звук основи.
83352. Закріплення знань про прислівник. Підготовка до контрольної роботи 121 KB
  Закріплювати та поглиблювати знання про прислівник як самостійну частину отриманні на уроках української мови; розвивати логічне мислення память мовлення учнів навички та уміння самоосвітньої діяльності з навчальним матеріалом; вчити бачити прекрасне у звичайному а із заняття винести любов до рідного слова.
83353. Роль прикметників у мовленні 296 KB
  Мета: повторити вживання апострофу, закріпити знання про прикметник як частину мови, актуалізувати його роль у мовленні; поглибити знання учнів про осінні явища, розкрити красу осінньої палітри природи; розвивати навички сприйняття, образне творче мислення, увагу, зв’язне мовлення...
83354. Урок розвитку зв’язного мовлення. Складання твору «Весна прийшла» 131 KB
  Мета. Формувати вміння та навички школярів складати текст-розповідь на визначену тему на основі власних спостережень використовуючи лексичні засоби; розвивати навички усного і писемного мовлення, уміння бачити і відчувати красу природи, заохочувати дітей до творчості, збагачувати словниковий запас...
83355. Перевірка орфограм у особових закінченнях, або ще раз про закон письма 105 KB
  Вчити школярів застосовувати алгоритм перевірки орфограм слабких позицій звуків у особових закінченнях дієслів; перевіряти орфограми слабких позицій звуків у різних частинах слів; вчити школярів обґрунтовувати свої думки; давати на запитання повні змістовні відповіді; робити висновки.
83356. Засоби зв’язку речень у тексті. Складання розповіді за малюнком і кінцівкою 39 KB
  Мета: узагальнити систематизувати знання учнів про текст розвивати уміння систематизувати зібраний матеріал добирати потрібні засоби для поширення речень вчити дітей уважно слухати і відповідати на питання; збагачувати словниковий запас розвивати звязки мовлення; виховувати любов до рідної природи...
83357. Написання стислого переказу «Старий пень» 54 KB
  Мета. Вдосконалювати вміння учнів послідовно і стисло передавати зміст тексту, виділяти головне, суттєве, усуваючи другорядні деталі. Розвивати навички мовленнєвої діяльності. Виховувати почуття дружби. Тип уроку: урок вдосконалення вмінь і навичок.