
- •Глава 3. Производные типы данных. Массивы.
- •3.3. Многомерные массивы.
- •3.4. Базовые алгоритмы обработки двумерных массивов.
- •Глава 4. Функции.
- •4.1. Стандартное определение функции.
- •4.2. Локальные переменные.
- •4.3. Размещение тела функции. Прототип функции.
- •4.4. Глобальные переменные.
- •4.5. Классы памяти.
- •5.1. Директива # define.
- •5.2. Использование макроопределений с аргументами.
- •5.3. Директива # include. Включение файла.
- •5.4. Условная компиляция.
3.4. Базовые алгоритмы обработки двумерных массивов.
1. Заполнение двумерного массива.
2. Вывод значений элементов массива на экран в виде таблицы.
3. Вычисление суммы:
а) элементов всего массива
б) элементов каждой строки
в) элементов каждого столбца
4.Нахождение максимального (минимального) элемента и его индексов:
а) для всего массива
б) для элементов каждой строки
в) для элементов каждого столбца
Рассмотрим фрагменты некоторых из перечисленных алгоритмов.
Пример 1.
Заполним двумерный массив случайным образом.
…
int x[4][5]; //при заполнении перемещаемся по строкам
int i, j;
for (i=0; i<4; i++)
for (j=0; j<5; j++)
x[i][j]=rand ( ) %1000;
Пример 2.
Вычислим сумму элементов каждого столбца двумерного массива. Полученные суммы сохраним в одномерном массиве.
…
int z[3][5];
int i, j;
int s[5];
//блок заполнения
for (j=0; j<5; j++)
{ s[j]=0;
for (i=0; i<3; i++)
s[j]+=z[i][j];
}
Пример 3.
Найдем максимальный элемент каждой строки и его индексы.
…
int A[4][5];
int i, j;
int max, n_i, n_j;
//блок заполнения
for (i=0; i<4; i++)
{ max=A[i][j];
n_i=i;
for (j=0; j<5; j++)
if (A[i][j]>max)
{ max=A[i][j];
n_j=j;
}
//вывод на экран максимального элемента строки i и его индексов
}
Пример 4.
Транспортировать целочисленную квадратную матрицу, т.е. отразить относительно главной диагонали.
…
int A[3][3]= {11, 12, 13,
21, 22, 23,
31, 32, 33}
int i, j, R;
for (i=0; i<3; i++)
for (j=0; j<=i; j++)
{ R=a[i][j];
a[i][j]=a[j][i];
a[j][i]=R;
}
Глава 4. Функции.
4.1. Стандартное определение функции.
Функция – самостоятельная единица программы, спроектированная для реализации конкретной задачи. Функции в языке Си/Си++ играют ту же роль, какую играют функции и процедуры, например, в Паскале, подпрограммы в Фортране и т.д., хотя детали их структуры могут быть разными. Язык проектировался так, чтобы функции были эффективными и простыми в использовании. Функция в Си/Си++ является основной программной единицей. Каждая программа, написанная на языке Си/Си++, представляет собой совокупность функций и каждая программа обязательно включает в себя основную функцию с именем main. Любая другая функция в программе выполняет роль подпрограммы.
Формат стандартного определения функции:
тип результата имя_функции (спецификация формальных параметров)
{
определение объектов;
исполняемые операторы; тело функции
}
Тип функции – тип возвращаемого функцией результата.
Имя функции – идентификатор, задаваемый программистом или main для основной программы (функции).
Спецификация параметров – список имен формальных параметров функции с указанием типа для каждого из них, список может быть пустым.
Тело функции представляет собой либо составной оператор, либо блок. Признаком блока является наличие описаний программных объектов, которые действуют в пределах этого блока. Блок, как и составной оператор, ограничивается фигурными скобками.
Оператором возврата из функции в точку ее вызова является оператор return. Он может использоваться в функциях в двух формах: return; или return <выражение>; В том случае, когда функция не возвращает никакого значения, используется первая форма оператора возврата, если функция возвращает значение, используется вторая форма.
Тип выражения в операторе return должен либо совпадать с типом функции, либо относиться к числу типов, допускающих автоматическое преобразование к типу функции. Оператор return может отсутствовать в явном виде в теле функции (что и было до сих пор во всех примерах, реализующих главную функцию main()). В таком случае подстановка оператора return производится компилятором. Необходимо отметить, что в основной функции (main()) возможно также использовать оператор возврата return <выражение>; но если в «не основных функциях» возврат происходит в вызывающую функцию, то функция main() возвращает значение, например, операционной системе, как вызывающей программе, возвращенное значение может анализироваться операционной системой.