Лекции по программированию

Курс лекций, 17 Января 2011, автор: пользователь скрыл имя

Описание работы


6 тем.

Работа содержит 1 файл

Лекции.doc

— 615.00 Кб (Скачать)

Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Формат цикла while:

    while ( B ) S ;

где B – выражение, истинность которого проверяется (условие завершения цикла); S – тело цикла: один оператор(простой или составной).

Перед каждым выполнением  тела цикла анализируется значение выражения В:если оно истинно, то выполняется тело цикла, и управление передается на повторную проверку условия В; если значение В ложно – цикл завершается и управление передается на оператор, следующий за оператором S .

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

В качестве иллюстрации  выполнения цикла while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n .

    #include <iostream>

    using namespace std;

    int main()

    {

      int n, i=1;

      cout <<" n ="; cin >> n ;

      while ( i <= n ) //пока i меньше или равно n

      { 

        cout << i <<"\ t "; //выводим на экран значение i

        ++ i ; // увеличиваем i на единицу

      }

      return 0; 

    } 

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

n 10

ответ

1 2 3 4 5 6 7 8 9 10  

Оператор цикла do while также организует выполнение одного оператора(простого или составного) неизвестное заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла. Формат цикла do while:

    do S while ( B );

где В –выражение, истинность которого проверяется (условие завершения цикла); S – тело цикла: один оператор (простой или блок).

Сначала выполняется  оператор S , а затем анализируется значение выражения В: если оно истинно, то управление передается оператору S , если ложно - цикл завершается, и управление передается на оператор, следующий за условием B .

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

В качестве иллюстрации  выполнения цикла do while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n .

    #include <iostream>

    using namespace std;

    int main()

    {

      int n, i=1;

      cout <<"n=";

      cin >>n;

      do

      {

        //выводим  на экран i, а замет увеличиваем

        cout<<i++<<"\t";//ее значении на единицу

      } 

      while (i<=n);//до тех пор пока i меньше или равна n

return 0; 

 
}
 

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

n 10

ответ 
1 2 3 4 5 6 7 8 9 10 

Цикл с параметром for имеет следующую структуру:

    for ( <инициализация>; <выражение>; <модификации>) <оператор>;

Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой. Областью действия переменных, объявленных в части инициализации цикла, является цикл и вложенные блоки. Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла: если его результат истинен, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом, цикл с параметром реализован как цикл с предусловием. Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Оператор (простой или составной) представляет собой тело цикла.

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

    #include <iostream>

    using namespace std;

    int main()

    { 

      int n;

      cout <<"n="; 

      cin >>n;

      for (int i=1; i<=n;i++) //для i от 1 до n с шагом 1

cout << i <<"\t "; //выводить на экран значение i

return 0;

 
}

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

n 10

ответ

1 2 3 4 5 6 7 8 9 10 

Циклы могут быть простые  или вложенные(кратные, циклы в цикле). Вложенными могут быть циклы любых типов: while , do while , for . Структура вложенных цикловна примере типа for приведена ниже:

  Уровни вложенности
for ( i=1;i<ik;i++)

{ 

    …

    for (j=10; j>jk; j--)

    { 

    … 

      for( k=1; k<kk; j+=2)

      { …

      }

    …

    }

    …

}

 

Каждый внутренний цикл должен быть полностью вложен во все внешние циклы. «Пересечения» циклов не допускается.

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

1         #include <iostream>

using namespace std;

int main()

{

    for (int i=1; i<=5; ++i,cout<<endl) //внешний цикл

      for (int j=1; j<=2*i-1; j+=2) //внутреннийцикл

      cout<<j<<"\t";//тело внутреннего цикла

    return 0;

}

1 3      
1 3 5    
1 3 5 7  
1 3 5 7 9
         
 
 

В данном случае таблица  состоит из пяти строчек, в каждой из которых печатаются только нечетные числа. Причем последнее нечетное число в строчке зависит от ее номера. Эта зависимость выражается через формулуk = 2 i -1 (зависимость проверить самостоятельно), где k – последнее число в строке, i – номер текущей строки. Внешний цикл следит за номером текущей строки i , а внутренний цикл будет печатать нечетные числа из диапазона от 1 до 2 i -1 .  

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

1. Написать программу,  которая выводит на экран квадраты  всех четных чисел из диапазона  от А до В (А и В целые числа, при этом А ≤ В).

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

#include <iostream>

using namespace std;

int main()

{ 

    int a, b, i;

    cout <<"a="; cin >>a;

    cout <<"b="; cin >>b;

    i=(a%2)? a+1: a;

    while (i<=b)

    {

      cout<<i*i<<"\t"; 

      i+=2;

    }

    return 0; 

}

#include <iostream>

using namespace std;

int main()

{

    int a, b, i;

    cout <<"a="; cin >>a;

    cout <<"b="; cin >>b;

    i=(a%2)? a+1: a;

    do 

    {

      cout<<i*i<<"\t";

      i+=2;

    }

    while (i<=b);

    return 0;

}

Начальное значение переменной i определяется с помощью тернарной операции. Если a нечетное число, то при делении на 2 мы получим остаток 1, который трактуется компилятором как истина, и, следовательно, переменной i будет присвоено значение a+1.Если же a четное число, то при делении на 2 мы получим остаток 0, который трактуется компилятором как ложь, и следовательно переменной i будет присвоено значение a. В результате независимо от значения переменной а переменной i будет присвоено четное значение. 

    #include <iostream>

    using namespace std;

    int main()

    { 

      int a, b;

      cout <<"a="; cin >>a;

      cout <<"b="; cin >>b;

      for (int i=(a%2)? a+1: a; i<=b; i+=2)

        cout<<i*i<<"\t";

return 0; 

 
}
 

Три программы дадут  нам одинаковый результат:

а

3

b 
 
9 
 
ответ 
 
16 3664

2. Постройте таблицу значений функции 

для х из интервала [ a , b ] с шагом h . 

    # include < iostream >

    # include < cmath >

    using namespace std ;

    float f(float x) //вспомогательная функция: возвращает значение функции в точке x

    { 

      if(x<0) return pow(pow(x,3)+1,2); //условие первой ветви

else if ( x <1) return 0; //условие второй ветви

        else return fabs ( x * x -5* x +1); 

    } 

    // по умолчанию третья  ветвь

    int main() // главная функция

    {

      float a,b,h,x;

      cout <<"a="; 

      cin>>a;

      cout <<"b="; 

      cin>>b;

      cout <<" h ="; 

      cin >> h ;

      cout <<" x \ tf ( x )\ n "; //выводим заголовок таблицы

      for ( x = a ; x <= b ; x += h ) //перебираем все числа из отрезка [ a , b ] с шагом h и выводим на

cout << x <<"\ t "<< f ( x )<< endl ; //экран значение x и значение функции в точке х

      return 0; 

    }

Результат работы программы для a=-3, b=3, h=1.5

x f(x)
-3 676
-1.5 5.64063
0 0
1.5 4.25
3 5
 

 3.6. Операторы безусловного  перехода

Информация о работе Лекции по программированию