
- •8.Совместимость и преобразование типов. Явное и неявное преобразование.
- •10. Оператор присвоения. Комбинированные операторы присвоения. Математические и логические операции, операции сравнения . Ограничения на применения операторов(несовместимость типов).
- •11.Условная инструкция. Условный оператор. Пример.
- •12. Оператор множественного выбора. Пример. Управление оператором множественного выбора с помощью оператора break.
- •Вопрос 19. Регулярные структурированные типы. Одномерные массивы. Примеры работы с одномерными массивами (инвертирование массива относительно центрального элемента, относительно к-го элемента)
- •Вопрос 20. Регулярные структурированные типы. Одномерные массивы. Примеры работы с одномерными массивами (сложение векторов, скалярное произведение векторов, проверка на равенство)
- •Вопрос 22-24 Сортировка массивов. Методы сортировки (простого выбора, простой вставки, простого обмена). На примере массива структур.
- •Функции
- •39. Текстовые файлы
- •Функции вывода в стандартный и файловые потоки
- •Int printf([строка формата],
- •Функции ввода из стандартного и файловых потоков
- •Int scanf([строка формата],
- •Int fscanf(file*f,[строка формата],
- •40. Бинарные файлы с
- •41. Пользовательские типы данных
- •42. Модульная организация программы
Функции
Основные понятия
Функция представляет собой самостоятельный фрагмент текста программы, предназначенный для выполнения некоторой задачи. Функция имеет уникальное имя, которое используется для ее вызова. В языке C функция играет такую же роль, как и функции, подпрограммы и процедуры в других языках программирования – она позволяет один и тот же фрагмент программы использовать многократно. Использование функций придает программе модульную структуру, облегчает чтение кода и внесение в него исправлений. В общем случае функция выполняет действия и возвращает вычисленное значение в вызвавшую ее функцию. Функция получает данные при вызове через свои аргументы. Она может возвращать вычисленное значение, при этом возвращаемое значение подставляется на место вызова функции, где бы этот вызов ни находился. В качестве частного случая функция может не иметь аргументов и не возвращать значения. При этом она выполняет некоторые действия, не связанные с изменением данных.
С использованием функций в языке C связаны три понятия:
определение (описание действий, выполняемых функцией);
объявление (задание формы обращения к функции);
вызов.
В определении (описании) функции должны присутствовать
имя;
типы, имена и количество ее формальных параметров;
объявления переменных и операторы (тело функции).
Кроме того, в определении могут быть заданы тип значения, возвращаемого функцией, и класс памяти.
В языке C нет требования, чтобы определение функции обязательно предшествовало вызову функции. Определение может находиться где угодно, например, за определением функции main() или в другом файле. Обязательным условием является объявление функции до ее вызова. Это необходимо для проверки соответствия типов фактических аргументов типам формальным параметров, а также типа возвращаемого функцией значения.
Объявление функции называется прототипом функции.
В прототипе функции (в C++ прототип обязателен) должны присутствовать
имя функции;
типы и число формальных параметров;
тип возвращаемого значения.
Формат прототипа тот же, что и у определения функции, но прототип не имеет тела функции. Заголовок оканчивается точкой с запятой.
Процедуры:
Функции, которые не возвращают значения, тип таких функций void.
Переменные
Переменная – это именованная область памяти, к которой имеется доступ из программы, куда можно помещать значения и затем извлекать их. Каждая переменная С++ имеет определенный тип, характеризующий размер и расположение этой области памяти, диапазон значений, которые она может хранить, и набор операций, применимых к этой переменной. Перед использованием любая переменная должна быть описана.
Общий вид оператора описания переменных
[класс памяти] [const] тип ИМЯ [инициализатор];
правила задания составных частей этого оператора.
Необязательный спецификатор класса памяти может принимать одно из значений: auto, extern, static, register.
Модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой или просто константой.
При описании можно присвоить переменной начальное значение, это называется инициализацией. Инициализатор можно записывать в двух формах:
- со знаком равенства: = значение;
- в круглых скобках: (значение).
Константа должна быть инициализирована при объявлении. В одном операторе можно описать несколько переменных одного типа, разделяя их запятыми, например,
int a, SUM = 0;
const char S = 'A';
char t(66), z; //t=’B’,
float pi = 3.14, x(3.5), m=pi+x; //x=3.5
Если тип инициализирующего значения не совпадает с типом переменной, выполняются преобразования типа по определенным правилам.
Описание переменной, кроме типа и класса памяти, явно или по умолчанию задает ее область действия. Класс памяти и область действия зависят не только от собственно описания, но и от места его размещения в тексте программы.
Область действия идентификатора – это часть программы, в которой его можно использовать для доступа к связанной с ним области памяти. В зависимости от области действия переменная может быть локальной или глобальной.
Если переменная определена внутри блока (блок ограничен фигурными скобками), она называется локальной; область ее действия – от точки описания до конца блока, включая все вложенные блоки. Если переменная определена вне любого блока, она называется глобальной, и областью ее действия считается файл, в котором она определена, от точки описания до его конца.
Класс памяти определяет время жизни и область видимости программного объекта (в частности, переменной). Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления.
Время жизни может быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).
Областью видимости идентификатора называется часть текста программы, из которой допустим обычный доступ к связанной с идентификатором областью памяти. Чаще всего область видимости совпадает с областью действия. Исключением является ситуация, когда во вложенном блоке описана переменная с таким же именем. В этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия. Тем не менее, к этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимости ::.
Для задания класса памяти используются следующие спецификаторы.
auto – автоматическая переменная. Память под нее выделяется в стеке и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее определение. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни – с момента описания до конца блока. Для глобальных переменных этот спецификатор не используется, а для локальных он принимается по умолчанию, поэтому задавать его явным образом большого смысла не имеет.
extern означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту) и используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. Если переменная в том же операторе инициализируется, оператор extern игнорируется.
static – статическая переменная. Время жизни – постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны.