- •Базовые понятия информатики. Понятие «Информатика» и «Информация»
- •Информация
- •Информационные технологии
- •Понятие алгоритма. Свойства и классы алгоритмов. Формы представления алгоритмов
- •Понятие алгоритма. Базовые алгоритмические структуры
- •Представление данных в памяти персонального компьютера.
- •Принципы обработки программных кодов
- •Компиляторы
- •Интерпретатор
- •Язык с. История развития. Основные свойства языка
- •Отличительные особенности языкаC
- •Элементы языка c
- •Константы
- •Базовые типы данных
- •Директива #include
- •Использование void
- •Инструкция return
- •Описание переменных
- •Обработка данных. Операторы
- •Арифметические операторы
- •Приоритет операторов и порядок вычислений
- •Используемые алгоритмы обработки данных
- •Аккумуляторы
- •Преобразования типов данных
- •Декларации и дефиниции функций
- •Формальные и фактические параметры. Вызов функций
- •Возврат функцией значений
- •Переменные в функциях
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Значения параметров по умолчанию
- •Перегрузка функций
- •Рекурсия
- •Встроенные функции
- •Обработка символьных данных
- •Функция puts()
- •Функция putchar()
- •Функция printf()
- •Выбор правильных средств вывода информации
- •Функция gets()
- •Функция getchar()
- •Функция scanf()
- •Выбор соответствующих средств ввода данных
- •Управляющие структуры Структуры выбора (if / else)
- •Структуры выбора (switch/case/default)
- •Структуры повторения (циклы)
- •Использование цикла for
- •Использование цикла do...While (постусловие)
- •Использование цикла while (предусловие)
- •Операторы передачи управления Оператор безусловного перехода goto
- •Оператор break
- •Оператор continue
- •Препроцессор языка Си
- •Массивы Объявление переменной массива
- •Использование индексной переменной
- •Инициализация массива при объявлении
- •Передача массивов в функции
- •Использование констант при объявлении массивов
- •Символьные строки
- •Массивы строк
- •Алгоритмы сортировки массива
- •Поиск заданного элемента в массиве
- •Указатели
- •Объявление указателя
- •Указатели на массивы
- •Операции над указателями
- •Указатели на строку
- •Указатели на функцию
- •Функции, возвращающие указатель
- •Указатели на многомерные массивы
- •Массивы указателей
- •Динамическое распределение памяти
- •Структуры данных
- •Реализация одних структур на базе других
- •Очередь
- •Операции над очередями
- •Операции над стеками
- •Ссылочные реализации структур данных
- •Операции над списками
Возврат функцией значений
Очень часто от функции требуется, чтобы она не только выполняла определенную работу (например, вывод сообщения с помощью printf), но и возвращала результат вычислений в вызывающую функцию. Для обеспечения возврата результата в вызывающий код в функции должен использоваться оператор return, который имеет следующий формат:
return(result);
Тип функции определяет тип возвращаемого ею значения (int,float, char и т.д.). Например, если функция возвращает значение типа int, то имени функции должно предшествовать то же самое имя типа:
int some_function(int value)
{
// Оператор функции
}
Следующая функция i_cube возвращает куб от целого значения, определенного в качестве параметра. Например, если в функцию передается 5, то i_cube будет возвращать значение равное 5*5*5 или 125:
int i_cube (int value)
{
return(value * value * value);
}
Как можно видеть, для возврата результата вычислений в вызывающий код функцией используется оператор return. В вызывающей функции возвращаемое функцией значение может быть присвоено переменной или использовано при вызове некоторой другой функции (такой кик printf) следующим образом:
result = i_cube(5);
printf("Kyб от 5 равен %d\n", i_cube(5));
Если функция должна возвращать значение другого типа (float, double, char и т.д.), то этот тип необходимо задавать при объявлении функции. В следующей программе функция average_value используется для вычисления среднего арифметического трех значений типа int. При этом значение, которое возвращается функцией, имеет тип float:
#include<stdio.h>
float average_value(int a, int b, int c)
{
return ((a + b + с) / 3.0);
}
void main(void)
{
printf("Среднее от 100, 133 и 155 равно %f\n",
average_value(100, 133, 155));
}
Как можно видеть, тип возвращаемого функцией значения определяется в заголовке функции:
float average_value(int a, int b, int с)
Примечание: Если компилятору не сообщается тип возвращаемого функцией значения, то в качестве такового по умолчанию считается int.
Встречая оператор return, Си немедленно завершает выполнение функции, возвращая указанное значение в вызывающую функцию. Любые операторы, следующие в функции за оператором return, игнорируются. Выполнение программы продолжается с оператора, следующего за оператором вызова данной функции.
По мере увеличения количества созданных функций, вероятно, встретятся функции, которые не должны возвращать значения. Если функция не должна возвращать значение, следует объявить ее типа void следующим образом:
void my_function (int age, char *name);
Если в дальнейшем в программе будет предпринята попытка использовать значение функции
result = my_function (32, "Jamsa");
то компилятор выдаст ошибку.
Переменные в функциях
Если программа содержит другие функции, кроме функции main(), вам необходимо решить, где и как вы будете определять переменные. Си имеет несколько типов переменных. Для временного хранения информации используется стек. Основное назначение стека - организация вызова функций на выполнение. При вызове в программе функции Си прежде всего сохраняет в стеке адрес оператора, следующего за вызовом функции (называемый адресом возврата). Далее Си размещает в стеке параметры функции в порядке справа налево.