Рассмотрим пример 4 использования структуры do/while.
Исходный текст включает прописные латинские буквы и заканчивается точкой ('.'). Определить количество повторов символа 'A' в заданном тексте.
Пример 4.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
void main() {
char ch;
int na = 0;
// do while
do {
cin >> ch;
if (ch == 'A') na += 1;
} while (ch != '.');
// количество повторов символа A в тексте
cout << "\n" << na;
}// конец функции main
В операторе do/while организован посимвольный ввод текста с проверкой в условном операторе введённого символа на совпадение с символом 'A'. Символ точка ('.') является условием окончания ввода текста.
4.5. Операторы прерывания
Операторы break (прервать) и continue (продолжить) изменяют поток управления. В структурах повторения операция break; досрочно прерывает цикл и осуществляет выход из блока при соблюдении заданного условия. Операция continue; вызывает пропуск следующих за ней операций тела цикла при соблюдении заданного условия, но без выхода из блока. Оператор перехода goto выполняет безусловный переход к указанной метке … goto MM; …; MM: …..; .
Покажем работу операторов прерывания на примерах 5 и 6 для задачи вывода на печать первого отрицательного число массива A[10]. В примере 5 код программы включает операторы break и continue.
Пример 5.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
Void main() {
int A[] = {5,7,-3,9,-5,1,7,8,-9,10};
int i, n;
n = sizeof(A) / sizeof(A[0]);
for (i = 0; i < n; i++) {
if (A[i] >= 0) continue;
cout << "\n A[i]" << A[i];
break;
}
}// конец функции main
В данной программе массив инициализирован (int A[]={5,7,-3,9,-5,1,7,8,-9,10};). Его размер равен числу заданных значений. Для универсальности значение размера вычисляется автоматически и заносится в переменную n, при этом sizeof(A) ‒ это размер в памяти всего массива A, а sizeof(A[0]) ‒ одного его элемента. Далее в структуре повторения for проверяется условие A[i]>=0, если оно истинно, то выполняется операция continue;, в противном случае выводится значение первого отрицательного числа и осуществляется досрочный выход из цикла (break;).
В примере 6 текст программы содержит оператор goto.
Пример 6.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
Void main() {
int A[] = {5,7,-3,9,-5,1,-7,8,9,10};
int i, n;
n = sizeof(A) / sizeof(A[0]);
for (i = 0; i < n; i++)
if (A[i] < 0) {
cout << A[i];
goto M;
}
M: cout << "\n goto M" << endl;
}// конец функции main
В цикле for проверяется условие A[i]<0; если оно истинно, то выводится значение первого отрицательного числа и осуществляется переход к метке M (goto M;).
В примере 7 проиллюстрируем работу оператора continue для лабораторной задачи № 5 (Выбрать из массива (х0, х1, ... , х9) элементы с чётными номерами и записать их в массив y).
Пример 7.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
Void main() {
int i, x[10], k, y[4];
for (i = 0; i < 10; i++) {
cout << "x[" << i << "]=";
cin >> x[i];
};// ввод элементов массива x
k = 0;
for (i = 1; i < 10; i++) {
if (i % 2) continue;
y[k] = x[i];
k+=1;}
cout << "\n***y***";
cout << "\n";
for (i = 0; i < k; i++)
cout << "y[" << i << "]=" << y[i] << ' ';
}// конец функции main
Если условие (i % 2) истинно (то есть отлично от нуля), тогда выполняется операция continue; (вызывает пропуск следующих за ней операций тела цикла – y[k] = x[i]; k+=1; и возобновляет новую итерацию цикла).
Если условие (i % 2) ложно (то есть равно нулю), тогда выполняются операторы, следующие после условного оператора – y[k] = x[i]; k+=1;