Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ 2013 ШПОРЫ.docx
Скачиваний:
297
Добавлен:
15.04.2015
Размер:
669.17 Кб
Скачать

2. Операторы цикла языка с51: while, do…while, for.

Операторы цикла while и dowhile. Эти операторы предназначены для организации циклических процессов при выполнении некоторых условий. Наиболее универсальным является оператор 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»).

3. Операторы перехода языка с51: break, continue, goto.

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

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

#include<reg51.h>

unsigned char in_port1;

void main(void)

{

int x;

P1 = 0xFF; // настроить порт Р1 на ввод

in_port1 = P1; // ввод числа из порта Р1

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

{

P2 = x; // вывод в порт Р2

if ( x == in_port1 )

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

}

while(1);

}

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

Рассмотрим программу, в которой оператор continue используется для отбрасывания нечетных сумм.

#include<reg51.h>

int sum = 0; // сумма чисел

int sum_even = 0; // накопленная сумма четных сумм

void main(void)

{

int i;

for( i = 1; i < 15; i++ )

{

sum += i; // вычисление суммы чисел

if ( sum % 2 ) // проверка суммы чисел на четность

continue;

sum_even += sum; // накопление четных сумм

}

while(1);

}

В программе continue.c производится вычисление суммы чисел и накопление четных сумм в переменной sum_even. Когда сумма чисел от 1 до i становится нечетной (это проверяется операцией sum % 2 – определением остатка от деления на 2), оператор continue передает управление на очередное повторение цикла for, не выполняя оператор sum_even += sum накопления четных сумм.

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

goto label;

……….

label: …….

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

#include<reg51.h>

void main(void)

{

char x = 1;

loop:

x++;

if ( x < 10 )

goto loop;

while(1);

}

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]