- •Функции.
- •Вызов функции с переменным числом параметров
- •Функция main и её параметры.
- •Директивы препроцессора (прекомпилера).
- •Объявление указателей.
- •Модификатор const.
- •Операции.
- •Указатели на различные типы.
- •Указатель на void.
- •Применение указателей для передачи данных между функциями.
- •Массивы.
- •Индексация массивов.
- •Хранение массива в памяти. Адреса элементов. Хранение массива в памяти.
- •Массивы и константные указатели.
- •Статическое и динамическое выделение памяти.
- •Функции calloc, malloc, free
- •Функция realloc
- •Передача массивов в качестве аргументов функции.
- •Указатели на функции.
- •Библиотеки функций.
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Работа со строковыми данными (стрингами). Представление строковых данных в языке c.
- •Функции работы со строками.
- •Потоковый ввод-вывод
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Функции работы с файлами.
- •Потоковый ввод-вывод
- •Работа с потоками
- •Курсор.
- •Ввод-вывод отдельных символов и строк.
- •Форматированный ввод-вывод информации в файл.
- •Блочный потоковый ввод-вывод
- •Смена текущей позиции в файле. Проверка конца файла.
- •Функции доступа к файлам нижнего уровня.
- •Методы сортировки данных.
- •Введение
- •Сравнение методов сортировки
- •Программная реализация алгоритмов сортировки
- •Метод пузырька.
- •Метод обмена.
- •Метод вставки.
- •Метод Шелла.
- •Метод кучи (бинарной кучи).
- •Очередь
- •Линейный список
- •Физическое (машинное) представление линейных списков
- •Программные реализации структур данных. Стек. Реализация в виде массива.
- •Стек. Связанное представление.
- •Очереди. Реализация в виде массива.
- •Дерево. Связанное представление.
- •Рекурсивный вызов функций.
- •Структуры. Объединения. Перечисления.
- •Перечисление (enum).
- •Производные типы данных.
- •Структура (struct).
- •Побитовое описание полей структуры.
- •Объявление переменных, реализующих структуру.
- •Доступ к элементам структуры.
- •Объединение (union).
- •Вложенное описание структур и объединений.
- •Описание структур и объединений в виде пользовательского типа.
- •Передача структур и объединений в виде параметров функции.
- •Инициализация структур и объединений.
- •Выгода от использования структур
Информатика 2-й семестр, ответы на билеты:
Функции. Определение (описание) функции. Прототип (декларирование) функции. Параметры функции. Передача аргументов в функцию.
Функции.
Философия разработки программ в среде языка C заключается в использовании функций в качестве строительных блоков. Функция – это самостоятельный фрагмент исходного текста программы, предназначенный для конкретной задачи. Функции избавляют от повторного программирования, если в программе несколько раз нужно выполнять определенную задачу, соответствующую функцию надо создать лишь один раз, затем эта функция может использоваться во всех необходимых случаях в данной, либо любой другой программе. Наличие функций придает программе модульную структуру и облегчает чтение кода и внесение в него изменений или исправлений. Также как и математические функции, например y(x)=x2, функции в языке C принимают некоторые значения в качестве входных данных (x) и возвращают результат (y).
Для создания и использования функции в программе, ее (функцию) необходимо объявить (продекларировать) и определить (имплементировать). Объявление функции описывает так называемую сигнатуру функции и выглядит следующим образом.
<тип возвращаемого значения> <имя функции> ( [список аргументов] );
Пример: int sum (int a, int b); /*объявление функции вычисления суммы a+b*/
Под типом возвращаемого значения подразумевается тип данных результата, который функция возвращает по завершении своей работы. Если функция не должна возвращать результат, то указывается тип возвращаемого значения void.
Имя функции придумывает сам программист и желательно чтобы оно отражало ту задачу, которую выполняет функция.
Список аргументов в объявлении функции описывает входные данные и их типы. Список аргументов состоит из пар вида:
<Тип аргумента> <имя аргумента>
перечисленных через запятую.
Список аргументов может отсутствовать, в этом случае в круглые скобки следует оставить пустыми, либо указать в них ключевое слово void. При объявлении функции допускается не указывать имена аргументов.
Пример: int sum (int , int ); /*объявление функции вычисления суммы a+b*/
Определение функции выглядит следующим образом:
<тип возвращаемого значения> <имя функции> ( [список аргументов] )
{
[тело функции]
}
Пример:
int sum (int a, int b)
{
int sum;
sum = a+b;
return sum;
}
или
int sum (int a, int b)
{
return a+b;
}
Тело функции составляют операторы языка C.
Для вызова функции в программе необходимо указать ее имя, список аргументов и обработать возвращаемое значение:
int result;
int a = 5;
int b = 2;
result = sum (a,b);
Объявление функции должно всегда предшествовать ее определению внутри программы, причем функция должна быть объявлена до ее непосредственного использования внутри программы. Если функция определена до ее фактического использования, то объявление функции может отсутствовать.
Например, следующая программа:
int f1(int x);
void main()
{
int i=5;
printf(“%d”,f1(i));
}
int f1(int x)
{
return x*5;
}
эквивалентна программе:
int f1(int x)
{
return x*5;
}
void main()
{
int i=5;
printf(“%d”,f1(i));
}
Аргумент x в определении и объявлении называется формальным аргументом, а аргумент i, используемый при вызове функции называются фактическими.
Формальными называются аргументы, используемые в описании функции.
Фактическими называются аргументы, чьи значения передаются в функцию при её вызове, во время исполнения программы, и обрабатываются внутри функции.
Например, в предыдущей программе значения формального аргумента i передаётся в функцию f1, обрабатывается там и полученное значение возвращается с помощью оператора return. Формальный же аргумент x всего лишь показывает путь обработки значений фактических аргументов.
Говоря об использовании функций необходимо упомянуть 2 основных правила:
После исполнения функция программа продолжится со следующего оператора после точки вызова.
Значения формальных аргументов копируются внутрь функции, при этом внутри функции используется их копии. Таким образом, что бы ни происходило внутри функции с копией значения, оригинальная переменная, чьё значение было передано в функцию, своего значения не изменит.
Например, в программе:
int f1(int x)
{
x=x*6;
return x;
}
void main()
{
int a, i=5;
a=f1(i);
printf(“%d”,a);
}
в строке a=f1(i); произойдёт вызов функции f1(x) и управление перейдёт внутрь фунции. Внутри неё переданное значение 5 будет преобразовано в 5*6, т.е. 30 и это значение будет возвращено с помощью оператора return. На этом выполнение функции будет закончено и будут исполняться операторы, следующие за вызовом функции,т.е. оператор printf(…). Заметим, что хотя значение 5, переданное в функцию f1() и было модифицировано внутри неё, значение переменной i в функции main() осталось прежним, т.е. равным 5, т.к. функция f1() оперировала с копией значения переданного ей аргумента.
Функции с переменным числом параметров. Передача и получение списка параметров (пример).