Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
356
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

Скалярное произведение векторов.

Скалярное произведение векторов. Выше была определена функция Scalar_Product() для вычисления скалярного произведения векторов, в которой параметрами являлись массивы. Следующая программа использует эту функцию:

В начале программы с помощью #define введена препроцессорная константа MAX_INDEX. Далее определены массивы, у которых пределы изменения индексов заданы на препроцессорном уровне. Именно эти пределы проверяются после ввода размерности векторов (n). В теле функции main( ) приведен прототип функции Scalar_Product(). Обратите внимание, что в прототипе отсутствуют имена формальных параметров. Тот факт, что два параметра являются одномерными массивами, отображен спецификацией float[].

Результаты выполнения программы:

Другая попытка выполнить программу:

Диаметр множества точек. Как еще один пример использования функций с массивами в качестве параметров рассмотрим программу определения диаметра множества точек в многомерном евклидовом пространстве. Напомним, что диаметром называется максимальное расстояние между точками множества, а расстояние в евклидовом пространстве между точками х={ xt } ; y={yi} i=l,...,n, определяется как

Введем ограничения на размерность пространства: N_MAX<=10 и количество точек K_МАХ<=100. Текст программы может быть таким:

В программе особый интерес представляет обращение к функции distance( ), где в качестве фактических параметров используются индексированные элементы a[i], a[m]. Каждый из них по определению есть одномерный массив из n элементов, что и учитывается в теле функции. Для задания размеров массива а[ ][] и предельных значений переменных k и n используются препроцессорные константы K_МАХ и N_MAX. Их нельзя определить как переменные, т.е. ошибочной будет последовательность:

При определении массивов их размеры можно задавать только с помощью константных выражений.

2.6. Переключатели

Основным средством для организации мультиветвления служит оператор-переключатель, формат которого имеет вид:

switch(выражение)

{ case константа1: операторы_1;

case константа2: операторы_2;

default: операторы;

}

В этом операторе используются три служебных слова: switch, case, default. Первое из них идентифицирует собственно оператор-переключатель. Служебное слово case с последующей константой является в некотором смысле меткой. Константы могут быть целыми или символьными и все должны быть различными (чтобы метки были различимы). Служебное слово default также обозначает отдельную метку. При выполнении оператора (рис. 2.6, а) вычисляется выражение, записанное после switch, и его значение последовательно сравнивается с константами, которые помещены вслед за case. При первом же совпадении выполняются операторы, помеченные данной меткой. Если выполненные операторы не предусматривают какого-либо перехода (т.е. среди них нет ни goto, ни return, ни exit(), ни break), то далее выполняются операторы всех следующих вариантов, пока не появится оператор перехода или не закончится переключатель.

Рис. 2.6. Переключатель (а) и альтернативный выбор (6):

а - если выражение равно МК, то выполняются операторы Sk, Sk+1 Sn , S;

б - если выражение равно LK, то выполняются только операторы Sk

Операторы вслед за default выполняются, если значение выражения в скобках после switch не совпало ни с одной константой после case. Метка default может в переключателе отсутствовать. В этом случае при несовпадении значения выражения с константами переключатель не выполняет никаких действий. Операторы, помеченные меткой default, не обязательно находятся в конце (после других вариантов переключателя). Уточним, что default и "case константа" не являются метками в обычном смысле. К ним, например, нельзя перейти с помощью оператора goto.

На рис. 2.6 приведены схемы переключателя (рис. 2.6, а) и оператора альтернативного выбора или селектора (рис. 2.6 , б), отсутствующего в языке Си.

На рис. 2.7 изображена схема альтернативного выбора, реализованная при помощи переключателя и дополнительных операторов, введенных в S1, S2,..., Sn.

Рис. 2.7. Альтернативный выбор с использованием переключателя. В число операторов каждой группы Sk добавлен оператор выхода из переключателя

Для иллюстрации работы переключателя рассмотрим программу, которая читает любую десятичную цифру и выводит на экран ее название:

Пример результатов выполнения программы:

Программа прекращает выполнение, как только будет введен символ, отличный от цифры. Завершение программы обеспечивает оператор return; который в данном случае передает управление операционной системе, так как выполняет выход из функции main( ).

Переключатель вместе с набором операторов break реализует в этой программе альтернативный выбор (см. рис. 2.7). Если удалить все операторы break, то работа переключателя в этой программе будет соответствовать схеме рис. 2.6, а.

Несколько "меток" case с разными значениями констант могут помечать один оператор внутри переключателя, что позволяет еще больше разнообразить схемы построения операторов switch.