10.08 Функции

Форма для сдачи

Повторное использование:

Параметризация:

Возвращаемое значение:

Кстати, возвращаемое значение main() — зто код ошибки для операционной системы; при этом 0 — это «без ошибок»

Простейшая функция

В Си подпрограммы называются функциями, обычно возвращают значение и не имеют чёткого деления на содержательный результат и диагностику

{OK} Сложение двух чисел

{i} Написать функцию max3() от трёх целочисленных параметров, которая возвращает их максимум

:)) Кстати. ∃ ли в Си возможность выполнить некоторый код не в теле функции

Области видимости

Имена в Си (переменная или функция) становятся видимыми после их описания.

  1. Глобальные переменные — определяются вне функции («после include»)

  2. Статические переменные — определяются в теле функции, существуют постоянно

  3. Локальные переменные — определяются в теле функции, существуют только на период выполнения тела функции

  4. Формальные параметры — локальные переменные, определяются в сигнатуре функции

:)) Классифицировать эти четыре вида как «временные/постоянные» и «видимые/невидимые из других функций»

{OK} Пример

   1 #include <stdio.h>
   2 
   3 int g;
   4 
   5 void fun(void) {
   6   static int s=0;
   7   int k=0;
   8   printf("%d %d %d\n", ++s, ++k, ++g);
   9 }
  10 
  11 int main(void) {
  12         g = 2;
  13         fun();
  14         g = 10;
  15         fun();
  16         fun();
  17         return 0;
  18 }

{i} Модифицировать функцию сложения так, чтобы можно было узнать, сколько раз её вызывали (с помощью глобальной переменной)

:)) Что выведет эта программа?

   1 #include <stdio.h>
   2 void fun(int b) {
   3         int a;
   4         b = 100500;
   5         a = 42;
   6 }
   7 
   8 int main(void) {
   9         int a = 1, b = 2;
  10         fun(a);
  11         printf("%d %d\n", a, b);
  12 }

Сигнатура

Если функция где-то есть, но к моменту её вызова не описана, необходимо задать её сигнатуру (тип параметров и возвращаемого значения):

Кстати, в include-никах хранятся как раз макросы и сигнатуры, а сами функции — в библиотеках.

{i} С помощью gcc -E найти сигнатуру putchar() (одна строка)

Стек вызовов (введение)

Функции могут вызывать друг друга, при этом изолированные локальные переменные заводятся в каждом вызове

{i} Написать функцию trisquare(x0, y0, x1, y1, x2, y2) вычисления площади треугольника по формуле:

{i} Ввести последовательность целых чисел, признак конца ввода — EOF. Найти и вывести длину максимальной подпоследовательности, состоящей из степеней пятерки. Распознавание, является ли число степенью пятерки, оформить в виде функции.

{i} Написать функцию get_e(double epsilon) вычисления числа e с заданной точностью по формуле

Д/З

TODO

  1. Ввести вещественные числа s, t. Рассчитать и вывести значение формулы g(1.2, s) + g(t, s) - g(2*s-1, s*t), где g(a,b)=(a2 + b2)/(a2 + 2*a*b + 3*b2 + 4). Вычисление g(a,b) оформить в виде функции.

3.0 4.0
0.324605

  1. Ввести положительное целое n. Выяснить, имеются ли среди чисел n, n+1, ..., 2*n близнецы, т.е. простые числа, разность между которыми равна двум. Если близнецы есть, программа выводит "YES" и наименьшую пару близнецов (формат "YES %d %d"), иначе выводит "NO". Проверку простоты числа оформить в виде функции.

14
YES 17 19
  1. {i} Более хитрый ряд (как минимум, с -1ⁿ в числителе, чтобы для сравнения с epsilon нужен был abs())

  2. {i} http://grep.cs.msu.ru/narhoz-chita.ru/zadachnik/Glava12/index12.htm#z445

LecturesCMC/AL/Prac/11_Functions (последним исправлял пользователь hbd 2026-10-08 23:20:42)