- •Алфавит.
- •Объявления и определения
- •Структура и компоненты простой программы
- •Текст программы и препроцессор.
- •Структура программы.
- •Функция форматированного вывода.
- •Программы печати предельных констант.
- •Применимость вещественных данных.
- •Выделение лексем из текста программы.
- •2.2. Элементарные средства программирования Деление операторов языка Си на группы.
- •Программа оценки машинного нуля.
- •Трассировочная таблица
- •Переключатели
- •Ввод данных.
- •Вычисление объема цилиндра.
- •Операторы цикла
- •Три формы операторов цикла.
- •Приближенное значение экспоненты.
- •Оператор break.
- •Сумма отрезка степенного ряда.
- •Оператор continue.
- •Суммирование положительных чисел.
- •2.4. Массивы и вложение операторов цикла Массивы и переменные с индексами.
- •Вычисление среднего и дисперсии.
- •Упорядочение в одномерных массивах.
- •Инициализация массивов.
- •Моделирование многомерных массивов.
- •Ввод и вывод
- •7.1. Потоковый ввод-вывод
- •7.1.1. Открытие и закрытие потока
- •7.1.2. Стандартные файлы и функции для работы с ними
- •Ввод-вывод отдельных символов.
- •Ввод-вывод строк.
- •Форматный ввод-вывод.
- •Спецификаторы форматной строки для функции форматного вывода
- •Спецификаторы форматной строки для функции форматного ввода
- •Работа с файлами на диске
- •Двоичный (бинарный) режим обмена с файлами.
- •Строковый обмен с файлами.
- •Позиционирование в потоке.
- •Трехъязычный словарь "Цифры
- •7.2. Ввод-вывод нижнего уровня
- •7.2.1. Открытие / закрытие файла
- •7.2.2. Чтение и запись данных
- •7.2.3. Произвольный доступ к файлу
- •Теоретические положения Управление экраном в текстовом режиме в ms dos
- •Основные функции работы в текстовом режиме
- •2.5. Функции Определение функций.
- •Функция для вычисления объема цилиндра.
- •Функция для вычисления скалярного произведения векторов.
- •Обращение к функции и ее прототип.
- •Вычисление объема цилиндра
- •Вычисление площади треугольника.
- •Скалярное произведение векторов.
- •Препроцессорные средства
- •Глава 6. Структуры и объединения
- •6.1. Структурные типы и структуры Производные типы.
- •Структурный тип.
- •Определение структур.
- •Выделение памяти для структур.
- •Инициализация и присваивание структур.
- •Доступ к элементам структур.
- •Модули:
- •Некоторые понятия:
Вычисление объема цилиндра
В основной программе использован оператор 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. Их нельзя определить как переменные, т.е. ошибочной будет последовательность:
При определении массивов их размеры можно задавать только с помощью константных выражений.