11 Функции (1) (1)

Содержание

Слайд 2

Директивы препроцессора

Не совсем язык С
Используются для “предварительной подготовки” программы
Современные тенденции - отказ

Директивы препроцессора Не совсем язык С Используются для “предварительной подготовки” программы Современные
от них в С++

Слайд 3

Директивы препроцессора

#define – определение макроса или препроцессорного идентификатора;
#include – включение текста из

Директивы препроцессора #define – определение макроса или препроцессорного идентификатора; #include – включение
файла;
#undef – отмена определения макроса или идентификатора;
#line – смена номера следующей ниже строки;
#error – формирование текста сообщения об ошибке трансляции;
#pragma – действия, предусмотренные реализацией;

Слайд 4

Директивы препроцессора

#if – проверка условия-выражения;
#ifdef – проверка определенности идентификатора;
#ifndef – проверка неопределенности

Директивы препроцессора #if – проверка условия-выражения; #ifdef – проверка определенности идентификатора; #ifndef
идентификатора;
#else – начало альтернативной ветви для #if;
#endif – окончание условной директивы #if;
#elif – составная директива #else#if;

Слайд 5

Проблемы сложных алгоритмов

Иногда алгоритмы бывают непростыми…
Циклы немного помогают, но не всегда…
Простой вариант

Проблемы сложных алгоритмов Иногда алгоритмы бывают непростыми… Циклы немного помогают, но не
- надо ввести массив, поработать с ним и вывести ответ
А если массивов много и разного размера?
И работать надо не над одним, а над комбинациями?
А как это всё тестировать?

Слайд 6

Проблемы сложных алгоритмов

А какая будет блок схема?

Проблемы сложных алгоритмов А какая будет блок схема?

Слайд 7

Решение - функции!

Позволяют сильно упростить структуру программы
Минимальный исполняемый модуль программы
Обособленный, логически завершённый

Решение - функции! Позволяют сильно упростить структуру программы Минимальный исполняемый модуль программы
модуль
Получает значение в виде параметров и, чаще всего, возвращает результат
В программе всегда есть как минимум одна функция - main

Слайд 8

Синтаксис

тип_возвращаемого_значения имя_функции (список_формальных_параметров)
{ тело_функции; }

Синтаксис тип_возвращаемого_значения имя_функции (список_формальных_параметров) { тело_функции; }

Слайд 9

Пример

int pow2(int x) { return x*x; } int main() { printf(“%d”,pow2(25)); return 0; }

Пример int pow2(int x) { return x*x; } int main() { printf(“%d”,pow2(25)); return 0; }

Слайд 10

Прототип функции

Описание функции без определения
Используется в начале программы для указания параметров используемых

Прототип функции Описание функции без определения Используется в начале программы для указания
функций
Позволяет определить функцию позже, возможно даже в другом файле
Пример: int pow2(int);

Слайд 11

Формальные и фактические параметры

Формальные указаны в определении функции
Фактические - передаются при вызове
Важно

Формальные и фактические параметры Формальные указаны в определении функции Фактические - передаются
соблюдать типы, количество и порядок

Слайд 12

Передача параметров в функцию

В С передаётся только значение параметра, а не сама

Передача параметров в функцию В С передаётся только значение параметра, а не
переменная! int f(int a){ a=a+5; return a; } int main(){ int a=37; int b=f(a); printf(“%d %d”,a,b); return 0; }

Слайд 13

Область видимости переменных

Всё сложно
Обычные переменные видны внутри функции
Глобальные - везде
Внешние - между

Область видимости переменных Всё сложно Обычные переменные видны внутри функции Глобальные -
файлами extern x; int y; int f1(){ int z; }

Слайд 14

Как передать массив?

У массива много значений, а передать можно только одно
Размер массива

Как передать массив? У массива много значений, а передать можно только одно
не позволяет передать каждый элемент своим параметром
Выход - указатели!
Вместо значения передаётся адрес первого элемента и число элементов

Слайд 15

Пример

void output(int *m, int n){ for(int i=0;iint main(){ int mas[3]={1,2,3}; output(mas,3); return 0; }

Пример void output(int *m, int n){ for(int i=0;i int main(){ int mas[3]={1,2,3}; output(mas,3); return 0; }

Слайд 16

Как передать двумерный массив

Сложно!
Важно соблюдать типы
Важно помнить про отличие статического и динамического

Как передать двумерный массив Сложно! Важно соблюдать типы Важно помнить про отличие статического и динамического

Слайд 17

Передача статического двумерного массива

void output(int *arr,int m, int n){ for(int i=0;iint

Передача статического двумерного массива void output(int *arr,int m, int n){ for(int i=0;i
main(){ int mas[3][3]={{1,2,3},{4,5,6},{7,8,9}}; output(&mas[0][0],3,3); return 0; }

Слайд 18

Передача двумерного массива

void output(int arr[][3],int m, int n){ for(int i=0;iint main(){ int

Передача двумерного массива void output(int arr[][3],int m, int n){ for(int i=0;i int
mas[3][3]={{1,2,3},{4,5,6},{7,8,9}}; output(mas,3,3); return 0; }
Имя файла: 11-Функции-(1)-(1).pptx
Количество просмотров: 30
Количество скачиваний: 0