Как работает условный оператор if..else

Синтаксис оператора if..else имеет следующий вид:

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

оператор;

else

оператор;

Блок-схема выполнения оператора if..else приведена на рис. 3.2.

 

 

 

Рис. 3.2. Исполнение оператора if..else

В теле оператора выбора ifпредполагается наличие только одного оператора. Чтобы включить в тело ifнесколько операторов, нужно заключить этот набор операторов в фигурные скобки ({ и }). Совокупность операторов, содержащихся внутри пары фигурных скобок, называется составным оператором или блоком. Составной оператор может быть помещен в любое место программы, где может стоять простой оператор.

Следующий пример содержит составной оператор в ветви else оператора if..else.

if ( grade >= 60 )

cout << “Зачет”;

else

{

cout << “Незачет”;

cout << “Вам следует снова пройти этот курс”;

}

Обратите внимание на фигурные скобки, в которые заключены оба оператора в предложении else.Эти скобки важны. Без этих скобок оператор

Cout << “Вам следует снова пройти этот курс”;

оказался бы вне тела else-ветви оператора if и выполнялся бы вне зависимости от того, меньше 60 значение gradeили нет.

 

Switch

Оператор множественного выбора switch

В некоторых ситуациях применение оператора if может привести к возникновению очень сложных конструкций с большим количеством вложенных операторов. Язык C++ располагает альтернативным решением этой проблемы — оператором switch. В отли­чие от оператора if, он позволяет проверять сразу несколько условий, организуя ветв­ление программы более эффективно. Оператор switch имеет следующий синтаксис:

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

{

case значение1: оператор; break;

case значение2: оператор; break;

...

case значениеN: оператор; break;
default: оператор;

}

 

Выражение в скобках оператора switch представляет собой любое допустимое вы­ражение языка C++, а оператор — это любой допустимый оператор или блок опера­торов. Выражение возвращает (или может быть однозначно преобразовано в) целочис­ленное значение. Поэтому использование логических операций или выражений сравнения здесь недопустимо.

Переход осуществляется к той строке оператора switch, где после ключевого сло­ва case находится значение, соответствующее результату выражения. С этой строки выполнение операторов продолжится до тех пор, пока оператор switch не завершится либо пока не встретится оператор break. Если ни одно значение case не соответст­вует результату выражения, выполняются операторы, следующие за ключевым словом default, а в случае его отсутствия оператор switch завершается. Блок-схема выполнения оператора if..else приведена на рис. 3.3.

 

 

 

Рис. 3.3. Исполнение оператора if..else

Пример использования оператора switch приведен в листинге 3.3.

Листинг 3.3. Пример использования оператора switch

// DemoSwitch.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()

{ unsigned number;

cout << "Enter a number between 1 and 5 : ";

cin >> number;

switch (number)

{ case 0: cout << "Too small, sorry! "; break;



case 5: cout << "Good job! " << endl; // далее

case 4: cout << "Nice Pick! " << endl; // далее

case 3: cout << "Exellent! " << endl; // далее

case 2: cout << "Masterful! " << endl; // далее

case 1: cout << "Incredible!" << endl; // далее

break;

default: cout << "Too large! "; break;

}

cout << endl << endl;

cin >> number;

return 0;

}

 

While

Оператор цикла while

С помощью данного оператора реализуется цикл, который выполняется до тех пор, пока истинно условие цикла. Синтаксис данного оператора следующий:

while(<условие>)
{
<телоцикла>
}

Приведем пример реализации данного цикла, в котором выполняется суммирование элементов ряда S = 0+1+2+3... пока S

int N=20, i = 0;
long S = 0L;
while(S < N)
{
S=S+i;
i++;
}

В данном примере реализуется цикл while с условием i < N. Так как начальное значение переменной i=0, а N=20, то условие истинно и выполняется тело цикла, в котором осуществляется суммирование переменной i и увеличение ее на 1. Очевидно, что на 20 итерации значение i=20, условие станет ложным и цикл будет завершен. Продемонстрируем гибкость языка С++, изменив данный пример следующим образом:

int N=20, i = 0;

long S = 0L;

while((S=S+i++) < N)В данном случае при проверке условия сначала выполняются операторы, стоящие в скобках, где и осуществляется суммирование элементов ряда и только, затем, проверяется условие. Результат выполнения обоих вариантов программ одинаковый и S=21. Однако последняя конструкция бывает удобной при реализации опроса клавиатуры, например, с помощью функции scanf():

intnum;

while(scanf(“%d”,&num) == 1)

{

printf(“Вы ввели значение %d\n”,num);

}Данный цикл будет работать, пока пользователь вводит целочисленные значения и останавливается, если введена буква или вещественное число. Следует отметить, что цикл while можно принудительно завершить даже при истинном условии цикла. Это достигается путем использования оператора break. Перепишем предыдущий пример так, чтобы цикл завершался, если пользователь введет число 0.

intnum;

while(scanf(“%d”,&mun) == 1)

{

if(num == 0) break;

printf(“Выввелизначение %d\n”,num);

}Цикл завершается сразу после использования оператора break, т.е. в приведенном примере, при вводе с клавиатуры нуля функция printf() выполняться не будет и программа перейдет на следующий оператор после while. Того же результата можно добиться, если использовать составное условие в цикле:

intnum;

while(scanf(“%d”,&mun) == 1 &&num != 0)

{

printf(“Вы ввели значение %d\n”,num);

}

Работает эта конструкция следующим образом.

1.Сначала проверяется условие в скобках.
1.1 Если оно истинно, то выполняется тело цикла. (Оператор). И программа снова переходит к проверке условия.
Напомню,что тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else или циклом for, применяется составной оператор {...}.
1.2 Если условие ложно, то выполнение циклической конструкции заканчивается и программа выполняется дальше.

Таким образом, в качестве условия возможны такие же конструкции, что и в операторе if.

 

Двумерный массив

Многомерный массив — это массив, имеющий несколько измерений.

Каждое измерение выделяется отдельной парой квадратных скобок и характеризуется собственным диапазоном или размером (числом элементов):

тип-элемента имя-массива[описание-диапазона-1]

описание-диапазона-2]...[описание диапазона-N];

Матрица — это массив с двумя измерениями (двумерный).

Матрица фактически представляет собой двумерную таблицу, первое измерение которой считают, например, строкой, а второе — столбцом.

Запись

double mtx [10][20];

задает таблицу размером 10x20 элементов (дробных значений).

При доступе к элементу многомерного массива значения индексов перечисляют в квадратных скобках — каждый индекс в своих скобках. Например:

 

double mtx [10][20];

mtx[5][2] = 3.14;

mtx[9][19] = -0.007;

 

Инкремента и декремента.

Оператор инкремента ++ добавляет к операнду 1, а оператор декремента -- вычитает 1. Таким образом,

x = x + 1; эквивалентно x++;

и x = x – 1; эквивалентно x--;

Оба оператора, и инкремента и декремента, могут как предшествовать операнду (префикс), так и следовать за операндом (постфикс). Например,

x = x + 1;может быть записано и как

++x; // префиксная форма и как

х++; // постфиксная форма

В приведенном примере безразлично, используется ли инкремент как префикс или как постфикс. Однако если инкремент или декремент используется как часть большего выражения, возникает важное различие. Если оператор инкремента или декремента предшествует операнду, С++ выполняет операцию до получения значения операнда с целью использования его в оставшейся части выражения. Если же оператор следует за операндом, С++ сначала получит значение операнда, и лишь затем выполнит его инкремент или декремент. Рассмотрим такой пример:

x =10;

y = ++x;

В этом случае у получит значение 11. Однако, если написать эти строки иначе:

x =10;

y = x++;значение у окажется равным 10. В обоих случаях конечное значение х будет 11; разница в том, когда это случится.

Следующая программа демонстрирует использование операторов инкремента и декремента:

Листинг 3.1. Пример использования операторов инкремента и декремента

// IncrAndDecr.cpp : Defines the entry point for the console application.

// Код программы с операторами инкремента и декремента

 

#include "stdafx.h"

#include<iostream>

using namespace std;

 

int main(){

int n,m,i=3,j=3;

cout <<"At the beginning: \n" ;

cout <<"i = " << i <<"\n";

cout << "j = " << j << "\n";

cout <<"After command n=i++ :\n";

n=i++;// Теперь n=3, a i=4

cout << "n = " << n <<"\n";

cout << "i = " << i << "\n";

 

cout << " After command m=++j :\n";

m=++j;// Значение переменных m=4 и j =4

cout << "m = " << m <<"\n";

cout << "j = " << j << "\n";

 

cout << " After command n= (--i)*(i--) :\n";

n=(--i)*(i--);// Теперь n=9, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cout << " After command m=(--j)*(--j) :\n";

m=( --j)*(--j);// Теперь m=4, a j=2

cout << "m = " << m << "\n";

cout << "j = " << j << "\n";

 

cout <<" After command n= (--i) * (i++) :\n";

n=( --i)*(i++);// Теперь n=l, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cout << " After command m= (j--) * ( ++j ) :\n" ;

m= (j-- )*(++j);// Теперь m=9, a j=2

cout << "m = " << m << "\n";

cout << "j = " << j << "\n";

 

cout << " After command n= ( --i) * (++i) :\n";

n=( --i)*(++i);// Теперь n=4, a i=2

cout << "n = " << n << "\n";

cout << "i = " << i << "\n";

 

cin >> j;

return 0;

}

 

4. Константы

Тұрақтылар жариялау синтаксисі айнымалылар жариялау синтаксисіне ұқсас, айырмашылығы const сөзінен басталады: const тип тұрақты аты = мәні;

Символдық константа 2 бірлік тырнақшаның отрасына жазылады ‘a’. Жолдық тұрақты 2 қостырнақшаның арасына жазылады “a”. Тұрақтылар: 1) литералдық,

2) аталған болып бөлінеді.

Константы представляют собой ячейки памяти, в которых хранятся данные. Есть несколько видов констант. Ниже приводится краткая сводка аппаратных характеристик, которые влияют на их размеры.И так в отличие от переменных константы не изменяются. Создаваемую константу нужно инициализировать, поскольку потом ей уже нельзя присвоить новое значение. Существует в языке C++ два типа констант: литеральные и символьные.

Литеральные константы

Литеральная константа – это значение, непосредственно вводимое в самой программе.1 intcoder = 14;

Переменная coder типа int, а число 14 является литеральной константой.

Целые константы

Целая константа, состоящая из последовательности цифр, считается восьмеричной, если она начинается с 0 (цифры ноль), и десятичной в противном случае. Цифры 8 и 9 не являются восьмеричными цифрами.

Последовательность цифр, которой предшествует 0х или 0Х, воспринимается как шестнадцатеричное целое.

В шестнадцатеричные цифры входят буквы от а или А до fили F, имеющие значения от 10 до 15.

Десятичная константа, значение которой превышает наибольшее машинное целое со знаком, считается длинной (long); восьмеричная и шестнадцатеричная константа, значение которой превышает наибольшее машинное целое со знаком, считается long; в остальных случаях целые константы считаются int.

Явно заданные длинные константы

Десятичная, восьмеричная или шестнадцатеричная константа, за которой непосредственно стоит l (латинская буква «эль») или L, считается длинной константой.









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь