C#. Оператор цикла 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

На рисунке 1 изображена схема оператора while. Как видно из схемы, сначала происходит проверка условия. Если значение условия равно True, то выполняется тело цикла. Выход из циклического процесса происходит в случае, если значение условия становится равно False.

C#. Схема оператора while

Рисунок 1. Схема оператора while

 

4. Примеры решения задач с оператором цикла while
4.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);

           }
      }
  }
}

 

4.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

 

4.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

 

5. Примеры решения задач, в которых оператор while есть вложенным
5.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

 

5.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

 


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