Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции АиП.doc
Скачиваний:
89
Добавлен:
15.11.2018
Размер:
668.67 Кб
Скачать
    1. Оператор цикла do..While

Рис. 4.2. Обозначение цикла do..while на блок-схеме алгоритма программы

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

Цикл do..while сначала выполняет тело цикла, а условие продолжения проверяет потом. Это гарантирует выполнение операторов цикла, по крайней мере, один раз. Оператор do..while имеет следующий синтаксис:

do

оператор;

while (условие);

Пример:

// считать до 10

int x=0;

do

cout << “x: “ <<x++;

while (x<10);

    1. Оператор цикла for

Рис. 4.3. Обозначение цикла c заданным числом повторений

Синтаксис этого оператора следующий:

for (инициализация; условие; приращение)

оператор;

Оператор инициализация устанавливает начальное значение счетчика. Следующий оператор: условие – это любое выражение языка С++, результат которого проверяется на каждом цикле. Если результат этого выражения является истинным, то выполняется тело цикла, а затем, после изменения счетчика на величину приращения (по умолчанию – увеличение на единицу), действия повторяются.

Пример:

// вывести Hello десять раз

for (int i=0; i<10; i++)

cout << “Hello! “;

Цикл, организованный в теле другого цикла, называется вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего. Листинг 4.3 демонстрирует заполнение элементов матрицы случайными числами с помощью вложенного цикла for.

Листинг 4.3. Вложенный цикл for

#include <iostream>

#define rnd (rand()/32768.0) /* директива #define задает переменную rnd,

которая изменяется случайным образом в диапазоне от 0 до 1 */

Int main ()

{

using std::cout;

using std::cin;

using std::endl;

int i, j, n, m;

float a[50][50];

cout<<"Input n: ";

cin>>n;

cout<<"Input m: ";

cin>>m;

cout<<endl;

cout<<"Random Array \n";

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

{

cout<<endl;

for (j=0; j<m; j++)

{

a[i][j]=rnd*10-5;

cout<<a[i][j]<<" \t";

}

}

char response;

cin>>response;

return 0;

}

Лекция № 5. Массивы

    1. Одномерные массивы

Массив (array) – это набор элементов, способных хранить данные одного типа. Каждый элемент хранения называется элементом массива. Объявляя массив, необходимо сначала указать тип хранимых данных, а затем имя массива и его размер. Размером массива называется количество его элементов, указываемое в квадратных скобках.

Пример 5.1. long LongArray[25];

В примере 5.1. объявлен массив с именем LongArray из 25-ти элементов типа long. Поскольку каждой переменной типа long необходимы четыре байта, весь объявленный набор займет непрерывную область памяти размером 100 байт.

К каждому из элементов можно обратиться по его номеру, расположенному в квадратных скобках после имени массива. Номера элементов массива начинаются с нуля. Следовательно, первым элементом массива LongArray будет LongArray[0], вторым – LongArray[1], последним – LongArray[24].

При записи значения в элемент массива компилятор вычисляет необходимую область памяти на основании размера типа элемента и размера массива. Если необходимо записать значение в переменную LongArray[5], являющуюся шестым элементом массива, компилятор умножает индекс 5 на размер переменной (в данном случае 4 байта). Затем текущий указатель смещается на 20 байтов от начального адреса массива, и записывается новое значение.

Если попробовать записать значение в элемент LongArray[50], то компилятор, проигнорировав тот факт, что такого элемента не существует, вычислит смещение от начала массива (200 байт), а затем запишет значение по этому адресу. Здесь могут оказаться другие данные, и запись нового значения может иметь непредсказуемые последствия.

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

int IntegerArray[5] = {10, 20, 30, 40, 50};

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

int IntegerArray[ ] = {10, 20, 30, 40, 50};

Нельзя инициализировать количество элементов, превосходящее объявленный размер массива:

int IntegerArray[5] = {10, 20, 30, 40, 50, 60};

Такая строка приведет к ошибке во время компиляции, поскольку объявлен массив для пяти элементов, а инициализировать пытались шесть. Но следующая запись вполне допустима:

int IntegerArray[5] = {10, 20};

В данном случае объявлен массив из пяти элементов, а инициализированы только два: IntegerArray[0] и IntegerArray[1].

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

Листинг 5.1. Задание размера массива с помощью перечислений

#include <iostream>