Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТТП (методичка).doc
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.24 Mб
Скачать
    1. Операторы цикла

В Си имеются следующие конструкции, позволяющие программировать циклы: while, do while и for.

Цикл «Пока» — тело цикла выполняется, если значение логического выражения истинно:

while (логическое выражение)

оператор;

Если значение логического выражение заведомо ложно, то тело цикла не будет выполнено ни разу.

Цикл «До» — сначала выполняется тело цикла, затем проверяется логическое выражение, если оно ложно, то выполнение цикла завершается:

do

оператор;

while (логическое выражение);

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

Общий цикл (вариант цикла «Пока» с инициализацией):

for (инициализация; лог. выражение; новое значение)

оператор;

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

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

printf(“%8d”, i);

выведет на экран числа от 0 до 9.

Студенту на заметку!

В блок-схеме оператору for соответствует блок цикла с заранее известным числом повторений:

Если шаг изменения переменной цикла равен 1, то его можно не указывать.

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

Для перехода на проверку условия из любого места тела цикла можно использовать оператор continue.

  1. Массивы

Возможно, наиважнейшим структурным типом данных является массив (array  массив). Массив — это набор объектов одинакового типа, доступ к которым осуществляется по индексу (аналог матриц в математике).

Массивы можно описать следующим образом:

тип_данных имя_массива[размер_массива];

В качестве размера массива должна использоваться целочисленная константа.

Используя имя массива и индекс, можно обращаться к элементам массива имя_массива[значение_индекса].

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

Вот несколько примеров описания массивов:

char name[20];

int grades[125];

float income[30];

double measurements[1500];

Первый из массивов name содержит 20 символов. Обращением к элементам массива может быть: name[0], name[1], ..., name[19]. Так как размер типа char составляет 1 байт, то в памяти компьютера данный массив займет 20 байт.

Второй массив grades содержит 125 целых чисел. Обращением к элементам массива может быть: grades[0], grades [1], ..., grades[124]. С учетом размера типа int (2 байта) данный массив займет в памяти компьютера 125∙2 = 250 байт.

Третий массив income содержит 30 вещественных чисел. Обращением к элементам массива может быть: income[0], income [1], ..., income[29]. В памяти компьютера этот массив будет занимать 30∙4 = 120 байт, так как размер типа float 4 байта.

Четвертый массив measurements содержит 1500 вещественных чисел с двойной точностью. Обращением к элементам массива может быть: measurements[0], measurements[1], ..., measurements[1499]. Размер типа double 8 байт, следовательно, в памяти компьютера такой массив займет 1500∙8 = 12 000 байт.

При работе с массивами часто возникает задача присвоения элементам массива случайных значений.

Функция random(N) возвращает случайное целое число из диапазона от 0 до N–1. При необходимости получения случайных вещественных чисел из заданного диапазона от a до b, необходимо задаться некоторым коэффициентом k и вычислить значение N для функции random, как показано на рисунке 28. Коэффициент k должен быть таким вещественным числом, чтобы обеспечить целочисленное значение N, иначе диапазон получаемых чисел окажется неточным. Для упрощения расчетов можно выбирать следующие значения k: 5,0; 10,0; 50,0; 100,0 и т. п.

Рисунок 28 — Пояснение к определению диапазона случайных чисел

Ниже на листинге 13 приведена программа вычисления суммы элементов массива из 10 вещественных чисел. При помощи функции random элементам массива назначаются случайные значения в диапазоне от 5,0 до 15,0.

Листинг 13 — Пример использования массива

/* array.c – пример использования массива. */

#include <stdio.h> // для printf() и scanf()

#include <conio.h> // для clrscr()

#include <stdlib.h> // для randomize() и random()

#define SIZE 10 // определение размера массива

void main()

{

int i; // индекс элементов массива

float data[SIZE]; // массив вещественных чисел

float sum = 0.0; // для вычисления суммы

clrscr(); // очистка экрана

// инициализация генератора случайных чисел

randomize();

// вывод заголовка на экран

printf(“Значения элементов массива:\n”);

// цикл заполнения массива случайными числами и

// вывод их на экран

for (i = 0; i < SIZE; i++) {

// присвоение i-му элементу массива значение

// случайного числа в диапазоне от 5.0 до 15.0

data[i] = random(101)/10.0 + 5.0;

// вывод значения i-го элемента массива на экран

printf(“%8.1f”, data[i]);

}

// цикл вычисления суммы всех элементов массива

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

sum += data[i];

// вывод значения суммы всех элементов массива на экран

printf(“Сумма элементов массива data = %f\n”, sum);

}

Вызов функции randomize необходим для инициализации генератора случайных чисел — задания первого числа псевдослучайной последовательности на основании текущего значения системного таймера. Для возможности использования функций random и randomize в программе необходимо подключить заголовочный файл stdlib.h.

Результаты выполнения программы array приведены на рисунке 29.

Рисунок 29 — Результат выполнения программы array.c

Студенту на заметку!

Блок-схема приведенной программы может выглядеть следующим образом:

Обратите внимание, что изменение индекса i в блок-схеме отличается от программы. Это связано с тем, что в математике элементы матриц нумеруются с 1, а в языке Си элементы массива нумеруются с 0.