- •1. Краткие теоретические сведения
- •1.1. Операции сравнения и логические операции
- •1.1.1. Операции сравнения
- •1.1.2. Логические операции
- •1.1.3. Логические выражения
- •1.2. Приоритет операций
- •1.3. Разветвляющийся вычислительный процесс
- •1.5. Оператор перехода
- •1.6. Пустой оператор
- •1.7.1. Короткая форма условного оператора
- •1.7.2. Полная форма условного оператора
- •1.9. Понятие составного оператора (группы операторов)
- •1.10.1. Проверка двух или более условий
- •1.10.5. Обработка нескольких условий
- •1.10.6. Вложенный условный оператор
- •1.11. Рекомендации по заданию исходных значений переменным
- •1.11.1. Операторы присваивания
- •1.11.2. Операторы ввода
- •1.11.3. Инициализация переменных
- •1.11.4. Именованные константы
- •1.12. Оператор множественного выбора switch
- •1.13. Использование отступов для улучшения удобочитаемости вашей программы
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1
- •2.4.1.1. Условие задания
- •2.4.2. Задание 2
- •2.4.3. Задание 3
- •2.4.4. Задание 4
- •2.5. Задания для выполнения дома
- •2.5.1. Задание 1
- •2.5.2. Задание 2
- •3.6. Пример программы
- •3.7. Типичные ошибки при выполнении работы
- •2.5.3. Задание 3
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Операции сравнения и логические операции 2
- •1.1.1. Операции сравнения 2
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. Программирование сложных (произвольных) РВП средствами языка С++
Программирование сложных (произвольных) разветвляющихся вычислительных процессов (содержащих более двух ветвей вычислений в зависимости от условия) опирается, в первую очередь, на понятие вложенного условного оператора, а также на понятие группы операторов и оператора перехода.
Программирование сложных разветвляющихся вычислительных процессов также рассмотрим на ряде примеров.