Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

1.5.2 Циклы

Они служат для реализации многократно повторяющихся действий. Как и в других языках программирования, в С++ имеется три основных типа операторов цикла:

  • Цикл for

  • Цикл с предусловием (while)

  • Цикл с постусловием (dowhile)

В стандарте c++ 11 введён ещё один цикл for по диапазону – его синтаксис использует массив, поэтому пример с эти оператором цикла рассмотрим в следующем разделе, посвящённому массивам.

Оператор for в языке С++ представляет собой наиболее общий способ организации цикла, который в программах используется чаще других, поэтому начнём с него. Он имеет следующий формат:

for(выражение1;выражение2;выражение3) тело цикла

Выражение1 обычно используют для установки начального значения переменных, управляющих циклом. Выражение2 – это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение3 определяет изменения переменных, управляющих циклом, после каждого выполнения тела цикла.

Здесь и далее тело цикла может представлять собой как одиночный оператор, так и блок (составной оператор).

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

//Пример 1.4 с оператором for – вычисление суммы квадратов от 1 до 9

#include <iostream>

using namespace std;

int main(){

int i, b=0;

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

b += i * i;

cout << b << endl;

system("pause"); return 0;

}

Оператор while - цикл с предусловием.

while (выражение) тело цикла

Пример 1.4 запишем, используя оператор while:

// фрагмент примера 1.4 с использованием while

int i=1, b=0;

while (i<10) {

b += i * i; i++;

}

cout << b << endl;

Оператор do while – цикл с постусловием.

do тело цикла while (выражение);

Тело цикла выполняется хотя бы один раз. Если выражение ложно, выполнение цикла заканчивается, иначе продолжается.

Тот же пример 1.4, но с использованием цикла do….while:

// фрагмент примера 1.4 с использованием do…while

int i=1,b=0;

do {

b+=i*i; i++;

} while(i<10);

cout << b << endl;

Обратим внимание, что во всех циклах пишется не условие окончания, а условие продолжения цикла.

В теле циклов можно использовать операторы break и continue. Оператор break выходит из тела цикла (прерывает цикл), continue передаёт управление на очередную итерацию.

Пример 1.4 c использованием "бесконечного" цикла for и оператора break:

// фрагмент примера 1.4 с использованием breaK

int i=1,b=0;

for(;;) {b+=i*i; i++; if (i==10) break;}

cout << b << endl;

1.6 Массивы, строки

Хороший пример использования в программах ветвлений и циклов – обработка массивов и строк текста.

1.6.1 Основные понятия

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

Строка – одномерный массив, элементами которого являются символы.

В языке С++ с массивами и строками можно работать двумя способами:

1. использование стандартных языковых возможностей и встроенных средств компилятора для работы с массивами (встроенные массивы) – этот способ достался языку С++ в наследство от языка С и практически не изменился;

2. использование типов (классов, шаблонов), определённых в стандартной библиотеке С++ специально для обработки массивов и строк. Для работы с массивами различных типов рекомендуется использовать шаблонный класс vector (например, типы vector<int>, vector<double> и т.д.), для работы со строками (символьными массивами) имеется отдельный тип string (или wstring при использовании кодировки Unicode).

Оба способа имеют свои плюсы и минусы.

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

Но и без минусов не бывает – в силу своей универсальности типы из стандартной библиотеки имеют достаточно сложное внутреннее представление; работа с ними менее эффективна и по расходам памяти, и по быстродействию, чем со встроенными массивами. В ситуациях, когда фактор эффективности имеет первостепенное значение, следует отдать предпочтение встроенным массивам и собственному коду, написанному специально для решения конкретной задачи и учитывающим её особенности. Стоит отметить, что при компиляции проекта в режиме “Release” скорость работы с векторами незначительно уступает скорости работы с встроенными массивами, но в отладочном режиме “Debug”, который установлен по умолчанию, разница может быть существенной.

В данном разделе мы рассмотрим базовые средства языка для работы с массивами и строками (встроенные массивы). В следующем разделе поясним, как можно повысить эффективность обработки массивов и строк, используя указатели, и кратко перечислим возможности библиотеки cstring. Далее коснёмся вопросов использования двух востребованных типов стандартной библиотеки – vector и string.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]