Условный оператор.

Условная операция

Операция последовательного вычисления.

Логические операции

Тема 4. Реализация разветвляющихся алгоритмов.

Операторы языка С.

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

- условные операторы, к которым относятся оператор условия if и оператор выбора switch;

- операторы цикла (for,while,do while);

- операторы перехода (break, continue, return, goto);

- другие операторы (оператор "выражение", пустой оператор).

Операторы в программе могут объединяться в составные операторы с помощью фигурных скобок. Любой оператор в программе может быть помечен меткой, состоящей из имени и следующего за ним двоеточия.

Все операторы языка СИ, кроме составных операторов, заканчиваются точкой с запятой ";".

 

К логическим операциям относятся операция логического И (&&) и операция логического ИЛИ (||). Операнды логических операций могут быть целого типа, плавающего типа или типа указателя, при этом в каждой операции могут участвовать операнды различных типов.

Операнды логических выражений вычисляются слева направо. Логические операции не вызывают стандартных арифметических преобразований. Результатом логической операции является 0 или 1, тип результата int.

Операция логического И (&&) выдает значение 1, если оба операнда имеют нулевые значения. Если один из операндов равен 0, то результат также равен 0. Если значение первого операнда равно 0, то второй операнд не вычисляется.

Операция логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.

Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда.

В языке С имеется одна тернарная операция - условная операция, которая имеет следующий формат:

операнд-1 ? операнд-2 : операнд-3

Например:

max = (d<=b) ? b : d;

Переменной max присваивается максимальное значение переменных d и b.

Начнем с условного оператора if. Синтаксис оператора:

 

if (условие)

{тело условного оператора }

[else { операторы, выполняются при ложном условии} ]

Т.е. в скобках пишется условие, и если оно истинно (TRUE), то выполняется тело условного оператора. Так же в противовес if используют необязательную конструкцию - оператор else, который вступает, когда условие в if является ложным (FALSE).

Например:

int a = 5;

if (a > 6) { printf ("a большое число"); }

else { printf ("a маленькое число"); }

В этом примере если, в теле условного оператора if условие ложно (а оно таковым и является), вступает в бой оператор else. Вследствие чего на экране появится только одно сообщение: « a маленькое число».

Условный оператор if можно влаживать сколько душе угодно раз.

Например:

int d = 0;

if (d > 5) {

d++;

}

else {

if (d == 0){

printf ("d = %d",d);

}

else {

printf ("d != 0");

}

d--;

}

Как будет работать этот пример? И так:

сначала проверяется условие (d > 5). Т.к. оно ложно, то происходит выполнение тела оператора else.

В теле else опять проверяется условие вложенного оператора if : (d == 0)

Условие является истинным, следовательно, выполняется тело этого оператора, т.е. выполняем функцию printf(). Т.к. условный оператор if дал результат TRUE, то блок else мы просто пропускаем. Ну и в конце, выполняем декрементацию числа d, т.е. отнимаем единицу

 

Если в теле условного оператора всего лишь присутствует одна функция, то можно опустить фигурные скобки.

Например:

int r = 4;

if (r == 0)

printf ("Верно");

else

printf ("Ошибка")

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

Пример программ:

1) определить максимальное и минимальное значения из двух различных вещественных чисел

#include <iostream.h>

#include <conio.h>

int main(int argc, char* argv[])

{

float a = 2.14, b = 3.54;

if (a > b)

cout << a << "-Max "

<< b << "-Min\n" ;

else

cout << b << "-Max "

<< a << "-Min\n" ;

getch();

return 0;

}

2) известны год и номер месяца рождения человека. Определить возраст человека на март(3 месяц) 2011 года.

#include <iostream.h>

#include <conio.h>

int main(int argc, char* argv[])

{

int year = 1967, month = 8;

if (month < 3 )

cout << "Его возраст: " << (2008 - year - 1) << '\n';

else

cout << "Его возраст: " << (2008 - year) << '\n';

getch();

return 0;

}

3) определить, есть ли среди цифр заданного целого трёхзначного числа одинаковые

#include <iostream.h>

#include <conio.h>

int main(int argc, char* argv[])

{

int a=144, edinici, decjatki, sotni;

sotni = a / 100;

decjatki = (a % 100)/10;

edinici = a % 10;

if (sotni == decjatki)

cout << "Есть одинаковые цифры!";

if (sotni == edinici)

cout << "Есть одинаковые цифры!";

if (decjatki == edinici)

cout << "Есть одинаковые цифры!";

getch();

return 0;

}

4) выбрать наибольшее из трёх заданных чисел

#include <iostream.h>

#include <conio.h>

int main(int argc, char* argv[])

{

int a = 15, b = 12, c = 35;

if (a > b && a > c)

cout << "a самое большее число";

if (b > c && b > a)

cout << "b самое большее число";

if (c > a && c > b)

cout << "c самое большее число";

getch();

return 0;

}

Операторы cin() и cout() – операторы потокового ввода, вывода, они определены в заголовочным файлом<iostream.h>.

Оператор switch.

Это еще один вид оператора условия ( выбора ). Его лучше использовать, т.е. когда у нас не одно, а множество условий выбора. Вот его синтаксис:

switch( определенное значение) {

case значение1: //тело

break;

...

...

case значение N: //тело

break;

default: // тело

}

определенное значение

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