Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-С++-27 марта-2012.doc
Скачиваний:
17
Добавлен:
28.08.2019
Размер:
6.55 Mб
Скачать

1.9. Понятие составного оператора (группы операторов)

Как уже отмечалось в лабораторной работе № 5 операторы в алгорит­мических языках делятся на простые и составные. Простой опе­ратор не содержит каких-либо других операторов. Составной оператор – это группа операторов, в которую включаются простые и другие составные операторы.

Когда программа выполняет только один оператор, следующий за if, такой оператор называется простым оператором:

// Простой оператор

if (test_score >= 90) cout << "Поздравляем, вы прошли тест!" << endl;

Если программе необходимо выполнить несколько инструкций, когда результат сравнения – истина, операторы должны быть сгруппированы внутри левой и правой фигурных скобок {}. Операторы, которые находятся внутри фигурных скобок, образуют составной оператор, как показано ниже:

//Составной оператор

if (test_score >= 90)

{     cout << "Поздравляем, вы прошли тест!" << endl;

cout << "Вы набрали " << test_Score << " баллов" << endl;

}

Составной оператор служит для объединения группы операторов, которую по смыслу алгоритма следует рассматривать в программе как единый опе­ратор. Для объединения группы операторов в составной оператор их необходимо за­ключить в фигурные скобки { }.

Его формат

{

S1;

S2;

…….

Sn;

}

Здесь Si; – произвольный оператор, в том числе и составной.

Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.

Операторы S1, S2, …, Sn, входящие в составной, могут быть по- мечены. Эти метки, естественно, могут содержаться в имеющихся в про- грамме операторах перехода. Таким образом; извне группы разрешена передача на любой внутренний оператор группы. Если осуществляется пере- дача управления на помеченный оператор, входящий в составной, то выполнение последнего уже начинается не с первого оператора группы (то есть S1). ас оператора, на который было передано управление.

Заканчивается выполнение составного оператора обычно последним простым оператором Sn. Однако, если среди операторов S1, S2, …, Sn есть операторы передачи управления, то выход из составного оператора будет осуществляться по соответствующему оператору перехода. Например, в составной оператор

{

x = 2;

M1: y = 3;

goto M2;

M3: z = 5;

}

если ему предшествует оператор goto M1; вход осуществляется че­рез метку M1, а выход на метку M2, без выполнения оператора с меткой M3.

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

{

x = 2;

goto FIN;

y = 3;

z = 5;

FIN: ;

}

Ранее было показано, что в ветвях "Да" и "Нет" оператора if обычно может стоять только один оператор. Данное ограничение может быть снято (обойдено), если использовать понятие груп­пы операторов. Например,

if (a = b ) {х = х +1; у = y – 2;} else x = 0;

Чаще всего составной оператор (группа операторов) используется в ветвях условного оператора if, когда последовательность операторов ветви по смыслу алгоритма следует рассматривать в программе как еди­ный оператор. Так, алгоритм, представленный на рис. 6.1, с использова­нием понятия группы операторов, может быть записан

if (n >= 0 ) {p = n +b; s = a*a +l; x = sqrt(p + s);} else x = n*n – b;

z = x – r*r;

Одна группа операторов может быть вложена в другую, например,

{ i = k + c;

n = n +1;

{ r = k + 1;

l = i + k;

{s = m – 1;

d = x*y + 1;

}

}

}

Количество вложений одной группы операторов в другую группу опера­торов обычно не ограничено.

Запомните: Если в зависимости от результата определенного условия вашей программе нужно выполнить два или несколько связанных операторов, вы должны сгруппировать операторы внутри левой и правой фигурных скобок.

Следующая программа выводит два сообщения, если тестовые очки больше или равны 90:

#include <iostream.h>

int main()

{     int test_score = 95;

if (test_score >= 90)

{     cout << "Поздравляем, вы прошли тест!" << endl;

cout << "Вы набрали " << test_Score << " баллов" << endl;

}

}

В предыдущих примерах данного раздела группа операторов использовалась только в ветви "Да" оператора if. Но точно также в полной форме оператора if, когда используется конструкция else, в случае, если условие ложно, то для указания нескольких операторов можно использовать составной оператор.

Когда программе требуется выполнить несколько операторов, если условие ложно или истинно в операторе if-else, вы должны сгруппировать связанные операторы внутри левой и правой фигурных скобок {}:

if (условие_истинно)

   {        первый_оператор_для_истины;

………………………………….

n-й оператор_для_истины;

   }

else     {

первый_оператор_для_ лжи;

………………………………….

n-й оператор_для_ лжи;

 }

Следующая программа использует составные операторы как для if, так и для else:

#include <iostream.h>

int main()

{     int test_score = 65;

   if (test_score >= 90)

    {           cout << " Поздравляю, вы прошли тест A!" << endl;

    cout << "Вы набрали " << test_score << " баллов" << endl;

     }      else

      {           cout << "Вы должны работать усерднее!" << endl;

         cout << "Вы потеряли " << 100 - test_score << " баллов " << endl;

        }

}

Следующая программа в примере 6.12 является модификацией предыдущей. Отличие состоит в том, что используется входной поток cin для ввода тестовых баллов пользователем. Затем программа сравнивает тестовые очки со значением 90, выводя соответствующее сообщение.

Пример 6.12

#include <iostream.h>

#include

int main()

{     int test_score;

   cout << "Введите набранные баллы и нажмите Enter: ";

   cin >> test_score;

   if (test_score >= 90)

    {           cout << " Поздравляю, вы прошли тест A!" << endl;

    cout << "Вы набрали " << test_score << " баллов" << endl;

     }      else

      {           cout << "Вы должны работать усерднее!" << endl;

         cout << "Вы потеряли " << 100 - test_score << " баллов " << endl;

        }

getch();

return 0;

}

Найдите время поэкспериментировать с этой программой, изменяя значения переменной test_score так, чтобы оно было меньше или больше 90.

1.10. Программирование сложных (произвольных) РВП средствами языка С++

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

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