- •Содержание
- •Введение
- •1. Структурное программирование
- •4. Семь основных элементов программирования
- •4.1. Вывод
- •4.1.1. Функция printf
- •4.1.2. Другие функции вывода: puts и putchar
- •4.2 Ввод
- •4.2.1. Функция scanf
- •4.2.2. Использование gets и getch для ввода
- •4.3. Потоковый ввод-вывод
- •4.4. Типы данных
- •4.4.1. Числа с плавающей точкой
- •4.4.2. Три типа целых
- •4.4.3. Определение строки
- •4.4.4. Идентификаторы
- •4.4.5. Преобразования типов
- •4.5. Операции
- •4.5.1. Операции присваивания
- •4.5.2. Одноместные и двуместные операции
- •4.5.4. Побитовые операции
- •4.5.5. Комбинированные операции
- •4.5.6. Адресные операции
- •4.6. Условные операторы
- •4.6.1. Операции сравнения
- •4.6.2. Логические операции
- •4.6.3. Операторы присваивания
- •4.6.5. Оператор запятая
- •4.6.6. Оператор if
- •4.6.7. Условный оператор (?:)
- •4.7. Циклические конструкции в программах
- •4.7.1. Цикл while
- •4.7.2. Цикл for
- •4.7.3. Цикл do...While
- •4.7.4. Оператор switch (переключатель)
- •4.7.5. Оператор break
- •4.7.6. Оператор continue
- •4.7.7. Оператор goto
- •4.7.8. Использование команд передачи управления
- •4.8. Функции
- •4.8.1. Анализ программы
- •4.8.2. Глобальные описания
- •4.8.3. Описание функции void
- •4.8.4. Оператор return
- •4.8.5. Использование прототипов функций и полных определений функций
- •4.9. Комментарии
- •5. Обзор структур данных
- •5.1. Указатели
- •5.1.1. Динамическое распределение
- •5.1.2. Указатели и функции
- •5.1.3. Адресная арифметика
- •5.1.4. Неправильное употребление указателей
- •5.1.5. Использование неинициализированных указателей
- •5.1.6. Ошибки при передаче по адресу
- •5.2. Массивы
- •5.2.1. Массивы и указатели
- •5.2.2. Массивы и строки
- •5.2.3. Многомерные массивы
- •5.2.4. Массивы и функции
- •5.2.5. Индексы массивов
- •5.3. Структуры
- •5.3.1. Структуры и указатели
- •5.4. Операции с файлами
- •5.5. Использование директивы typedef
- •Соглашения, принятые для описания алгоритмов
- •And do else fi for goto if od set then through to while
- •Библиографический список
4.8.2. Глобальные описания
Константы, типы данных и переменные, описанные вне функций (включая main), считаются глобальными ниже точки описания. Это позволяет использовать их внутри функций в пределах всей программы вследствие того, что они уже описаны и известны во всех функциях ниже точки описания. Если вы переместите описание INFINITY в конец программы, то компилятор выдаст сообщение о том, что им обнаружены две ошибки: одна из них – в get_ratio, а другая – в put_ratio. Причина ошибок – использование неописанного идентификатора.
Функции могут быть размещены в программе в различном порядке и считаются глобальными для всей программы, включая встроенные функции, описанные до их использования. Старайтесь корректно использовать функции, которые еще вами не определены и не описаны; когда компилятор обнаружит функцию, которую прежде он не встречал, он определит тип значений, возвращаемый функцией как int. Если вы ранее определили тип возвращаемых ею значений как, например, char*, то компилятор выдаст ошибку несоответствия типов данных.
4.8.3. Описание функции void
В С++ существует стандартный тип void, который представляется как разновидность “нулевого” типа. Любая функция, не возвращающая явно какое-либо значение, может быть объявлена как функция типа void. Заметим, что большинство программ, использующих динамическое распределение памяти (например, malloc), описываются как имеющие тип void. Это означает, что они возвращают нетипизированный указатель, значение которого вы затем (в С++) можете присвоить указателю любого типа данных без предварительного преобразования типов (хотя преобразования типов лучше использовать повсеместно, для сохранения совместимости).
4.8.4. Оператор return
Существует два основных способа использования оператора return.
Во-первых, в том случае, когда функция возвращает значение, и вам необходимо использовать его в зависимости от того, какое значение возвращается в вызывающую программу, например:
int imax(int a, int b);
{
if (a > b) return(a);
else return(b);
}
Здесь функция использует оператор return для возвращения максимального из двух переданных ей значений.
Второй способ использования оператора return состоит в возможности выхода из функции в некоторой точке до ее завершения. Например, функция может определить условие, по которому производится прерывание. Вместо того, чтобы помещать все основные операторы функции внутрь оператора if, для выхода можно использовать оператор return. Если функция имеет тип void (т.е. не возвращает никакого значения), можно написать return без возвращаемого значения.
Рассмотрим модификацию программы imin, предложенной ранее:
int imin(int list[ ], int size)
{
int i, minindx, min;
if (size <= 0) return (-1);
}
В этом примере, если параметр size меньше либо равен нулю, то массив list пуст, в связи с чем оператор return вызывает выход из функции.
Заметим, что в случае ошибки возвращается значение –1. Т.к. –1 никогда не может быть индексом массива, вызывающая программа регистрирует факт возникновения ошибки.
