Программа печати предельных констант.
#include <stdio.h>
#include <limits.h>
void main()
{
printf("\nCHAR_BIT=%d", CHAR_BIT);
printf("\nSCHAR_MIN=%d\t\tSCHAR_MAX=%d",
SCHAR_MIN, SCHAR_MAX);
printf("\nUCHAR_MAX=%d", UCHAR_MAX);
printf("\nINT_MIN=%d\t\tINT_MAX=%d", INT_MIN, INT_MAX);
printf("\nLONG_MIN=%ld\tLONG_MAX=%ld", LONG_MIN, LONG_MAX);
}
Результат выполнения программы:
CHAR_BIT=8
SCHAR_MIN=-128 SCHAR_MAX=127
UNCHAR_MAX=255
INT_MIN=-2147483648 INT_MAX=2147483647
LONG_MIN= -2147483648 LONG_MAX=2147483647
Для вывода вещественных значений с мантиссой и порядком в форматной строке функции printf() нужно использовать спецификацию %e. Следующая программа выводит на экран значения некоторых из предельных вещественных констант:
#include <stdio.h>
#include <float.h>
void main()
{
printf("\nFLT_EPSILON=%e", FLT_EPSILON);
printf("\nDBL_EPSILON=%e", DBL_EPSILON);
printf("\nFLT_MIN=%e\tFLT_MAX=%e", FLT_MIN, FLT_MAX);
printf("\n \t \t \tDBL_MAX=%E", DBL_MAX);
printf("\nFLT_MANT_DIG=%d", FLT_MANT_DIG);
printf("\nDBL_MANT_DIG=%d", DBL_MANT_DIG);
}
Результаты выполнения программы:
FLT_EPSILON=1.192093e-07
DBL_EPSILON=2.20446e-16
FLT_MIN=1.175494e-38 FLT_MAX=3.402823e+38
DBL_MAX=1.797693e+308
FLT_MANT_DIG=24
DBL_MANT_DIG=53
FLT_MANT_DIG и DBL_MANT_DIG – максимальные значения типов float и double, сумма каждого из которых со значением 1.0 не отличается от 1.0. Предельные константы называют «машинными нулями» относительно вещественного значения 1.0.
Применимость вещественных данных.Допустим, необходимо вычислить выражение .
#include <stdio.h>
void main()
{
float a,b,c,t1,t2,t3;
a=95.0;
b=0.02;
t1=(a+b)*(a+b);
t2=-2.0*a*b-a*a;
t3=b*b;
c=(t1+t2)/t3;
printf("\nc=%f\n", c);
}
Результат выполнения программы:
с=2.441406
Если а=100.0, то результат будет еще хуже 0.000000
Если заменить float на double, то значение выражения будет вычислено точно 1.000000
Приведенный пример и общие положения вычислительной математики заставляют существенно ограничить применение переменных типа float. Тип float можно выбирать для представления исходных данных или окончательных результатов, получаемых в программе. Однако применение данных типа float в промежуточных вычислениях (особенно в итерационных алгоритмах) следует ограничить и всегда использовать double либо long double.
6.2. Элементарные средства программирования
Деление операторов языка Си на группы. Операторы управления работой программы называют управляющими конструкциями программы. К ним относятся:
§ составные операторы;
§ операторы выбора;
§ операторы циклов;
§ операторы перехода.
К составным операторам относят собственно составные операторы и блоки. В обоих случаях это последовательность операторов, заключенная в фигурные скобки. Отличие блока от составного оператора – наличие определений в теле блока. Наиболее часто блок употребляется в качестве тела функции.
1.2.1. Условный оператор
Условный оператор имеет сокращенную форму:
if (выражение_условие) оператор;
где в качестве выражение_условие могут использоваться арифметическое выражение, отношение и логическое выражение. Оператор, включенный в условный, выполняется только в случае истинности (т.е. при ненулевом значении) выражение_условие.
Рис. 16. Синтаксическая диаграмма условного оператора.
Пример:
if (x < 0 && x > -11) x=-x;
Кроме сокращенной формы, имеется еще и полная форма условного оператора:
if (выражение_условие)
оператор_1;
Else
оператор_2;
Пример использования условного оператора.
Составить программу вычисления значения функции f(x,y) для заданных значений a, b, c и произвольного x с автоматическим выбором необходимой формулы:
где .