Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Краткие теоретические сведения. Массивы могут быть многомерными




Массивы могут быть многомерными. Самые распространенные многомерные массивы – это матрицы (двумерные массивы). Объявляются они следующим образом:

тип_элементов имя [m][n];

где m – это количество строк, n – количество столбцов.

Нумерация строк и столбцов начинается с нуля.

Например, объявление

float b[4][6];

означает массив из четырех элементов, каждый из которых есть массив из шести вещественных чисел. Отдельные величины этого массива обозначаются именами с двумя индексами: b[0][0], b[0][1], …, b[3][5].

Порядок расположения элементов многомерного массива в памяти такой, что прежде всего меняется последний индекс, затем предпоследний и т. д., и лишь один раз пробегает свои значения первый индекс.

Существуют два варианта объявления массива:

§ неинициализированный (пример выше);

§ инициализированный. Определяется следующим образом: int b[3][4]={ {2, 3, 5, 7},

{0, 8, 12, 1},

{1, -8, 6, 9} };

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

При работе с матрицами организуются два цикла. Внешний цикл отвечает за перебор всех строк матрицы, а внутренний перебирает все элементы строки.

Ввод элементов матрицы

const int m=3, n=5; // количество строк и столбцов

float b[m][n]; // объявление массива

int i, j; // объявление индексов элементов

for (i=0; i<m; i++)

{ puts(“Введите %d-ю строку”, i); // печать подсказки

for (j=0; j<n; j++)

scanf(“%f ”, &b[i][j]); // считывание с клавиатуры элемента

}

Функция scanf обеспечивает каждый раз ввод одного элемента массива, т. е. после набора на клавиатуре значения очередного элемента нужно нажимать пробел, а после последнего элемента строки – клавишу Enter.

Ввод по строкам является наиболее естественным. В случае необходимости можно организовать заполнение массива по столбцам. Для этого нужно поменять местами операторы for:

const int m=3, n=5; // количество строк и столбцов

float b[m][n]; // объявление массива

int i, j; // объявление индексов элементов

for (j=0; j<n; j++)

{ puts(“Введите %d-й столбец”, j); // печать подсказки

for (i=0; i<m; i++)

scanf(“%f ”, &b[i][j]); // считывание с клавиатуры элемента

}

Заполнение матрицы случайными числами

Выполняется также в двойном цикле аналогично одномерным массивам. В примере показано заполнение целой матрицы случайными числами в интервале [a,b] (для вещественных чисел формула изменится – см. одномерные массивы). В этой и последующих программах будем считать, что объявлена целая матрица M на N, где M и N — целые константы (объявленные через const), а также целые переменные i и j.

for (i = 0; i < M; i ++)

for (j = 0; j < N; j ++)

A[i][j] = random(b-a+1) + a;

Вывод элементов матрицы

Двумерные массивы необходимо выводить в привычном виде (по строкам), начиная вывод новой строки массива в новую строку экрана.

for (i = 0; i < M; i ++)

{ for (j = 0; j < N; j ++)

printf(“%d \t”, A[i][j]);

printf (“\n”);

Суммирование элементов матрицы

for (S=0, i=0; i<m; i++)

for (j=0; j<n; j++)

S=S+b[i][j];

Суммирование диагональных элементов матрицы (вычисление следа матрицы)

for (S=0, i=0; i<n; i++)

S=S+b[i][i];

Суммирование элементов заданной строки матрицы

Для двумерного массива b размером M на N необходимо вычислить сумму элементов строки с номером k.

for (S=0, j=0; j<n; j++)

S=S+b[k][j];

Суммирование элементов строк матрицы

Необходимо вычислить сумму элементов каждой строки двумерного массива b размером M на N с выводомрезультатов на экран.

for (i=0; i<m; i++)

{ S=0; // обнуление суммы каждой строки

for (j=0; j<n; j++)

S=S+b[i][j];

printf (“Сумма элементов строки %d=%d \n “, i, S); }

Транспонирование матрицы

Необходимо заменить строки матрицы ее столбцами, а столбцы – строками.

int b[m][n], a[n][m], i, j;

….

for (i=0; i<n; i++)

for (j=0; j<m; j++)

a[i][j]=b[j][i];

 

Для квадратной матрицы размером N на N для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную P, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение.

int b[n][n], i, j, P;

….

for (i=0; i<n-1; i++)

for (j=i+1; j<n; j++)

{ P= b[i][j];

b[i][j]=b[j][i];

b[j][i]=P;

}





Поделиться с друзьями:


Дата добавления: 2016-10-27; Мы поможем в написании ваших работ!; просмотров: 525 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2268 - | 2092 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.