Рейтинговые книги
Читем онлайн C# 4.0: полное руководство - Герберт Шилдт

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 27 28 29 30 31 32 33 34 35 ... 294

// Выполнение цикла for в отрицательном направлении.

using System;

class DecrFor {

  static void Main() {

    int x;

    for(x = 100; x > -100; x -= 5)

    Console.WriteLine(x);

  }

}

В отношении циклов for следует особо подчеркнуть, что условное выражение всегда проверяется в самом начале цикла. Это означает, что код в цикле может вообще не выполняться, если проверяемое условие с самого начала оказывается ложным. Рассмотрим следующий пример.

for(count=10; count < 5; count++)

x += count; // этот оператор не будет выполняться

Данный цикл вообще не будет выполняться, поскольку первоначальное значение переменной count, которая им управляет, сразу же оказывается больше 5. Это означает, что условное выражение count < 5 оказывается ложным с самого начала, т.е. еще до выполнения первого шага цикла.

Оператор цикла for — наиболее полезный для повторного выполнения операций известное число раз. В следующем примере программы используются два цикла for для выявления простых чисел в пределах от 2 до 20. Если число оказывается непростым, то выводится наибольший его множитель.

// Выяснить, является ли число простым. Если оно

// непростое, вывести наибольший его множитель.

using System;

class FindPrimes {

  static void Main() {

    int num;

    int i;

    int factor;

    bool isprime;

    for(num = 2; num < 20; num++) {

      isprime = true;

      factor = 0;

      // Выяснить, делится ли значение переменной num нацело.

      for(i=2; i <= num/2; i++) {

        if((num % i) == 0) {

          // Значение переменной num делится нацело.

          // Следовательно, это непростое число,

          isprime = false;

          factor = i;

        }

      }

      if(isprime)

        Console.WriteLine(num + " — простое число.");

      else

        Console.WriteLine("Наибольший множитель числа " + num + " равен " + factor);

    }

  }

}

Ниже приведен результат выполнения этой программы.

2    — простое число

3    — простое число

Наибольший множитель числа 4 равен 2

5 — простое число

Наибольший множитель числа 6 равен 3

7 — простое число

Наибольший множитель числа 8 равен 4

Наибольший множитель числа 9 равен 3

Наибольший множитель числа 10 равен 5

11 — простое число

Наибольший множитель числа 12 равен 6

13 — простое число

Наибольший множитель числа 14 равен 7

Наибольший множитель числа 15 равен 5

Наибольший множитель числа 16 равен 8

17 — простое число

Наибольший множитель числа 18 равен 9

19 — простое число

Некоторые разновидности оператора цикла for

Оператор цикла for относится к самым универсальным операторам языка С#, поскольку он допускает самые разные варианты своего применения. Некоторые разновидности оператора цикла for рассматриваются ниже.

***Применение нескольких переменных управления циклом

В операторе цикла for разрешается использовать две или более переменных для управления циклом. В этом случае операторы инициализации и инкремента каждой переменной разделяются запятой. Рассмотрим следующий пример программы.

// Использовать запятые в операторе цикла for.

using System;

class Comma {

  static void Main() {

    int i, j;

    for(i=0, j = 10; i < j; i++, j--)

      Console.WriteLine("i и j: " + i + " " + j) ;

  }

}

Выполнение этой программы дает следующий результат.

i и j : 0 10

i и j : 1 9

i и j : 2 8

i и j : 3 7

i и j : 4 6

В данном примере запятыми разделяются два оператора инициализации и еще два итерационных выражения. Когда цикл начинается, инициализируются обе переменные, i и j. Всякий раз, когда цикл повторяется, переменная i инкрементируется, а переменная j декрементируется. Применение нескольких переменных управления циклом нередко оказывается удобным, упрощая некоторые алгоритмы. Теоретически в операторе цикла for может присутствовать любое количество операторов инициализации и итерации, но на практике цикл получается слишком громоздким, если применяется более двух подобных операторов.

Ниже приведен практический пример применения нескольких переменных управления циклом в операторе for. В этом примере программы используются две переменные управления одним циклом for для выявления наибольшего и наименьшего множителя целого числа (в данном случае — 100). Обратите особое внимание на условие окончания цикла. Оно опирается на обе переменные управления циклом.

// Использовать запятые в операторе цикла for для

// выявления наименьшего и наибольшего множителя числа.

using System;

class Comma {

  static void Main() {

    int i, j;

    int smallest, largest;

    int num;

    num = 100;

    smallest = largest = 1;

    for(i=2, j=num/2; (i <= num/2) & (j >= 2); i++, j--) {

      if((smallest == 1) & ((num % i) == 0)) smallest = i;

      if ((largest == 1) & ((num % j) == 0)) largest = j;

    }

    Console.WriteLine("Наибольший множитель: " + largest);

    Console.WriteLine("Наименьший множитель: " + smallest);

  }

}

Ниже приведен результат выполнения этой программы.

Наибольший множитель: 50

Наименьший множитель: 2

Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле for. В частности, управляющая переменная i служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной num. А управляющая переменная j служит для выявления наибольшего множителя. Ее значение первоначально устанавливается равным половине значения переменной num и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, i и j, не достигнут своих конечных значений. По завершении цикла оба множителя оказываются выявленными.

Условное выражение

Условным выражением, управляющим циклом for, может быть любое действительное выражение, дающее результат типа bool. В него не обязательно должна входить переменная управления циклом. В следующем примере программы управление циклом for осуществляется с помощью значения переменной done.

// Условием выполнения цикла может служить любое выражение типа bool.

using System;

class forDemo {

  static void Main() {

    int i, j;

    bool done = false;

    for(i=0, j=100; !done; i++, j--) {

      if(i*i >= j) done = true;

1 ... 27 28 29 30 31 32 33 34 35 ... 294
На этой странице вы можете бесплатно читать книгу C# 4.0: полное руководство - Герберт Шилдт бесплатно.
Похожие на C# 4.0: полное руководство - Герберт Шилдт книги

Оставить комментарий