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

Практический пример

Разработаем приложение "Счастливый билет". Но, вначале, договримся, что именно мы подразумеваем под счастливым билетом. Будем называть счастливым тот билет, в номере которого сумма четных цифр равна сумме нечетных цифр. Найти вероятность того, что купленный билет окажется счастливым.

Используем самую простую идею для решения данной задачи, а именно: переберем все подряд билеты и подсчитаем количество "счастливых". Затем поделим количество этих билетов на общее количество и получим искомую вероятность.

Используем следующие переменные: S - общее количество билетов; H - количество "счастливых" билетов; a,b,c,d - цифры нашего билета; ver - искомая вероятность.

//Программа вычисляет вероятность приобретения "счастливого" билета

#include <iostream.h>

void main()

{

int a,b,c,d,S=0,H=0;

float ver;

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

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

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

for (d=0;d<10;d++) {

S++;

if (a+c==b+d) {

H++;

}

}

ver=(float) H/S*100;

// Вывод результатов на экран

cout<<"Yuor ver. is "<<ver<<"%\n";

}

Цикл do-while

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

while (условие)

обычно рассматривается как заголовок структуры while. Структура do/while без фигурных скобок и с единственным оператором в теле имеет вид

do

оператор

while (условие);

что может привести к путанице. Последняя строка - while(условие); может ошибочно интерпритироваться как заголовок структуры while, содержащий пустой оператор. Таким образом, чтобы избежать путаницы, структура do/while даже с одним оператором часто записывается в виде:

do {

оператор

} while (условие);

Итак, как же работает оператор do/while? Рассмотрим конструкцию вида

do

оператор

while (условие);

следующий оператор;

Сначала выполняется оператор, затем вычисляется выражение. Если его результат отличен от нуля (true), тогда управление переходит обратно к началу оператора do, процесс повторяется. Когда значение выражения - ноль (false), тогда управление переходит к следующему оператору.

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

do {

cout << "\n Введите положительное целое число: ";

cin >> n;

} while (n <= 0);

Пользователю предлагается ввести положительное целое число. Отрицательное значение или ноль заставляют цикл выполняться снова, и пользователь должен вводить другое значение. Управление выходит из цикла только после того, как пользователь вводит положительное целое число.

break и continue

Чтобы прервать нормальное выполнение цикла, программист может использовать две специальные инструкции:

break; и continue;

Инструкция break кроме использования в циклах может применяться в инструкции switch. Она вызывает выход из тела цикла или инструкции switch.

Следующий пример иллюстрирует использование инструкции break. Производится проверка на отрицательное значение, и если условие выполняется (значение отрицательно), инструкция break вызывает выход из цикла for. Управление программой перескакивает к инструкции, следующей сразу за циклом.

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

{ cin >> x;

if (x < 0.0) {

cout << "That’s all!" << endl;

break; //выход из цикла,

//если значение отрицательно

}

cout << sqrt(x) << endl;

}

//break прыгает сюда

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

Инструкция continue вызывает остановку текущей итерации цикла и немедленный переход к началу очередной итерации. Следующий фрагмент обрабатывает все символы, кроме цифр. В случае ввода с клавиатуры любого символа - не цифры происходит обработка символа, а в случае ввода цифры обработка будет проигнорирована.

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

cin >> c ;

if (isdigit(c)) continue;

..... //обработка других символов

//continue прыгает сюда

}

В этом фрагменте программы вы встретились с нововведением – функцией isdigit, которая равна true, если символ в скобках является цифрой, и false, если символ в скобках не является цифрой. Для использования этой функции необходимо подключить библиотеку ctype.h.

Когда выполняется инструкция continue, управление перепрыгивает в точку перед закрывающей фигурной скобкой, что приводит к выполнению цикла с головы. Обратите внимание, что continue завершает текущую итерацию, в то время как инструкция break заканчивает цикл.

Инструкция break может встречаться только внутри тела инструкций for, while, do или switch. Инструкция continue может использоваться только внутри тела инструкций for, while или do.