Программирование на языке С++ Цикл while |
|||||||||
|
В языке C++ существует три вида циклов: цикл while c предусловием, цикл while с постусловием, цикл for. Цикл while ("пока") с предусловием При выполнении цикла while сначала проверяется условие. Если оно ложно, то цикл не выполняется и управление передается на следующую инструкцию после тела цикла while. Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла. Синтаксис цикла while ("пока") c предусловием такой (обратите внимание на скобки, в которых пишется условие): while (условие) инструкция Если внутри цикла нужно выполнить несколько инструкций, то их нужно объединить в блок при помощи фигурных скобок. Впрочем, даже если ваш цикл состоит из одной инструкции и фигурные скобки не требуются, все равно рекомендуется использовать фигурные скобки для выделения блока цикла. Следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10: n=1; while(n<=10) { cout<<n*n<<endl; n=n+1; } В этом примере переменная n внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной n будет равно 11, поскольку именно при n==11 условие n<=10 впервые перестанет выполняться. В следующем примере цикл используется для того, чтобы найти количество знаков в десятичной записи целочисленной переменной n. int Ndigits=0; while(n!=0) { Ndigits=Ndigits+1; n=n/10; } Внутри цикла значение переменной n уменьшается в 10 раз до тех пор, пока она не станет равна 0. Уменьшение целочисленной переменной в 10 раз (с использованием целочисленного деления) эквивалентно отбрасыванию последней цифры этой переменной. Цикл while ("пока") с постусловием Цикл "пока" с постусловием отличается от цикла с предусловием тем, что сначала выполняется блок цикла, а потом проверяется условие. Если условие истинно, то цикл будет выполнен еще раз, и так до тех пор, пока условие будет истинно. Синтаксис цикла с постусловием такой (обратите внимание на обязательную точку с запятой после условия): do инструкция while (условие); Поскольку условие проверяется после выполнения тела цикла, то блок цикла с постусловием всегда будет выполнен хотя бы один раз, независимо от истинности условия. Это может привести к ошибкам, поэтому использовать цикл while с постусловием следует только тогда, когда это действительно упрощает алгоритм. Упражнения 1. По данному n найдите суммы 1+2+...+n, 12+22+...+n2 . Сравните полученные результаты с формулами, известными из курса математического анализа. 2. Напечатайте все точные квадраты натуральных чисел, не превосходящие данного числа n. 3. По данному числу n вычислите число n! . 4. По данным числам n и k вычислите число Ckn (число сочетаний из n элементов по k). 5. По данному числу n вычислите сумму 4(1-1/3+1/5-1/7+...+(-1)n1/(2n+1)) . К чему будет стремиться эта сумма при росте n? 6. Найдите наибольшее число, которое можно сохранить в переменных типа short, unsigned short, int, unsigned int, long, unsigned long (подсказка: при прибавлении к этому числу единицы получится меньшее число). 7. По данному натуральному числу n определите количество цифр в его десятичной записи. Определите сумму цифр числа n. Найдите наибольшую и наименьшую цифры. 8. Напечатайте представление данного натурального числа n в двоичном виде (можно в обратном порядке). 9. Машинным эпсилоном (точностью) называется такое наибольшее действительное число b , что 1+b=1 . Найдите машинное эпсилон для типов float и double. 10. По данным числам double a и int n вычислите a^n. 11. По данному натуральному числу n найдите сумму чисел 1+1/1!+1/2!+1/3!+...+1/n!. Количество действий должно быть пропорционально n. 12. По данному натуральному числу n вычислите сумму 4(1-1/3+1/5-1/7+...+(-1)n1/(2n+1)) . 13. По данному натуральному числу n найдите его представление в двоичном виде. Можно напечатать это представление в обратном порядке. 14. Числа Фибоначчи. Последовательно Фибоначчи определена следующим образом: a0=1 , a1=1 , an=an-1+an-2 при n>1. По данному натуральному n определите an . 15. Алгоритм Евклида. По данным натуральным числам n и m найдите их наибольший общий делитель. Количество действий должно быть порядка log max (n;m) . Указание. НОД(n,m)=НОД(n mod m ,m ). 16. В задачах 2 и 3 определите предел данных сумм при стремлении n к бесконечности. Напечатаете значение n, при котором вы прекратили вычисление. Объясните, почему взято именно это n. наверх |