Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_si.docx
Скачиваний:
33
Добавлен:
25.09.2019
Размер:
205.61 Кб
Скачать

18. Двухмерные массивы. Массивы строк.

Двухмерные массивы

Объявление двумерного массива имеет вид:

тип <имя массива>имя[размер 1][размер 2];

Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного –три и т.д. Отметим, что в языке С первый элемент массива имеет индекс равный 0.

Примеры:

int a[2][3]; /* представлено в виде матрицы

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2] */

double b[10]; // вектор из 10 элементов имеющих тип double

int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } };

В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.

Пример:

int s[2][3];

Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.

Пример Ввода и вывода двумерного массива #include <stdio.h> void main(){ int A[100][100]; // массив 100х100 int i,j; // индексы для перемещения по массиву int n; // кол-во строк int m; // кол-во столбцов // ввод размеровматрицы printf("input emount of rows"); scanf("%d",&n); printf("input emount of collomns"); scanf("%d",&m); // ввод значений матрицы for (i=0;i<n;i++) for (j=0;j<n;j++){ printf("input A[%d][%d]",i,j); scanf("%d",&A[i][j]); } // вывод значение матрицы for (i=0;i<n;i++){ for (j=0;j<n;j++) printf("%d ",A[i][j]); printf("\n"); } }

Массивы строк

Пример объявления символьного массива.

char str[] = "объявление символьного массива";

Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью ’\0’.

19. Инициализация массивов

Инициализация массива – это присваивание элементам массива некоторых начальных значений.

Если размер массива не известен, то он считается равным числу инициализаторов, при этом тип его становится завершенным. Если размер массива известен, то число инициализаторов не должно превышать числа его элементов; если инициализаторов меньше, оставшиеся элементы обнуляются.

Самый простой способ инициализации следцющий: в процессе объявления массива можно указать в фигурных скобках список инициализаторов:

float arr[6] = {1.1, 2.2, 3.3, 4.0, 5, 6};

int a[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …, 15};

int a[3][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};

Количество инициализаторов не обязано совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся значения элементов неопределенны. Для доступа к элементам массива после его имени указывается номер элемента (индекс) в квадратных скобках.

Иногда инициализация многомерных массивов бывает очень полезной.

Листинг 1 демонстрирует типичное использование инициализированного

многомерного массива для запоминания названий месяцев. Листинг 1. months (запоминание названий месяцев в массиве): #include <stdio.h> #define NUMMONTHS 12 char months[NUMMONTHS][4] = { "Jan",   "Feb",   "Mar",   "Apr", "May",   "Jun",   "Jul",   "Aug", "Sep",   "Oct",   "Nov",   "Dec" }; main() { int   month; for(month=0; month<NUMMONTHS; month++) printf(?%s\n?, months[month]); return 0; } ­­­­­­­­        Объявленный в строке 5 массив months (месяцы) запоминает 12 трехсимвольных строк,

оканчивающихся нулевым байтом. Выражение months[0] относится к Jan, months[1] – Feb и т. д. 

Такие выражения наталкивают нас на восприятие массива months как одномерного. 

Но на самом деле он имеет  два измерения.  Например, выражение months[1][2]

ссылается на символ b строки  “Feb”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]