Главная страница

Не зависят от конкретного компьютера Язык Си


Скачать 5.8 Mb.
НазваниеНе зависят от конкретного компьютера Язык Си
Дата24.10.2022
Размер5.8 Mb.
Формат файлаppt
Имя файлаINFORMATIKA_lektsii_IB-1.ppt
ТипПрограмма
#751529
страница8 из 16
1   ...   4   5   6   7   8   9   10   11   ...   16

В чем отличие цикла 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].





5


10


15


20


25


0


1


2


3


4


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 return s;
}
int summa2(int m, int *X) { //второй способ
int s=0;
for(int i=0;i return s;
}
int main() {
int a[n]={1, 2, 3, 4, 5};
cout<< "S1 = "< cout<< "S2 = "< }





Вывод одномерного массива на экран


Пример функции вывода одномерного целого массива на экран в одну строку
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 – константа, хранящая максимальный предел из интервала. Определена в библиотеке . RAND_MAX =32767.
Обратите внимание. При запуске генератора случайных чисел случайное число сгенерируется один раз, при первом запуске программы. В дальнейшем, сколько бы раз не запускали эту программу, сгенерированное число останется одним и тем же


1   ...   4   5   6   7   8   9   10   11   ...   16


написать администратору сайта