Который из следующих операторов цикла for не содержит ошибок

Который из следующих операторов цикла for не содержит ошибок thumbnail

Обобщающий тест , четыре варианта.

Скачать:

Предварительный просмотр:

Тест

I вариант

Выберите правильный вариант ответа.

  1. Какой вариант описывает вещественную переменную на языку Pascal?
  1. var x: integer;
  2.  var x: boolean;
  3. var x: real;
  4. var x: string.
  1. Укажите правильное описание массива.
  1. var A : array [1..1000] of integer;
  2. var A : array [1..1000 of integer];
  3. var A : array [1…50] of real;
  4. var A : [array 1..50 of real].
  1. Какие из перечисленных операторов являются операторами ввода данных?
  1. and, or;
  2. read, readln;  
  3. if, then, else;
  4. write, writeln.
  1. Какой из операторов позволяет вычислить квадратный корень числа х?
  1. div(x);
  2. sqr(x);
  3. sqrt(x);
  4. abs(x).
  1. Сколько значений принимает логическая переменная?
  1. бесконечное множество;
  2. два значения;
  3. одно значение;
  4. более 10 значений.
  1. Что является результатом действия length(a)?
  1. длина строки;
  2. код символа;
  3. первый символ;
  4. число.
  1. Укажите, правильную запись следующего математического выражения: y=5×2-10x+2.
  1. y:= 5*sqr(x)-10*x+2;
  2. y:= 5*sqrt(x)-10*x+2;
  3. y:= 5*sqr(x)-10x+2;
  4. y:= 5sqr(x)-10*x+2.
  1. Выберите правильную запись математического выражения на языке программирования Pascal.
  1. (sin25+ctg15)/(sqrt(15,5));
  2. (sin(25)+ctg(15))/(sqrt(15,5));
  3. (sin(25)+cos(15)/sin(15))/sqrt(15.5);
  4. sin(25)+cos(15)/sin(15)/sqrt(15,5).
  1. Укажите условие выбора чисел, кратных 5 и не кратных 10.
  1. (х mod 5=0) and (x mod 10 0);
  2. (х mod 50) or not (x mod 10 =0);
  3. (х mod 5=0) and (x mod 10 =0);
  4. (х mod 50) or (x mod 10 0).
  1. Что означает данный блок?
  1. ввод;
  2. вывод;
  3. ввод/вывод;
  4. выполнения действия.
  1. Какое значение примет переменная х после выполнения оператора х:=15 div 4?
  1. 0;
  2. 2;
  3. 3,5;
  4. 3.
  1. Укажите, сколько раз выполнится тело цикла For i:=1 to 6 do?
  1. 1;
  2. 6;
  3. 5;
  4. бесконечное число раз.
  1. Какой из перечисленных операторов циклов не содержит ошибок?
  1. for i:=1 to 5.5 do;
  2. for i:=1 to -2 do;
  3. for i:=3 to 12 do;
  4. for i=0 to 7 do.
  1. Фрагмент алгоритма изображен в виде блок-схемы:

Определите, какое значение переменной S  будет в результате выполнения алгоритма

  1. 12;
  2. 3;
  3. 4;
  4. 7.
  1. Что производит следующий фрагмент программы:

n:=255;

for i:=1 to n do

writeln (i, ‘  ‘, chr(i));

  1. распечатывает только символы, соответствующие различным кодам;
  2. распечатывает коды, соответствующие  различным символам;
  3. распечатывает коды и соответствующие им символы;
  4. распечатывает символы.
  1. Какие значения примут переменные С и D в результате выполнения программы:

Program V1;

Var A, B, C, D : integer;

Begin

A:=6;

B:=2*A+8;

If B>A then C:= B-A else D:=A-B;

Writeln (‘C=’, C);

Writeln (‘D=’, D);

End.

  1. C=14, D=0;
  2. C=38, D=14;
  3. C=14, D= -14;
  4. C= -3 , D=3;
  1. Опередите значение переменной S после выполнения программы:

Program V2;

Var i, S : integer;

Begin

S:=0;

For i:=1 to 4 do

S:=S+sqr(i);

Writeln (‘S=’, S);

End.

  1. 5;
  2. 10;
  3. 16;
  4. 30.

Предварительный просмотр:

Тест

II вариант

Выберите правильный вариант ответа.

  1. Какой вариант описывает переменную целого типа на языке Pascal?
  1. var x: integer;
  2.  var x: boolean;
  3. var x: real;
  4. var x: string.
  1. Укажите правильное описание массива.
  1. var Mas array :[1..50] of integer;
  2. var Mas : array [1..50] of integer;
  3. var A : array [1…50] of real;
  4. var A : [array 1..50 of real].
  1. Какие из перечисленных операторов являются операторами вывода данных?
  1. and, or;
  2. read, readln;  
  3. if, then, else;
  4. write, writeln.
  1. Какой из операторов позволяет вычислить квадрат числа х?
  1. div(x);
  2. sqr(x);
  3. sqrt(x);
  4. abs(x).
  1. Какая функция позволяет определить код по символу?
  1. Val(A,N,K);
  2. Ord(A);
  3. Chr(A);
  4. Length(A).
  1. Может ли значение функции Length (A) быть равным 300?  
  1. да;
  2. нет;
  3. иногда;
  4. часто.
  1. Укажите, правильную запись следующего математического выражения: y=√2x-10x
  1. y:= sqrt(2*x-10*х);
  2. y:= sqrt(2x)-10x;
  3. y:= sqr(2*x-10*x);
  4. y:= sqr(2x)-10*x.
  1. Выберите правильную запись математического выражения на языке программирования Pascal.
  1. (cos20+ctg10)/(sqrt(5,5));
  2. (cos(20)+cos(10)/sin(10))/sqrt(5.5);
  3.  (cos(20)+ctg(10))/(sqrt(5,5));
  4. cos(20)+cos(10)/sin(10)/sqrt(5,5).
  1. Что означает данный блок?
  1. ввод;
  2. вывод;
  3. ввод/вывод;
  4. выполнения действия.
  1. Какое значение примет переменная х после выполнения оператора х:=15 mod 5?
  1. 0;
  2. 2;
  3. 3,5;
  4. 3.
  1. Укажите, сколько раз выполнится тело цикла For i:=1 to 3 do?
  1. 1;
  2. 3;
  3. 2;
  4. бесконечное число раз.
  1. Какой из перечисленных операторов циклов не содержит ошибок?
  1. for i:=1 to 5.5 do;
  2. for i:=12 downto 1 do;
  3. for i:= 12 to 3 do;
  4. for i=0 to 7 do.
  1. Фрагмент алгоритма изображен в виде блок-схемы:

Определите, какое значение переменной S  будет в результате выполнения алгоритма

  1. 12;
  2. 3;
  3. 4;
  4. 7.
  1. Что производит следующий фрагмент программы:

n:=11;

for i:=1 to n do

if a[i] mod 2=0 then k:=k+1;

writeln (‘k=’, k);

  1. находит максимальный элемент и печатает его на экране;
  2. находит четный элемент и печатает его на экране;
  3. находит второй элемент массива и печатает его на экране;
  4. находит число четных элементов и печатает их число на экране.
  1. Какие значения примут переменные С и D в результате выполнения программы:

Program V1;

Var A, B, C, D : integer;

Begin

A:=7;

B:=2*A-3;

If B>A then C:= B-A else D:=A-B;

Writeln (‘C=’, C);

Writeln (‘D=’, D);

End.

  1. C=4, D=0;
  2. C=18, D=4;
  3. C=4, D= -4;
  4. C= -3 , D=3;
  1. Опередите значение переменной S после выполнения программы:

Program V2;

Var i, S : integer;

Begin

S:=0;

For i:=1 to 3 do

S:=S+sqr(i);

Writeln (‘S=’, S);

End.

  1. 14;
  2. 10;
  3. 16;
  4. 3.

Предварительный просмотр:

Тест

III вариант

Выберите правильный вариант ответа.

  1. Какой вариант описывает переменную логического типа на языке Pascal?
  1. var x: integer;
  2.  var x: boolean;
  3. var x: real;
  4. var x: string.
  1. Укажите правильное описание массива.
  1. var Mas: array :[1..10] of boolean;
  2. var A : array (1..10) of real;
  3. var A : array [1..10] of integer;
  4. var Mas : [array 1..10 of real].
  1. Укажите, какие операции относятся к логическим операциям?
  1. and, or, not;
  2. not, end, then;  
  3. or, mod, and;
  4. if, or, and.
  1. Какой вариант запускает датчик случайных чисел?
  1. readln(n);
  2. random (x);
  3. round;
  4. randomize.
  1. Какая функция позволяет определить символ по коду?
  1. Val(A,N,K);
  2. Ord(A);
  3. Chr(A);
  4. Length(A).
  1. Верно ли, что символы «А» и «а» имеют одинаковые коды?  
  1. нет;
  2. да;
  3. иногда;
  4. в отдельных случаях.

                                                                                                                                           √2x

  1. Укажите, правильную запись следующего математического выражения  y=   (а+7).
  1. y:= sqrt(2*x)/(a+7);
  2. y:= sqrt 2x/a-7;
  3. y:= sqr(2*x)/(a+7);
  4. y= sqr(2x)/a+7.
  1. Выберите правильную запись математического выражения на языке программирования Pascal.
  1. (cos30+ctg20)/(sqrt25,5);
  2. (cos(30)+cos(20)/sin(20))/sqrt(25.5);
  3.  (cos(30)+ctg(20))/(sqrt(25,5));
  4. cos(30)+cos(20)/sin(20)/sqrt(25,5).
  1. Укажите условие выбора чисел, кратных 4 и не кратных 5.
  1.  (х mod 40) or not (x mod 5 =0);
  2. (х mod 4=0) and (x mod 5 =0);
  3. (х mod 40) or (x mod 5 0);
  4. (х mod 4=0) and (x mod 5 0).
  1. Что означает данный блок?
  1. начало/конец;
  2. счетчик;
  3. ввод/вывод;
  4. выполнения действия.
  1. Какое значение примет переменная х после выполнения оператора х:=10 div 2?
  1. 0;
  2. 2;
  3. 3,5;
  4. 4.
  1. Укажите, сколько раз выполнится тело цикла For i:=1 to 5 do?
  1. 1;
  2. 5;
  3. 4;
  4. бесконечное число раз.
  1. Какой из перечисленных операторов циклов не содержит ошибок?
  1. for i=1 to 5.5 do;
  2. for i:=1 downto 12 do;
  3. for i:= 12 to 3 do;
  4. for i:= 1 to 7 do.
  1. Фрагмент алгоритма изображен в виде блок-схемы:

Определите, какое значение переменной S  будет в результате выполнения алгоритма

  1. 10;
  2. 3;
  3. 4;
  4. 7.
  1. Что производит следующий фрагмент программы:

randomize;

for i:=1 to 10 do begin

A[i]:=random(100);

write (A[i]:4);

end;

  1. Вывод элементов массива заданных случайным образом
  2. Ввод элементов массива с клавиатуры;
  3. Вывод элементов массива  на экран монитора;
  4. Ввод и вывод элементов массива.
  1. Какие значения примут переменные С и D в результате выполнения программы:
Читайте также:  Папка методического объединения естественно математического цикла

Program V1;

Var A, B, C, D : integer;

Begin

A:=4;

B:=A*3 – 6;

If B>A then C:= B-A else D:=A-B;

Writeln (‘C=’, C);

Writeln (‘D=’, D);

End.

  1. C=-2, D=4;
  2. C=2, D=0;
  3. C=-2, D= 0;
  4. C= -3 , D=3;
  1. Опередите значение переменной S после выполнения программы:

Program V2;

Var i, S : integer;

Begin

S:=0;

For i:=1 to 4 do

S:=S+2*i;

Writeln (‘S=’, S);

End.

  1. 4;
  2. 6;
  3. 2;
  4. 20.

Предварительный просмотр:

Тест

IV вариант

Выберите правильный вариант ответа.

  1. Какой вариант описывает переменную строкового типа на языке Pascal?
  1. var x: integer;
  2.  var x: boolean;
  3. var x: real;
  4. var x: string.
  1. Укажите, правильное описание массива.
  1. var A : array [1..10, 1..10] of integer;
  2. var Mas: array :[1..10, 1..10] of boolean;
  3. var A : array (1…10, 1…10) of real;
  4. var Mas : [array 1..10, 1..10 of real].
  1. Укажите, какое слово не является служебным в языке программирования  Pascal?
  1. step;
  2. begin;  
  3. while;
  4. then.
  1. Какой из операторов позволяет вычислить модуль числа?
  1. sqr;
  2. sqrt;
  3. abs;
  4. div.
  1. Какой вариант используют для получения случайных чисел?
  1. random (x);
  2. randomize;
  3. round;
  4. length(A).
  1. С помощью какой функции можно определить, чем является данная строка в другой строке??  
  1. pos(str1, str2);
  2. str (N, Str1);
  3. chr;
  4. length(A).

                                                                                                                                           √ x2

  1. Укажите, правильную запись следующего математического выражения  y=   (а-5).
  1. y:= sqrt 2x/a-5;
  2. y:= sqr(x*x/a-5);
  3. y:= sqrt(sqr(x))/(a-5);
  4. y= sqr(sqrx)/a-5.
  1. Выберите правильную запись математического выражения на языке программирования Pascal.
  1. (cos(45)+cos(30)/sin(30))/sqrt(3.5);
  2.  (cos45+ctg30)/(sqrt3,5);
  3. (cos(45)+ctg(30))/(sqrt(3,5));
  4. cos(45)+cos(30)/sin(30)/sqrt(3,5).
  1. Укажите условие выбора чисел, не кратных 4 и кратных 7.
  1.  (х mod 40) or not (x mod 7 =0);
  2. (х mod 4=0) and (x mod 7 =0);
  3. (х mod 40) or (x mod 7 0);
  4. (х mod 40) and (x mod 7 = 0).
  1. Что означает данный блок?
  1. начало/конец;
  2. счетчик;
  3. условие;
  4. выполнения действия.
  1. Какое значение примет переменная х после выполнения оператора х:=10 mod 2?
  1. 0;
  2. 2;
  3. 5;
  4. 4.
  1. Укажите, сколько раз выполнится тело цикла For i:=2 to 5 do?
  1. 1;
  2. 5;
  3. 4;
  4. бесконечное число раз.
  1. Какой из перечисленных операторов циклов не содержит ошибок?
  1. for i=1 to 2.5 do;
  2. for i:=12 downto 1 do;
  3. for i:= 11 to 1 do;
  4. for 1 to 7 do.
  1. Фрагмент алгоритма изображен в виде блок-схемы:

Определите, какое значение переменной S  будет в результате выполнения алгоритма

  1. 10;
  2. 3;
  3. 4;
  4. 7.
  1. Что производит следующий фрагмент программы:

n:=10;

for i:=1 to n do begin

writeln (‘A[‘ , I, ‘]’);

readln (A[i]);

  1. Ввод элементов массива с клавиатуры;
  2. Вывод элементов на экран монитора;
  3. Ввод и вывод элементов массива;
  4. Ввод элементов случайным образом.
  1. Какие значения примут переменные С и D в результате выполнения программы:

Program V1;

Var A, B, C, D : integer;

Begin

A:=4;

B:=A*2 + 3;

If B>A then C:= B-A else D:=A-B;

Writeln (‘C=’, C);

Writeln (‘D=’, D);

End.

  1. C=-2, D=4;
  2. C=7, D=0;
  3. C=4, D= 0;
  4. C= 7 , D=3;
  1. Опередите значение переменной S после выполнения программы:

Program V2;

Var i, S : integer;

Begin

S:=0;

For i:=1 to 6 do

S:=S+i;

Writeln (‘S=’, S);

End.

  1. 1;
  2. 21;
  3. 15;
  4. 6.

По теме: методические разработки, презентации и конспекты

  • Мне нравится 

Источник

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

Содержание

  • 1. Назначение оператора цикла for. Общая форма
  • 2. Разновидности цикла for. Примеры
  • 3. Примеры цикла for, в котором количество итераций заведомо известно
  • 4. Примеры цикла for, в котором количество итераций заведомо неизвестно
  • 5. Понятие вложенного цикла for
  • 6. Примеры решения задач, в которых цикл for есть вложенным в другие циклы
  • Связанные темы

Поиск на других ресурсах:

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

Цикл for предназначен для организации циклического процесса. С помощью цикла for можно организовывать циклический процесс любого типа, в котором:

  • количество итераций цикла заведомо известно;
  • количество итераций цикла неизвестно и определяется на основе выполнения некоторого условия.

Общая форма оператора цикла for

for (инициализация; условие; выражение)
{
  // некоторые инструкции, операторы
  // …
}

где

  • инициализация – выражение, инициализирующее переменную-счетчик. Эта переменная определяет количество итераций, которые должны выполниться в цикле;
  • условие – логическое выражение, которое определяет необходимость выполнения следующей итерации цикла. Если условие = true, то выполняется следующая итерация цикла. Если значение условие = false, то происходит прекращение выполнения цикла и переход к следующему оператору, который следует за оператором for;
  • выражение – некоторое выражение, изменяющее значение переменной-счетчика. Необязательно выражение может изменять значение переменной-счетчика. Также переменная-счетчик может изменять свое значение в теле цикла.

Если оператор цикла for применяется для одного оператора, то в общей форме фигурные скобки можно опустить

for (инициализация; условие; выражение)
  оператор;

здесь оператор – один оператор или одна инструкция.

  ⇑

2. Разновидности цикла for. Примеры

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

Пример 1. В примере опущена часть, которая инициализирует переменную-счетчик. Вычисляется сумма

s = 2 + 4 + 8 + … + 100

Фрагмент кода, решающий данную задачу следующий:

// вычислить сумму 2+4+8+…+100
int sum = 0;
int i = 0;

// нет части инициализации переменной-счетчика
for (; i <= 100; i += 2)
  sum += i;
// sum = 2550

Пример 2. В примере опущена часть, которая проверяет условие выполнения следующей итерации. Пример вычисляет сумму элементов массива A.

// вычислить сумму элементов массива A
double[] A = { 2.5, 1.2, 0.8, 3.3, 4.2 };
double sum = 0;
int i;

// нет части, которая проверяет условие выполнения цикла
for (i = 0; ; i++)
{
   if (i == A.Length) break;
  sum += A[i];             
}         
// sum = 12.0

Пример 3. В примере опущена часть выражения, которая изменяет переменную-счетчик. Дано вещественное число a и натуральное число n. Вычислить:

a × (a+1) × … × (a+n-1)

Фрагмент кода, решающий данную задачу

// вычислить произведение a*(a+1)*…*(a+n-1)
int mult;
int i;
int n, a;

n = 5;
a = 4;
mult = 1;

// отсутствует часть прироста переменной-счетчика i
for (i = 0; i < n; )
{
  mult = mult * (a + i);
  i++;
}
// mult = 6720

Пример 4. В примере цикл for не содержит инициализации и условия. Задано натуральное число n. Определить максимальную цифру этого числа.

Решение данной задачи с использованием цикла for (приложение типа Console Application)

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

namespace ConsoleApplication4
{
  class Program
  {
      static void Main(string[] args)
      {
          // определить максимальную цифру числа n
          int n;
          int t, d;
          int max;

           // ввод n
          Console.Write(“n = “);
          n = Convert.ToInt32(Console.ReadLine());

           t = n;
          max = 0; // максимальная цифра

           for (; t > 0; ) // цикл не содержит инициализации и прироста счетчика
          {
               d = t % 10;
               if (max < d) max = d;
                t = t / 10;
          }
          Console.WriteLine(“Max = {0}”, max);
      }
  }
}

Результат выполнения вышеприведенной программы:

n = 283915
Max = 9

Пример 5. В примере цикл for не содержит условия и выражения. Выход из цикла for осуществляется с помощью инструкции break.

Задан массив B чисел типа float. Найти позицию pos первого элемента массива, значение которого лежит в диапазоне от -5 до +5.

Читайте также:  Цикл передач искатели на ютубе

Фрагмент кода, решающий данную задачу

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

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// найти позицию первого вхождения
float[] B = { 12.4f, -11.9f, 7.5f, 2.3f, 1.8f };
int pos;

for (pos = 0; ; ) // цикл for не содержит условия и выражения
{
if (pos == B.Length)
break;
if ((B[pos] >= -5) && (B[pos] <= 5))
break;
pos++;
}

if (pos == B.Length)
Console.WriteLine(“Искомого элемента нет в массиве.”);
else
Console.WriteLine(“pos = {0}”, pos);
}
}
}

Результат выполнения программы

pos = 3

Пример 6. В примере демонстрируется «пустой» цикл for. В общем случае пустой цикл for выглядит следующим образом:

for ( ; ; )
{
// некоторые инструкции
// …
}

  ⇑

3. Примеры цикла for, в котором количество итераций заведомо известно

Пример 1. Найти сумму всех целых чисел от 100 до 200. Фрагмент программы, которая решает данную задачу с использованием цикла for следующий:

// вычислить сумму
int sum;
int i;
sum = 0;
for (i = 100; i <= 200; i++)
sum += i;
// sum = 15150

Пример 2. Дано натуральное число n. Разработать программу, которая находит следующую сумму

Который из следующих операторов цикла for не содержит ошибок

Фрагмент кода, решающий данную задачу

// вычислить сумму
double sum;
int i;
int n;
n = 10;
sum = 0;
for (i = 1; i <= n; i++)
sum = sum + 1.0 / i;
// sum = 2.92896825396825

Пример 3. Рекурентные соотношения. Последовательность чисел a0, a1, a2, … получается по закону:

Дано натуральное число n. Получить a1, a2, …, an.

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

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

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// получить a1, a2, …, an
double a0, ak;
int k;
int n;

n = 10;
a0 = 1;
k = 0;

Console.WriteLine(“a[{0}] = {1}”, k, a0);
for (k = 1; k <= n; k++)
{
ak = k * a0 + 1.0 / k;
Console.WriteLine(“a[{0}] = {1}”, k, ak);
a0 = ak;
}
}
}
}

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

a[0] = 1
a[1] = 2
a[2] = 4.5
a[3] = 13.8333333333333
a[4] = 55.5833333333333
a[5] = 278.116666666667
a[6] = 1668.86666666667
a[7] = 11682.2095238095
a[8] = 93457.8011904762
a[9] = 841120.321825397
a[10] = 8411203.31825397

  ⇑

4. Примеры цикла for, в котором количество итераций заведомо неизвестно

Пример 1. Дано вещественное число a. Найти такое наименьшее n, что

Решение задачи для приложения типа Console Application

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

namespace ConsoleApplication1
{
  class Program
  {
      static void Main(string[] args)
      {
          // цикл for, в котором количество итераций заранее неизвестно
          int n;
          double a;
          double t;
          Console.Write(“a = “);
          a = Convert.ToDouble(Console.ReadLine());

           // цикл вычисления
          for (n = 1, t = 0; t < a; n++)
              t = t + 1.0 / n;
          Console.Write(“n = {0}”, n – 1);
      }
  }
}

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

a = 2
n = 4

Пример 2. Задано число a (1<a≤1.5). Найти такое наименьшее n, что в последовательности чисел

Который из следующих операторов цикла for не содержит ошибок

последнее число есть меньше чем a.

Ниже приведено решение задачи для приложения типа Console Application

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

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// найти наименьшее n
int n;
double a;
double t;

Console.Write(“a = “);
a = Convert.ToDouble(Console.ReadLine());

// в части инициализации помещаются два выражения
for (n = 2, t = 1 + 1.0 / n; t >= a; n++)
t = 1 + 1.0 / n;

Console.WriteLine(“n = {0}”, n-1);
}
}
}

Как видно из вышеприведенного кода, в цикле for в части инициализации помещаются два выражения, разделенных запятой:

for (n = 2, t = 1 + 1.0 / n; t >= a; n++)
t = 1 + 1.0 / n;

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

a = 1.3
n = 4

  ⇑

5. Понятие вложенного цикла for

Цикл for может быть вложенным в любой другой управляющий оператор, которым может быть:

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

Количество уровней вложения неограничено.

  ⇑

6. Примеры решения задач, в которых цикл for есть вложенным в другие циклы

Пример 1. В примере цикл for вложен в другой цикл for.

Напечатать числа в следующем виде:

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5

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

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

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// в цикле for вложен другой цикл for
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= i; j++)
Console.Write(“{0} “, i);
Console.WriteLine();
}
}
}
}

Пример 2. Цикл for вложен в цикл while.

Найти все целые числа из промежутка от 1 до 300, в которых ровно 5 делителей.

Фрагмент кода, который решает данную задачу

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

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// найти все числа от 1 до 300 в которых ровно 5 делителей
int num;
int i, k;

num = 1;
while (num <= 300)
{
k = 0;
for (i = 1; i <= num; i++) // цикл for вложен в цикл while
if (num % i == 0) k++;
if (k == 5)
Console.WriteLine(“{0}”, num);
num++;
}
}
}
}

Результат выполнения программы

16
81

  ⇑

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

  • Оператор условного перехода if. Полная и сокращенная формы. Конструкция if-else-if
  • Оператор выбора switch
  • Оператор цикла while. Примеры

  ⇑

Источник

  Обновл. 15 Сен 2020  | 

Безусловно, наиболее используемым циклом в языке C++ является цикл for.

Цикл for

Цикл for в языке С++ идеален, когда известно необходимое количество итераций. Выглядит он следующим образом:

for (объявление переменных; условие; инкремент/декремент счетчика)
    тело цикла;

Или, преобразуя for в эквивалентный цикл while:

{ // обратите внимание, цикл находится в блоке
    объявление переменных;
    while (условие)
    {
       тело цикла;
       инкремент/декремент счетчика;
    }
} // переменные, объявленные внутри цикла, выходят из области видимости здесь

Переменные, определенные внутри цикла for, имеют специальный тип области видимости: область видимости цикла. Такие переменные существуют только внутри цикла и недоступны за его пределами.

Выполнение цикла for

Цикл for в C++ выполняется в 3 шага:

   Шаг №1: Объявление переменных. Как правило, здесь выполняется определение и инициализация счетчиков цикла, а точнее — одного счетчика цикла. Эта часть выполняется только один раз, когда цикл выполняется впервые.

   Шаг №2: Условие. Если оно равно false, то цикл немедленно завершает свое выполнение. Если же условие равно true, то выполняется тело цикла.

   Шаг №3: Инкремент/декремент счетчика цикла. Переменная увеличивается или уменьшается на единицу. После этого цикл возвращается к шагу №2.

Рассмотрим пример цикла for и разберемся детально, как он работает:

#include <iostream>

int main()

{

for (int count = 0; count < 10; ++count)

std::cout << count << ” “;

return 0;

}

Сначала мы объявляем переменную count и присваиваем ей значение 0. Далее проверяется условие count < 10, а так как count равен 0, то условие 0 < 10 имеет значение true. Следовательно, выполняется тело цикла, в котором мы выводим в консоль переменную count (т.е. значение 0).

Затем выполняется выражение ++count, т.е. инкремент переменной. Затем цикл снова возвращается к проверке условия. Условие 1 < 10 имеет значение true, поэтому тело цикла выполняется опять. Выводится 1, а переменная count увеличивается уже до значения 2. Условие 2 < 10 является истинным, поэтому выводится 2, а count увеличивается до 3 и так далее.

В конце концов, count увеличивается до 10, а условие 10 < 10 является ложным, и цикл завершается. Следовательно, результат выполнения программы:

Читайте также:  Разработка урока по теме циклы

0 1 2 3 4 5 6 7 8 9

Циклы for могут быть несколько сложны для новичков, однако опытные кодеры любят их, так как эти циклы очень компактны и удобны. Для наглядности, давайте преобразуем цикл for, приведенный выше, в эквивалентный цикл while:

#include <iostream>

int main()

{

{ // внешние скобки нужны для обеспечения области видимости цикла

int count = 0;

while (count < 10)

{

std::cout << count << ” “;

++count;

}

}

return 0;

}

Обратите внимание, внешние фигурные скобки здесь необходимы, так как переменная count выходит из области видимости при завершении цикла.

Еще примеры циклов for

Давайте, используя цикл for, напишем функцию вычисления значений в степени n:

int pow(int base, int exponent)

{

    int total = 1;

    for (int count=0; count < exponent; ++count)

        total *= base;

    return total;

}

Функция возвращает значение base^exponent (число в степени n). base — это число, которое нужно возвести в степень, а exponent — это степень, в которую нужно возвести base.

   Если экспонент равен 0, то цикл for выполняется 0 раз, и функция возвращает 1.

   Если экспонент равен 1, то цикл for выполняется 1 раз, и функция возвращает 1 * base.

   Если экспонент равен 2, то цикл for выполняется 2 раза, и функция возвращает 1 * base * base.

Хотя в большинстве циклов используется инкремент счетчика, мы также можем использовать и декремент счетчика:

#include <iostream>

int main()

{

for (int count = 8; count >= 0; –count)

std::cout << count << ” “;

return 0;

}

Результат:

8 7 6 5 4 3 2 1 0

Также с каждой новой итерацией мы можем увеличить или уменьшить значение счетчика больше, чем на единицу:

#include <iostream>

int main()

{

for (int count = 9; count >= 0; count -= 2)

std::cout << count << ” “;

return 0;

}

Результат:

9 7 5 3 1

Ошибка неучтенной единицы

Одна из самых больших проблем с которой приходится сталкиваться начинающим программистам в циклах for (а также и в других типах циклов) — это ошибка на единицу (или «ошибка неучтенной единицы»). Она возникает, когда цикл повторяется на 1 раз больше или на 1 раз меньше нужного количества итераций. Это обычно происходит из-за того, что в условии используется некорректный оператор сравнения (например, > вместо >= или наоборот). Как правило, эти ошибки трудно отследить, так как компилятор не будет жаловаться на них, программа будет работать, но её результаты будут неправильными.

При написании циклов for помните, что цикл будет выполняться до тех пор, пока условие является истинным. Рекомендуется тестировать циклы, используя разные значения для проверки работоспособности цикла. Хорошей практикой является проверять циклы с помощью данных ввода (чисел, символов и прочего), которые заставляют цикл выполниться 0, 1 и 2 раза. Если цикл работает исправно, значит всё ОК.

Правило: Тестируйте свои циклы, используя входные данные, которые заставляют цикл выполниться 0, 1 и 2 раза.

Пропущенные выражения в цикле

Также в циклах можно пропускать одно или сразу все выражения, например:

#include <iostream>

int main()

{

int count = 0;

for (; count < 10; )

{

std::cout << count << ” “;

++count;

}

return 0;

}

Результат:

0 1 2 3 4 5 6 7 8 9

Инициализацию счетчика мы прописали вне тела цикла, а инкремент счетчика — внутри тела цикла. В самом операторе for мы указали только условие. Иногда бывают случаи, когда не требуется объявлять счетчик цикла (потому что у нас он уже есть) или увеличивать его (так как мы увеличиваем его каким-то другим способом).

Хоть это и не часто можно наблюдать, но в операторе for можно вообще ничего не указывать. Стоит отметить, что подобное приведет к бесконечному циклу:

for (;;)
    тело цикла;

Вышеприведенный пример эквивалентен:

while (true)
    тело цикла;

Объявления переменных в цикле for

Хотя в циклах for обычно используется только один счетчик, иногда могут возникать ситуации, когда нужно работать сразу с несколькими переменными. Для этого используется оператор Запятая. Например:

#include <iostream>

int main()

{

int aaa, bbb;

for (aaa = 0, bbb = 9; aaa < 10; ++aaa, –bbb)

std::cout << aaa << ” ” << bbb << std::endl;

return 0;

}

Этот цикл присваивает значения двум ранее объявленным переменным: aaa = 0 и bbb = 9. Только с каждой итерацией переменная aaa увеличивается на единицу, а bbb — уменьшается на единицу.

Результат выполнения программы:

0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

Примечание: Вышеприведенный цикл можно переписать следующим образом:

#include <iostream>

int main()

{

for (int aaa = 0, bbb = 9; aaa < 10; ++aaa, –bbb)

std::cout << aaa << ” ” << bbb << std::endl;

return 0;

}

В этом случае запятая в объявлении переменных является частью синтаксиса, а не использованием оператора Запятая. Но эффект идентичен.

Использование циклов for в старых версиях С++

В старых версиях C++ переменные, объявленные в цикле for, не уничтожались при завершении этого цикла. Т.е. у вас могло получиться что-то вроде следующего:

for (int count=0; count < 10; ++count)

    std::cout << count << ” “;

// В старых версиях С++ переменная count здесь не уничтожается

std::cout << “n”;

std::cout << “I counted to: ” << count << “n”; // поэтому мы можем использовать count даже здесь

Позднее это было запрещено, но вы все еще можете увидеть подобное в старом коде.

Вложенные циклы for

Подобно другим типам циклов, одни циклы for могут быть вложены в другие циклы for. В следующем примере мы разместили один for внутри другого for:

#include <iostream>

int main()

{

for (char c = ‘a’; c <= ‘e’; ++c) // внешний цикл по буквам

{

std::cout << c; // сначала выводим букву

for (int i = 0; i < 3; ++i) // внутренний цикл по числам

std::cout << i;

std::cout << ‘n’;

}

return 0;

}

С одной итерацией внешнего цикла выполняется три итерации внутреннего цикла. Следовательно, результат выполнения программы:

a012
b012
c012
d012
e012

Заключение

Циклы for являются наиболее часто используемыми циклами в языке C++. Несмотря на то, что их синтаксис, как правило, немного запутывает начинающих программистов, вы очень скоро к нему привыкните и ощутите всю мощь и удобство этих циклов.

Тест

Задание №1

Напишите цикл for, который выводит каждое четное число в диапазоне от 0 до 20.

Ответ №1

#include <iostream>

int main()

{

for (int count = 0; count <= 20; count += 2)

std::cout << count << std::endl;

return 0;

}

Задание №2

Напишите функцию sumTo(), которая принимает целочисленный параметр с именем value и возвращает сумму всех чисел от 1 до значения value.

Например, если значением value является 5, то sumTo(5) должен возвратить 15, исходя из 1 + 2 + 3 + 4 + 5.

Подсказка: Используйте переменную вне тела цикла для хранения суммы чисел, как в примере с функцией pow() в подзаголовке «Еще примеры циклов for».

Ответ №2

int sumTo(int value)

{

    int total(0);

    for (int count=1; count <= value; ++count)

        total += count;

    return total;

}

Задание №3

Что не так со следующим циклом?

// Выводим все числа от 8 до 0

for (unsigned int count=8; count >= 0; –count)

    cout << count << ” “;

Ответ №3

Этот цикл for выполняется до тех пор, пока count >= 0. Другими словами, он работает до тех пор, пока переменная count не станет отрицательным числом. Однако, поскольку count является типа unsigned, то эта переменная никогда не сможет быть отрицательной. Следовательно, этот цикл бесконечный! Как правило, рекомендуется избегать использования типов unsigned в цикле, если на это нет веских причин.

Оценить статью:

Загрузка…

Источник