ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.05.2021
Просмотров: 247
Скачиваний: 1
14. Синтаксис и семантика оператор выбора. Примеры применения оператор выбора.
Синтаксис рассмотрим на примере задачи:
Составить программу, которая вводит с клавиатуры русскую букву и выводит на экран название животного на эту букву.
switch ( c ) // заголовок оператора выбора
{
case 'б': cout << "Белка>"; break;
case 'с': cout << "Суслик"; break;
case 'х': cout << "Хомяк"; break;
default: cout << "Что это?!"; }
Если надо выбрать один из нескольких вариантов в зависимости от значения некоторой
целой или символьной переменной, можно использовать несколько вложенных операторов if,
но значительно удобнее использовать специальный оператор switch.
• Оператор break служит для выхода из тела оператора switch
• Если значение переменной не совпадает ни с одной из меток, программа переходит на
метку default (по умолчанию, то есть если ничего другого не указано).
15. Циклы, операторы циклов. Правила построения циклов.
Циклом называется часть программного кода, обеспечивающая многократное повторение какой-либо
последовательности действий над данными.
Повторяющаяся последовательность действий называется телом цикла.
Количество повторений определяется условием цикла, которое должно обеспечивать
его завершение после конечного числа повторений (шагов).
Примеры циклов:
1. for ([(инициализатор)]; [<Выражение>]; [<Оператор последовательного выражения>]) <Оператор>
Пример: for (int i=1; i<10; i++) cout << i;
2. while (<выражение>) <Оператор> \\ С предусловием
3. do <оператор> while (<Выражение>); \\ С постусловием
Когда число шагов неизвестно, следует использовать циклы с операторами передачи управления.
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 ++ ) 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 ++ ) // цикл повторных проходов по массиву 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]); } |
for
( j = N-2; j >= i; j -- ) // идем с конца массива
в начало