Цель работы: изучить конструкции языка С и операторы для обработки многомерных массивов
Теоретические сведения
Вложенные циклы. В теле цикла разрешены любые исполнимые операторы, в том числе и циклы, т.е. можно конструировать вложенные циклы.
В качестве примера рассмотрим фрагмент программы для получения суммы такого вида:
Введем следующие обозначения: а - двумерный массив, содержащий значения элементов матрицы; р - произведение элементов строки матрицы; с - сумма их значений; s - искомая сумма (результат). Опустив определения переменных и операторы ввода-вывода, запишем текст на языке Си:
double a[10][5];
for( s=0.0,j=0; j<10; j++)
{
for( p=1.0,c=0.0,i=0; i<5; i++)
{
p*=a[j][i];
c+=a[j][i];
}
s+=c+p;
}
При работе с вложенными циклами следует обратить внимание на правила выполнения операторов break и continue. Каждый из них действует только в том операторе, в теле которого он непосредственно использован. Оператор break прекращает выполнение ближайшего внешнего для него оператора цикла. Оператор continue передает управление на ближайшую внешнюю проверку условия продолжения цикла.
Для иллюстрации рассмотрим фрагмент другой программы для вычисления суммы произведений элементов строк той же матрицы:
double a[10][5];
for (j=0,s=0.0; j<10; j++)
{
for (i=0,p=1.0; i<5; i++)
{
if (a[j][i] ==0.0) break;
p*=a[j][i];
}
if (i <5) continue;
s+=p;
}
Внутренний цикл по i прерывается, если обнаруживается нулевой элемент матрицы. В этом случае произведение элементов столбца заведомо равно нулю, и его не нужно вычислять. Во внешнем цикле проверяется значение i. Если i<5, т.е. элемент a[j][i] оказался нулевым, то оператор continue передает управление на ближайший оператор цикла, и, таким образом, не происходит увеличение s на величину "недосчитанного" значения р. Если внутренний цикл завершен естественно, то i равно 5, и оператор continue не может выполняться.
Ход работы
1 Изучить теоретические сведения.
2 В соответствии с индивидуальным заданием разработать алгоритм и программу с применением указателей на массив и массив указателей для работы с двумерным и трёхмерным массивом.
3 Показать использование различных видов синтаксических конструкций, включая индексные выражения и указатели на тип элементов массива для доступа к элементам массива.
4 Набрать и отладить программу на компьютере.
5 Изучить работу операторов.
6 Получить результаты.
7 Оформить отчет.
8 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Индивидуальное задание к лабораторной работе
Составить программу для обработки многомерных массивов с использованием циклов. Индивидуальные задания приведены в таблице .
Вар. | Условие задачи |
Вычислить произведение отрицательных чисел строки, у которой второй элемент четный | |
Найти сумму нечетных чисел столбца, у которого первый элемент больше второго | |
Определить количество отрицательных чисел столбца, у которого первый элемент меньше последнего | |
Найти сумму положительных кратных 5 чисел столбца, у которого четвертый элемент отрицательный | |
Найти произведение нечетных чисел столбца, у которого первый элемент нуль | |
Найти произведение положительных чисел столбца, последний элемент которого нуль | |
Найти сумму нечетных элементов строки, первый элемент которой кратен 3 | |
Найти максимальное отрицательное число строки, у которой второй элемент больше 20 | |
Найти сумму положительных четных чисел строки, у которой первый элемент отрицательный | |
Найти минимальное положительное число строки, у которой пятый элемент отрицательный | |
Найти минимальное четное число столбца, у которого первый элемент больше третьего | |
Найти сумму положительных кратных 5 чисел столбца, у которого четвертый элемент отрицательный | |
Найти количество отрицательных не кратных 3 чисел строки, у которой первый элемент нуль | |
Найти количество положительных четных чисел строки, у которой пятый элемент больше 30 | |
Найти произведение квадратов положительных четных чисел столбца, у которого второй элемент нуль | |
Найти среднее арифметическое отрицательных элементов строки, у которой четвертый элемент отрицательный | |
Найти разность сумм отрицательных и положительных элементов строки, у которой третий элемент кратен 3 | |
Найти среднее геометрическое модулей отрицательных элементов столбца, у которого первый элемент положительный | |
Найти все кратные 7 положительные элементы столбца, у которого третий элемент нечетный | |
Найти среднее арифметическое положительных элементов строки, у которой первый элемент меньше второго | |
Найти среднее геометрическое кратных 3 элементов столбца, у которого шестой элемент не кратен 4 | |
Найти частное от деления количества отрицательных элементов столбца, у которого первый элемент нуль, на их сумму | |
Найти все положительные нечетные числа строки, у которой второй элемент не кратен 3 | |
Найти количество отрицательных кратных 5 элементов столбца, у которого второй элемент равен третьему | |
Найти номер максимального четного числа строки, у которой первый элемент равен последнему | |
Найти номер минимального нечетного числа строки, у которой первый элемент равен последнему | |
Найти номер максимального четного числа столбца, у которого первый элемент равен последнему | |
Найти номер минимального нечетного числа столбца, у которого первый элемент равен последнему | |
Найти сумму максимального и минимального чисел строки, у которой второй элемент нечетный | |
Найти номер минимального нечетного числа строки, у которой первый элемент четный |
Контрольные вопросы для подготовки и самостоятельной работы
1 Приведите примеры объявления массивов с различной размерностью. Объясните организацию хранения элементов массива.
2 Как происходит масштабирование при последовательном разыменовании указателя (имени массива) в процессе доступа к элементам? Какие синтаксические конструкции можно использовать для доступа к элементам массива?
3 Приведите общую формулу для массива <Тип> <Имя> [N][M][K] при доступе к заданному элементу <Имя> [i][j][k]и объясните её.
4 Как осуществляется инициализация многомерных массивов?
5 Зависит ли инициализация массива от класса памяти при объявлении?
6Как использовать средство typedefдля объявления типа массива.
7Какой из индексов можно не указывать при явной инициализации массивов?
8Можно ли указывать не все элементы при инициализации? Как использовать скобки при инициализации?
9Какой индекс не используется при расчёте величины смещения указателя в процессе доступа к элементу массива?
10Для чего используется указанный индекс?
Лабораторная работа № 14