Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_лекций_Ч_2.doc
Скачиваний:
26
Добавлен:
26.05.2015
Размер:
156.16 Кб
Скачать

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

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

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

Операнды логических выражений вычисляются слева направо.Логические операции не вызывают стандартных арифметических преобразований. Результатом логической операции является 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;

}

  1. известны год и номер месяца рождения человека. Определить возраст человека на март(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;

}

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

#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;

}

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

#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

case

Таких операторов выбора case может быть очень много, так как это просто различные варианты значений. Но работать будет именно тот оператор case, который будет равен нашему "определенному значению"

default

Оператор выбора default будет выполняться, если ни один из операторов выбора case не содержит нужного числа. Т.е. если ничего не совпало с "определенным значением", то будет выполняться оператор по умолчанию - default. Двоеточие в конце операторов case значение: и default: являются обязательными.

break

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

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

Например:

1) составить программу, которая в зависимости от порядкового номера дня недели (1..2) выводит на экран его название (понедельник, вторник..., воскресенье)

#include <iostream.h>

#include <conio.h>

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

{ int day;

cin >> day;

switch(day){

case 1:

cout << "Понедельник";

break;

case 2:

cout << "Вторник";

break;

case 3:

cout << "Среда";

break;

case 4:

cout << "Четверг";

break;

case 5:

cout << "Пятница";

break;

case 6:

cout << "Суббота";

break;

case 7:

cout << "Воскресенье";

break;

}

getch();

return 0;

}

2) доработать книгу служащих, чтобы по введенному инициалу выводился полный пол. (М - мужчина, Ж - женщина)

#include <iostream.h>

#include <conio.h>

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

{

char pol;

cin >> pol;

switch(pol){

case 'Ж':

cout << "Женщина";

break;

case 'M':

cout << "Мужчина";

break;

}

getch();

return 0;

}

Оператор goto.

Использование оператора безусловного перехода goto в практике программирования на языке С настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

Формат этого оператора следующий:

goto имя-метки;

...

имя-метки: оператор;

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