4306

Сочетание циклов и разветвлений

Лабораторная работа

Информатика, кибернетика и программирование

Сочетание циклов и разветвлений Цель работы: изучение основных средств языка программирования С++, необходимых для кодирования алгоритма циклической структуры. Задачи работы: освоить использование операторов цикла while, do-while...

Русский

2012-11-16

140.5 KB

27 чел.

Сочетание циклов и разветвлений

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

Задачи  работы:

  •  освоить использование операторов цикла while,  do-while,  for в программе для реализации повторяющихся действий;
  •   научиться применять при организации циклов операторы передачи управления break, continue, return, goto.

5.1. Порядок выполнения работы

  1.  Изучите теоретические сведения к данной лабораторной работе (п. 5.2)
    1.  Ознакомьтесь с постановкой задачи (п. 5.3). Вариант задания соответствует вашему номеру в списке группы.
    2.  Разработайте блок-схему алгоритма решения поставленной задачи.
    3.  Составьте программу на языке С++ и подготовьте наборы тестовых исходных данных. Выполните отладку  программы на тестовых данных.
    4.  Подготовьте отчет по лабораторной работе. Отчет должен включать в себя:

-  титульный лист;

-  цель лабораторной работы;

-  постановку задачи;

  •  блок схему алгоритма решения поставленной задачи;
  •  текст программы с комментариями;
  •  наборы тестовых исходных данных с соответствующими результатами работы программы;
  •  краткие ответы на контрольные вопросы;
  •  выводы по лабораторной работе.
    1.  Защитите лабораторную работу перед преподавателем.

5.2. Общие сведения

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

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

Прекращение выполнения цикла возможно в следующих двух случаях:

  •  нулевое значение проверяемого выражения-условия;
  •  выполнение в теле цикла оператора передачи управления (break, go to, return) за пределы цикла.

Поэтому, чтобы не произошло зацикливания (бесконечного повторения цикла), необходимо либо изменять в процессе вычислений значения переменных, входящих в состав выражения-условия, либо поместить в теле цикла проверку условия выхода из цикла совместно с каким-либо оператором передачи управления.

В языке С++ определены три вида оператора цикла:

  1.  цикл с предусловием (while);
  2.  цикл с постусловием (dowhile);
  3.  итерационный цикл (for).

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

5.2.1. Цикл с предусловием

Синтаксис цикла с предусловием:

while (выражение-условие) 

    тело_цикла

Данный оператор работает следующим образом. При входе в цикл вычисляется выражение-условие. Если его значение отлично от нуля, то выполняется тело_цикла. Затем вычисление выражения-условия и выполнение операторов тела_цикла повторяются последовательно, пока значение выражения-условия не станет равным 0.

Так как выражение-условие проверяется перед  исполнением цикла, то такой оператор называют оператором цикла с предусловием. Если еще до первого исполнения тела_цикла выражение-условие окажется ложным, то тело_цикла не будет выполнено ни разу.

С помощью оператора while  можно организовать бесконечный цикл. Выход из такого цикла следует выполнить с помощью оператора break.  В общем случае бесконечный цикл имеет вид:

while   (1)

{

// анализ некоторого условия

break;

}

Пример 5.1. 

//Применение цикла while для вывода 10 случайных чисел

//из диапазона от 0 до 100

#include <iostream>

#include <conio.h>

#include <stdlib.h>    // для функций  srand() и rand()

#include <time.h>      // для функции  time()

using namespace std;

void main()

{

int i;

srand((unsigned)time(0));  // инициализация датчика случайных чисел

cout<<"\n 10 случайных чисел от 0 до 100 \n";

i=1;   // переменная, управляющая циклом,получает начальное значение.

while(i <= 10)   // проверка условия исполнения цикла

  {

  cout<<rand()%101<<endl; //вывод случайного числа

  i++;  // изменение переменной, управляющей циклом, на 1

  }

getch();

}

Цикл завершится, когда значение переменной i станет равным 11.

5.2.2. Цикл с постусловием

Синтаксис цикла с постусловием:

do

       тело_цикла

while (выражение-условие); 

Цикл с постусловием работает так.  Сначала выполняется тело_цикла, а затем вычисляется выражение-условие, если оно истинно, то тело_цикла выполняется вновь. Выход из цикла происходит, когда выражение-условие станет ложным. Поскольку выражение проверяется уже после исполнения тела_цикла, то такой  цикл называют оператором цикла с постусловием. Тело цикла будет выполнено хотя бы один раз даже при заведомо ложном значении выражения-условия.

Пример 5.2. 

// Программа, выполняющая вывод всех цифр числа в обратном порядке

#include <iostream>

#include <conio.h>

using namespace std;

void main (void)

{

int chislo ,ost,res;

cout<<"Введите число";

cin>>chislo;

cout<<"Цифры числа в обратном порядке:\n";

 do

{

ost=chislo%10;   //выделяем последнюю цифру числа

res= chislo/10;    // получаем число без последней цифры

cout<<ost;

chislo=res;

}while (res >0);   // выполнять цикл, пока результат деления больше нуля

getch();

}

Пример 5.3. 

//Программа выбирает случайное число то 1 до 100

//и предлагает его угадать

#include <iostream>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

using namespace std;

   void main()

   {int s,x;

   int n=0;                                //счетчик числа попыток

   srand((unsigned)time(0));   // инициализация датчика случайных чисел

   s=rand()%11;         //переменная s получает значение случайного числа

                // в диапазоне от 1 до 10

      do{

cout<<"\nВведите число от 1 до 10: ";

cin>>x;

n++;                                 //увеличение счетчика попыток на 1

if(s<x) cout<<" <Загаданное число меньше\n";

else if(s>x) cout<<" >Загаданное число больше\n";

}while(s-x);     // выполнять, пока разность между числом программы

               // и числом, введенным пользователем, не равна нулю

   cout<<"Вы угадали число!.\n Вы затратили "<<n<<" попыток";

getch();

}

5.2.3. Итерационный цикл

Синтаксис итерационного цикла:

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

Последовательность передач управления при работе оператора for:

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

2 шаг. Вычисляется выражение-условие. Это выражение позволяет выполнить проверку условия исполнения цикла, оно вычисляется перед каждым исполнением цикла. Если условие истинно, то исполняется тело цикла, если условие  ложно, то выполнение цикла прекращается.

3 шаг. После выполнения операторов тела_цикла вычисляются выражения, расположенные в области список_выражений. Здесь обычно раполагаются выражения, которые выполняют изменение переменной, управляющей циклом. После этого выполняется возврат к шагу 2.

Инициализация_цикла в цикле for всегда завершается точкой с запятой, т.е. отделяется этим разделителем от последующего выражения-условия, которое также завершается точкой с запятой. Даже при отсутствии инициализации_цикла и выражения-условия в цикле for два символа "точка с запятой" обязательно должны присутствовать. Список_выражений в цикле for – это последовательность скалярных выражений, разделенных запятыми. В области инициализации_цикла также может находиться несколько выражений, разделенных запятой. Каждая из этих трех областей в заголовке цикла for может быть пустой. Если выражение-условие отсутствует в заголовке цикла for, то по умолчанию оно считается истинным.

Пример 5.4. 

// Программа, выполняющая суммирование введенных с клавиатуры

//вещественных чисел.  Количество чисел запрашивается.

//Значение суммы введеных чисел выводится.

#include <iostream>

#include <conio.h>

using namespace std;

void main ()

  {

   float x,summa=0;

   int n,kol;

   cout<<" Введите количество чисел, сумму которых вы хотите найти:";

   cin>>kol;

   for(n=1;n<=kol;n++)

     {

       cout<<"Введите число №% "<<n<<endl;

       cin>>x;

       summa=summa+x;

       }

    cout<<"Сумма введенных чисел равна "<<summa;

     getch();

    }

Пример 5.5. 

//Преобразование температуры из шкалы Цельсия в шкалу  Фаренгейта

#include <iostream>

#include <iomanip>        //для манипуляторов, форматирующих вывод

#include <conio.h>

#define MAXCELS 10    //верхняя граница интервала температур

#define MINCELS -10    // нижняя граница интервала температур

#define STEP 1

using namespace std;

void main ()

{

int cels;

double fahr;

cout<<"\n cels     fahr \n";

for(cels=MINCELS; cels<=MAXCELS; cels+=STEP)

  {

fahr=1.8*cels+32.0;

cout<<" ";

cout << setiosflags( ios::left );  //прижимаем вывод к левому краю

cout.width(9);        //задаем минимальную ширину поля для cels

cout<<cels;

cout.width(7);      //задаем минимальную ширину поля для fahr

cout.setf( ios::fixed );  //вывод fahr в формате с фиксированной точкой

         cout.precision(1);     //задаем количество выводимых знаков

                                          // в дробной части fahr

cout<<fahr<<endl;

   }

getch();}

5.2.4. Вложенные циклы

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

Пример 5.6. 

// В натуральном числе n, значение которого вводится с клавиатуры,

//определить первую и последнюю цифру

#include <stdio.h>

#include <conio.h>

void main(void)

   {

long n,m; //n -число

int cp;  // последняя цифра числа

char simbol; //для ввода условия продолжения цикла

  //внешний цикл do while позволяет продолжить работу программы,

  //если нажата клавиша у ( на нижнем или верхнем регистрах)

  //или выйти из программы, если нажата любая другая клавиша

   do

       {

puts("    \nВведите натуральное число :" );

scanf("%ld",&n);

         m=n;          //запомним введенное число в переменной n

cp=m%10;  //вычислили последнюю цифру числа

         //внутренний цикл while позволяет найти первую цифру числа

 while(m>9)           //пока в числе больше двух цифр,

       m= m/10;        // вычислили первую цифру числа

          printf("\n В числе %ld первая цифра %ld, а последняя %d",n,m,cp);

          printf("\n Продолжим? Да- введи y, выход - любая клавиша\n");

           flushall();       //очистка буфера

 simbol=getchar();  // ввод символа для продолжения или завершения цикла

         }while(simbol=='y' || simbol == 'Y');

       getch();

      }

5.2.5. Операторы передачи управления

К операторам передачи управления относят:

  •  оператор выхода из цикла или переключателя break;
  •  оператор перехода к следующей итерации цикла continue;
  •  оператор безусловного перехода go to (иначе, оператор безусловной передачи управления);
  •  оператор возврата управления из функции в точку ее вызова return.

Оператор brеаk служит для принудительного выхода из цикла или переключателя, поэтому его нельзя больше нигде использовать, кроме циклов и переключателей. Оператор break. прекращает выполнение оператора цикла или переключателя и осуществляет передачу управления к следующему за циклом или переключателем оператору. Необходимость в использовании оператора brеаk в теле цикла возникает, когда условия продолжения итераций нужно проверять не в начале итерации (циклы fог, whi1е), не в конце итерации (цикл ), а в середине тела цикла. В этом случае тело цикла может иметь такую структуру:

{операторы
if (условие) brеаk;
операторы}

Оператор brеаk практически незаменим в переключателях, когда после выполнения операторов той case-ветви, где значение константного_выражения совпало со значением селектора, необходимо прекратить выполнение операторов, относящихся к нижележащим case-ветвям.

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

Оператор соntinuе употребляется только в операторах цикла. С помощью оператора соntinuе текущая итерация цикла прерывается, и  управление передается на проверку условия продолжения цикла.

Оператор безусловного перехода имеет вид:

go to  метка;

где метка –  это некоторый идентификатор, которым помечается оператор, которому требуется передать управление. Помеченный оператор должен быть расположен в той же функции, где используется оператор безусловного перехода. Управление с помощью gо tо можно передавать как вниз:

AA1: операторM

go to  АА1;

, так и вверх по тесту программы:

lable: операторN

go to  lable;

Объявлять идентификатор, который является меткой, не требуется.

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

Принятая в настоящее время дисциплина программирования рекомендует свести применение оператора gо tо к минимуму и строго придерживаться следующих рекомендаций:

  •  не входить внутрь блока извне;
  •  не входить внутрь условного оператора, т.е. не передавать управление операторам, размещенным после служебных слов if или еlsе;
  •  не входить извне внутрь переключателя (switch);
  •  не передавать управление внутрь цикла.

Полностью отказываться от оператора go tо не стоит, поскольку есть случаи, когда этот оператор обеспечивает наиболее простые и понятные решения:

  •  если в пределах одной функции необходимо из разных мест переходить к одному участку программы;
  •  когда нужно выйти из нескольких вложенных друг в друга циклов и/или переключателей.

Существует две формы оператор возврата из функции:

1) в первом случае оператор return содержит выражение, которое возвращается в точку вызова функции

return выражение;

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

float cube(float х)

{return z * z * z;

}

2) во втором случае оператор возврата из функции не содержит выражение

return;

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

void cube_print (float z)

{
cout << "\t
сubе = " << z * z * z;

return;
}

5.3 Варианты заданий

Вариант №1.

Даны натуральные числа п, а1 ..., an. Определить количество членов последовательности а1, ..., an, имеющих нечетные порядковые  номера, при этом будучи кратными 3 и не кратными 5;

Вариант №2.

Даны натуральные числа п, а1 ..., an. Получить сумму членов последовательности а1, ..., an, удовлетворяющих условию .

Вариант №3.

Даны натуральные числа п, а1 ..., an. Получить произведение членов последовательности а1, ..., an, удовлетворяющих условию ;

Вариант №4.

Даны натуральные числа п, а1 ..., an. Получить среднее арифметическое тех членов последовательности а1, ..., an, которые:

  1.  являются удвоенными нечетными числами;
  2.  при делении на 7 дают остаток 1, 2 или 5.

Вариант №5.

Даны натуральное число п, действительные числа а1 ..., an. Получить количество отрицательных членов и сумму членов, принадлежащих отрезку [-5, 5].

Вариант №6.

Даны натуральное число п, действительные числа а1 ..., an. Вычислить обратную величину произведения тех членов последовательности а1,..., an,  для которых выполняется условие

Вариант №7.

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

Вариант №8.

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

$$$$$$$$                   I                                *****

$$$$$$$$                   I I                              ****

$$$$$$$$                   I I I                            ***

$$$$$$$$                   I I I I                          **

$$$$$$$$                   I I I I I                        *

                                  I I I I I I                      **

                                                                      ***

                                                                      ****

                                                                      *****

Вариант №9.

Даны натуральные числа n и m (0  m  9). Выяснить, сколько раз входит цифра m в запись числа n.

Вариант №10.

Даны натуральное число n, действительное число х. Вычислить:

Вариант №11.

Даны натуральные числа n и m (0  m  9). Дополнить запись числа n в начале и в конце цифрой m.

Вариант №12.

Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. Например, число 6 – совершенное, так как 6=1+2+3; число 8 – не совершенное, так как 8≠1+2+4. Дано натуральное число n. Получить все совершенные числа, меньшие n.

Вариант №13. 

Даны натуральные числа п, а1 ..., an. Получить произведение членов последовательности а1 ..., an, имеющих четные порядковые номера и являющихся нечетными числами.

Вариант №14.

Даны натуральное число n, действительное число х. Вычислить:

Вариант №15.

Билеты на проезд в городском транспорте имеют номера из шести цифр от 000000 до 999999. Билет называется "счастливым", если сумма 1, 2, 3 цифр равна сумме 4, 5, 6-й цифр. Вычислить и напечатать количество "счастливых" билетов. Если в номере билета меньше 6-ти цифр, то недостающие начальные цифры считаются нулями.

Вариант №16.

Даны натуральное число п, действительные числа а1 ..., an. 

Получить

Вариант №17. 

Даны натуральное число п, действительные числа а1 ..., an. В последовательности определить количество соседств двух чисел разного знака.

Вариант №18. 

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

Вариант №19.

Найдите и распечатайте все трехзначные числа, сумма цифр которых равна вводимому с клавиатуры числу. Подсчитайте также количество таких чисел или сообщите о том, что их нет.

Вариант №20.

Даны натуральное число п, действительные числа а1, ..., an. В последовательности определить количество соседств двух положительных нечетных чисел.

Вариант №21.

Вывести на печать все пятизначные числа, в которых имеются цифры 2 и 7.

Вариант №22.

Даны натуральное число п, действительные числа а1 ..., an. 

Получить

Вариант №23.

Даны натуральное число п, действительные числа а1 ..., an. В последовательности

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

Вариант №24.

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

Вариант №25.

Переставить первую и последнюю цифры в записи натурального числа n.

Вариант №26.

Три друга были свидетелями ДТП. Первый заметил, что номер нарушителя делится на 2, 7 и 11. Второй запомнил, что в записи номера участвуют всего две различные цифры, а третий – что сумма цифр равна 30. Определить четырехзначный номер нарушителя.

Вариант №27.

Распечатать все четырехзначные натуральные десятичные числа из диапазона [2000,…,3000], в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел.

Вариант №28.

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

Вариант №29.

Даны действительные числа a и b (a<b), натуральное число n.

Вычислить , где    

Вариант №30.

Напишите программу, читающую текст с клавиатуры, пока не встретится символ * и  определяющую, имеется ли во введенном тексте баланс круглых скобок (т. е. равно ли число левых скобок числу правых скобок). Определите также общее количество символов во введенном тексте.

Контрольные вопросы

  1.  Чем отличается оператор цикла с предусловием от оператора цикла с постусловием?
  2.  Какие возможности предоставляет оператор цикла for? Перечислить порядок передачи управления при выполнении данного оператора цикла.
  3.  Для чего и каким образом используются в операторах цикла операторы передачи управления break, continue, return, goto?
  4.  Составьте фрагмент блок-схемы алгоритма, соответствующий следующему фрагменту программы:

for (i=1; i<n; i=i+1)

  p*=i;

Реализуйте данный алгоритм, используя по очереди циклы while и  do-while

PAGE  2


 

А также другие работы, которые могут Вас заинтересовать

58814. КУЛЬТУРА ЗАХІДНОЇ ЄВРОПИ V-XV СТОЛІТЬ. СПІВАНА ІСТОРІЯ 220 KB
  Вступне слово вчителя. Слово вчителя. Слово вчителя. Навчання ми почали з тривіуму або предметів про слово граматики риторики і діалектики.
58815. Кровообіг і лімфообіг 844.5 KB
  Кровообіг – це безперервний рух крові по кровоносних судинах зумовлений роботою серця. Повідомлення учня Еволюція кровоносної системи і серця хребетних†таблиця €œЕволюція кровоносної системи€ Відмітити що вперше кровоносна система з’явилась у Кільчастих червів а серце – у Молюсків. Розглянути особливості будови кровоносної системи і серця у риб земноводних плазунів птахів ссавців. Учні відзначають що з будовою серця пов’язана температура тіла.
58816. Давня Індія та Китай 111 KB
  Варто нагадати вихованцям щоб вони фіксували протягом уроку нову інформацію що відповідає на запитання поставлені на початку уроку. Закріплення вивченого матеріалу Повертаємося до таблиці яку складали на початку уроку.
58817. Фізико – географічне положення України. Крайні точки і розміри території. Розташування території України стосовно годинних поясів 354 KB
  Мета: визначити особливості положення України стосовно годинних поясів; показати різницю між поясним і місцевим часом на території України; закріпити вміння орієнтуватися в поняттях поясний місцевий літній декретний час...
58818. Розробка циклу уроків з теми «Системні утиліти» 539 KB
  Комп’ютерні віруси. Під час роботи з інформацією на комп’ютері можуть виникати такі проблеми: збій роботи під час читання або записування файлів на дискету; виникнення помилок у файловій структурі при некоректній роботі з технікою та програмами; уповільнення роботи комп’ютера через невпорядкованість даних на жорсткому диску. ВАМ ПОТРІБНО: дати визначення операції; розібратися що відбувається на диску під час виконання операції; з’ясувати як запустити потрібну програму; визначити які недоліки в роботі комп’ютера усуває задана...
58820. Українське відродження (кінець ХVIII – перша половина ХІХ ст.) 153.5 KB
  У межах цієї теми учні знайомляться з багатовіковими державотворчими традиціями українського народу. Але у процесі проведення уроку за темою у вчителя виникають певні труднощі: фрагментарність знань які учні отримують через брак часу...
58821. Урок ґендерної грамотності 92 KB
  Мета уроку: ознайомити учнів: з поняттями: ґендер ґендерна рівність ґендерна рівноправність; з міжнародними правовими документами про рівноправність жінок і чоловіків; з становищем жінок в різних державах та ставленням до ролі жінки...
58822. London sightseeing tour 115 KB
  Bank of England, Buckingham Palace, Big Ben, British Museum, bury C: crown, church, Covent Garden, column, Changing the Guards F: financial, fashionable, fortress, famous H: Houses of Parliament, Horse Guards, Hyde Park, House of Lords, House of Commons