МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОБНОЙ ТЕХНИКИ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Кафедра “Информатика и программное обеспечение вычислительных систем”
Учебная дисциплина “Информатика”
“УТВЕРЖДАЮ”
Зав. кафедрой ИПОВС
Шаньгин В.Ф.
Лабораторная работа
Разработка циклических программ на языке С.
Разработала:
к .т. н. Ашарина И.В.
МОСКВА - 1998
Цель работы: научиться составлять программы с использованием операторов цикла for, whilе, do-while.
Циклы в практике программирования – это повторяющиеся выполнения одних и тех же простых или составных операторов.
Оператор цикла for.
Оператор цикла for в С++ является универсальным, т. к. компоненты цикла могут быть произвольными выражениями.
Общая форма записи оператора цикла for имеет вид:
for(<инициализация управляющих переменных цикла>; <проверка на продолжение цикла>;
<инкремент/декремент управляющих переменных цикла>)<оператор>;
Оператор цикла for содержит три компонента, каждый из которых является необязательным. Первый компонент инициализирует управляющие переменные цикла. Второй частью цикла является условие, которое определяет, будет ли выполняться следующая итерация цикла. В последней части цикла происходит пошаговое увеличение и/или уменьшение значения управляющих переменных цикла.
1. Самый простой вариант использования цикла for очень похож на аналогичные операторы цикла в других языках программирования:
For (n=10; n<=10; n++) у=n * n;
Однако существует еще много других возможностей его применения.
2. Можно применять операцию уменьшения для счета в порядке убывания:
For (n=10; n=>0; n--)
printf(“%d секунд ! \n”, n);
printf(“пуск !
3. При желании можно вести счет двойками, десятками и т.д.
for (n=2; n<60; n=n+13)
printf ("%d \n", n );
Вместо выражения n=n+13 можно воспользоваться записью n+=13. Знак += определяет аддитивную операцию присваивания, в результате выполнения которой величина, стоящая справа, прибавляется к значению переменной, расположенной слева.
4. Можно вести подсчет с помощью символов, а не только чисел:
for(ch=’a’;ch<=’z’;ch++)
printf(“Величина кода ASCII для %c равна %d .\n”,ch,ch);
При выполнении этого оператора будут выведены на печать все буквы от а до z вместе с их АSСII-кодами.
5. Можно проверить выполнение некоторого произвольного условия, отличного от условия, полагаемого на число итераций:
for (num=1; num* num* num<=21б; num++)
printf (“%5d%5d\n”, num, num* num ' num);
Это целесообразно в том случае, когда более критично ограничение максимального значения, а не количества итераций.
6. Можно сделать так, чтобы значение некоторой величины возрастало в геометрической, а не в арифметической прогрессии, т.е. чтобы вместо прибавления фиксированного значения на каждом шаге цикла выполнялось умножение:
for (debt=100.0; debt<150.0; debt=debt*1.1)
printf ("Ваш долг теперь $%.2f.\n", debt);
Для выражения debt=debt*1.1 существует сокращенная запись: debt*=1.1, в которой знак *= определяет мультипликативную операцию присваивания, при выполнении которой значения переменой, расположенной слева, умножается на величину, стоящую справа.
7. В качестве третьего выражения можно использовать любое правильно составленное выражение. При этом его значение будет изменяться при каждой итерации:
for ( х=1; у<=75; у=5*х++10);
printf ("%10d %10d \n", х, у);
В спецификации цикла в данном примере проверяется значение у, а не х. В каждом из трех выражений, управляющих работой цикла for, могут использоваться любые переменные.
Следует отметить, что хотя приведенный пример правилен, он не может служить иллюстрацией хорошего стиля программирования.
8. В цикле for можно опустить одно или более выражений (но при этом нельзя опускать символы "точка с запятой"). Необходимо только включить в тело цикла несколько операторов, которые рано или поздно приведут к завершению его работы.
ans=2;
for ( n=3; ans<=25; )
ans=ans*n;
Тело следующего цикла
for( ; ; )
printf ("Мы написали бесконечный цикл \n");
будет выполняться "бесконечное" число раз, поскольку пустое условие всегда считается истинным.
Если в цикле оставлены пустыми все три компонента, как в последнем из приведенных случаев, то такой цикл называется открытым. Выход из такого цикла может осуществляться двумя способами:
8а. Оператор break служит для продолжения работы программы после окончания текущего цикла и используется, если после выхода из цикла for необходимо выполнить оставшуюся часть программы.
8б. Функция exit; объявленная в заголовочном файле STDLIB.H, позволяет выйти из программы. Эта функция используется в том случае, если нужно прекратить выполнение шагов цикла и выйти из программы.
В состав цикла for входит операция "запятая", которая увеличивает гибкость его использования, позволяя включать в его спецификацию несколько инициализирующих или корректирующих выражений.
Пример:
// почтовые тарифы
#define FIRST 20 // 20 центов за первую унцию веса
#define NEXT 17 // 17 центров за каждую следующую.
void ( )
{
int ounces,cost;
printf ("стоимость унции \n");
for(ounces=1, cost=FIRST; ounces<=16; ounces++,cost+= NEXT)
printf ("%Зd %7d \n", ounces, cost);
Здесь операция "запятая" используется в первом и третьем выражениях: в первом случае она позволяет инициализировать переменные ounces и cost; во втором – на каждой итерации увеличивать значение ounces на 1, а cost – на 17 (величину константы NEXT). Все вычисления осуществляются в спецификации цикла for.