
- •«Национальный исследовательский томский политехнический университет»
- •Разработка программы сортировки элементов массива
- •Алгоритмы сортировки
- •Метод пузырька (обменная сортировка с выбором)
- •Сортировка выбором
- •Сортировка методом Шелла
- •Другие алгоритмы сортировки. Сравнение алгоритмов
- •Операторы циклов
- •Оператор цикла while
- •Оператор цикла for
- •Оператор цикла do while
- •Вложенные циклы
-
Оператор цикла while
Структура оператора (рисунок 6):
while (выражение) оператор; |
Рисунок 6
|
Оператор while определяет операции, которые циклически выполняются до тех пор, пока проверяемое "выражение" не станет ложным, или равным нулю, т.е. если "выражение" истинно (или а общем случае не равно нулю), то "оператор" (или "тело цикла") выполняется один раз, а затем "выражение" проверяется снова. Эта последовательность действий, состоящая из проверки и выполнения тела цикла, периодически выполняется до тех пор, пока "выражение" не станет ложным. Каждый такой шаг называется "итерация".
Оператор while – это цикл с предусловием; решение, выполнять ли в очередной раз тело цикла, принимается перед началом его прохождения. Поэтому вполне возможно, что тело цикла не будет выполнено ни разу. "Оператор", образующий тело цикла, может быть либо простым (одиночным, заканчивающимся символом "точка с запятой"), либо составным, тогда группа составляющих его операторов заключается в фигурные скобки.
Примеры:
while ( n++ < 100 )
printf(" %d %d \n",n,2*n+1);
int far = 0, step = 2;
while ( far < 1000 )
{
far = far + step;
printf(" far = %d\n", far);
}
Не забудьте о том, что при построении цикла while вы должны включить в него какие-то конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным. В противном случае выполнение цикла никогда не завершится.
При организации цикла, когда его тело должно быть выполнено фиксированное число раз, осуществляются три операции: инициализация счетчика, сравнение его величины с некоторым граничным значением и увеличение значения счетчика при каждом прохождении тела цикла, причем инициализация счетчика для цикла while должна осуществиться до цикла (см. второй пример), о чем случайно можно забыть.
-
Оператор цикла for
Структура оператора:
for (инициализация; проверка условия; коррекция) оператор; |
Рисунок 7 |
В операторе for используются три выражения, управляющие работой цикла; они разделены символами "точка с запятой". Инициализирующее выражение вычисляется только один раз до начала выполнения какого-нибудь из операторов цикла. Если проверяемое выражение оказывается истинным (или не равным нулю), тело цикла выполняется один раз. Затем вычисляется величина корректируемого выражения, и значение проверяемого выражения определяется вновь. Таким образом, тело цикла выполняется до тех пор, пока проверяемое условие не станет ложным, или равным нулю. В виде блок-схемы порядок этих действий отображен на рисунке Error: Reference source not found.
Оператор for – это цикл с предусловием: решение, выполнить в очередной раз тело цикла или нет, принимается до начала его прохождения. Поэтому может случиться так, что тело цикла не будет выполнено ни разу. Оператор, образующий тело цикла, может быть как простым, так и составным.
Примеры:
for ( n=0; n < 10; n++)
printf(" %d %d \n",n,2*n+1);
В "инициализации" и "коррекции" могут находиться несколько операций, разделяемых между собой запятыми. Например:
for (sum = 0.0, x = 1.0, count = 1; count <= 10; count++, x *= 2.0)
{
sum += 1.0/x;
printf(" sum = %f ,когда count = %d\n", sum, count);
}
В заголовке цикла for ни одно из трех выражений не является обязательным, однако два символа "точка с запятой" обязательно должны присутствовать.
Ниже приведено описание "вечного" цикла для ввода любого символа и вывода его и его кода на экран:
char c;
for ( ; ; )
{
printf("Введите любой символ: ");
scanf("%s",&c);
printf("Симовол = %c; его код = %d\n", n, n);
if ( c == 'q' ) break; // break – оператор выхода из цикла
}
Выход из цикла осуществляется, если введен символ 'q'. По-другому то же самое можно было записать так:
char c='a';
for ( ; c != 'q'; )
{
printf("Введите любой символ: ");
scanf("%s",&c);
printf("Симовол = %c; его код = %d\n", n, n);
}
Цикл for очень удобно использовать при работе с массивами. Пример:
float g[10], f[10];
int i;
for (i = 0; i < 10; i++)
{
printf("Введите %d-ый элемент массива: ", i);
scanf("%f",&g[i]);
printf("g[%d] = %f\n", i, g[i]);
f[i] = 2 * g[i];
}
Здесь организован ввод и вывод десяти элементов вещественного одномерного массива g и заполнение соответствующих элементов массива f по формуле fi = 2gi.
ВНИМАНИЕ!!! Как известно, символ ";" используется там, где соответствующий оператор ЗАКАНЧИВАЕТСЯ, поэтому фрагмент
for (i = 0; i < 10; i++); // №1
{
printf("Введите %d-ый элемент массива: ", i); // №2
scanf("%f",&g[i]);
printf("g[%d] = %f\n", , g[i]);
f[i] = 2 * g[i];
}
не является правильным: так как сразу после заголовка цикла (№1) стоит символ окончания оператора, то к моменту, когда начнёт выполняться оператор (№2), параметр i уже примет "плохое" значение 10, и повторений тела цикла никаких не будет (ведь собственно цикл уже закончился!!!).