Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Решение. Определение и инициализация двумерных массивов

Операции с массивами

Определение и инициализация двумерных массивов

Общий формат определения одномерного массива в стиле стандарта С89 имеет следующий:

<α> <b>[<γ1>][<γ2>] = <μ>;

Здесь α- тип элементов, хранящихся в массиве; b - имя массива, [..] – оператор индексирования; γ1 – константное выражение, определяющее количество строк в двумерном массиве, а γ2 - константное выражение, определяющее количество столбцов в двумерном массиве. Конструкция «= <μ>» используется для инициализации массива; μ – список инициализаторов.

Приведем пример определения двумерного массива.

#define MROW 2
#define MCOL 3

int main(void)
{
double m[MROW][MCOL] = {
{1, 3, 5},
{2, 4, 6}
};
}

В этом примере содержится определение двумерного массива m, в котором может храниться не более 2 строк и не более трех столбцов. Элементы массива инициализированы во время его определения. Первая строка массива содержит числа 1, 3 и 5, а вторая строка - 2, 4 и 6. Элементы массива имеют тип double.

Все операции с элементами массива выполняются поэлементно. Приведем два примера.

Пример 1. Копирование одномерных массивов.

Постановка задачи. Даны два массива одинаковых размеров x1 и x2. Скопировать часть n элементов массива x1 в массив x2.

Решение. Организуем арифметический цикл, рассчитанный на n повторений. Поэлементно будем копировать элементы массива x1 в массив x2. Программный код, представленный ниже, решает рассматриваемую задачу.

#define MSIZE 20
#include <stdio.h>
int main(void)

{
int x1[MSIZE] = {1, 3, 5};
int x2[MSIZE];
int n;
printf(“n=”);
scanf(“%d”, &n);
for(int i = 0; i < n; i++)
x2[i] = x1[i];
//..
}

 

В рассматриваемом коде «n» элементов массива x1 копируется в массив x2. Если ввести значение «n», равное MSIZE, то весь массив x1, будет скопировани в массив x2. Заметим, что инстукция x1 = x2; в связи с тем, x1 – константный указатель.

Пример 2. Обработка двумерных массивов.

Постановка задачи. В двумерном массиве, хранятся данные типа double. Массив состоит из nr строк и nc столбцов. Требуется вычислить две суммы summa_row и summa_col. Здесь summa_row - сумма элементов в каждой строке, а summa_col – сумма элементов для каждого столбца.

При обращении к элементам двумерного массива следует использовать два индекса, причем каждый из индексов должен записываться в своих индексных скобках. Отметим, левый индекс определяет номер строки, в которй находится элемент массива, а правый – номер столбца. Например, если m – матрицы, то m[1][2] – элемент этой матрицы, находящийся в строки с индексом 1 и столбце с индексом 2.

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

Алгоритм просмотра по строкам реализуется с помощью вложенных циклов. Причем:

· внешний цикл должен фиксировать индекс строки,

· внутренний цикл - изменять индекс столбца.

В алгоритме просмотра по столбцам наоборот:

· внешний цикл должен фиксировать индекс столбца,

· внутренний цикл – изменять индекс строки.

#define MROW 5
#define MCOL 10

int main(void)
{
double summa_row[MROW];
int nr;
printf(“nr = ”);
scanf(“%d”, &nr);

int nc;
printf(“nc = ”);
scanf(“%d”, &nc);

double m[MROW][MCOL];
// Ввод матрицы по строкам
for(int r = 0; r < nr; r++)
{
for(c = 0; c < nc; c++)
{
printf(“m[%d][%d]”, c, r);
scanf(“%lf”, &m[r][c]);
}
}
// Вычисление суммы для каждой строки
double summa_row[MROW];// массив для хранения суммы по
// строкам
for(int r = 0; r < nr; r++)
{
double s = 0;
for(c = 0; c < nc; c++)
{
s += m[r][c];
}
summa_row[r] = s;
}
// Вычисление суммы для каждого столбца
double summa_col[MROW];// массив для хранения суммы по
// столбцам
for(int c = 0; c < nc; c++)
{
double s = 0;
for(r = 0; r < nr; r++)
{
s += m[r][c];
}
summa_col[c] = s;
}
// вывод результатов вычислений

}
return 0;


<== предыдущая лекция | следующая лекция ==>
Определение и объявление одномерных массивов. Иницициализация одномерных массивов при их определении. Доступ к элементам массива | Указатели. Размещение массивов в оперативной памяти
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 366; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.