Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций -=Вычислительная техника и прог...docx
Скачиваний:
11
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

3.6.12. Преобразование типов

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

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

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

Правила преобразования арифметических типов представляют собой следующую последовательность:

Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:

— char расширяется нулём или знаком в зависимости от умолчания для char ;

— unsigned char расширяется нулём;

— signed char расширяется знаком;

— short, unsigned short и enum при преобразовании не изменяются;

— затем любые два оператора становятся либо int, либо float, double или long double;

— если один из операндов имеет тип float, то другой преобразуется к float.

Примечание:

1. Если один из операндов имеет тип long double, то другой преобразуется к long double.

2. Если один из операторов имеет тип double, то другой преобразуется к double.

3. Если один из операторов имеет тип float, то другой преобразуется к float.

4. Если один из операндов имеет тип unsigned long, то другой преобразуется к unsigned long.

5. Если один из операндов имеет тип long, то другой преобразуется к типу long.

6. Если один из операндов имеет тип unsigned, то другой преобразуется к unsigned.

7. Иначе оба операнда должны иметь тип int.

3.7. Лекция 10. Операторы

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор.

Примеры:

/* Оператор выражение: */

i++ ;

a = sin(b + c * 5) ;

func(x, y) ;

/* Пустой оператор: */

;

/* Составной оператор: */

if (x < y) { x = a + b ; y = (b – a) / 2 ; }

Пустой оператор состоит только из точек с запятой (;).

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

3.7.1. Операторы ветвления

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

Формат записи (квадратные скобки показывают, что этих ветвей может и не быть):

If (выражение) [оператор_1]; [ else оператор_2 ; ]

Вначале вычисляется выражение, а затем, если выражение равно ‘true’ — выполняется оператор_1, если же выражение равно ‘false’ — оператор_2.

Один из операторов может отсутствовать, обычно отсутствует второй оператор.

Обозначение оператора в алгоритмах. Блок-схема алгоритма части программы, соответствующей оператору if, может быть представлена как в полном виде, так и в сокращенном виде, когда второй оператор отсутствует, как показано на рис. 3.8.

Рисунок 3.8 — Блок-схемы алгоритма оператора if: а) полная запись; б) сокращенная запись (отсутствует ветвь 'false’), в) сокращенная запись (отсутствует ветвь ‘true’)

Примеры:

if (a<0) b=1; //1

if (a<b && (a>d || a==0)) //2

b++ ;

else

{

b*=a;

a=0;

}

if (a++) b++ ; //3

if (a– –) ; b– – ; //4

В примере:

— //1 показан сокращенный оператор if с пропущенной ветвью 'false’,

— //2 — полный оператор if, в котором в ветви 'false’ записан составной оператор в фигурных скобках;

— //3 — сокращенный оператор if с пропущенной ветвью 'false’, в котором выражение в круглых скобках включает в себя также и постфиксный оператор ++; порядок действий здесь следующий: вначале вычисляется выражение (a), а затем проводится операция инкремента (++); если выражение (а) истинно, то выполняется оператор b++ (в итоге, после выполнения оператора if, производится увеличение значения переменной а на 1, в не зависимости от того, истинно ли выражение в круглых скобках);

— //4 — сокращенный оператор if с пропущенной ветвью 'true’ , в выражении которого (в круглых скобках) также записана постфиксная операция (– –).

Если какая либо переменная используется только внутри условного оператора, то рекомендуется объявлять её внутри скобок:

if (int t=fun(z)) a –=t ; else a+=t ;