Оператор цикла while. Общая форма. Примеры решения задач

Оператор цикла while. Общая форма. Примеры решения задач


Содержание


1. Назначение оператора цикла while. Общая форма. Особенности использования

Оператор цикла while предназначен для организации циклического процесса, в котором выполнение каждой следующей итерации определяется на основе истинности некоторого условия. Оператор цикла while еще называют оператором цикла с предусловием.

Общая форма оператора цикла while следующая:

while (условие) оператор;

здесь

  • условие – некоторое условие согласно синтаксису языка C#. Инструкция оператор выполняется до тех пор, пока значение условие = true. Как только значение условие становится равным false, то циклический процесс прекращается и выполняются следующие после while операторы;
  • оператор – один или несколько операторов. Если в цикле while нужно выполнить несколько операторов одновременно, то эти операторы берутся в фигурные скобки { }.

Тело цикла (оператор) выполняется, пока значение условие есть истинным (true). Оператор цикла должен быть организован таким образом, чтобы в конечном счете значение условия стало равно false. Иначе, программа «зависнет», так как выйдет бесконечный цикл.

Общая форма оператора цикла while, в котором выполняются несколько (два и более) операторов имеет следующий вид

while (условие)
{
  оператор1;
  оператор2;
  ...
  операторN;
}

 

2. Понятие вложенных циклов while

Цикл while может быть вложенным в другие конструкции. Этими конструкциями могут быть:

  • циклы for, while, do…while;
  • оператор условного перехода if;
  • оператор выбора switch.

Количество уровней вложения, в которых может использоваться цикл while, есть неограниченным.

 

3. Примеры решения задач с оператором цикла while
3.1. Вывод результатов вычисления в цикле

Условие задачи. Получить таблицу температур по Цельсию tc от -50 до +50 градусов а также их эквивалентов по шкале Фаренгейта tf, используя соотношение

Формула преобразование градусы Фаренгейт Цельсий

Решение. Текст программы решения данной задачи для приложения типа Console Application, с использованием цикла while, следующий

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
  class Program
  {
      static void Main(string[] args)
      {
          // шкала температур Цельсий => Фаренгейт
          int tc; // текущее значение температуры по Цельсию
          double tf; // значение температуры по Фаренгейту

           tc = -50;

          Console.WriteLine("Шкала температур: Цельсий - Фаренгейт");

           while (tc <= 50)
         {
              tf = 9.0 / 5.0 * tc + 32;
              tc++;
              Console.WriteLine("{0} C   => {1} F", tc, tf);

           }
      }
  }
}

 

3.2. Рекурентные алгоритмы. Вычисление n-го члена последовательности

Условие задачи. Определить n член числовой последовательности (n>2):

xn=xn1 + xn2; x0 = x1 = 1

Решение. Текст программы решения данной задачи следующий:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
  class Program
  {
      static void Main(string[] args)
      {
          // вычисление n-го члена последовательности
          int n; // n>2
          int x0, x1, x2;
          int i;

           // ввести значение n
         Console.Write("n = ");
          n = Convert.ToInt32(Console.ReadLine());

           // начальные присваивания
          x0 = x1 = 1;
          x2 = x0 + x1;
          i = 1;

           while (i <= n - 3) // вычисление
           {
              x0 = x1;
              x1 = x2;
              x2 = x0 + x1;
              i++;
          }
          Console.WriteLine("{0} ", x2);
      }
  }
}

В результате выполнения вышеприведенного кода, будет получен следующий результат

n = 7
13

 

3.3. Вычислить значения числа π с заданной точностью

Условие задачи. Вычислить значения числа π, используя формулу:

Определить, какое количество слагаемых нужно для определения числа π с точностью 7 знаков после запятой.

Формула число Пи

Решение. Для решения подобных задач цикл while подходит как нельзя лучше. Программный код решения задачи для приложения типа Console Application приведен ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
  class Program
  {
      static void Main(string[] args)
      {
          // вычислить значение числа Пи
          double pi; // результат
          int denom; // знаменатель
          int sign; // переменная, изменяющая знак числа + на -, и наоборот
          double t; // дополнительная переменная - текущая точность
          const double eps = 0.0000001; // точность 7 знаков после запятой
          int k; // количество слагаемых для получения заданной точности

           // начальные приготовления
          k = 0;
          pi = 0;         
          denom = 1;
          sign = 1;
          t = 1.0 / denom * sign;

           // цикл while - вычисление
          while (t > eps)
        {
              pi = pi + 4 * t * sign;
              sign = -sign; // изменить знак
              denom += 2; // изменить знаменатель
              t = 1.0 / denom;
              k++; // увеличить на 1 количество слагаемых
          }

           // вывод результата
          Console.WriteLine("Pi = {0}", pi);
          Console.WriteLine("k = {0}", k);
      }
  }
}

В результате выполнения вышеприведенного кода был получен следующий результат

Pi = 3.14159245358978
k = 5000000

 

4. Примеры решения задач, в которых оператор while есть вложенным
4.1. Цикл while есть вложенным в оператор выбора switch

В примере цикл while есть вложенным в оператор выбора switch. В зависимости от значения переменной a, выбирается соответствующий вариант нахождения суммы:

  • если a=1, то вычисляется s = 5+10+…+100;
  • если a=2, то вычисляется s = 5+10+…+20;
  • если a=3, то вычисляется s = 5+10;
  • иначе вычисляется s=100.


Программный код приложения типа Console Application, решающий данную задачу следующий:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
  class Program
  {
      static void Main(string[] args)
      {
          int a;
          int s = 0;
         int i;         

          a = 7;

          // выбор алгоритма решения задачи в зависимости от значения a
          switch (a)
          {
              case 1:
                  i = 0;
                  while (i < 100)
                   {
                      i = i + 5;
                      s = s + i;
                  }
                   break;
              case 2:
                   i = 0;
                  while (i < 20)
                  {
                     i = i + 5;
                    s = s + i;
                  }
                  break;
              case 3:
                  i = 0;
                  while (i < 10)
                  {
                      i = i + 5;
                     s = s + i;
                  }
                  break;
              default:
                  s = 100;
                  break;
          }
          Console.WriteLine("s = {0}", s);
      }
  }
}

В результате выполнения вышеприведенного кода, на экран будет выведен результат

s = 100

 

4.2. Цикл while есть вложенным в операторе цикла for

Условие задачи. Найти количество делителей любого из целых чисел от 120 до 140.

Решение. Ниже приведен программный код, решающий данную задачу для приложения типа Console Application:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
  class Program
  {
      static void Main(string[] args)
      {
           // число делителей любого из целых чисел от 120 до 140
          int i;
          int up;
          int t;
          int k;

           for (i = 120; i <= 140; i++)
          {
              // определить максимально-допустимое значение делителя
              up = i / 2;
              k = 0; // число делителей
              t = 1;
              while (t <= up) // вложенный цикл while
              {
                  if (i % t == 0) // определение: делитель или не делитель
                      k++;
                  t++;
              }

               // Вывести на экран делитель
              Console.WriteLine("{0}: k = {1}", i, k);
          }
      }
  }
}

В результате выполнения вышеприведенного кода, будет выведен следующий результат

120: k = 15
121: k = 2
122: k = 3
123: k = 3
124: k = 5
125: k = 3
126: k = 11
127: k = 1
128: k = 7
129: k = 3
130: k = 7
131: k = 1
132: k = 11
133: k = 3
134: k = 3
135: k = 7
136: k = 7
137: k = 1
138: k = 7
139: k = 1
140: k = 11

 


Связанные темы