Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

9.12. Операция приведения типа (type)

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

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

Преобразование называется явным, если для его задания программист должен специально что-то написать.

Неявное преобразование типов выполняется автоматически при смешивании в одном выражении операндов разных типов.

Также язык С позволяет выполнять и явное приведение типов, используя операцию приведения типа (type), type – любой допустимый тип языка С.

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

(имя-типа) операнд

int i=5, j=2;

float x=0;

x = (float)i + 2; // x = 7

x = i / j; // x = 2

x = (float)i / j; // x = 2.5

В этом примере целая переменная i с помощью операции приведения типов приводится к плавающему типу, а затем уже участвует в вычислении выражения.

Выражению с приведением типа не может быть присвоено другое значение.

10. Операторы управления вычислительным процессом

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

Возможности управления расширяются тем, что можно составить блок из нескольких операторов и обращаться с ним как с одиночным оператором. Блок начинается с открывающей фигурной скобки { и заканчивается закрывающей скобкой }. Функция, собственно, является блоком.

Другими словами, операторы программы могут быть простыми и составными.

Простой оператор – это оператор, не содержащий другие операторы. Каждый оператор в языке С должен заканчиваться точкой с запятой (;).

Специальным случаем простого оператора является пустой оператор – одинокая точка с запятой. Этот оператор используется там, где по синтаксису языка требуется оператор, а по смыслу программы никакие действия не выполняются.

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

10.1. Операторы ветвления if и else

Операторы ветвления позволяют выполнить какой-то один фрагмент кода из нескольких, в зависимости от условия.

Оператор if осуществляет условное ветвление программы, проверяя истинность выражения. Он имеет следующий вид:

if (условное_выражение)

оператор_исполняемый_если_выражение_истинно;

Внутри оператора if может быть как простой, так и составной оператор (т.е. несколько операторов). Если несколько операторов, то надо брать их в скобки {}, если один оператор – то можно брать, можно и не брать.

if (a > b)

max = a; // простой оператор

if (a > 0 && b > 0) {

x = a - b; // составной оператор

y = a + b;

}

При необходимости в комбинации с if можно использовать ключевое слово else, позволяющее выполнить альтернативный оператор, если выражение в условии ложно.

if (условное_выражение)

оператор_исполняемый_если_выражение_истинно;

else

оператор_исполняемый_если_выражение_ложно;

if (a > b)

max = a; // простой оператор

else

max = b;

if (a > 0 && b > 0) {

x = a - b; // составной оператор

y = a + b;

}

else {

x = a * b;

y = a / b;

}

if (a > 0 && b > 0) {

x = a - b; // составной оператор

y = a + b;

}

else

y = x = a * b; // простой оператор

Операторы if и else могут быть вложенными. Совместное использование обеих форм оператора if приводит к неоднозначности, называемой «проблемой висящего else».

Например, вложенный оператор if

if(e1) if( e2) оператор1; else оператор2;

может быть интерпретирован так:

if (e1) // верно

if(e2)

оператор1;

else

оператор2;

или так:

if(e1) // неверно

if(e2) оператор1;

else

оператор2;

Если такая конструкция является двусмысленной, компилятор ставит каждое else в соответствие ближайшему предшествующему if без else. Соответствие ищется в пределах блока, в которых заключено else. Следовательно, первая интерпретация является интерпретацией, принятой в языке С. Для ликвидации таких неоднозначностей и указания явного намерения программиста можно использовать скобки {}.

Задача. Найти первое по порядку положительное число из трех чисел a, b, c.

#include <stdio.h>

#include <bios.h>

void main() {

int a, b, c, k = -1;

printf(“\nВведите три числа\n”);

scanf(“%d %d %d”, &a, &b, &c);

if (a > 0)

k = a;

else { // эти скобки можно не ставить, т.к. в else один оператор if…else

if (b > 0)

k = b;

else

k = c;

}

if (k > 0)

printf(“\nПервое положительное число = %d”, k);

else

printf(“\nПоложительных чисел нет”);

bioskey(0);

}

Обратить внимание! Отступы для демонстрации уровней вложенности операторов и где ставить скобки {}.

Нет такого как в Паскале – в С обязательно перед else должна стоять точка с запятой или скобка }.

Обратить внимание! Вынесение операторов до if и после else, если они повторяются в if и else.