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

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

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

6 тем.

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

Лекции.doc

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

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

    while ( B ) S ;

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

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

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

В качестве иллюстрации  выполнения цикла 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 );

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

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

В операторе 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 (зависимость проверить самостоятельно), где – последнее число в строке, – номер текущей строки. Внешний цикл следит за номером текущей строки , а внутренний цикл будет печатать нечетные числа из диапазона от 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;

}

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

    #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


 

 
ответ 
 
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. Операторы безусловного  перехода

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