- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •2.1. Полная форма
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •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
§ 1. Функции без результатов. Передача параметров по значению
1.1. Примеры. Правила оформления и вызова функций
П р и м е р 1. Пусть необходимо дважды вывести горизонтальную линию, состоящую из 40 символов псевдографики “” с кодом 196.
// 1-й вариант (без функции)
int main()
{ cout<<"Testing of function: \n the first line ";
cout<<endl;
for (int i=1; i<=40; i++)
cout<<'-';
cout<<endl;
cout<<" The second line";
cout<<endl;
for (int i=1; i<=40; i++)
cout<<'-';
cout<<endl;
getch(); return 0;
}
Выделенная часть, как видно, повторяется дважды. Оформим её в виде функции, которая только выводит и никаких результатов, в смысле значений переменных, не получает. Заметим, что в виде функции можно оформить любую, не обязательно повторяющуюся, логически завершённую часть программы.
// 2-й вариант (с функцией)
#include <iostream.h>
#include <conio.h>
void LINE1(); // Прототип (объявление) функции.
int main()
{ // Начало функции main()
cout<<"Testing of function: \n the first line ";
LINE1(); // Вызов функции.
cout<<" The second line";
LINE1(); // Вызов функции.
getch(); return 0;
} // Конец функции main()
// Повторяем заголовок функции без символа “;” в конце
void LINE1()
// Описание (определение) функции, т. е. её текст.
{ int i;
cout<<endl;
for (i=1; i<=40; i++)
cout<<'-';
cout<<endl;
}
Перед функцией main() записываем прототип (объявление, заголовок) функции. Ключевое слово void в данном случае означает, что функция не возвращает результаты. Далее следует имя функции по обычным правилам записи идентификаторов (см. 1.5). Пустые круглые скобки означают, что функция не имеет никаких параметров, ни входных, ни выходных (результатов). Слово void при этом в круглых скобках (но не в начале ! ) можно не писать, как это было в “старом” языке С. Заметим, что после прототипа обязательно записывается символ “;” (точка с запятой), а при описании функции этот символ не пишем.
Описание функции размещаем после текста функции main(). Повторяем заголовок, но без “;” в конце, и затем записываем её текст. При необходимости внутри функции объявляются так называемые локальные переменные (переменная i для счётчика). Они не являются ни входными, ни выходными переменными, а предназначены для хранения промежуточных величин. Такие переменные можно использовать только внутри данной функции. Здесь, как и раньше, переменную i можно было объявить в заголовке оператора for.
П р и м е р 2. Усложним задачу. Пусть надо первый раз вывести, например, 20 символов “*” в 5й, а не в текущей строке, а второй — линию из 40 символов “–” в 10й строке. Поэтому функция будет иметь три входных параметра: Len для длины линии, y для номера строки экрана, в которой будем выводить линию, и ch для выводимого символа.
void LINE2(int Len, int y, char ch);
int main()
{ cout<<"Testing of function: \n The first call of function";
LINE2 ( 20 , 5 , '*');
int LEN, Y, C=196;
cout<<" The second call of function";
cin>>LEN>>Y;
LINE2(LEN, Y, C);
getch(); return 0;
}
void LINE2(int Len, int y, char ch)
{ gotoxy(1,y);
for (int i=1; i<=Len; i++)
cout<<ch;
cout<<endl;
}
В прототипе функции и при её описании в заголовке обязательно надо записывать типы параметров, даже если они повторяются, то есть нельзя записать
