Операторы переходов
Оператор break
Этот оператор имеет два назначения. Первое – это окончание работы оператора switch. Второе – это принудительное окончание цикла, минуя стандартную проверку условия. Когда оператор break встречается в теле цикла, цикл немедленно заканчивается и выполнение программы переходит на строку, следующую за циклом.
Оператор break, как правило, используется в циклах, где особые условия могут вызвать немедленное завершение работы. Ниже приведен пример того, как нажатие на клавишу может остановить выполнение цикла:
int main(void)
{
int loc;
loc = 1;
do {
loc ++;
if(kbhit()) break;
} while(loc==1000);
return ; }
Такие функции можно использовать для поиска имени в файле базы данных. Если файл слишком длинный и надоело ждать, то можно нажать на любую клавишу и выйти из функции до окончания работы. Стандартная функция kbhit() возвращает 0, если не было нажатия клавиши. В противном случае она возвращает ненулевое значение.
break вызывает выход из самого внутреннего цикла. Например:
for(t=0; t<100; t++) {
count = 1;
for(;;) {
printf(“%d “, count);
count++;
if(count == 10) break;
}
}
выводит числа от 1 до 10 включительно 100 раз. Каждый раз, когда встречается break, контроль передается внешнему циклу for.
break, используемый в операторе switch, влияет только на данный switch, но не на цикл, в котором может находится данный switch.
Оператор continue
Работа оператора continue чем-то похожа на работу оператора break. Но вместо форсирования окончания цикла continue переходит к следующей итерации цикла, пропуская оставшийся код тела цикла. Например, следующая процедура выводит только положительные числа:
do {
scanf(“%d”, &x);
if(x<0) continue;
printf(“%d “, x);
} while(x!=100);
В циклах while и do/while оператор continue вызывает переход к проверке условия и затем продолжает работу цикла. В случае цикла for выполняется часть увеличения, затем проверяется условие и, наконец, выполняется само тело цикла.
Испоьзование операторов continue и breakм.представить в виде рис:
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void. выражение должно отсутствовать.
Функция exit()
Функция exit(), находящаяся в стандартной библиотеке, вызывает немедленное окончание работы программы. Поскольку функция exit() останавливает выполнение программы и форсирует возврат в операционную систему, она используется для управления устройствами, и ее используют подавляющее большинство программ. Функция exit() имеет следующий вид:
void exit(int статус);
Она использует заголовочный файл stdlib.h. Значение статуса возвращается в операционную систему.
Для индикации корректности завершения работы exit() традиционно вызывается с аргументом 0. Другие аргументы используются для индикации различного рода ошибок. Можно также использовать предопределенные макросы EXIT_SUCCESS (успешное завершение) и EXIT_FAILURE (завершение с ошибками) в качестве значений для статуса.
exit() используется, когда условия выполнения программы неудовлетворительны.
В примере exit() используется для выхода из программы и возврата в операционную систему:
void main(void)
{
char ch;
printf(“1. Проверка орфографии\n”);
printf(“2. Корректировка ошибок орфографии\n”);
printf(“3. Вывод ошибок на экран\n”);
printf(“4. Выход из программы\n”);
printf(“Выбери режим: “);
do {
ch = getche(); /* чтение клавиатуры */
switch(ch) {
case ‘1’: … break;
case ‘2’:… break;
case ‘3’:… break;
case ‘4’:exit(0); /* возврат в ОС */
}
} while(ch!=’1’ && ch!=’2’ && ch!=’3’);
}
Оператор goto
Хотя оператор goto уже давно не рекомендуют использовать, он по-прежнему используется в программах., т.к. бывают моменты, когда goto не только не усложняет программу, но даже ее упрощает.
Синттаксис:
goto метка;
…
метка: опратор;
Оператор goto требует для своей работы наличие меток. Метка – это корректный идентификатор языка С, завершаемый двоеточием. Метка должна находиться в той же функции, что и goto. Например, цикл от 1 до 100 может быть записан с использованием goto и меток следующим образом:
x = 1;
loop1:
x++;
if(x < 100) goto loop1;
Одним из наиболее целесообразных способов использования оператора goto является выход из нескольких уровней вложения. Например:
for(...) {
for(...) {
while(…) {
if(...) goto stop;
.
.
.
}
}
}
stop:
printf(“Ошибка в программе\n”);
Уничтожение goto приведет к необходимости выполнения дополнительных проверок. Простой оператор break здесь не работает, поскольку он может обеспечить выход из самого внутреннего цикла.
Следует использовать оператор goto как можно реже. Но если без него код трудно читать или критична скорость работы программы, то использование goto может быть наилучшим выходом.
Тема 4. Язык программирования С/С++. Организация данных. Массивы и указатели.
Указатели
Когда компилятор обрабатывает оператор определения переменной, например, int i=10 он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (i) заменяются компилятором на адрес области памяти, в которой хранится значение переменной. Можно определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями.
Итак, указатели предназначены для хранения адресов областей памяти.
Т.к. указатель – это адрес некоторого объекта, то через него м. обращаться к этому объекту.
у=&x – переменной y присваивается адрес переменной х, указывающий где в оперативной памяти находится значение х
z=*y – переменной z присваивается переменная , записанная по адресу у, если у=&х z=*у ,то z=х
Указатель имеет тип соответствующий типу данных, хранящийся в указателе .
Для указателей справедливо правило, кот. требует предварительного описания
В C++ различают три вида указателей — указатели на объект, на функцию и на void, отличающиеся свойствами и набором допустимых операций. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом.
Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного)..Простейшее объявление указателя на объект (в дальнейшем называемого просто указателем) имеет вид: тип *имя:
где тип может быть любым.
Звездочка относится непосредственно к имени, поэтому для того, чтобы объявить несколько указателей, требуется ставить ее перед именем каждого из них. Haпример, в операторе
int *a. b, *c; описываются два указателя на целое с именами а и с, а также целая переменная b.
Указателъ на void применяется в тех случаях, когда конкретный тип объекта, адрec которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов). '
Указателю на void можно присвоить значение указателя любого типа, а также сравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать ем.
Дата добавления: 2017-01-13; просмотров: 655;