Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Оператор break. Оператор continue. Совместное использование операторов break и continue



Часто при вознекновении некоторого события удобно иметь возможность досрочно завершить цикл. Используемый для этой цели оператор break(разрыв) вызывает немедленный выход из циклов, организуемых с помощью операторов for, while, do-while,а также прекращение оператора switch. Приведенная ниже программа обеспечивает поиск в заданном иассиве элемента, равного g(пример 4.9). В случае обнаружения такого элемента оператор breakпрекращает дальнейшее выполнение цикла. Так как параметр iсохраняет значение после выхода из цикла, то дальнейший анализ его значения (if(i==n)) позволяет судить об удачном (i<=n)илинеудачном (i==n) поиске. В случае вложенных циклов оператор breakнемедленно прекращает выполнение самого внутреннего из объемлющих его циклов. Пример 4.9
/*линейный поиск*/ #include <stdio.h> int a[]={1,2,3,33,5,6,0,8}; int n=8; main() { int i,g=33; for(i=0;i<n;i++) if(a[i]==g) break; if(i==n) printf("%d ненайден\n",g); else printf("%d на%d месте \n"g,i); }

На примере 5.0 приведена программа, которая ведет подсчет числа различных элементов в массиве. Каждый очередной элемент a[i]сравнивается с последующими элементами массива. Если он не совпадает ни с одним из этих элементов, в счетчик k добавляется еденица. В противном случае внутренний цикл прерывается оператором breakи начинается новая итерация внешнего цикла.

Пример 5.0

/*число разных элементов*/ #include <stdio.h> main() { static a[]={7,3,7,4,3,6}; int i,j,m,k=1;m=6; for(i=0;i<m-1;i++) { for(j=i+1;j<m;j++) if(a[i]==a[j]) break; if(j==m) k++; } printf("%d разныхэлем. \n", k); }

Оператор continueтоже предназначен для прерывания циклического процесса, организуемого операторами for, while, do-while.Но в отличае от оператора break, он не прекращает дальнейшее выполнение цикла, а только немедленно переходит к следующей интерации того цикла, в теле которого он оказался. Он как бы имитирует безусловный переход на конечный оператор цикла, но не за ее пределы самого цикла. Программа на примере 5.1 использует оператор continueдля пропуска отрицательных элементов массива, суммируя только положительные.

Пример 5.1

#include <stdio.h> main() { static int a[]={1,2,-3,4,-5,6}; int i,n,s; n=6; s=0; for(i=0; i<n; i++) { if(a[i]<=0) continue; /*пропуск0*/ s+=a[i]; } printf("сумма= %d \n",s); }

 

 

  1. Оператор if. Оператор if-else. Вложенные операторы if-else. Оператор if-else-if.

Оператор C++ if позволяет вашим программам осуществлять проверку и затем на основании этой проверки выполнять операторы. Формат оператора if следующий:

if (условие_выполняется) оператор;

Обычно оператор if выполняет проверку, используя операцию сравнения C++. Если результат проверки является истиной, if выполняет оператор, который следует за ним.

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

if (условие_истинно)
оператор;
else
оператор;

Представление об if-else

По мере усложнения ваши программы будут проверять разные условия и выполнять один набор операторов, если условие истинно, и другой набор, если условие ложно. Для выполнения такой условной обработки программы используют операторы if-else, как показано ниже:

if (условие_истинно)
оператор;
else
оператор;

Когда программе требуется выполнить несколько операторов, если условие ложно или истинно, вы должны сгруппировать связанные операторы внутри левой и правой фигурных скобок {}:

If (условие_истинно)

{
первый_оператор_для_истины;
второй_оператор_для_истины;
}
else
{
первый_оператор_для_лжи;
второй_оператор_для_лжи;
}

 

  1. Операторы динамического распределения памяти (new, delete).

Оператор C++ new позволяет вашим программам распределять память во время выполнения. Для использования оператора new вам необходимо указать количество байтов памяти, которое требуется программе. Предположим, например, что вашей программе необходим 50-байтный массив. Используя оператор new, вы можете заказать эту память, как показано ниже:

char *buffer = new char[50];

Говоря кратко, если оператор new успешно выделяет память, он возвращает указатель на начало области этой памяти. В данном случае, поскольку программа распределяет память для хранения массива символов, она присваивает возвращаемый указатель переменной, определенной как указатель на тип char. Если оператор new не может выделить запрашиваемый вами объем памяти, он возвратит NULL-указатель, который содержит значение 0. Каждый раз, когда ваши программы динамически распределяют память с использованием оператора new, они должны проверять возвращаемое оператором new значение, чтобы определить, не равно ли оно NULL.

Например, следующая программа использует оператор new для получения указателя на 100-байтный массив:

#include <iostream.h>

void main(void)

{
char *pointer = new char[100];
if (pointer != NULL) cout << "Память успешно выделена" << endl;
else cout << "Ошибка выделения памяти" << endl;
}

Для освобождения памяти с использованием оператора delete вы просто указываете этому оператору указатель на данную область памяти, как показано ниже:

delete pointer;

Следующая программа использует оператор delete для освобождения выделенной с помощью оператора new памяти:

#include <iostream.h>

#include <string.h>

void main(void)

{
char *pointer = new char[100];
strcpy(pointer, "Учимся программировать на языке C++");
cout << pointer << endl;
delete pointer;
}

По умолчанию, если ваша программа не освобождает выделенную ей память до своего завершения, операционная система автоматически освобождает эту память после завершения программы. Однако если ваша программа использует оператор delete для освобождения памяти по мере того, как она (память) становится ненужной, то эта память вновь становится доступной для других целей (возможно, для вашей программы, которая опять будет использовать оператор new, или для операционной системы).

 

 

  1. Операции динамического распределения памяти.
new Операция выделения памяти.

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

delete Операция освобождения памяти.

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

 



Просмотров 910

Эта страница нарушает авторские права




allrefrs.su - 2024 год. Все права принадлежат их авторам!