На этой странице можно скачать этот файл совершенно бесплатно и без регистрации и без отправки смс, а также без различного рода ограничений.
Скачивайте и учитесь, надеемся, наш сайт помог вам "погрызть гранит науки"
Циклы
Лабораторная работа №2
Циклы Циклы необходимы, когда нам надо повторить некоторые действия несколько раз, как правило, пока выполняется некоторое условие. В языке С известно три вида оператора цикла: for, while и do-while. Цикл FOR Основная форма цикла for имеет следующий вид: for (инициализация; проверка условия; изменение) оператор; на самом деле в общем виде for (выражение1; выражение2; выражение 3) оператор; В простейшей форме инициализация используется для присвоения начального значения параметру цикла. Проверка условия - обычно условное выражение, которое определяет, когда цикл должен быть завершен. Приращение обычно используется для изменения параметра цикла каждый раз при повторении цикла. Эти три раздела заголовка цикла должны быть разделены точкой с запятой. Выполнение цикла происходит до тех пор, пока условное выражение истинно. Как только условие становится ложным, начинает выполняться следующий за циклом for оператор. Простейший пример оператора цикла for: for(i=0; i 10; i++) printf(%d\n, i); В результате выполнения этого оператора будут напечатаны в столбик цифры от 0 до 9. Дта печати этих цифр в обратном порядке можно исполь-зовать следующий оператор: for(i=9; i =0; i--) printf("%d\n", i); Цикл for похож на аналогичные циклы в других языках программиро-вания, и в то же время этот оператор в языке С гораздо более гибкий, мощный и применим во многих ситуациях. В качестве параметра цикла необязательно использовать целочисленный счетчик. Приведем фрагмент программы, выводящей на экран буквы русского алфавита: unsigned char ch; for (ch='A'; сh ='Я'; ch++) printf(%c, ch); Следующий фрагмент программы for(ch='0'; ch! ='N'; ) scanf(%c, &ch); будет выполняться до тех пор, пока с клавиатуры не будет введен символ 'N'. Заметим, что место, где должно быть приращение, пусто. Случайно или намеренно может получиться цикл, из которого нет выхода, так называемый бесконечный цикл. Приведем три примера таких циклов. for (;; ) printf(Бесконечный цикл\n); for (i=1;1;i++) printf(Бесконечный цикл\n); for (i=10;i 6;i++) printf(Бесконечный цикл\n); Тем не менее, для таких циклов также может быть организован выход. Для этого используется оператор break. Если оператор break встречается в составном операторе цикла, то происходит немедленное прекращение выполнения цикла и начинается выполнение следующего оператора программы. /*Пример 1*/ #include stdio.h main() { unsigned char ch; for(;; ) { ch=getchar(); /* Прочитать символ */ if(ch=='Q') break; /* Проверка символа */ printf('%c, ch); /* Печать символа */ } } В этой программе будут печататься введенные символы до тех пор, пока не будет введен символ 'Q'. Возможно, и это синтаксически правильно, наличие пустого оператора (отсутствие оператора) в цикле for. Например for (i=0;i 10000;i++); Циклы WHILE и DO-WHILE Следующий оператор цикла в языке С - это цикл while. Основная его форма имеет следующий вид: while (условие) оператор; где оператор может быть простым, составным или пустым оператором. "Условие", как и во всех других операторах, является просто выражением. Цикл выполняется до тех пор, пока условие принимает значение "истинно". Когда же условие примет значение "ложно", программа передаст управление следующему оператору программы. Так же как и в цикле for, в цикле while сначала проверяется условие, а затем выполняется оператор. Это так называемый цикл с предусловием. В отличие от предыдущих циклов в цикле do-while условие проверяется в конце оператора цикла. Основная форма оператора do-while следующая: do { последовательность операторов } while (условие); Фигурные скобки необязательны, если внутри них находится один оператор. Тем не менее, они чаще всего ставятся для лучшей читаемости программы, а также, чтобы не спутать (программисту, а не компилятору) с оператором while. Оператор do-while называется оператором цикла с постусловием. Какое бы условие ни стояло в конце оператора, набор опе-раторов в фигурных скобках один (первый) раз выполнится обязательно. В циклах for и while оператор может не выполниться ни разу. /* Пример 2 */ /* Игра угадай число. Программа выбирает случайное число от 1 до 100, вы должны угадать его */ #include stdio.h #include stdlib.h #include time.h main() { int s, x; int n=0; randomize(); s=random(100)+l; do { printf("Введите число от 1 до 100: "); scanf("%d", &x); n++; if (s x) printf(3агаданное число меньше\n); if (s x) printf(Загаданное число больше\n); } while (s-x); printf(Bы угадали число! \n); printf(3атратили на угадывание %d попыток\n, n); } Вложенные циклы Когда один цикл находится внутри другого, то говорят, что это вло-женные циклы. Часто встречаются вложенные циклы, например, при за-полнении таблиц. В качестве примера рассмотрим программу печати таб-лицы умножения целых чисел. /* Пример 3 */ # include stdio.h main() { int i, j; for (i=1; i 10;i++) { for (j=1;j 5;j++) printf(%d %d = %2d , i, j, i*j); printf(\n); } }
Использование оператора break в циклах Оператор break имеет два применения. Первое - окончание case в опе-раторе switch. Второе - немедленное окончание цикла, не связанное с про-веркой обычного условия окончания цикла. Когда оператор break встреча-ется внутри оператора цикла, то происходит немедленный выход из цикла и переход к выполнению оператора, следующего за оператором цикла. /* Пример 4 */ #include stdio.h main() { int i; for (i=0;i 1000;i++) { printf("%d - %d \n", i, i*i*i); if (i*i*i = 10000) break; } } Задание 1. Дано натуральное число n. Найти все простые числа меньшие n. 2. Дано натуральное число n. Определить сколько цифр в числе n. 3. Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел основан на следующих свойствах этой величины. Пусть m и n – одновременно не равные нулю целые неотрицательные числа и пусть m ? n. Тогда, если n = 0, то НОД(m, n) = m, а если n ? 0, то для чисел m, n и r, где r – остаток от деления m на n, выполняется равенство НОД(m, n) = НОД(n, r). Например, НОД(15, 6)=НОД(6, 3)=НОД(3, 0)=3. Даны натуральные числа n и m. Определить, используя Алгоритм Евклида, наибольший общий делитель n и m.
В следующих задачах решите вариант соответствующий вашему номеру по журналу (в подгруппе). 4. Дано натуральное число n. Вычислить: 1) ; 4) ; 7) ; 2) 7) ; 5) ; 8) ; 3) ; 6) ; 9) ; 10) . 5. Найти сумму ряда с точностью ?. Заданная точность достигается, когда очередной член ряда отличается от предыдущего меньше чем на ?. 1) , ?=0.001; 6) , ?=0.01; 2) , ?=0.001; 7) , ?=0.001; 3) , ?=0.001; 8) , ?=0.01; 4) , ?=0.01; 9) , ?=0.001; 5) , ?=0.001; 10) ,