Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labor4.doc
Скачиваний:
12
Добавлен:
05.06.2015
Размер:
96.26 Кб
Скачать

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

С позволяет создавать многомерные массивы. Простейшим видом многомерного массива является двумерный массив. Двумерный массив  это массив одномерных массивов. Двумерный массив объявляется следующим образом:

тип имя_массива [размер_2] [размер_1];

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

Пример 5. Объявление многомерных массивов

double matrix A [100][10];

char table [41][22][3];

int index [7][12];

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

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

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

Пример 6. Инициализация матрицы

#define MAX_COL 4

#define MAX_ROW 3

. . .

int main ( )

{ double x[MAX_ROW][MAX_COL]= {{ 1, 2, 3, 4}, // строка # 1

{ 5, 6, 7, 8}, // строка # 2

{ 9,10,11,12}}; // строка # 3

. . .

return 0;

}

Пример 7. Ввод многомерных массивов с клавиатуры.

. . .

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

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

{ cout << "x[" << i <<"][" << j<<"]";

cin >> x[i][ j]; }

}

. . .

Вывод массивов также осуществляется с помощью циклов, одиночных для одномерных массивов или вложенных для многомерных массивов.

Пример 7. Вывод матриц

. . .

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

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

{ cout << setw(5) << x[i][ j];

}

cout << endl;

}

При обработке матриц чаще всего встречаются следующие типы задач:

  1. работа с матрицей в целом;

  2. работа со строкой (столбцом) матрицы;

  3. работа с диагональными элементами.

При работе с матрицей в целом, в качестве объекта для сравнения выбирают элемент с индексами (0,0), затем, последовательно перебирая все элементы матрицы, выполняют необходимые действия. Перебор элементов происходит с использованием вложенных циклов.

Пример 8. Определить среднее арифметическое значение элементов матрицы x[6][7] целого типа.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#define MAX_COL 6

#define MAX_ROW 7

int main()

{ int x[MAX_ROW][MAX_COL];

int i,j,sum=0;

float sred;

srand( (unsigned)time( NULL ) ); // Инициализация генератора случайных чисел

for(i=0; i<MAX_ROW; i++) //Заполнение массива случайными числами

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

x[i][j]=rand()%11;

for(i=0; i<MAX_ROW; i++) // Вывод матрицы на экран

{ printf("\n");

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

{ printf(" %6d", x[i][j]); // и вычисление суммы ее элементов

sum+=x[i][j];

}

}

sred= (float) sum/(MAX_ROW*MAX_COL);

printf("\nSumma=%d Meandr=%f\n",sum,sred);

return 0;

}

Для поиска элемента строки (столбца) объектом сравнения является первый элемент строки с индексами i,0 или столбца с индексами 0,j и обработка идет до конца строки (столбца). Обычно результатом такой обработки массива является вектор-столбец или вектор-строка.

Пример 9. Определить минимальный элемент каждой строки действительной матрицы matr[4][8].

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#define COL 4

#define ROW 8

int main()

{ int matr[ROW][COL];

int i,j;

int min[ROW];

srand( (unsigned)time( NULL ) );

for (i=0; i<ROW; i++) // заполнение и вывод матрицы

{ for (j=0; j<COL; j++) // на экран

{ matr[i][j]=rand()%101;

printf(" %3d", matr[i][j]);

}

printf("\n");

}

for (i=0; i<ROW; i++) // формирование вектора-столбца

{ min[i]=matr[i][0]; // из минимальных элементов строк

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

if (matr[i][j]<min[i]) min[i]=matr[i][j];

printf(" %3d", min[i]);

}

printf("\n");

for (i=0; i< ROW; i++) printf("%3d ",min[i]);

printf("\n");

return 0;

}

При работе с диагональными элементами учитывают, что индексы элементов, стоящих на главной диагонали, удовлетворяют условию i = j.

Элементы, стоящие на побочной диагонали, имеют индексы, удовлетворяющие условию

i=n - j - 1,

если n - порядок матрицы (предполагается, что матрица - квадратная).

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