- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
Void line2(int Len, y, char ch) // ошибка,
как при объявлении переменных. Имена параметров обязательны только в заголовке описания, а в прототипе можно указать только их типы: void LINE2(int , int , char ).
Вызов функции типа void выполняется, как и на Pascal, без использования дополнительного оператора, как это имеет место в некоторых других языках. Достаточно записать имя функции и в скобках, если есть, параметры. Если параметры отсутствуют, то и в прототипе, и в описании, и при вызове функции необходимо обязательно записать пустые круглые скобки.
1.2. Формальные и фактические параметры
Параметры, записанные в скобках заголовка функции, назовём формальными параметрами (Len, y и ch). Параметры, записанные при вызове функции, назовём фактическими параметрами, или аргументами (LEN, Y, C). Между ними должно быть следующее соответствие:
-
в типе, с учётом их совместимости. Например, вместо параметра типа char можно передать не только символ, как показано в первом вызове, но и его код типа int, как показано во втором вызове (гл. 4). Вместо формального вещественного параметра можно передать целый, но не наоборот;
-
в порядке следования. Нарушение этого требования приведёт либо к ошибке компиляции, либо повлияет на результат. Если в нашем примере вызвать функцию LINE2(“*”, 5, 20), то компилятор сообщает о невозможности преобразования char в int. Если же вызвать LINE2 (Y, LEN, ‘-‘), то в строке LEN будет выведено Y символов “-“;
-
в количестве параметров. Это требование справедливо, если не используются параметры по умолчанию (см. 6.2).
1.3. Передача параметров по значению
При передаче в функцию входных параметров, изменение которых не возвращается в вызывающую функцию, используется метод, который называется передачей по значению. Он имеет следующие особенности:
-
для фактического и формального параметров компилятор отводит разные ячейки памяти;
-
при выполнении программы содержимое аргумента копируется в формальный параметр, то есть при первом вызове в нашем примере выполняется Len=20, y=5 и ch=’*’ , хотя это явно нигде не записывается;
-
из первой особенности следует, что если в функции изменить формальный параметр, то это изменение не повлияет на значение переменной, используемой при вызове, то есть фактического параметра. Если бы в функции изменили y (например, там было бы записано y++), то значение соответствующей переменной Y в головной функции после второго вызова осталось бы без изменения, т. е. тем, что ввели;
-
в качестве фактического параметра, соответствующего параметрузначению, может быть выражение соответствующего или совместимого типа. Например, функцию можно вызвать так: LINE2 ( LEN*2, Y+1, ‘*’). Как частный случай можно передавать константу, как показано при первом вызове, или переменную (см. второй вызов). При этом её имя, используемое при вызове, не обязательно должно отличаться, как в нашем примере, от имени формального параметра. В головной программе переменную для фактической длины символов можно было бы тоже назвать Len. Но и в этом случае это разные ячейки памяти.