пятница, 20 ноября 2015 г.

XI занятие "Функции в C/C+"

На одиннадцатом занятии мы поближе познакомились с функциями. Ранее мы успешно применяли различные готовые функции (printf, scanf, putchar, getch и др.), но сами создавать функции не умели. Впрочем, нет, все же одну функцию мы создавали на каждом занятии - это функция main( ). Как известно, в C любая программа состоит из функций. Точка входа в программу (место, откуда начинается ее выполнение) находится в главной функции main. А уже из нее мы вызывали другие (готовые) функции, необходимые нам для работы.


Краткое содержание занятия:

1. Функции нужны в первую очередь для упрощения написания программы и удобства ее чтения. Определенную часть кода программы, которая имеет определенный смысл, можно оформить как функцию и вызывать сколько угодно раз из тела программы, как мы и делали с различными уже готовыми функциями: например, если мы хотели вывести что-то на экран, мы использовали printf(). При этом мы даже не задумывались, как написана (какой имеет код) эта стандартная функция. Точно также мы можем создать и использовать любую свою функцию. Например, мы можем создать функцию ввода пароля (см. занятие X).

2. Использование своей функции имеет три этапа:

  1. Необходимо объявить функцию (точно так же, как объявляется переменная перед использованием). Объявление должно быть до использования функции.
  2. Непосредственно использование функции.
  3. Реализация функции (т.е. написание ее программного кода). Этот шаг осуществляется обычно после реализации главной функции main.

3. Функции имеют следующий общий вид:

int MyFunction(float a, char b)
{
return (0);
}

Здесь объявлена функция MyFunction (имя выбирается произвольно, но обычно задается соответственно выполняемому действию). int перед ней означает, что функция возвращает значение целого типа. Если функция не возвращает значения, необходимо указать void (пусто). Возвращаемое значение записывается в операторе return( ), например: return (0); return (345); return (a+b).
После имени функции в круглых скобках указываются типы ее параметров (т.е. значений, которые можно в функцию передать): (float achar b) - наша функция принимает два параметра - переменную a типа float и b типа char.

4. Простейший пример работы с функциями. Создадим функцию MySum, которая подсчитывает сумму двух целых чисел. Результатом суммы двух целых чисел обычно является целое число, значит тип возвращаемого значения также будет целым. Таким образом, прототип функции будет следующим: int MySum(intint).
Как же она должна работать? Если в нее отправить два любых значения (переменных) целого типа (т.е. записать их после имени функции в скобках), функция должна вернуть нам результат целого типа, который мы можем записать в переменную или вывести на экран. Например: c = MySum(a,b) - в функцию отправляем значения переменных a и b, в переменную с запишется результат. Остается только реализовать эту функцию (написать код для нее). Функция складывает два целых числа, это очень просто. Возвращаемое значение записыватся в операторе return( ).

int main(int argc, char* argv)
{
int a;               // объявление переменных
int b;               // a, b и c целого типа (int)
int c;
int MySum(int, int); // объявление функции MySum

a = 2;          // присваивание начальных значений переменным
b = 5;
c = MySum(a,b); // использование функции MySum

return 0;
}

int MySum(int x, int y) // реализация функции MySum
{
return (x+y); // именно оператор return передает значение
}

5. Перепишем нашу программу ввода пароля с использованием функций. Создадим в ней две функции: одну - для чтения пароля из консоли, вторую - для сравнения с заданным паролем. Назовем функцию ввода GetPass, а функцию сравнения ValidatePass. Логично предположить, что GetPass будет принимать указатель на строку и длину пароля. ValidatePass будет принимать две строки, которые нужно сравнить между собой. Кроме того, ValidatePass будет возвращать значение логического типа bool (равны или не равны строки).

Листинг программы func_pass:

















Скачать листинг программы (в текстовом формате)

Комментариев нет:

Отправить комментарий