Void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout.setf(ios::fixed );
float xn, xk, dx;
float x, y;
cout<<"Введите xn, xk, dx :";
cin>>xn>>xk>>dx;
cout<<"X\tY"<<endl;
for(x=xn; x<=xk; x += dx)
{
y=-x*x+1;
cout<<setprecision(2)<<x<<'\t'<<y<<endl;
}
cout<<endl;
system("pause");
}
Последний пример ВЫПОЛНЯЮТ ТЕ ЖЕ ДЕЙСТВИЯ, что и пример для цикла с предусловием, но записан более компактно и наглядно: все действия, связанные с управлением циклом, локализованы в его заголовке.
Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот по следующей схеме:
for (b1; b2; b3) операторы;
while (b2)
{
оператор;
b3;
}
Часто встречающиеся ошибки при программировании циклов — использование в теле цикла НЕИНИЦИАЛИЗИРОВАННЫХ переменных и НЕВЕРНАЯ ЗАПИСЬ УСЛОВИЯ ВЫХОДА ИЗ ЦИКЛА.
Чтобы избежать ошибок, рекомендуется:
проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения (а также возможно ли выполнение других операторов);
проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;
предусмотреть аварийный выход из цикла по достижению некоторого количества итераций (см. пример в следующем разделе);
и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки. Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае. Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных). Оператором while удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла.
Оператор for предпочтительнее в большинстве остальных случаев (однозначно - для организации циклов со счетчиками).
Операторы передачи управления
В C++ есть четыре оператора, изменяющих естественный порядок выполнения вычислений:
оператор безусловного перехода goto;
оператор выхода из цикла break;
оператор перехода к следующей итерации цикла continue;
оператор возврата из функции return.
Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка;
В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Использование оператора безусловного перехода оправдано в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких мест функции в одно (например, если перед выходом из функции всегда необходимо выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование goto приводит только к усложнению структуры программы и затруднению отладки^. Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход. В любом случае не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int к; ...
goto metka; ...
{
int а = 3, b = 4;
к = а + b;
metka:
int m = к + 1; ...
}
После выполнения этого фрагмента программы значение переменной га не определено.
Оператор break
Оператор break используется внутри операторов цикла или switch для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Оператор continue
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
Приклад розв’язання задачі. Назад
Практична робота
Цикли прості.
Мета|ціль| роботи: отримання практичних навичок в роботі з операторами циклу мови C++.
Завдання|задавання| для виконання
Написати програму, яка виводить таблицю значень функції у = -х2+1 у введеному діапазоні змінній х із заданим кроком.
Вхідні дані:
Початкове значення аргументу: хn|. Дійсне число.
Кінцеве|скінченне| значення аргументу : хk|. Дійсне число.
Крок : dx|. Дійсне число.
Аргумент функції: х; Дійсне число.
Вихідні дані:
Значення функції: у; Дійсне число.
#include <iostream> #include <windows.h> #include <iomanip> using namespace std; void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout.setf(ios::fixed ); float xn, xk, dx; float x, y; cin>>xn>>xk>>dx; cout<<"X\tY"<<endl; for(x=xn; x<=xk; x += dx) { y=-x*x+1; cout<<setprecision(2)<<x<<'\t'<<y<<endl; } cout<<endl; system("pause"); } |
Результат
5 8 0.5 X Y 5.00 -24.00 5.50 -29.25 6.00 -35.00 6.50 -41.25 7.00 -48.00 7.50 -55.25 8.00 -63.00
|
