Выдержка из текста работы
Вводятся и выводятся данные типа intс помощью спецификаторов%d(в десятичном виде), %o (в восьмеричном виде), %x (в 16-ричном виде), %u (беззнаковые). Например:
scanf("%d %d", &a1,&a2);
printf("a1=%d a2=%d n",a1,a2);
Вводятся и выводятся данные типа longс помощью спецификаторов%ld(в десятичном виде), %lo (в восьмеричном виде), %lx (в 16-ричном виде), %lu (беззнаковые). Например:
scanf("%ld %ld", &y1,&y2);
printf("y1=%ld y2=%ld n", y1, y2);
Данные типа char выводятся на экран (на печать) или вводятся с клавиатуры с помощью спецификаторов %d %x %о %c.
Например:
char a1=’d’,а2; сhar c1=0x45;
Printf ("%d %x %o %cn",a1,a1,a1,a1); //100 64 144 d
Рrintf ("%d %o %c n", c1,c1,c1); //69 105 E
scanf("%d %с", &a1,&a2);
рrintf("%с %d",а1,а2);
c1=getch(); putch(c1);
Вещественные данные выводятся на экран (на печать) или вводятся с клавиатуры с помощью спецификаторов:float Þ %f,%e; double Þ %lf,%le; long double Þ %Lf,%Le.
Например:
float g1=-3.14f; double g2=-3.1415E-45; long double g3=3.141592e34L;
scanf("%f %lf %Lf",&g1,&g2,&g3);
printf("g1=%f g2=%lf g3=%Lfn",g1,g2,g3);
Преобразование типов
Преобразования при вычислении выражений
При вычислении выражений производится автоматическое преобразование типов операндов, чтобы привести их к общему типу. Выполнение преобразования зависит от специфики операций и от типа операндов. Однако можно отметить, что при вычислении выражений операнды разного типа преобразуются к типу того операнда, который имеет наибольший размер (более точный).
Пример:
double sd; float ft=2.0f; char c1=40; long k=2L;
sd=ft+(c1+6)/k;
При выполнении фрагмента программы правила преобразования будут использоваться следующим образом. В выражении (c1+6)операнд c1преобразуется к типуint. Затем выражение (c1+6)/kпреобразуется к типу long., а все выражение преобразуется к типу float. Результат всего выражения будет иметь тип double.
Преобразование типов при выполнении операций присваивания
В операциях присваивания тип значения, которое присваивается, преобразуется к типу переменной, получающей это значение. Допускается преобразования целых и плавающих типов, даже если такое преобразование ведет к потере информации.
Пример: long x; char c; c=x+1;
Если х=40 (0x00000028), то с=41(0x29),
но если х=300L (0x0000012C), то с=45(0x2D), а не с=301L (0x0000012D), а т.к. старшие биты не помещаются в тип char.
Следующие преобразования типов гарантируют сохранение точности и неизменность численного значения:
сhar ® short® int ® long;
unsigned сhar ® unsigned short® unsigned int ® unsigned long;
Float ® double ® long double.
Преобразования при приведении типов
В С++ имеются операция явного преобразования (приведения) типа, которая имеет две формы: каноническую и функциональную.
Каноническая форма преобразования имеет синтаксис:
(имя_типа)операнд;
В приведенной записи операнд – это переменная, или константа, или любое выражение, заключенное в скобки, имя_типа задает тип, к которому должен быть преобразован операнд.
Функциональная форма преобразования имеет синтаксис:
имя_типа(операнд);
В приведенной записи имя_типадолжно иметь простое (несоставное) наименование.
Пример:
int i=2; float f=5.6; double d1,d2;
D1=(double)i*(double)f; // Правильно!
D2=double(i)*double(f); // Правильно!
unsigned long g=2,k1,k2;
K1=(unsigned long)f+g; // Правильно! преобразовывается f
K2=unsigned long(f)+g; // Ошибка! имя_типа составное
k3=(unsigned long)(f+g); // Правильно! преобразовывается (f+g)