Прочитайте улучшенную версию этого урока «Цикл со счётчиком for».

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • Задачи с автоматической проверкой решения

Добрый день уважаемые друзья.
Вот и подошло время очередного занятия. Одно занятие было мной пропущено, из-за важных дел, я хотел его восстановить в течении недели, но навалились другие проблемы и мне не удалось этого сделать. Уж извините, всё предусмотреть невозможно. Сегодняшнее занятие будет посвящено новой управляющей конструкции. Сам того не подозревая, подбираю практические задачи для прошлого урока, я очень выгодно выбрал задачу с коровами, и дело вот в чем. Обычно, когда происходит изучение языка программирования не сразу понятно зачем и что нужно. И бывает достаточно сложно привести хороший пример. Можно конечно просто словами сказать, для чего предназначена та или иная конструкция. Но человеку гораздо понятнее, когда он сам увидел, и так сказать «пощупал», «поковырял» какой-то механизм. Еще Конфуций говорил «То, что я слышал, я забываю. То, что видел, я помню. То, что я делал сам, я  понимаю». Теперь вернемся к нашей задаче с коровами. Естественно мне надо было её как-то проверять. Нужно было ввести все значения от 0 до 99 и посмотреть какой результат программа выдает. Всё это можно было-бы сделать вручную, но это крайне не продуктивно.Представьте, сколько времени уйдет, чтобы проверить одну программу. Вот именно здесь мне и пригодилась циклическая конструкция. Циклическая конструкция предназначена для того, чтобы выполнять какую-то последовательность действий несколько раз. В нашем случае для того чтобы 100 раз запустить одну и ту же программу с разными входными данными. Надеюсь общее назначение циклов и польза от их применения вы осознали, теперь можно приступить непосредственно к изучению.

Циклическая конструкция for. (Цикл for)
В языке Си несколько циклических конструкций. Сегодня мы познакомимся с одной из них, а именно циклом for. Его ещё называют цикл со счетчиком. Он чаще всего используется, когда нужно повторить заданное действие известное число раз. 
Сначала посмотрим на формат цикла for. Он выглядит следующим образом:
Листинг 7.1:
for (инициализация счетчика; условие; изменение счетчика)
    оператор;
Теперь опишем словесно как работает эта инструкция. Цикл for состоит как бы из двух частей: заголовка (первая строка) и тела цикла (вторая строка). 
Сначала разберемся с заголовком. После слова for, в скобках, записаны три выражения. 
  • Первое выражение — инициализация счетчика
Мы должны завести переменную-счетчик и присвоить ей начальное значение.Например:
Листинг 7.2.
for (i=0;…;…) 
или
for (j=13;…;…)
  • Второе выражение — условие.
Здесь записано условие при котором будет выполняться тело цикла. Т.е. цикл будет работать пока условие истинно. Например:

Листинг 7.3.
for (i=0; i<10; …)
или
for (d=-100; d<=0; …)
  • Третье выражение — изменение счетчика.
Здесь записывается как изменяется переменная-счетчик после каждого выполнения тела цикла. Например:

Листинг 7.4.
for (i=0; i<10; i++)
или
for (d=-100; d<=0; d+10)
Теперь немного поговорим о теле цикла. Тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else, применяется составной оператор {…}. 
Опишем работу цикла for словами и потом перейдем к рассмотрению практических примеров.
  1. Когда программа встречает слово for она понимает что перед ней цикл. 
  2. Сначала определяется переменная счетчик (выражение 1). 
  3. Проверяется условие выполнение цикла (выражение 2)
  4. Если условие ложно, то программа выходит из цикл for и продолжает свое выполнение. Т.е. если в самом начале условие будет ложно, то тело цикла не выполнится ни одного раза.
  5. Если условие истинно, то начинает выполняться тело цикла. 
  6. После того как тело цикла выполнится, программа возвращается к заголовку и выполняет изменение значение переменной-счетчика (выражение 3). 
  7. После этого возвращаемся к пункту два, и все действия повторяются до тех пор, пока условие не станет ложным.
Для лучшего понимаю работы циклической конструкции for разберем сначала простейший пример, а потом вернемся к нашей задачке с коровами.
Пусть нам надо посчитать сумму 10 чисел введенных пользователем с клавиатуры.
Такая программа будет выглядеть следующим образом:
Листинг 7.5.
#include <stdio.h>
int main(void){
      int i,summ=0, temp=0;

      for (i=0;i<10;i++){
            printf(«\nVvedite chislo: «);
            scanf(«%d»,&temp);
            summ+=temp;
      }
      printf(«Summa vvedennih chisel = %d\n»,summ);
      return(0);
}

Теперь распишем по пунктам как работает наша программа.
Начнем с 4 строки, всё остальное вам уже должно быть ясно после ознакомления с предыдущими уроками.

  1. Переменная i счетчик и ей присваивается значение 0.
  2. Проверяется условие i<10. Оно истинно, значит выполняется тело цикла: выводится надпись, пользователь вводит число и оно прибавляется к переменной summ. Тело цикла заканчивается программа возвращается к заголовку.
  3. Программа выполняет выражение i++, изменяет значение переменной счетчика, в нашем случае увеличивает i на единицу.  Теперь i  = 1.
  4. Снова проверяется условие, i<10. Оно опять истинно. Снова выполняется тело цикла и происходит изменение переменной счетчика. И процесс повторяется. 
  5. Потом, через несколько шагов значение i после изменения  выражения счетчика становится равным 10. Проверяется условие. Оно ложно. Программа выходит из цикла и продолжает свое выполнение. В нашем случае выводит на экран значение переменной summ.
На рисунке представлен результат работы этой программы:

Припер работы программы с циклом for.

Ну а теперь напишем программу для проверки задания с коровами.
Изначально имеется программа (код юзера Dispose, с моими небольшими изменениями):

Листинг 7.6

#include <stdio.h>
int main(void)
{
      int n,b;
      printf(«Vvedite chislo ot 1 do 100: «);
      scanf(«%d», &n);
            if(n>=11&&n<=14)
            {
                  printf(«Na lugu pasetsya %d korov \n», n);
            }
            else
            {
                  b=n%10;
                  if(b==1)          printf(«Na lugu pasetsya %d korova \n», n);
                  if(b>=2&&b<=4)    printf(«Na lugu pasetsya %d korovy \n», n);
                  if(b>=5&&b<=9)    printf(«Na lugu pasetsya %d korov \n», n);
                  if(b==0)          printf(«Na lugu pasetsya %d korov \n», n);
            }
return(0); 

}

Нам нужно проверить эту программу. Смотрим что количество коров задается в переменной n. Именно её и возьмем в качестве переменной счетчика. начальное значение у нас 0 конечное 99 . С каждым  шагом значение изменяется на 1 Значит заголовок будет выглядеть следующим образом: 
Листинг 7.7
for(n=0,n<=99,n++)

Теперь из исходной программы удалим строчки, где просится ввести число n и строку, где введенное число считывается в переменную n. Также добавим туда наш заголовок и возьмем оставшуюся часть программы в фигурные скобки. Получим следующий код:

Листинг 7.8.

#include <stdio.h>
int main(void)
{
      int n,b;
      for(n=0;n<=99;n++)
        {
            if(n>=11&&n<=14)
            {
                  printf(«Na lugu pasetsya %d korov \n», n);
            }
            else
            {
                  b=n%10;
                  if(b==1)          printf(«Na lugu pasetsya %d korova \n», n);
                  if(b>=2&&b<=4)    printf(«Na lugu pasetsya %d korovy \n», n);
                  if(b>=5&&b<=9)    printf(«Na lugu pasetsya %d korov \n», n);
                  if(b==0)          printf(«Na lugu pasetsya %d korov \n», n);
            }
        }
return(0); 
}


Если теперь запустить нашу полученную программу то можно посмотреть, какое окончание прибавляет программа к какому количеству коров.

Иллюстрация работы программы листинг 7.8

Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы.И опять же советую вам использовать в теле цикла составной оператор.
На этом на сегодня всё.

Резюме урока:

  • Посмотрели на примерах для чего используются в программировании циклы.
  • Изучили циклическую конструкцию for.

Задания для практической работы:

  1. На вход поступает четыре целых числа a,b,c,d. Выведите все числа на отрезке от a до b, дающие остаток c при делении на d.
  2. На вход программе подается число N. Напишите программу, для вычисления произведения всех чисел от 1 до N (N!  N-факториал). По условию N не больше 10.
  3. На вход программе подается два числа.Первое сумма двух неизвестных чисел х и у, а второе произведение х и у. По двум введенным числам, найти х и у. х и у не превосходят 1000.
  4. На вход программе подается одно положительное число N, которое по не превосходит 10000. Написать программу которая выводит одно единственное число равное сумме чисел от 1 до N. 

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

    От KaDeaT