Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИ.docx
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
227.33 Кб
Скачать

Оператор continue

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

/* Подсчет количества пробелов */

#include <stdio.h>

int main(void)

{

char s[80], *str;

int space;

printf("Введите строку: ");

gets(s);

str = s;

for(space=0; *str; str++) {

if(*str != ' ') continue;

space++;

}

printf("%d пробелов\n", space);

return 0;

}

Каждый символ строки сравнивается с пробелом. Если сравниваемый символ не является пробелом, оператор continueпередает управление в конец цикла for и выполняется следующая итерация. Если символ является пробелом, значение переменной space увеличивается на 1.

В следующем примере оператор continue применяется для выхода из цикла while путем передачи управления на условие цикла:

void code(void)

{

char done, ch;

done = 0;

while(!done) {

ch = getchar();

if(ch=='$') {

done = 1;

continue;

}

putchar(ch+1); /* печать следующего в алфавитном

порядке символа */

}

}

Функция code предназначена для кодирования сообщения путем замены каждого символа символом, код которого на 1 больше кода исходного символа в коде ASCII. Например, символ А заменяется символом В (если это латинские символы.). Функция прекращает работу при вводе символа $. При этом переменной done присваивается значение 1 и оператор continueпередает управление на условие цикла, что и прекращает выполнение цикла.

[1]Уже одно это (чрезмерная вложенность и неожиданный выход сразу из нескольких циклов) может свидетельствовать о плохой структуре программы.

10

Сортировка массива

Сортировкой называется такой процесс перестановки элементов массива, когда все его элементы выстраиваются по возрастанию или по убыванию.

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

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

Сортировка массива выбором

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

Суть алгоритма такова. Во всём отыскиваем минимальный элемент, меняем его местами с начальным. Затем в оставшейся части массива (т. е. среди всех элементов кроме начального) снова отыскиваем минимальный элемент, меняем его местами уже со вторым элементом в массиве. И так далее.

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

int main() {

int n = 13;

int a[n];

srand(time(NULL));

for (int i=0; i<n; i++) {

a[i] = rand()%90+10;

cout << a[i] << " ";

}

for (int i=0; i<n; i++) {

int min=a[i], imin = i;

for (int j=i+1; j<n; j++) {

if(a[j]<min) {

min = a[j];

imin = j;

}

}

if (imin != i) {

int t = a[i];

a[i] = a[imin];

a[imin] = t;

}

}

cout << endl;

for (int i=0; i<n; i++) {

cout << a[i] << " ";

}

}