Лекция 4 Инструкции
Инструкции С++ инструкция: объявление ; выражение opt ; { последовательность_инструкций opt } if ( условие ) инструкция if ( условие ) инструкция else инструкция switch ( условие ) инструкция while ( условие ) инструкция do инструкция while ( условие ) for ( иниц_инстр opt ; условие opt ; выражение opt ) инструкция case константное_выражение : инструкция default: инструкция break ; continue ; return выражение opt ; goto идентификатор ; идентификатор: инструкция try { последовательность_инструкций opt } обработчики
Инструкции С++ последовательность_инструкций: инструкция последовательность_инструкций opt условие: выражение спецификатор_типа объявитель = выражение обработчики: catch ( объяв_искл ){ посл_инструкций opt } обработчики opt
Условная инструкция if ( условие ) инструкция if ( условие ) инструкция else инструкция if ( x > 7 ) p = 9 ; if ( z ) c = 7 ; else c = 9 ; if ( need_update ) { update_this (); update_that (); } if ( double d = some_calc() ) return d ; if ( x > 7 ) p = 9 ; if ( z ) c = 7 ; else c = 9 ; if ( need_update ) { update_this (); update_that (); } if ( double d = some_calc() ) return d ;
Правило ближайшего if В неоднозначных случаях else принадлежит самому ближайшему к нему if. int n = 0 ; if ( false ) if ( true ) n = 9 ; else n = 5 ; int n = 0 ; if ( false ) if ( true ) n = 9 ; else n = 5 ;
Инструкция выбора Условие интегрального типа Метки – константные выражения (вычисляемые компилятором) Выполнение производится с первой подходящей case-инструкции. Если подходящей не нашлось – с метки default, если таковая присутствует. Выполнение продолжается до окончания блока или до первой инструкции break или return. switch ( n ) { case 1: f(); g(); case 2: h(); break ; default : k(); return; } switch ( n ) { case 1: f(); g(); case 2: h(); break ; default : k(); return; }
Цикл с предусловием Тело цикла выполняется, пока верно условие Может не быть выполнено ни разу while ( a < 0 ) a = get_next(); while ( a < 0 ) a = get_next(); while ( true ) { if ( ++a > 7 ) f ( a ); g ( 9 ); } while ( true ) { if ( ++a > 7 ) f ( a ); g ( 9 ); }
Цикл с постусловием Тело цикла выполняется, пока верно условие Выполняется хотя бы один раз do { a = get_next(); } while ( a < 0 ) do { a = get_next(); } while ( a < 0 ) do { if ( f ) break ; g (); } while ( false ) do { if ( f ) break ; g (); } while ( false )
Цикл со счетчиком При первом проходе выполняется инициализирующая инструкция, и, если условие истинно, тело цикла. После окончания тела цикла каждый раз выполняется выражение перехода и, если условие снова истинно, повторно выполняется тело цикла. Любая из трех составляющих оператора for может быть опущена for ( int i = 7; i < 10 ; ++i ) { do_some(7); do_another(i); } for ( int i = 7; i < 10 ; ++i ) { do_some(7); do_another(i); } for (;;) { if ( f() ) break ; } for (;;) { if ( f() ) break ; } for ( int i = 3; i 5 ; ++i, --j ) { do_some( i, j ); } for ( int i = 3; i 5 ; ++i, --j ) { do_some( i, j ); }
Инструкции прерывания цикла break – завершение выполнения цикла continue – выполнение следующей итерации цикла while ( 1 ) { if ( ++a > 7 ) break ; } while ( 1 ) { if ( ++a > 7 ) break ; } for ( int i = 0 ; i < 100 ; ++i ) { if ( is_prime(i)) continue ; do_some_nasty_things ( i ); } for ( int i = 0 ; i < 100 ; ++i ) { if ( is_prime(i)) continue ; do_some_nasty_things ( i ); }
Инструкция безусловного перехода Не рекомендуется к использованию, так как легко может нарушить логику остальных инструкций и приводит к запутыванию программы. label_1: int a = 9; f (); int b = g (a); goto label_1 ; label_1: int a = 9; f (); int b = g (a); goto label_1 ;