- •9. Выражения, значения выражений и правила их вычислений. Тип выражения.
- •12. Синтаксис и семантика оператора выражения. Примеры применения оператора выражения.
- •13. Синтаксис и семантика условного оператора. Примеры применения условного оператора.
- •14. Синтаксис и семантика оператор выбора. Примеры применения оператор выбора.
- •15. Циклы, операторы циклов. Правила построения циклов.
- •16. Синтаксис и семантика оператора цикла с предусловием. Примеры применения оператора цикла с предусловием.
- •17. Синтаксис и семантика оператора цикла с постусловием. Примеры применения оператора цикла с постусловием.
- •18. Синтаксис и семантика оператора цикла с параметром. Примеры применения оператора цикла с параметром.
16. Синтаксис и семантика оператора цикла с предусловием. Примеры применения оператора цикла с предусловием.
Синтаксис оператора:
while ( < выражение целого типа >) <оператор>
Оператор тела цикла может быть простым или составным
Семантика оператора:
Вычисляется значение целого выражения и если оно не равно 0, то выполняется тело цикла.
В противном случае выполнение оператора цикла завершается
Целое выражения является условием продолжения цикла.
Условие цикла может иметь значение 0 уже на первом шаге – тогда цикл завершится, и тело цикла не будет выполнено ни разу
Тело оператора цикла с предусловием может быть выполнено ноль или более раз
Число шагов для цикла с предусловием заранее не определено
Для завершения цикла после конечного числа шагов необходимо, чтобы условие продолжения
содержало хотя бы одну переменную, значение которой меняется в теле цикла
17. Синтаксис и семантика оператора цикла с постусловием. Примеры применения оператора цикла с постусловием.
Цикл состоит из заголовка do, тела цикла и завершающего условия.
Условие записывается в круглых скобках после слова while, цикл продолжает выполняться, пока условие верно; когда условие становится неверно, цикл заканчивается.
Цикл do—while используется тогда, когда количество повторений цикла заранее неизвестно и не может быть вычислено.
• Условие проверяется только в конце очередного шага цикла (это цикл с постусловием),
таким образом, цикл всегда выполняется хотя бы один раз.
• Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается;
в таком случае говорят, что программа «зациклилась» — это серьезная логическая ошибка.
• Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить.
• В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»).
цикл с постусловием (то есть условие проверяется не в начале, а в конце цикла).
Пример: do { // начало цикла
cout << "Введите натуральное число:";
cin >>N; }
while ( N <= 0 ); // условие цикла «пока N <= 0»
18. Синтаксис и семантика оператора цикла с параметром. Примеры применения оператора цикла с параметром.
Если число шагов цикла известно заранее, то для его реализации можно использовать оператор цикла с параметром
Параметром называется специальная переменная, используемая в таком операторе для контроля числа выполняемых шагов цикла
Этот оператор может рассматриваться как частный случай оператора цикла с предусловием.
Синтаксис оператора:
for <имя параметра цикла>:=<выражение1> to <выражение2> do <оператор>
Оператор тела цикла может быть простым или составным
Оператор цикла с параметром может быть записан с использованием служебного слова to или downto
Семантика оператора:
Значения выражения1 и выражения2 являются начальным и конечным значениями параметра цикла, соответственно
Параметр цикла будет принимать все промежуточные значения между начальным и конечным
Число шагов цикла равно количеству значений, принимаемых его параметром, включая начальное и конечное значения
Условием продолжения цикла является:
<значение параметра цикла> <= <значение выражения2>, в случае использования служебного слова to
(значения параметра цикла на каждом шаге увеличиваются)
Ход выполнения:
1.Вычисляются начальное и конечное значения параметра цикла (выражение1 и выражение2)
2.Начальное значение присваивается параметру цикла
3.Проверяется условие продолжения цикла
4.В случае его выполнения выполняется тело цикла
5.Параметру цикла присваивается следующее значение
6.Переход к п. 3
Начальное и конечное значения параметра цикла вычисляются только один раз перед началом выполнения оператора
и в дальнейшем не меняются
После завершения выполнения оператора значение параметра цикла становится неопределенным
19. Структурные типы данных. Массивы. Описание массива. Размер и размерность массива. *Структурны данных Элементарными единицами данных являются значения того или иного стандартного типа, связанные с литералами, поименованными константами или переменными Эти значения можно группировать и создавать более или менее сложные структуры данных Каждая такая структура может получить свое имя и рассматриваться как переменная составного или структурированного типа Отдельные значения – элементы структуры данных – выделяются путем указания имени структуры, дополненного специальными расширениями –селекторами *Наиболее простой и часто используемой структурой данных является массив Массив – это набор некоторого числа однотипных данных, расположенных в последовательных ячейках памяти Количество элементов массива называется его размером, а тип элементов – типом массива *Синтаксис объявления массива: <тип массива> <имя массива> “[“<размер массива>”]” <размер массива> – это литерал или константное выражение В соответствии с объявлением массива для его размещения будет выделена область памяти длиной <размер массива> * sizeof <тип массива> байт, которая будет заполнена нулями Например: int a[5]; float x[n+m]; double q[4]; *Объявление массива может сопровождаться его инициализацией Синтаксис объявления массива с инициализацией: <тип массива> <имя массива> “[“<размер массива>”]” = {<список значений>} В этом случае элементы массива получают значения из списка инициализации В список инициализации могут входить любые вычисляемые выражения Одномерный массив:int a[5] = { 3, 45, 11, -8, 74}; double q[4] = {1.7, 4.53}; Во втором случае инициализируются только два первых элемента массива x, а оставшиеся два элемента получают нулевые значения При наличии списка инициализации размер массива можно не указывать, он определяется по числу инициализирующих значений: int a[ ] = { 3, 45, 11, -8, 74}; *размер - это кол-во элементов (вообще), размерность - кол-во измерений (a[i]- размерность один, a[i,j] - размерность два… ) |
20. Заполнение массива случайными числами. * Генерация таких чисел осуществляется функцией rand() из библиотеки stdlib (заголовочный файл <stdlib.h>) При генерировании псевдослучайных чисел мы получаем целые числа в диапазоне от 0 до 32767. Но нам же не всегда необходимы числа из столь большого диапазона чисел. Чтобы получить целое число из диапазона [0, max], нам необходимо осуществить деление по модулю: int k = rand ()%max; Так мы сможем получить числа из диапазона от 0 до max–1. Но чтобы получить числа из диапазона [min,max], мы должны еще добавить к нашей формуле min: K= rand () %max + min; А чтобы получить случ. Веществ. числа из диапазона [min,max], нам необходима формула в таком виде: K=(float) rand () * (max-min)/RAND_MAX +min; где RAND_MAX– это граница нашего диапазона в 32767. В этом выражении целое значение, возвращаемое функцией rand() явным образом преобразуется в вещественное, т.к. в противном случае всегда будет получаться нулевое значение. |
21. Задача поиска в массиве. Алгоритмы поиска. Существует две основных формулировки задачи поиска: найти элемент массива (первый или последний), удовлетворяющий заданному условию; найти все элементы массива, удовлетворяющие некоторому условию; Любой поиск связан с последовательным просмотром элементов массива и проверкой их соответствия условию поиска *Поиск единственного элемента: Цикл поиска в нотации C++ принимает вид: i=0; // while (A[i] != x && i<n) i++; Условие in заменено на i<n, чтобы не допустить выхода за границу массива Инкремент переменной i можно выполнить непосредственно в условии продолжения, так что окончательно цикл поиска примет вид: i=0; // while (A[i] != x && i++<n) Поскольку условие цикла является конъюнкцией двух простых условий, то после завершения цикла необходимо проверить основное из них: if (A[i] == x) cout << “Элемент найден”; // else cout << “Элемент не найден”; *Поиск всех элементов: В этом случае проверка условия поиска осуществляется в теле цикла for, Который просматривает все элементы массиваНапример, требуется подсчитать сумму s всех отрицательных значений в целочисленном массиве A длиной n Цикл поиска будет иметь вид: s=0; // for (int i=0; i<n; i++) // if (A[i] < 0) s +=A[i]; К этому типу поиска относятся и алгоритмы поиска миниального или максимального значения в массиве: min=A[0]; // for (int i=1; i<n; i++) //if (A[i] < min) min=A[i]; |
22 . Задача сортировки массива. Алгоритм сортировки методом выбора. *Сортировкой массива называется упорядочение значений его элементов по возрастанию или убыванию *Основная идея этого метода заключается в последовательном формировании отсортированной части массива путем добавления в ее конец очередного элемента, выбранного в его неотсортированной части. const int N = 10; void main() { int i, j, nMin, A[N], c; // здесь нужно ввести массив A for ( i = 0; i < N-1; i ++ ) { nMin = i; // ищем минимальный, начиная с A[i] for ( j = i+1; j < N; j ++ ) ; if ( A[j] < A[nMin] ) nMin = j; if ( nMin != i ) // если минимальный не стоит на своем месте,… { c = A[i]; A[i] = A[nMin]; A[nMin] = c; } // ставим его на место } cout << "Отсортированный массив:"; for ( i = 0; i < N; i ++ ) cout << "%d " << A[i]; } |
23 . Задача сортировки массива. Алгоритм сортировки методом включения. *Сортировкой массива называется упорядочение значений его элементов по возрастанию или убыванию *Отсортированная часть массива формируется путем последовательного добавления в нее элементов из его неотсортированной части, в качестве очередного берется первый элемент неотсортированной части. Место его размещения в отсортированной части выбирается так, чтобы сохранить уже имеющийся там порядок сортировки. const int N = 10; void main() { int i, j, nMin, A[N], c; // здесь нужно ввести массив A for ( i = 1; i < N; i ++ ) { c = A[i]; j = i -1; // ищем минимальный, начиная с A[i] while (j > =0 && A[j] > c) A[j+1] = A[j--]; A[j+1] = c; } cout << "Отсортированный массив:"; for ( i = 0; i < N; i ++ ) cout << "%d " << A[i]; } |
24 . Задача сортировки массива. Алгоритм сортировки методом обмена. *Сортировкой массива называется упорядочение значений его элементов по возрастанию или убыванию Этот метод сортировки имеет жаргонное наименование «метод пузырька» и заключается в многократном упорядочении пар соседних элементов. const int N = 10; void main() { int i, j, A[N], c; // здесь надо ввести массив A for ( i = 0; i < N-1; i ++ ) // цикл повторных проходов по массиву for ( j = N-2; j >= i; j -- ) // идем с конца массива в начало if ( A[j] > A[j+1] ) // если они стоят неправильно, ... { c = A[j]; A[j] = A[j+1]; A[j+1] = c; // переставить A[j] и A[j+1] } cout << "Отсортированный массив; for ( i = 0; i < N; i ++ ) cout << "%d " << A[i]); }
|