Смекни!
smekni.com

Массивы в С С (стр. 2 из 2)

В рассмотренных выше примерах начальные значения элементов массива задавались пользователем с клавиатуры. Можно поступить иначе и каждому из элементов присвоить начальное значение с помощью оператора «=». Это потребует довольно большого количества записей – по отдельному оператору для каждого из элементов. C++ дает программисту еще один, более удобный, способ. Массив может быть инициализирован при объявлении. Для этого в строке объявления сразу вслед за указанием типа элементов, имени массива и его размеров, записывается знак присваивания, и далее в фигурных скобках задаются значения элементов через запятую

тип имя[размерN] = { знач1, знач2, знач3, ..., значN };

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

В следующем примере

floatmark[5] = { 7.3, 4.0, 2.2, 12.1, 8.9 };

создается массив с именем mark, состоящий из 5 чисел типа float, которые инициализируются значениями 7.3, 4.0, 2.2 и т.д. Это эквивалентно следующему набору операторов

float mark[5]; mark[0]=7.3; mark[1]=4.0; mark[2]=2.2ит.д.

Многомерный массив также может быть инициализирован в строке объявления. Для этого достаточно помнить о том, что многомерный массив в C++ – это «массив массивов», о чем уже говорилось выше. Пример

intF[3][3] = { {3, 0, 2} , (1, 9, 8}, {5, 7, 4} };

Здесь создается двумерный массив с именем F и размерами 3´3, элементы которого получают начальные значения F[0][0] = 3, F[0][1] = 0, F[0][2] = 2, F[1][0] = 1 и т.д.

Пример 3. Пусть

и
– две квадратные матрицы размером 3´3. Требуется написать программу, рассчитывающую их произведение

Решение. Искомое произведение

– это также матрица 3´3, элементы которой рассчитываются по формуле
(
). Аналогично Примеру 1, организуем суммирование с помощью вспомогательной переменной s и цикла по k. Для перебора всех
используем два дополнительных вложенных друг в друга цикла по i и по j. Эти циклы будут внешними по отношению к циклу по k.

//-------------- Перемножениематриц --------------

#pragma hdrstop

#include <conio.h>

#include <iostream.h>

#pragma argsused

const int N = 3; // используемконстанту N=3

int main(int argc, char* argv[])

{

float A[N][N] = { {1, 1, 1},

{2, 2, 2},

{3, 3, 3} }; // исходнаяматрица A

float B[N][N] = { {1, 2, 3},

{1, 2, 3},

{1, 2, 3} }; // исходнаяматрица B

floatC[N][N]; // матрица произведения С

for(int i=0; i<N; i++) // циклпострокамС

{

for(intj=0; j<N; j++) // цикл по столбцам С

{

floats = 0.0; // вспомогательная переменная

for(intk=0; k<N; k++) // цикл суммирования по k

s += A[i][k]*B[k][j]; // добавляем к s новое слаг-ое

C[i][j] = s; // записываем s в C[i][j]

}

}

cout << " Results: &bsol;n"; // далее выводим C на экран

for(int i=0; i<N; i++)

{

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

cout << C[i][j] << "&bsol;t";

cout << endl;

}

getch();

return 0;

}

//-------------------------------------------------