- •В. Г. Васильев Лабораторная работа №2
- •Работа рассчитана на 2 часа (1 занятие)
- •2.2. Цикл с параметром – оператор for
- •2.3 Циклы с неизвестным количеством повторений – оператор while
- •2.4 Цикл с постусловием – оператор do while
- •Пример 3. Пример того, что цикл выполниться хотя бы 1 раз.
- •Задание на дом
В. Г. Васильев Лабораторная работа №2
по дисциплине «Структуры и алгоритмы обработки данных»
Работа рассчитана на 2 часа (1 занятие)
Цель работы: приобретение практических навыков в составлении алгоритмов и программ циклической структуры.
Задание: внимательно прочитайте прилагаемый текст и выполните учебный пример. Попытайтесь разработать свои программы, в которых бы требовалось циклическое выполнение вычислительных операций Постарайтесь добавить в приложение другие интерфейсные компоненты среды.
2.1. Операторы циклов в С/С++
Цикл - это многократное повторение одного и того же кода программы. Последовательность действий, которые повторяются в цикле, называют телом цикла. Тело цикла будет выполняться до тех пор, пока условие будет истинно, то есть true. Если условие всегда истинно, то такой цикл называется бесконечным. У такого цикла нет точки выхода. Итерацией цикла называется набор команд, заключенных в теле цикла.
В языке Си существует 3 вида циклов:
1) цикл с параметром или цикл типа for;
2) цикл с предусловием или цикл типа while,
3) цикл с постусловием или цикл типа do ... while .
2.2. Цикл с параметром – оператор for
По статистике, около 75% циклов в программах – это циклы типа for. Для цикла типа for заголовок состоит из трех разделов: инициализации (присваивания начального значений счетчику цикла), проверки условия повторения, приращение (изменения параметров). Разделителем между разделами заголовка служит точка с запятой.
// форма записи оператора цикла for:
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
/*один оператор или блок операторов*/;
}
Если в теле цикла for должен выполнится один оператор, тогда фигурные скобки можно опустить.
Рассмотрим подробно три выражения записанные в круглых скобках цикла for.
Выражение 1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле for. Пример:
int counter = 0; // отсюда видно, что была объявлена переменная counter типа int и инициализирована значением 0
При работе с массивами переменная–счетчик всегда должна иметь целочисленный тип данных.
Если переменная была объявлена в цикле (все равно в каком), по завершении цикла эта переменная будет уничтожена.
Разница между объявлением и инициализацией переменной:
counter; // объявление переменой count
counter = 9; // инициализация целочисленной переменой count значением 9.
Выражение 2 - это условие продолжения цикла for, оно проверяется на истинность.
counter < 10; // условие истинно пока count строго меньше десяти!
Выражение 3 изменяет значение переменной-счетчика. Без выражения 3 цикл считается бесконечным, так как изменение содержимого переменной count выполняться не будет, и если изначально условие было истинным, то цикл будет бесконечным, иначе программа даже не войдет в цикл.
Выражения 1, 2, 3 отделяются друг от друга точкой с запятой. Тело цикла обрамляется фигурными скобками. Если тело цикла состоит из одного оператора, то фигурные скобки не нужны. Под изменением значения переменной подразумевается уменьшение или приращение значения, например:
for ( int counter = 0; counter < 15; counter++) // выполняется приращение переменной counter с шагом 1 от 0 до 15
"++" это операция инкремента, увеличение значения переменной на единицу
"--" это операция декремента, уменьшение значения переменной на единицу
Очень часто неправильно интерпретируется запись пределов в цикле for. В примере приращение переменной counter выполняется с шагом 1 от 0 до 15. Обратите внимание на конечный предел. В условии продолжения цикла стоит знак отношения строго меньше, а значит, когда значение в переменной counter будет равно 14, выполнится выход из цикла.
Шаг в цикле for может быть отличным от единицы, а точнее, любым целым числом.
for ( int counter = 0; counter <= 20; counter += 5) // приращение переменной counter от 0 до 20 включительно с шагом 5
В этом случае переменная counter будет равнятся 5, 10, 15, и 20, после чего выполнится выход из цикла for.
for ( int counter = 20; counter >= 0; counter -= 5) // изменение переменной counter от 20 до 0 включительно
Оператор инкремента i++ (или декремента i ––), эквивалентен i=i +1 (i=i–1).
Специальные операторы для циклов. В любом цикле вы можете использовать 2 специальных оператора
Оператор break применяется для досрочного выхода из цикла и перехода на следующий оператор после тела цикла.
Оператор continue применяется для пропуска всех операторов, оставшихся до конца тела цикла и перехода к следующей итерации цикла. То есть оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена.
Пример 1. Вычисление суммы квадратов натурального ряда чисел от 1 до n.
S= 12 + 2 2 + . . . + n 2.
void __fastcall TForm1::Panel1Click(TObject *Sender)
{
int Summa,n,i;
String S;
n = StrToInt (Edit1->Text);
Summa =0.0;
for (i = 1; i < n+1; i++)
Summa = i*i+Summa;
S.sprintf ("n=%d Сумма =%d",n,Summa);
Memo1->Lines->Add (S);
return;
}
При i, не превышающем n+1, цикл повторяется, иначе выполняется выход из цикла.