Операторы управления вычислительным процессом

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

Операторы ветвления выбирают в программе из группы альтернатив возможное продолжение вычислительного процесса. Выбор выполняется исходя из заданного выражения. В Си наиболее часто используется оператор ветвления if … else.

Оператор if имеет следующую общую форму записи:

if (выражение)

оператор _1;

else

оператор_2;

где часть else может и отсутствовать. Сначала вычисляется «выражение» в скобках, и если оно истинно (отлично от нуля), то выполняется оператор_1. Если «выражение» ложно (равно нулю) и else-ветвь присутствует, то выполняется оператор_2, а оперетор_1 пропускается. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов, то он заключаются в фигурные скобки. Часто «выражение» представляет собой условие, заданное с помощью операций отношения или логических.

Операторы цикла while и do…while. Эти операторы предназначены для организации циклических процессов при выполнении некоторых условий. Наиболее универсальным является оператор while (пока), который организует цикл с предусловием. Он имеет следующий формат:

while(условие)

оператор;

Условие понимается в широком смысле и может быть произвольным выражением. Оператор while производит выполнение оператора, следующего после условия до тех пор, пока это условие истинно. Если это условие не истинно (ложно) с самого начала или становится ложным, заданный оператор не выполняется и управление передается первому оператору, следующему за оператором цикла. Если повторяемая часть оператора (тело цикла) содержит не один, а несколько операторов, то вся повторяемая группа должна быть заключена в фигурные скобки:

while(условие)

{

оператор_1;

оператор_2;

…………

оператор_n;

}

Для описания условия в операторе while обычно используются операции отношения и логические.

В языке Си имеется возможность организовывать цикл с постусловием посредством оператора do … while. В общем виде этот оператор можно записать следующим образом:

do

оператор;

while(условие);

Выполняется «оператор», а затем проверяется «условие». Если оно истинно, то снова выполняется «оператор» и т.д. Если «условие» становится ложным, циклический процесс заканчивается. Для описания «условия» обычно используются операции отношения и логические.

Анализ рассмотренных примеров показывает, что разница между циклами while и do … while в том, что входящий в их состав оператор выполняется обязательно хотя бы один раз в случае использования цикла do … while.

Оператор цикла for. Этот оператор используется, когда известно точное число повторов, которое нужно выполнить. В общем виде этот оператор можно записать следующим образом:

for(выражение_1; выражение_2; выражение_3) оператор;

В операторе for определяются сразу три составляющие:

· начальное значение параметра цикла («выражение_1»);

· условие окончания цикла («выражение_2»);

закон изменения параметра цикла («выражение_3»)


13. Функции в языке С18: определение функции, прототип, библиотечные функции.

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

возвращаемый_тип имя_функции(тип параметр_1, …,тип параметр_n)

{

описание данных;

оператор_1;

……

оператор_m;

return (выражение);

}

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

Поле «возвращаемый_тип» задает тип возвращаемого функцией значения (char, int, float и т.д.). Если функция не возвращает никакого значения, то в поле «возвращаемый_тип» записывается ключевое слово void (пустой). После имени функции в скобках помещаются аргументы (или по-другому параметры), передаваемые в функцию, они содержат любую комбинацию типов и имен. Это поле в определении функции называется списком формальных аргументов (или параметров). Поле «список аргументов» - не обязательная часть в определении функции. Если в функцию не передаются никакие аргументы. То это поле – пустое или содержит ключевое слово void.

Пример определения функции:

int mul(int a, int b)

{

int y;

y = a * b;

return y;

}

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

Прототип функции. Стандарт языка Си требует, чтобы функции были объявлены до первой ссылки на них. Это «предварительное» объявление называется прототипом функции. Оно извещает компилятор о типе возвращаемого значения, количестве и типе аргументов. Используя прототип, компилятор может выполнить тщательный контроль числа аргументов и соответствие их типов в вызовах функции и ее определении.

Сравнивая формат прототипа с определением функции, можно сделать вывод о том, что прототип точно повторяет первую строку определения функции. Пример прототипа для рассмотренной ранее функции: int mul(int a, int b); Следует отметить, что определение функции будет одновременно являться ее прототипом при условии, что функция определяется до того, как будет вызвана. В таком случае прототип можно не записывать в текст программы. Однако лучше всего соблюдать следующее правило: всегда записывать прототипы функций, используемых в программе, вне зависимости от того, где (по тексту) находятся определения функций.

Прототипы функций обычно размещаются в начале программы после директив препроцессора. Общеупотребительная практика - помещение прототипов функций в заголовочный файл, подключаемый директивой #include к тексту программы.

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