Не зависят от конкретного компьютера Язык Си
Скачать 5.8 Mb.
|
В чем отличие цикла while от do…while?while do…while int i = 1; int i = 1; while (i < 0) { do { cout << i << " "; cout << i << " "; i++; i++; } } while (i < 0); Цикл while не выполнится ни разу, а цикл do…while выполнится 1 раз, и на экран будет выведено «1». оператор безусловного перехода goto; оператор выхода из цикла или оператора выбора break; оператор перехода к следующей итерации цикла continue; оператор выхода из функции с возвратом значения return. Операторы передачи управления Оператор goto передает управление на помеченный оператор. Формат: goto метка; В теле функции должна присутствовать конструкция вида: метка: оператор; Метка – это идентификатор, областью видимости которого является функция, в теле которой он задан. Оператор goto Использование оператора goto оправдано в двух случаях: 1. принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей; 2. переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия). Оператор goto Важно. Не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена. Оператор goto Досрочное завершение цикла (оператор break)Оператор break используется внутри операторов цикла, if или switch для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break. С помощью оператора break досрочно прерывается выполнение цикла и продолжается выполнение программы. При этом произойдёт моментальный выход из цикла, не будет закончен даже текущий шаг (т.е. если после break присутствовали какие-то ещё операторы, то они не выполнятся). for(;;) {…for(;;) {… if (выражение) break; …} В данном случае выполняется «бесконечный» цикл. Однако, как только выражение в операторе if станет истинным, цикл завершится. Оператор break В результате работы следующего примера на экран будут выведены только числа «1 2 3 4», хотя конечное значение счетчика цикла равно 10. for (int i=1; i<=10; i++) { if(i == 5) { break; } cout << i << " "; } Оператор break. Пример Оператор continue используется для перехода к следующей итерации цикла. Он пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации. Оператор continue Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова (или в операционную систему при передаче управления из функции main). Синтаксис: return [ выражение ]; Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение отсутствует. Оператор return Массивы Массив – это конечная последовательность однотипных элементов, имеющих общее имя (имя массива) и расположенных в последовательных ячейках памяти. Например, массив типа int из пяти элементов займет 20 байт памяти – 4 байта (int) * 5 (количество элементов) – эти данные будут располагаться в памяти последовательно
Доступ к элементу массива осуществляется по его порядковому номеру (индексу). Массивы Особенности:
все элементы имеют разные порядковые номера (индексы) весь массив имеет одно имя (имя массива) все элементы расположены в памяти рядом Примеры:
Массивы Массивы могут иметь как одно, так и более одного измерений. В зависимости от количества измерений массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива. Чаще всего в программировании используются одномерные и двумерные массивы, поэтому мы рассмотрим только эти массивы. Одномерные массивы Одномерный массив – массив с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив – это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве – это элементы массива. Одномерные массивы Синтаксис: ТипЭлементов ИмяМассива [ КоличествоЭлементов ]; Тип элементов и их количество определяют, сколько памяти потребуется для хранения элементов массива. Эта величина определяется на этапе компиляции, и изменить ее впоследствии невозможно, поэтому КоличествоЭлементов может быть либо константой, либо константным выражением. При объявлении массива:
выделяется место в памяти Пример: Определение размера массива через константу: Объявление массивов имя массива размер массива (количество элементов) тип элементов массива int A [ ]; const int N = 5; N int A [ 5 ]; Одномерные массивы Например, запись int A [5] означает, что объявили массив с именем A, который содержит в себе 5 переменных типа int Важно. В квадратных скобках указываются только целочисленные значения. Объявление массива через целочисленную константу предпочтительней, если в ходе программы приходится несколько раз обращаться к массиву через цикл. Константа определяется до объявления массива. Одномерные массивы Элементы массива нумеруются с нуля, следовательно, номер последнего элемента равен КоличествоЭлементов – 1. При обращении к элементам массива не производится автоматический контроль за выходом значения индекса из диапазона [0, КоличествоЭлементов – 1].
A массив A[0] A[1] A[2] A[3] A[4] A[2] НОМЕР элемента массива (ИНДЕКС): 2 ЗНАЧЕНИЕ элемента массива: 15 Нумерация элементов массива начинается с НУЛЯ ! Одномерные массивы Инициализация массива Присвоить значения элементам массива можно разными способами. Инициализация массива при его описании. Пример int A[5]={5,10,15,20,25}; В результате элементу с индексом 0 – A[0] – будет присвоено значение 5, а последнему элементу массива A[4] – значение 25. Значения для инициализации массива записываются в фигурных скобках через запятую. В конце закрывающей фигурной скобки ставится точка с запятой. Инициализация массива При инициализации массива при его описании можно не указывать размер массива в квадратных скобках Пример int A[]={5,10,15,20,25}; В этом случае компилятор автоматически определит размер массива, по количеству данных в фигурных скобках. Инициализация массива Можно инициализировать только часть элементов, тогда количество элементов массива должно быть больше, чем количество элементов для инициализации. Пример int A[5]={5,10}; В результате элементу с индексом 0 – A[0] – будет присвоено значение 5, элементу массива A[1] – значение 10, а остальные элементы массива – A[2] – A[4] – примут значение 0. Инициализация массива При начальной инициализации элементов массива, когда массив необходимо очистить от «мусора» (остаточных данных других программ в памяти) лучше сразу присвоить всем элементам значение 0: int A[n]={}; В C++11 (стандарт кодирования) при использовании списковой инициализации (инициализации с фигурными скобками) разрешается отбросить знак = : int A[n] {}; Одномерные массивы Примеры описания одномерных массивов: double A[10]; //массив из 10 элементов типа double const int n = 20; int B[n]; //массив из 20 целых элементов, размер массива задан через константу double c[5] = {3.5, 2.7, 1.3, 7.1, 7.7}; //инициализация массива из 5 элементов типа double int d[] = {1, 2, 3, 4, 5, 6}; //инициализация массив из 6 целых элементов float b[2] = { 1. }; //инициализация части массива, остальные элементы нулевые Что неправильно? int N = 10; float A[N]; int X[4.5]; int A[10]; A[10] = 0; float X[5]; int n = 1; X[n-2] = 4.5; X[n+8] = 12.; int X[4]; X[2] = 4.5; float B[2] = { 1., 3.8, 5.5 }; int A[2] = { 1, 3.8 }; Пример 1 Пример 2 Пример 3 Пример 4 Пример 5 Пример 6 Пример 7 Что неправильно? int N = 10; float A[N]; int X[4.5]; int A[10]; A[10] = 0; float X[5]; int n = 1; X[n-2] = 4.5; X[n+8] = 12.; int X[4]; X[2] = 4.5; float B[2] = { 1., 3.8, 5.5 }; int A[2] = { 1, 3.8 }; Пример 1 Пример 2 Пример 3 Пример 4 Пример 5 Пример 6 Пример 7 const int выход за границы массива (стираются данные в памяти) дробная часть отбрасывается (ошибки нет) float #include using namespace std; int main() { int A[5]={5,10,15,20,25}; for (int i=0; i <= 4; i++) cout << A[i] << endl; return 0; } Пример заполнения одномерного массива Важно: нумерация элементов массива начинается с 0: A[0] = 5 A[1] = 10 A[2] = 15 A[3] = 20 A[4] = 25 Элемента a[5] не существует 5 элементов Пример заполнения массива после его объявления Пример заполнения одномерного массива Пример заполнения массива с помощью оператора цикла #include using namespace std; int main() { const int n = 7; int A[n]; for (int i = 0; i < n; i++) { if (i==0) A[i] = 1; else A[i] = A[i-1]*2; cout << A[i] << endl; } return 0; } Пример заполнения одномерного массива В строке 5 определяем целочисленную константу n, которая будет хранить размер массива (количество его элементов, определенное через константу). В строке 6 объявляем массив: указываем тип данных, которые будут храниться в ячейках массива, задаем имя массива и указываем его размер в квадратных скобках. Пример заполнения одномерного массива В строках 7 – 14 определяем цикл for. Его счетчик i будет служить индексом элементов массива. В самом начале, он равен 0 и с каждым шагом будет увеличиваться на единицу до тех пор, пока не станет равным n – количеству элементов массива. Обратите внимание, в одном цикле мы и присваиваем различные значения элементам массива и обращаемся к ним, чтобы вывести данные, которые они хранят, на экран (строка 13). Пример заполнения одномерного массива Организовать заполнение массива можно и при помощи оператора cin: for (int i = 0; i < n; i++) { cout << "Введите значение в ячейку №" << i << " :"; cin >> A[i]; } Одномерные массивы Для доступа к элементу массива после имени массива в квадратных скобках нужно указать его номер (индекс). Например, a[3], b[i], d[i-2*j]. Так как в С++ имя массива является указателем на нулевой элемент массива, то можно обращаться к элементам, используя операции для указателей. К элементу a[i] мы можем обратиться как *(a+i). Второй способ выполняется несколько быстрее, поэтому на практике применяется довольно часто. Одномерные массивы С элементами массива можно выполнять те же действия, что и с обычными переменными этого типа. Если массив является параметром функции, то в функцию рекомендуется передавать указатель на его первый элемент. Информация о количестве элементов передается в отдельном параметре. В этом случае функция сможет обрабатывать массивы разного размера. Одномерные массивы. Пример Напишем функцию, которая вычисляет сумму элементов массива. Функция имеет два параметра: m – количество элементов в массиве, X – массив, элементы которого нужно просуммировать. В примере приведем 2 варианта этой функции, которые отличаются способом описания формального параметра X. Одномерные массивы. Пример #include using namespace std; const int n=5; int summa1(int m, int X[]) { //первый способ int s=0; for(int i=0;i } int summa2(int m, int *X) { //второй способ int s=0; for(int i=0;i } int main() { int a[n]={1, 2, 3, 4, 5}; cout<< "S1 = "< Вывод одномерного массива на экран Пример функции вывода одномерного целого массива на экран в одну строку void arr_print (int m, int *X) { for( int i=0; i cout << X[i] << " "; } Заполнение массива случайными числами Для заполнения массива случайными числами из заданного диапазона [a,b] используются библиотечные функции rand и srand . rand() – возвращает псевдослучайное целое число от 0 до RAND_MAX. RAND_MAX – константа, хранящая максимальный предел из интервала. Определена в библиотеке Обратите внимание. При запуске генератора случайных чисел случайное число сгенерируется один раз, при первом запуске программы. В дальнейшем, сколько бы раз не запускали эту программу, сгенерированное число останется одним и тем же |