cpp introduction lec 2

9
© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС Лекция 2. Основные операции языка С++. Управляющие конструкции языка С++: условные операторы и циклы Основные операции языка С++ Арифметические операции К арифметическим операциям относятся умножение ( * ), деление ( / ), вычисление остатка от деления (или взятие по модулю, %), сложение ( + ) и вычитание ( - ). Операция взятия остатка от деления применяется только к целочисленным операндам и даёт остаток от деления первого операнда на второй. Что касается операции деления, то следует помнить, что в С++ если оба её операнда являются целыми, то и результат также будет целым, равный частному от деления с остатком первого операнда на второй. Операция приведения типа Операция приведения типа заключается в преобразовании данных одного типа в данные другого типа. Приведение типов данных может происходить как принудительно, так и автоматически. Вот пример автоматического приведения вещественного типа к целому и наоборот: int p1; double p2=3.84; p1=p2; // p1 получит значение 3 p2=p1; // p2 получит значение 3.0 Возможно и принудительное приведение типа, которое может применяться к любому операнду в выражении, например, приведение некоторой переменной к типу int будет выглядеть так: int p1; double p2=3.84; p1=(int)(p2+0.5); // Округление p2. p1 получит значение 4. Следует помнить, что операция приведения типа может работать двояким образом. Во- первых, она может производить действительное преобразование данных, как это

Upload: victor-grinyak

Post on 22-Mar-2016

215 views

Category:

Documents


2 download

DESCRIPTION

lection 2 of cpp cource

TRANSCRIPT

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

Лекция 2. Основные операции языка С++. Управляющие конструкции языка С++:

условные операторы и циклы

Основные операции языка С++

Арифметические операции

К арифметическим операциям относятся умножение ( * ), деление ( / ), вычисление

остатка от деления (или взятие по модулю, %), сложение ( + ) и вычитание ( - ). Операция

взятия остатка от деления применяется только к целочисленным операндам и даёт остаток

от деления первого операнда на второй. Что касается операции деления, то следует

помнить, что в С++ если оба её операнда являются целыми, то и результат также будет

целым, равный частному от деления с остатком первого операнда на второй.

Операция приведения типа

Операция приведения типа заключается в преобразовании данных одного типа в данные

другого типа. Приведение типов данных может происходить как принудительно, так и

автоматически. Вот пример автоматического приведения вещественного типа к целому и

наоборот:

int p1;

double p2=3.84;

p1=p2; // p1 получит значение 3

p2=p1; // p2 получит значение 3.0

Возможно и принудительное приведение типа, которое может применяться к любому

операнду в выражении, например, приведение некоторой переменной к типу int будет

выглядеть так:

int p1;

double p2=3.84;

p1=(int)(p2+0.5); // Округление p2. p1 получит значение 4.

Следует помнить, что операция приведения типа может работать двояким образом. Во-

первых, она может производить действительное преобразование данных, как это

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

происходит при приведении целого типа к вещественному (получаются данные,

физически отличные от исходных). Во вторых, операция может никак не воздействовать

на имеющиеся данные, а только изменять их интерпретацию, например, при приведении

целых знаковых типов к беззнаковым.

Кроме того, если в арифметическом выражении участвуют знаковый и беззнаковый

целочисленные типы, то автоматически знаковый операнд приводится к беззнаковому,

результат тоже будет беззнаковым. Во избежание ошибок нужно при необходимости

применять операцию приведения, явно преобразуя тот или иной операнд. Следует также

помнить, что приведение типов в выражениях выполняется последовательно для каждой

пары операндов.

Операции инкремента и декремента Операции инкремента ( ++ ) и декремента ( -- ). Соответственно увеличивают или

уменьшают свой операнд на единицу. Пример:

int i, j;

i=1;

j=5;

i++; // Эквивалентно i=i+1;

j--; // Эквивалентно j=j-1;

Эти операции могут использоваться и в выражениях:

int i, j;

i=1;

j=5;

i=i+(--j); // i получит значение 5, j получит значение 4;

Инкремент и декремент могут реализовываться в двух формах – префиксной (--i, ++j) и

постфиксной (i--, j++). Префиксные операции выполняются перед тем, как будет

производится оценка всего выражения, постфиксные операции выполняются после того,

как произведена оценка выражения, в которое они входят.

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

Условный оператор if … else

Условный оператор реализует структуру выбора. Он имеет следующий вид:

if (условие) оператор1 else оператор2

Если условие оценивается как истинное (не равное 0), выполняется оператор1, если как

ложное (равное 0), выполняется оператор2. Пример:

if (a>b)

max_ab=a;

else

max_ab=b;

Вместо одиночного оператора можно поставить блок из нескольких операторов,

заключённый в фигурные скобки:

if (условие)

{

операторы блока if

}

else

{

операторы блока else

}

Ключевое слово else и соответствующий ему блок операторов могут отсутствовать.

Можно также строить вложенные структуры if … else.

Технологией программирования рекомендуется всегда применять фигурные скобки в

условном операторе, даже если они содержат всего один оператор.

Условие оператора if может быть сколь угодно сложным выражением. Оно считается

ложным, если его значение равно 0, и истинным, если значение не равно 0. Несколько

примеров условий с пояснениями:

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

if (x) // Если х не равно 0

if (!x) // Если х равно 0 (в языке С++ операция ! означает отрицание)

if (c==a) // Если c равно a (операция == означает отношение равенства)

if (b!=c) // Если b не равно с (операция != означает отношение неравенства)

if (a>=b && a<=c) //Если а лежит между b и с (операция && означает логическое and)

if (a!=b || a!=c) // Если a не равно b или с (операция || означает логическое or).

Оператор выбора switch

Иногда возникают ситуации, когда некоторая переменная может принимать несколько

возможных значений-вариантов, и для каждого варианта требуется выполнить какие-то

свои действия. Для подобных случаев в С++ существует специальная конструкция выбора

switch. Выглядит она так:

switch (выражение)

{

case константное выражение1: группа операторов1

case константное выражение2: группа операторов2

[default: группа операторов]

}

Сначала производится оценка выражения в операторе switch; полученное значение

последовательно сравнивается с каждым из константных выражений, и при совпадении

значений управление передаётся на соответствующую группу операторов. Если значение

выражения не подходит ни под один из вариантов, управление передаётся на группу

операторов с меткой default или на следующий после блока switch оператор, если группа

default отсутствует.

Пример:

int i;

//-------------

Блок, в котором переменная i получает некоторое значение

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

//-------------

switch (i)

{

case 0: printf(“i is false”); break; // если i=0

case 1: printf(“i is true”); break; // если i=1

default: printf(“i is true but not 1”); // если i не 0 и не 1

}

Оператор goto Исполнение оператора goto приводит к передаче управления на метку, указанную в

операторе. Метка – это последовательность символов, оканчивающаяся двоеточием.

Пример:

loop1:

goto loop1;

Технологией программирования применение оператора goto не рекомендуется, кроме как

в случае необходимости обеспечить быстрый выход из глубоко вложенного цикла.

Циклы

В языке С++ структуры многократного повторения реализуются тремя разновидностями

операторов цикла: while, do … while и for.

Цикл с предусловием while

Синтаксис оператора while выглядит так:

while (условие продолжения) оператор

Сначала оценивается условие продолжения. Если оно истинно, выполняется оператор,

после чего управление возвращается заголовку цикла и всё повторяется снова. Когда

условие оказывается ложным, выполнение цикла прекращается и управление передаётся

следующему после цикла оператору. Пример:

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

int j=0;

while (j<=5)

{

j=j+1;

printf(“j=%d \n”, j); // На консоль выводится значение j, пока j не станет больше 5

}

Следует обратить внимание, что в цикле while проверка условия делается перед

выполнением тела цикла. Если условие изначально ложно, то тело цикла не исполняется

ни одного раза.

Цикл с предусловием while удобен для применения в задачах, где нужно осуществить

перебор элементов в массиве символов, при этом число символов заранее не известно. В

этом случае применяется следующая конструкция:

int i;

char help[100];

printf(“Input string:\n”); // приглашение пользователю ввести строку с консоли

gets(help); // сохранение строки в массиве help

i = 0; // обнуляем счетчик

while (help[i] != 0) // проверяем, не достигнут ли конец строки

{

i = i + 1; // увеличиваем счетчик символов на 1

}

В результате выполнения этой программы переменная i получит значение, равное

количеству символов в строке help.

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

Цикл do … while

Этот цикл имеет следующий вид:

do оператор while (условие продолжения);

Здесь сначала выполняется оператор, а затем производится проверка условия

продолжения. Если условие истинно, управление возвращается на начало цикла, если

ложно, цикл завершается. Отличие от предыдущей конструкции состоит в том, что тело

цикла do .. while исполняется хотя бы один раз вне зависимости от каких либо условий.

Цикл for

Цикл for выглядит так:

for ([инициализация]; [условие]; [модификация]) оператор

Прежде всего выполняется инициализация цикла; секция инициализации может содержать

любое выражение. Инициализация производится только один раз перед началом работы

цикла.

Затем оценивается выражение условия. Если оно истинно, выполняется оператор цикла,

если ложно, происходит выход из цикла.

После исполнения цикла производится модификация, после неё управление возвращается

заголовку цикла. Обычно в секции модификации изменяют значение управляющих

переменных цикла.

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

Простейшей и самой востребованной конструкцией на основе цикла for является цикл с

управляющей переменной-счётчиком:

int i, k;

k=10;

for(i = 0; i < k; i++)

{

………………..

………………..

}

В данном случае счётчик инициализируется значением i = 0. В начале каждого прохода

цикла проверяется, не достиг ли он значения k = 10. Как только i станет равным k,

выполнение цикла прекращается. Таким образом, тело цикла выполняется для значений i

от 0 до k-1, то есть ровно k раз.

Операторы прерывания циклов

Часто бывает необходимым досрочно прервать некоторый цикл, до того, как условие его

продолжения станет ложным. Для досрочного завершения циклов в С++ применяются

операторы break и continue.

Оператор break вызывает прерывание ближайшего (самого внутреннего) заключающего

его блока switch, while, do … while или for.

Оператор continue воздействует только на блоки циклов. Он передаёт управление в конец

тела цикла, пропуская, таким образом, следующие за ним операторы, досрочно завершая

не сам цикл, а его текущую итерацию.

© В.М. Гриняк, доц. каф. ИСПИ ВГУЭС

Пример:

char s[80];

int i;

//--------------------------

блок, в котором задаётся массив s

//--------------------------

i=0;

while (s[i]!=0 && i<80)

{

printf(“This is the letter %c”, s[i];

if (s[i]==’q’)

{

printf(“Quit the process”);

break;

}

i=i+1;

}

Данная программа будет последовательно выдавать символы, содержащиеся в массиве s,

пока не встретиться терминальный 0 или символ ‘q’.

Смотри также пример к лекции 2, расположенный на портале