Практические задачи по операторам циклов: цикл while

1. Повторение, управляемое счетчиком. Чтобы лучше понять алгоритм работы цикла while, рассмотрим классическую задачу усреднения:

Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу (целые числа в диапазоне 0 — 100). Нужно определить среднюю оценку класса.

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

01.//Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу

02.//(целые числа в диапазоне от 0до 100). Надо определить среднюю оценку класса

03.

04.#include

05.

06.using namespace std;

07.

08.int main()

09.{

10. //объявляем необходимые переменные

11. int total, counter, average, grade;

12.

13. //задаем начальные значения

14. total = 0, counter = 1;

15.

16. //начинаем цикл ввода и суммирования оценок

17. while (counter

18. {

19. cout

20. cin >> grade;

21.

22. if (grade

23. {

24. total += grade;

25. counter += 1;

26. }

27. else

28. cout

29. }

30.

31. //считаем средний балл и выводим результат на экран

32. average = total / 10;

33. cout

34.

35. return 0;

36.}

Результат работы программы:

Разберем программу подробнее

Начинаем с объявления необходимых переменных: total — будет накапливать общую сумму баллов студентов; counter — является счетчиком итераций цикла while (в нашем случае число повторений цикла заранее известно, поэтому эту разновидность цикла еще называют повторением, управляемым счетчиком); average — будет содержать у нас наше искомое среднее значение; grade — в эту переменную будем записывать введенное пользователем значение балла.

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

Затем организовываем цикл while, задав условие выполнения, в котором запрашиваем у студента его балл и сохраняем в переменную grade. Также в цикле предусматриваем проверку на правильность ввода данных студентами: в случае правильного ввода засчитываем балл и увеличиваем счетчик цикла на единицу, в обратном случае выводим пользователю подсказку, не засчитываем балл и не увеличиваем счетчик, т.е. в любом случае у нас будет 10 "правильных" баллов.

Далее подсчитываем средний балл и запоминаем в переменную average, выводим результат на экран.

Примечание:

1.total += grade;

2.counter += 1;

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

1.total = total + grade;

2.counter = counter + 1;

Последнюю строку можно еще записать и так:

1.counter++;

Повторение, управляемое меткой. Давайте теперь немного модифицируем предыдущую программу, чтобы рассмотреть цикл while, управляемый не счетчиком, а меткой. В отличии от счетчика, когда количество повторений заранее известно, количество итераций цикла, управляемого меткой, заранее неизвестно.

Т.е. мы можем использовать баллы скольких угодно студентов, пока не будет окончен ввод.

01.//Проведен опрос класса из 10 студентов. Вам известны оценки по этому опросу

02.//(целые числа в диапазоне от 0до 100). Надо определить среднюю оценку класса

03.

04.#include

05.

06.using namespace std;

07.

08.int main()

09.{

10. //объявляем необходимые переменные

11. float average;

12. int grade, counter, total;

13.

14. //задаем начальные значения

15. total = 0, counter = 0;

16.

17. //запрашиваем у студента его оценку и запоминаем

18. cout

19. cin >> grade;

20.

21. //начинаем цикл, если не было введено -1

22. while (grade != -1)

23. {

24. //накапливаем общее кол-во баллов

25. //и засчитываем ввод

26. total += grade;

27. counter++;

28.

29. cout

30. cin >> grade;

31. }

32.

33. //проверка на ввод

34. //если было введено хотя бы одно значение

35. if (counter != 0)

36. {

37. //рассчитываем средний балл

38. average = (float) total / counter;

39. cout

40. }

41. else

42. //если не было введено ни одно значение

43. cout

44.

45. return 0;

46.}

В данном варианте этого алгоритма, в котором цикл while управляется меткой (ввод продолжается, пока метка не будет равной -1), студенты могут вводить сколь угодно своих оценок, пока не будет введена метка окончания ввода "-1". Плюс в этой программе есть еще одно нововведение: теперь средний балл будет более точным, т.к. для его хранения мы объявили переменную average типа float (float — тип для хранения дробных чисел с точностью 6 — 7 знаков после запятой, в отличии от double, у которого 13 — 14 знаков).

(Еще раз небольшое отступление). Разберем новый для вас момент:

1.average = (float) total / counter;

В этой строке реализовано приведение типов. Что это такое и для чего служит? Мы объявили переменную average как float, но переменные total и counter у нас объявлены как int, а значит после операции деления, в случае, если получиться дробное число, дробная часть будет отброшена (потеряна).

Для того, чтобы избежать потери нужно, чтобы делимое total было тоже типа float, а так как мы его не объявили изначально типа float, то приведем его сейчас к float.

3. Теперь рассмотрим пример использования цикла while с постусловием. Запрограммируем решение вот такой задачи:

Одна большая химическая компания платит своим продавцам на основе комиссионных. Продавец получает $200 в неделю плюс 9% от объема продаж за неделю. Например, продавец, который продал за неделю химикалий на $5000 получит $200 плюс 9% от $5000, то есть в итоге $650. Нужно разработать программу, которая будет вводить для каждого продавца его объем продаж за последнюю неделю, рассчитывать и выводить на экран его заработок.

Данные должны вводиться поочередно для каждого продавца.

Приступим к программированию. Вот такая программа будет выполнять поставленную задачу:

01.//Работаем с циклом while (вариант с постусловием)

02.

03.#include

04.

05.using namespace std;

06.

07.int main()

08.{

09. //объявляем необходимые переменные

10. float prodashi, zarabotok;

11.

12. //запрашиваем ввод и сохраняем значение

13. cout

14. cin >> prodashi;

15.

16. //начинаем цикл с постусловием

17. do

18. {

19. //считаем заработок и выводим его на экран

20. zarabotok = 200 + (prodashi * 9 / 100);

21. cout

22.

23. //запрашиваем ввод и сохраняем значение

24. cout

25. cin >> prodashi;

26. }

27. while (prodashi != -1);

28.

29. return 0;

30.}

Результат работы программы:

4. Цикл for. Решим вот такую вот задачу:

Программа последовательно запрашивает у пользователя десять чисел и находит максимальное из них. Выводит результат на экран.

01.//Программа последовательно запрашивает у пользователя десять чисел,

02.//находит максимальное и печатает результат

03.

04.#include

05.

06.using namespace std;

07.

08.int main()

09.{

10. int counter;

11. float number, largest;

12.

13. //запрашиваем первое число, запоминаем его

14. cout

15. cin >> largest;

16.

17. //запрашиваем остальные девять чисел в цикле for

18. for (counter = 1; counter

19. {

20. cout

21. cin >> number;

22.

23. //если вновь введенное число больше, то перезаписываем max

24. if (number > largest)

25. largest = number;

26. }

27.

28. cout

29.

30. return 0;

31.}

Результат работы программы:

Рандомно подобранные статьи с сайта:

Информатика. Язык Pascal: Оператор цикла while в Pascal. Центр онлайн-обучения «Фоксфорд»


Похожие статьи:

  • Операторы цикла

    ЛЕКЦИЯ 3 Элементы программирования в среде MATLAB Операторы цикла. Цикл – процесс повторного выполнения группы инструкций, составляющих тело цикла. 1….

  • Операторы циклов: цикл for

    Все в нашей жизни циклично… цикл while, цикл for — Введение в программирование Все в нашей жизни циклично…дни недели, месяцы, года… И в…

  • Оператор цикла до, или цикл с постусловием

    Repeatuntil ; Схема выполнения операторов имеет вид: операторы ЦиклRepeat повторяется, если условие ложно (False), и заканчивается, если условие верно…

admin