Float x,y; //переменные x, y – вещественного типа
Char a; //переменная a – символьного типа
Желательна инициализация переменных при их описании:
int i=1, j=0, k=2;
float x=0.25, y=-1.5;
char a=’W’;
Если при описании переменной использован модификатор const, то это означает, что значение переменной нельзя изменять в программе. Такую переменную называют именованнойконстантой. Она обязательно должна быть инициализирована:
const int i=1; //именованная целая константа i
const float x=0.25; //именованная вещественная константа x
const char a=’W’; //именованная символьная константа a
Класс памяти определяет время жизни и область видимости переменной:
auto – автоматическая переменная. Память под нее выделяется в стеке и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее описание. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни – от момента описания до конца блока. Для локальных (описанных внутри блока) переменных спецификатор auto применяется по умолчанию, поэтому задавать его явным образом смысла не имеет;
extern – внешняя переменная. Эта переменная определяется в другом месте программы (в другом файле или дальше по тексту программы). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. Если переменная в этом же описании инициализируется, то спецификатор extern игнорируется;
static – статическая переменная. Время ее жизни – постоянное. Инициализируется один раз при первом выполнении оператора, содержащего описание переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными (описаны вне любого блока, область их действия – весь файл, в котором они описаны) и локальными (описаны внутри блока). Глобальные статические переменные видны только в том модуле, в котором они описаны;
register – регистровая переменная. Память для нее выделяется в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабатываются как auto:
int a; // глобальная переменная a
void main() // заголовок головной программы
{ // начало блока головной программы
int b=1; // локальная переменная b
extern float x;// переменная x определена в другом месте
static int c=0;// локальная статическая переменная c
register char d=’W’; // регистровая переменная d
a=1; //присваивание значения глобальной переменной a
int a; // описание локальной переменной a
// с этого момента и до конца блока действует
// только локальная переменная a
a=0; // присваивание значения локальной переменной a
.........
return 0;
} // конец блока головной программы
float x=1.5;// определение и инициализация внешней переменной x
В этом примере:
глобальная переменная a определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия и областью видимости является вся программа до оператора описания одноименной локальной переменной a;
локальные переменные b и c определены внутри блока, поэтому область их видимости – весь блок от момента их описания. Память под b выделяется в стеке при входе в блок и освобождается при выходе из него. Переменная с располагается в сегменте данных и существует все время, пока работает программа.
Если при определении начальное значение переменной явным образом не задано, то компилятор присваивает глобальным и статическим переменным нулевые значения соответствующего типа. Автоматические переменные в этом случае не инициализируются.
Описание переменной может выполняться в форме объявления или определения.
Объявление описывает свойства переменной, информируя компилятор о типе переменной и классе памяти. Определение содержит, кроме того, указание компилятору о выделении памяти в соответствии с типом переменной, то есть связывает переменную с конкретной областью памяти. В Си большинство объявлений являются одновременно и определениями. В приведенном выше примере только описание
extern float x;
является объявлением, но не определением.
Переменная может быть объявлена многократно, но определена только в одном месте программы.
МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
Математические функции служат для вычисления некоторых часто встречающихся тригонометрических и элементарных функций. Они помещены в файл <math.h>, вызываемый из системной библиотеки директивой препроцессора:
#include <math.h>
Аргументы математических функций могут иметь типы double, float или int, причем все функции, кроме abs(), round(), ceil(), floor() и irand() возвращают значения типа double, а эти – типа int. Углы в тригонометрических функциях задаются в радианах:
Sin(x) sin x
Cos(x) cos x
Tan(x) tg x
Asin(x) arcsin x
Acos(x) arccos x
Atan(x) arctg x
Atan2(x,y) arctg x/y
Sinh(x) sh x
Cosh(x) ch x
Tanh(x) th x
exp(x) ex
Log(x) ln x
Log10(x) lg x
pow(x,y) xy ошибка, если x = 0 и y <= 0 или
если x < 0 и y не целое
sqrt(x)
ceil(x) наименьшее целое, большее или равное х:
ceil(5.0) = 5
ceil(5.4) = 6
ceil(5.8) = 6
floor(x) наибольшее целое, меньшее или равное x –
выделение целой части числа:
floor(5.0) = 5
floor(5.4) = 5
floor(5.8) = 5
round(x) округление аргумента:
round(5.0) = 5
round(5.4) = 5
round(5.8) = 6
fabs(x) |x| x – вещественное
abs(x) |x| x – целое
ldexp(x,n) x•2n
fmod(x,y) остаток от деления x на y
в виде вещественного числа:
fmod(7.8, 5) = 2.8
fmod(7.8, 5.0) = 2.8
fmod(7.8, 5.2) = 2.6
fmod(7.8, 5.5) = 2.3
fmod(7.0, 5.0) = 2.0
fmod(7, 5) = 2.0
fmod(7.5, 5.8) = 1.7