Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по МПТ (2015 г.).doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.3 Mб
Скачать

16. Операторы перехода языка mikroC: break, continue, goto. Выполняемые функции, промеры использования в программах.

Оператор перехода break

Оператор break имеет два назначения. Первое – это окончание работы оператора switch. Второе – это принудительное окончание цикла, минуя стандартную проверку условия. Когда оператор break встречается в теле цикла, цикл немедленно заканчивается и выполнение программы переходит на строку, следующую за циклом.

Рассмотрим пример использования оператора break для досрочного прекращения работы цикла for.

char in_port, x;

void main( )

{

TRISB = 0xFF; // настроить порт B на ввод

TRISC = 0; // настроить порт С на вывод

PORTC = 0;

in_port = PORTB; // ввод числа из порта B

for( x = 1; x < 100; x++ )

{

if ( x == in_port )

break; // прекращение цикла вывода

PORTC = x; // вывод в порт С

}

}

В этой программе оператор цикла for выполняет вывод в порт С переменной х, изменяющейся от 0 до 100. Однако, если значение переменной х будет равно переменной in_port, введенной из порта B, причем это значение меньше 100, то цикл вывода немедленно прекращается.

Оператор перехода continue

Работа оператора continue чем-то похожа на работу оператора break. Но вместо форсированного окончания цикла оператор continue переходит к следующей итерации цикла, пропуская оставшийся код тела цикла.

Рассмотрим пример применения оператора continue для вывода в порт С чисел от 1 до 10 за исключением числа 5.

void main( )

{

char k; // объявление однобайтной переменной

TRISC = 0; // настроить порт С на вывод

PORTC = 0; // вывод нулей в порт С

for( k = 1; k <= 10; k++)

{

if( k == 5 ) // если k равно 5, то

continue; // пропустить вывод в порт С

PORTC = k; // вывод в порт С

}

}

Оператор перехода goto

Оператор goto (идти к ….) – это безусловный переход на метку. Метка – это идентификатор Си, завершающийся двоеточием. Пример записи оператора goto:

goto label;

………

……….

label: …….

Рассмотрим простейшую программу, где используется оператор перехода goto.

void main( )

{

char x = 1;

loop:

x++;

if ( x <= 10 )

goto loop;

}

В программе реализуется цикл инкремента переменной x от 1 до 10 с помощью оператора goto и метки loop. Очевидно, что такой цикл можно было бы реализовать и с использованием операторов while или for.

17. Функции языка mikroC: определение и прототипы.

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

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

{

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

оператор_1;

……

оператор_m;

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

}

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

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

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

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

int mul(int a, int b) // функция умножения

{

int y;

y = a * b;

return y;

}

float cube(float m) // функция вычисления куба числа

{

return m * m * m;

}

void delay( ) // функция временной задержки

{

long j;

for(j = 0; j < 50000; j++);

}

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

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

Современный стиль записи прототипа имеет следующий формат:

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

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

int mul(int a, int b);

float cube(float m);

void delay( );

Прототипы функций обычно размещаются в начале программы перед функцией main( ). А определения функций размещаются после функции main( ). Например, если программа с именем primer.c использует три функции mul( ), cube( ) и delay( ), то она записывается в следующем виде:

/***************************************************************************

primer.c – пример оформления программы с несколькими функциями

***************************************************************************/

int mul(int a, int b); // прототип функции mul( )

float cube(float m); // прототип функции cube( )

void delay( ); // прототип функции delay( )

void main( ) // главная функция

{

int y;

float f;

…………..

y = mul(50, 100); // вызов функции mul( )

……………...

f = cube(32.45); // вызов функции cube( )

………………..

delay( ); // вызов функции delay( )

………………

}

/* определения функций */

int mul(int a, int b)

{

int y;

y = a * b;

return y;

}

float cube(float m)

{

return m * m * m;

}

void delay( )

{

long j;

for(j = 0; j < 50000; j++);

}