Преобразование типов
1.Преобразование типов при присваивании. Преобразование типов предназначено для ситуации, в которой переменные одного типа смешиваются с переменными другого типа. Когда возникает подобная ситуация в выражении присваивания, используется правило преобразования типов: значение операнда справа от операции присваивания преобразуется к типу операнда, стоящего слева. Это демонстрируется следующим примером:
int x;
char ch;
float f;
void func(void)
{
ch = x; /* 1 */
x = f; /* 2 */
f = ch; /* 3 */
f = x; /* 4 */
}
В строке 1 левые (старшие) биты целочисленной переменной x обрубаются, оставляя в ch младшие 8 битов. Если х содержит число между 256 и 0, то ch и хбудут иметь одинаковое значение. Иначе значение ch будет содержать только младший набор битов переменной х. В строке 2 х получает целую часть переменной f. В строке 3 f получает 8-битное целое число, хранящееся в ch, преобразованное к формату с плавающей точкой. В строке 4 f получает значение целочисленной переменной х, преобразованное к формату с плавающей точкой.
Когда происходит преобразование из переменной, занимающей большее количество байт в переменную с меньшим, то старшие биты будут потеряны.
Следует помнить два важных момента, которые могут повлиять на переносимость создаваемого кода:
1) Когда происходит преобразование из переменной, занимающей большее количество байт в переменную с меньшим, то старшие биты будут потеряны
2) Преобразование из int в float или из float в double и тому подобное не добавляет точности. Такого рода преобразования только изменяют формат представления значения.
2. Преобразование типов в выражениях. Когда операнды различных типов смешиваются в выражениях, то происходит преобразование к одному типу. Компилятор преобразует все операнды «вверх», к типу большего операнда. Ниже описываются правила преобразования типов.
1) Все переменные типа char и short int преобразуются к типу int. Все переменные типа float – к типу double.
2) Если один из пары операндов имеет тип long double, другой операнд также преобразуется к long double.
3) Если один из пары операндов имеет тип double, другой операнд (кроме long double) также преобразуется к типу double.
4) Если один из операндов имеет тип long, другой операнд также преобразуется к long.
5) Если один из операндов имеет тип unsigned, другой операнд также преобразуется к типу unsigned.
В результате применения этих правил преобразования каждая пара операндов будет иметь тип и результат каждой операции будет совпадать по типу с операндами. Рассмотрим преобразование типов, показанное на рисунке 3.1.
Как показано на данной схеме сначала символ ch преобразуется к целому int, а вещественная переменная с одинарной точностью f преобразуется к типу double. Затем ch/i преобразуется к типу double, поскольку f*d имеет тип double. Конечный результат имеет тип double, поскольку оба операнда типа double.
Принудительные преобразования. Имеется возможность заставить выражение принять определенный тип с помощью операции принудительных преобразований. Эта операция имеет следующие виды:
(тип) выражение
или
тип (выражение)
где тип – это один из стандартных типов данных языка С или определяемый пользователем тип. Например, чтобы выражение x/2 имело тип float (остаток сохранится), следует написать:
(float) x/2;
или
float (x/2);
Операция принудительных преобразований – это унарный операция, имеющая такой же приоритет, как и остальные унарные операции.
Хотя принудительные преобразования редко используются при программировании на языке С, бывают случаи, когда они просто необходимы. Например, необходимо использовать целое число для управления циклом и, кроме того, требуется вычислять дробную часть от деления этого числа на какое-либо другое, как в следующем примере:
#include <stdio.h>
int main(void)
{
int i;
for(i=1; i<=100; ++i)
printf(“%d / 2 есть: %f\n”, i, (float) i/2);
return 0;
}
Без принудительного преобразования (float) будет вычисляться только целая часть, а благодаря (float) получим также и дробную часть.
Тема 3. Язык программирования С/С++. Представление основных управляющих структур
Алгоритм.
Алгоритм – это система формальных правил, четко и однозначно определяющих процесс выполнения данной работы в виде конечной последовательности действий и операций.
Существуют различные способы представления алгоритмов.
- Графический
- Вербальный –описательный
- Псевдокод – частично формализованная запись алгоритма на естеств. языке.
- Алгоритмический язык программирования.
Для представления алгоритма графически по ГОСТу используются след. символы:
1. Данные входные или выходные
2. Процесс – действия над данными
3. Предопределенный процесс – действия над данными, определенные в другом алгоритме(вызов функции)
4. Подготовка – описывается подготовка данных для выполнения повторяющихся действий.
5. Решение – запись логического выражения
6. Завершение – символ начала или конца алгоритма
7. Соеденитель(узел)
8. Линия –поток данных или передача управления
9. Комментарии
1)Символы в схеме д. б. расположены равномерно.
2) Символы должны быть одного размера. Если объем текста внутри символа превышает его размеры, то следует использовать символ комментарий.
Потоки данных и потоки управления показаны линиями. Направления слева-направо и сверху-вниз явл-ся стандартныыми. Нестандартные направления обозначены стрелками.
Следует избегать пересечения линий.
Разрыв линий
В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех алгоритмических структур, называемых следованием, ветвлением и циклом.
Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов (простых или составных). Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия. Цикл задает многократное выполнение оператора (рис. 1.3). Особенностью базовых конструкций является то, что любая из них имеет только один вход и один выход, поэтому конструкции могут вкладываться друг в друга произвольным образом, например, цикл может содержать следование из двух ветвлений, каждое из которых включает вложенные циклы (рис. 1.4).Какова бы не была глубина вложения, любая конструкция имеет один вход и один выход.
Дата добавления: 2017-01-13; просмотров: 816;