Преобразование типов
Строго говоря, в выражениях лучше использовать операнды одного типа. Но язык С++ допускает преобразование типов, т. e. если операнды оператора принадлежат к разным типам, то они приводятся к некоторому общему типу. Приведение выполняется в соответствии со следующими правилами:
1) автоматически производятся лишь те преобразования, которые превращают операнды с меньшим диапазоном значений в операнды с большим диапазоном значений, поскольку это происходит без какой-либо потери информации, например:
int i_var;
float f_var,summa;
i_var=5;f_var=2.5; summa=i_var+f_var;
2) выражения, не имеющие смысла (например, число с плавающей точкой в роли индекса), не пропускаются компилятором еще на этапе трансляции:
float f; mas [f]=25; // вызывает ошибку трансляции
3) выражения, в которых могла бы теряться информация (например, при присваивании длинных целых более коротким или действительных целым), могут вызвать предупреждение (warning), но они допустимы:
int i; float f; f=3.2;i=f;
Для любого выражения можно явно указать преобразование его типа, используя унарный оператор, называемый приведением типа.
Конструкция вида (имя типа) Выражение
приводит Выражение к указанному типу по перечисленным выше правилам. Однако пользоваться этим оператором можно лишь в том случае, если программистом вполне осознаются цель и последствия такого преобразования. В этом проявляется гибкость языка С++, тогда как другие языки программирования обычно не допускают подобных действий.
Например: (int)i=2.5*3.2;
Лекция №3. ЛИНЕЙНЫЕ АЛГОРИТМЫ ПРОГРАММ
Программы бывают линейными, разветвленными, циклическими и сложными. Большинство программ являются сложными. Все остальные типы программ имеют несколько искусственный характер. Однако любую программу можно разбить на линейные, разветвленные и циклические фрагменты. Наиболее простыми являются линейные программы или линейные фрагменты сложных программ.
Линейными называются программы, в которых операторы выполняются один за другим с первого до последнего, не повторяясь и не изменяя порядка их выполнения.
Линейные программы могут содержать операторы присваивания, математические функции, арифметические операции, функции, связанные с вводом/выводом, и другие операторы, не изменяющие порядка следования операторов в программе.
Основные математические функции, используемые в языке С, представлены в табл. 3.1.Редкая программа обходится без операций ввода/вывода. Язык С++ имеет большой набор функций, осуществляющих ввод и вывод данных различных типов. Наиболее часто используются две из них: printf, scanf, которые предназначены для реализации форматного вывода и ввода данных.
Таблица 3.1. Основные математические функции
Наименование функции | Обозначение функции | Тип | Имя файла описания | |
возвращаемого значения функции | аргумента | |||
Абсолютное значение | abs(x) cabs(x) fabs(x) | int double float | int double float | <stdlib.h> <math.h> <math.h> |
Арккосинус | acos(x) | double | double | <math.h> |
Арксинус | asin(x) | double | double | <math.h> |
Арктангенс | atan(x) | double | double | <math.h> |
Косинус | cos(x) | double | double | <math.h> |
Синус | sin(x) | double | double | <math.h> |
Экспонента ех | ехр(х) | double | double | <math.h> |
Степенная функция ху | pow(x,y) | double | double | <math.h> |
Логарифм натуральный | log(x) | double | double | <math.h> |
Логарифм десятичный | logl0(x) | double | double | <math.h> |
Корень квадратный | sqrt(x) | double | double | <math.h> |
Тангенс | tan(x) | double | double | <math.h> |
Функция printf имеет следующий синтаксис:
printf ("управляющая_строка", [список_аргументов]);
Список аргументов - это последовательность констант, переменных или выражений, значения которых выводятся на экран дисплея в соответствии с форматом управляющей строки.
Управляющая строка содержит объекты трех типов: обычные символы, выводимые на экран без изменений, спецификации преобразования, каждая из которых вызывает вывод на экран значения очередного аргумента из последующего списка аргументов, и управляющие символьные константы. Каждая спецификация преобразования начинается с символа % и заканчивается символом преобразования. Между ними могут записываться:
· знак "минус", указывающий на то, что выводимый текст выравнивается по левому краю, по умолчанию выравнивание происходит по правому краю;
· строка цифр, задающая минимальный размер поля вывода;
· точка, являющаяся разделителем;
· строка цифр, задающая точность вывода;
· символ l, указывающий на то, что соответствующий аргумент имеет тип long.
Символ преобразования может быть следующим:
d - аргумент преобразуется в десятичное представление;
о - аргумент преобразуется в восьмеричное представление;
x - аргумент преобразуется в шестнадцатеричное представление;
с - значением аргумента является символ;
s - значением аргумента является строка символов;
e - значением аргумента является величина типа float или double в форме с плавающей точкой;
f - значением аргумента является величина типа float или double в форме с фиксированной точкой;
g - один из форматов f или e;
u - значением аргумента является целое беззнаковое число;
p - значением аргумента является указатель (адрес).
Таким образом, "управляющая_строка" определяет количество и тип аргументов. Наиболее часто используются следующие управляющие символы:
\a - кратковременный звуковой сигнал;
\n - перевод строки;
\t - горизонтальная табуляция;
\b - возврат курсора на один шаг назад;
\r - возврат каретки.
Функция scanf описывается так же, как и функция printf:
scanf ("управляющая_строка", список_аргументов);
Аргументы scanf() должны быть указателями на соответствующие значения, для этого перед именем переменной записывается символ &. Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов, аналогично функции printf.
Например: printf("i=%d,\nj=%d, a=%6.2f\n,i,j,a);
Если i=1234, j=127, a=86.531, то на экране увидим:
i=1234, так как после печати i стоит символ перевода строки \n
j=127, a=86.53.
Например: scanf ("%d %f %c %s", &i,&a,&ch,r);
Здесь r - строка символов, которая сама является указателем, поэтому перед ней знак амперсанта & не ставится.
В управляющей строке допустимо использование пробелов, символов табуляции и перехода на новую строку, которые игнорируются при вводе.
Если входные данные при вводе с клавиатуры отделяются разделителями, например запятыми, то и в управляющей строке спецификации преобразования должны быть отделены такими же разделителями.