|
Главная » 2010 » Февраль » 11 » Организация циклов
|
Организация циклов Цикл — это участок кода, в котором операторы выполняются по несколько раз. Такой способ в ряде случаев бывает чрезвычайно удобным, поскольку позволяет повторять необходимые действия столько раз, сколько требуется (тысячи и даже миллионы), без необходимости выписывать соответствующий код такое же количе- ство раз. Управление ппрядком выппя„о„, „ 65 . ^ ^ ^ r ^ r s ^ грамму- выч~ю Дя из предположения, что проТенты 1 И С Л " Д е с я т И л е™е™ № исхо- снимаются и не добавляются насчет: Н а Ч И С Л Я Ю Т С Я е Ж е Г О Д Н 0 и ™™™ суммы не double balance = Ю00; balance *. interestRate; balance *- interestRate; balance *= interestRate; balance *= interestRate; balance *= interestRate; balance *= interestRate; balance *= interestRate; к о д о „ ме»ее П М е з н ы ) , Цикл do Д о с т а т о ч н о если и ^ имеет следующую структуру: Л р 0 М [ 1 я е т с я »«О Т°Р~ ™ги,еское do } while (<условле>) ; .Ж в результате вычисления <уСЛОВИЯ> п о л у ч а е т с я л о г и ч е с к о е з н а ч е ш е - ' Т 0 Г 0 - ч - б ы вывести в стол- mt i = 1; do Console.WriteLine(-{0}•, ) while (i <= 10) ; выполнять проверрккуу Г<=хю , ччтоб^ыГ чисслло попало в набор выводимых чисел. 66 Глава 4 Теперь давайте применим этот цикл в приведенной выше программе, определя- ющей накопления на банковском счете за Шлет. С его помощью мы подсчитаем, сколько лет потребуется, чтобы на счету накопилась определенная сумма денег, при заданных начальной сумме и процентной ставке. Практикум: использование циклов do 1. Создайте новое консольное приложение с именем chO4ExO4 В директории C:\BegCSharp\Chapter4. 2. Добавьте следующий код в ciassi.cs: static void Main (string [] args) { double balance, interestRate, targetBalance; Console.WriteLine(*What is your current balance?"); balance = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("What is your current annual interest rate (in %)?"); interestRate - 1 + Convert.ToDouble(Console.ReadLine()) / 100.0; Console.WriteLine("What balance would you like to have?"); targetBalance = Convert.ToDouble(Console.ReadLine()); int totalYears = 0 ; do { balance *= interestRate; ' ++totalYears; > while (balance < targetBalance); Console.WriteLineCIn {0} year{l} you'll have a balance of {2} . ", totalYears, totalYears = = ! ? • * : *s", balance); 3. Запустите программу и введите какие-нибудь значения: bXBegCSharp BflSHE&Ws- \Hmt is your current balance? 1888 Ufoat is your current annual interest rate <io КУ? !4.2 УЬа1: balance would *;ou like to ba^e? 110088 In 56 years you'll lw^ a balance of 10013.6466385922- Press any &еУ fc& continue m Как это работает Эта программа повторяет вычисление ежегодного баланса с фиксированной процентной ставкой столько раз, сколько потребуется для того, чтобы баланс на- чал удовлетворять условию завершения. Мы используем счетчик лет, увеличивая его на единицу при каждом проходе по циклу: int totalYears = 0; do { balance *= interestRate; ++totalYears; } while (balance < targetBalance); Управление порядком выполнения 67 Затем мы используем значение переменной totalYears в качестве одной из со- ставляющих выходного потока: Console.WriteLineCIn {0} уеаг{1} you'll have a balance of {2}.', totalYears, totalYears == 1 ? »" : "s', balance); Такой способ использования оператора ?: (тринарного), пожалуй, является наиболее распространенным: он форматирует текст по условию с использованием минимального количества кода. Здесь мы применяем этот оператор для вывода символа тз" после слова "year" в том случае, если значение переменной totalYears не равно единице. (Буква "s" в английском языке служит для образования множественного числа имени существительного.— Прим. пер.) К сожалению, эта программа не является оптимальной. Рассмотрим ситуацию, когда баланс, который требуется получить, оказывается меньше текущего баланса. Вот какой выходной поток получится в этом случае: ИC:\BeQCSharp\Chapter4\Ch04EK03\bin\Debiig\Ch04l:H03.eHe I'fbat is у о it i* current fea lance? 10080 в What Is your current annual interest rate <in И 4«2 yii&t balance would you like to fiaue? 1008 Inrl years you' 11 .Jiave a balance of 18428* Press any key to Continue Цикл do всегда выполняется хотя бы один раз. Иногда, как в нашей ситуации, это не является правильным решением. Естественно, мы можем добавить оператор if: int totalYears = 0; if (balance < targetBalance) . { " ' ' ' ' ' . • ': ' ' • • ' do { balance *= interestRate; ++totalYears; > while (balance < targetBalance); } Console.WriteLineCIn {0} year{l} you'll have a balance of {2}.", totalYears, totalYears == 1 ? *" : 's*, balance); Однако это усложнение программы, которого можно избежать. Лучшим решением будет использование цикла while.
|
Категория: информатика |
Просмотров: 1388 |
Добавил: basic
| Рейтинг: 0.0/0 |
|
Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|