18535

Двумерные массивы (матрицы)

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа № 5. Двумерные массивы матрицы Массивы в С могут быть не только одномерными т.е. когда данные визуально выстроены в одну линию. Массивы также могут быть и двумерными трехмерными и так далее. С компиляторы поддерживают как минимум 12ти мерные масси...

Русский

2013-07-08

29.09 KB

8 чел.

Лабораторная работа № 5.

Двумерные массивы (матрицы)

Массивы в С могут быть не только одномерными, т.е. когда данные визуально выстроены в одну линию. Массивы также могут быть и двумерными, трехмерными и так далее. С++ компиляторы поддерживают как минимум 12-ти мерные массивы!!! Естественно, что такими большими массивами на практике никто не пользуется, т.к. человеку сложно их визуально представить у себя в голове, не то что написать программу, которая оперирует таким сложными массивами. На практике редко применяют массивы, более трехмерного. Одномерный – это строка, двумерный – матрица (таблица), трехмерный – куб, а вот дальше уже сложно, поэтому дальше, обычно, никто и не идет...

Двумерный массив – это так называемая матрица (или таблица), у которой есть строки и столбцы. По соглашению программистов первый индекс массива будет указывать на строки, а второй на столбцы.

Фактически двумерный массив — это одномерный массив одномерных массивов. Структура двумерного массива, с именем a, размером m на n показана ниже:

где, m – количество строк двумерного массива;

n – количество столбцов двумерного массива;

m * n – количество элементов массива.

Вот пример объявления и инициализации двумерного массива, состоящего из трех строк и пяти столбцов.

int aMatrix[3][5] = {{3, 5, 5, 7, 8},

{4, 1, 1, 2, 9},

{3, 8, 8, 9, 7}};

Двумерный массив имеет два индекса. Можно и так записать, как показано ниже. Разницы для компилятора не будет никакой. Разве лишь разница будет в визуальном восприятии для человека:

int aMatrix[3][5] = {{3, 5, 5, 7, 8}, {4, 1, 1, 2, 9}, {3, 8, 8, 9, 7}};

Либо вообще так, без указания фигурных скобок, которые логически разделяют строки друг от друга.

int aMatrix[3][5] = {3, 5, 5, 7, 8, 4, 1, 1, 2, 9, 3, 8, 8, 9, 7};

Последняя запись демонстрирует то, как на самом деле элементы массива размещаются в памяти компьютера.

Для доступа к элементам двумерного массива нужно, так же, как и для одномерного указать индекс. В данном случае нужно будет указывать два индекса. Например, чтобы перезаписать последний элемент второй строки, мы должны использовать такую запись

aMatrix[1][4] = 0;

В этом случае мы перезапишем значение 9 на 0.

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

Пример программы:

Дана матрица размером n строк и m столбцов (0<n<=20, 0< m<=30). Найти сумму положительных элементов каждой строки.

#include <stdio.h>

#include <conio.h>

/* Сумма по строкам*/

#define NMAX 20

#define MMAX 30

main()

{float x;

int i,j;

float s;

int n,m;

puts("Введи n m"); scanf("%d%d",&n,&m);

puts ("Введи матрицу");

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

{s=0;

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

{scanf("%f", &x);

if (x>0) s=s+x;

}

printf ("\n Строка %d, s= %.2f",i,s);

}

getch();

return 0;

}

Пример результатов тестирования программы:

1

2

3

4

5

1

-9

0

1

-7

4

2

1

2

5

0

4

3

-1

2

-9

7

-1

4

-2

-3

-8

-9

-4

Результат:

Строка 1 сумма = 5

Строка 2 сумма = 12

Строка 3 сумма = 9

Строка 4 сумма = 0

Порядок выполнения работы.

1. Получить задание у преподавателя.

2. Составить программу на Си и подобрать тесты для проверки программы на ЭВМ.

3. Отладить программу на ЭВМ.

4. Оформить и сдать отчет по лабораторной работе.

Задания для самостоятельного выполнения

  1.  Дана матрица размером n x m. Вычислить сумму положительных элементов каждой строки и найти номер строки, в которой эта сумма максимальна.
  2.  Определить, является ли заданная целочисленная квадратная матрица магическим квадратом, то есть такой, что суммы всех элементов во всех строках и столбцах одинаковы.
  3.  Дана матрица размером n x m. Найти минимальный элемент в каждом столбце матрицы (из ненулевых) и разделить на него все элементы этого столбца.
  4.  Дана матрица размером n x m. Найти наибольший положительный и наименьший отрицательный элементы матрицы.
  5.  Элементы матрицы А(n x n) назовем седловой точкой, если он одновременно является наименьшим в своей строке и наибольшим в своем столбце или наоборот. Найти индексы всех седловых точек матрицы.
  6.  Дана матрица размером n x m. В каждой строке переставить местами наибольший и наименьший элементы матрицы.
  7.  Дана квадратная матрица размером n x n. Вычислить сумму элементов, расположенных над главной диагональю.
  8.  Дана квадратная матрица размером n x n. Найти наибольший элемент главной диагонали, и вывести всю строку, в которой он находится.
  9.  Дана квадратная матрица размером n x n. Найти строку с наибольшим количеством отрицательных элементов.
  10.  Дана квадратная матрица размером n x n. Найти сумму отрицательных элементов в каждой строке.
  11.  Дан двумерный массив n х m элементов, найти количество четных и нечетных чисел в массиве.
  12.  Дан двумерный массив n х m элементов. Определить, сколько раз встречается число 7 среди элементов массива.
  13.  Дан массив из n x m элементов. Определить, сколько элементов массива больше заданного числа.
  14.  Дан массив из n x m элементов. Найти индексы первого наименьшего элемента массива.
  15.  Дан квадратный массив из n x n элементов. Найти сумму элементов побочной диагонали.
  16.  Дан квадратный массив из n x n элементов. Найти сумму элементов ниже главной диагонали.

 

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

71899. Инновационная продукция 15.1 KB
  Результаты инновационной деятельности в виде инновационной продукции которая может иметь конкретную вещественную форму или быть в неовеществленной форме например ноу-хау. В России законодательная охрана интеллектуальной собственности гарантирована Конституцией Российской...
71900. Лицензионная торговля 19.58 KB
  Различают 2 вида лицензионных вознаграждений: лицензионные вознаграждения размер которых определяют на основе фактически полученного экономического результата использования лицензии это могут быть периодические процентные отношения роялти процент от выручки прибыли...
71901. Внутренние текущие затраты 17.07 KB
  Внутренние текущие затраты на исследования и разработки распределяются по видам работ и секторам деятельности. Выделяют затраты на: фундаментальные исследования; прикладные исследования; разработки.
71902. Проблемы развития национальной инновационной системы 16.55 KB
  Состояние национальной инновационной системы в России ставит вопрос об экономической безопасности. Проблемы: Отсутствие развитой нормативно-правовой базы осуществления инновационной деятельности; Неразвитость правовых механизмов введения результатов инновационной деятельности в хозяйственный оборот...
71905. Зарубежный опыт государственного регулирования инновационной деятельности 16.75 KB
  Можно выделить 3 главные модели научно-технического развития: Страны ориентированные на лидерство в науке на реализацию крупномасштабных целевых проектов охватывающие все стадии производственного цикла.