Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_po_si.doc
Скачиваний:
12
Добавлен:
12.11.2018
Размер:
11.78 Mб
Скачать

Вычисление объема цилиндра

В основной программе использован оператор return, прерывающий исполнение программы. Оператор return выполняется после цикла ввода исходных данных, если количество неудачных попыток ввода (значений а и b) равно 5. Задан прототип функции w( ), т.е. задан ее прототип, что необходимо, так как она возвращает значение, отличное от int, и определена стандартным образом позже (ниже), чем обращение к ней. Обращение к функции w() использовано в качестве фактического параметра функции printf( ).

Пример выполнения программы:

Вычисление площади треугольника.

Вычисление площади треугольника. Для определения площади треугольника по формуле Герона

достаточно задать длины его сторон А, В, С и, вычислив полупериметр р=(А+В+С)/2, вычислить значение площади по формуле. Однако для составления соответствующей программы необходима функция вычисления квадратного корня. Предположив, что такой функции в библиотеке стандартных математических функций нет, составим ее сами. В основу положим метод Ньютона:

где z - подкоренное выражение; х0 - начальное приближение.

Вычисления будем проводить с фиксированной относительной точностью . Для простоты условием прекращения счета будет выполнение неравенства Для вычисления абсолютного значения введем еще одну функцию с именем abs() (хотя такая функция, так же как функция для вычисления квадратного корня, есть в стандартной библиотеке). Программа может быть такой:

В программе используются три функции. Основная функция main( ) вызывает функцию sqr( ), прототип которой размещен выше вызова. Функция abs( ) не описана в основной программе, так как здесь к ней нет явных обращений. Функция abs() вызывается из функции sqr( ), поэтому ее прототип помещен в тело функции sqr( ).

В процессе выполнения программы может возникнуть аварийная ситуация, когда введены такие значения переменных а, b, с, при которых они не могут быть длинами сторон одного треугольника. При обнаружении такой ситуации выдается предупреждающее сообщение "Треугольник построить нельзя!" и основная функция main() завершается оператором return. В функции sqr( ) также есть защита от неверных исходных данных. В случае отрицательного значения подкоренного выражения (х) нужно не только прервать вычисление значения корня, но и завершить выполнение программы с соответствующим предупреждающим сообщением. Оператор return для этого неудобен, так как позволяет выйти только из той функции, в которой он выполнен. Поэтому вместо return; при отрицательном значении х в функции sqr( ) вызывается стандартная библиотечная функция exit(), прекращающая выполнение программы. Прототип (описание) функции exit() находится в заголовочном

файле stdlib.h, который включается в начало текста программы препроцессорной директивой.

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

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

Скалярное произведение векторов. Выше была определена функция 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. Их нельзя определить как переменные, т.е. ошибочной будет последовательность:

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