Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к срезу__2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.76 Mб
Скачать

Функции

В языке Cи задача может быть разбита на более простые подзадачи при помощи подпрограмм-функций. Использование подпрограмм в коде программы и ведет к упрощению ее структуры, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Кроме того, упрощается процесс отладки программы, содержащей подпрограммы.

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

Функция – это именованная последовательность инструкций, выполняющая какое-либо законченное действие. Описывается один раз, а вызываться для выполнения может любое количество раз. Функции могут располагаться в исходном файле в любом порядке.

Объявление функции пользователя, выполняется в двух формах – в форме описания (объявления) и в форме прототипа.

Формат объявления(описания) функции:

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

{тело_ функции}

Пример:

int sum(int a, int b)

{return a+b;}

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

Формат обращения к функции (вызов функции):

имя_функции(список_фактических_праметров)

Пример:

Z=sum(x, y);

В определении и в объявлении одной и той же функции типы и порядок следования параметров должны совпадать.

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

Формат обращения к функции (вызов функции):

имя_функции(список_фактических_праметров)

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

Фактические параметры — это константы, переменные, выражения того же типа, что и у соответствующего ему формального параметра. Стандарт языка Си допускает автоматическое преобразование значений фактических параметров к типу формальных параметров.

Передача параметров при вызове функции происходит только по значению, это значит, что в Си допустимы только параметры-значения. Поэтому выполнение функции не может изменить значения переменных, указанных в качестве фактических параметров.

При обращении к функции передача значений возможна как через параметры, так и через глобальные переменные.

В случае необходимости функцию можно использовать для изменения передаваемых ей аргументов. В этом случае в качестве аргумента необходимо в вызываемую функцию передавать не значение переменной, а ее адрес. А для обращения к значению аргумента-оригинала использовать операцию «*».

Пример функции, в которой меняются местами значения аргументов x и y:

void zam (int *x, int *y)

{int t;

t = *x;

*x = *y;

*y = t;

}

  1. Обработка строк в ЯП Си (описание, ввод/вывод, обращение к элементам, библиотека string.h, примеры).

В языке Си нет специально определенного строкового типа данных. Строка в языке Си представляет собой массив, состоящий из символов, последним из которых является символ \0. Нулевой символ позволяет функциям, работающим со строками, обнаруживать концы строк. На длину символьного массива в Си нет ограничения. Индекс первого символа строки — 0.

Строка описывается как символьный массив.

Например:

char S[20];

Одновременно с описанием строка может инициализироваться. Возможны два способа инициализации строки — с помощью строковой константы и в виде списка символов

Пример:

char S[10]="строка";

char S[]="строка";

char S[10]={‘c’, ’т’, ’p’, ‘o’, ‘к’, ‘a’, ‘\0’};

По результату первого описания под строку s будет выделено 10 байт памяти, из них первые 7 получат значения при инициализации (седьмой — нулевой символ). Второе описание сформирует строку из семи символов. Третье описание по результату равнозначно первому. Конечно, можно определить символьный массив и так:

char S [10] = {‘c’, ’т’, ’p’, ‘o’, ‘к’, ‘a’};

т.е. без нулевого символа в конце. Но это приведет к проблемам с обработкой такой строки, так как будет отсутствовать ориентир на его окончание.

Обращение к отдельному символу строки выполняется по индексу.

Например, в описанной выше строке S[0] =’с’, S[5] = ‘a‘. Для вывода третьего символа строки можно написать: printf("%c", S[2]);

Большинство действий со строковыми объектами в Си выполняются при помощи стандартных библиотечных функций, для этого включите в начало программы заголовочный файл string.h: #include <string.h>, чтобы использовать строковые функции.