КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Переменные. Каждая переменная перед ее использованием в программе должна быть определена, т.е
Каждая переменная перед ее использованием в программе должна быть определена, т.е. для переменной должна быть выделена память. Размер участка памяти, выделяемого для переменной, и интерпретация содержимого зависят от типа, указанного в определении переменной. В соответствии с типами значений, допустимых в языке Си, рассмотрим символьные, целые и вещественные переменные автоматической памяти. Переменные автоматической памяти существуют в том блоке, где они определены. В наиболее распространенном случае таким блоком является текст основной (main) функции программы. Простейшая форма определения переменных: тип список_имен_переменных; где имена переменных - это выбранные программистом идентификаторы, которые в списке разделяются запятыми; тип - один из типов. Определены целочисленны е типы: char -целый длиной не менее 8 бит; short int- короткий целый (допустима аббревиатура short); int - целый; long - длинный целый. Каждый из целочисленных типов может быть определен либо как знаковый signed либо как беззнаковый unsigned (по умолчанию signed). Различие между этими двумя типами - в правилах интерпретации старшего бита внутреннего представления. Спецификатор signed требует, чтобы старший бит внутреннего представления воспринимался как знаковый; unsigned означает, что старший бит внутреннего представления входит в код представляемого числового значения, которое считается в этом случае беззнаковым. Выбор знакового или беззнакового представления определяет предельные значения, которые можно представить с помощью описанной переменной. Например, на IBM PC переменная типа unsigned int позволяет представить числа от 0 до 65535, а переменной типа signed int (или просто int) соответствуют значения в диапазоне от -32768 до +32767. Примеры определений целочисленных переменных: char symbol, cc; unsigned char code; int number, row; unsigned long long_number; Обратите внимание на необходимость символа "точка с запятой" в конце каждого определения. Стандартом языка введены следующие вещественные типы: float - вещественный одинарной точности; double - вещественный удвоенной точности; long double- вещественный максимальной точности. Значения всех вещественных типов в ЭВМ представляются с "плавающей точкой", т.е. с мантиссой и порядком, Примеры определений вещественных переменных: float х, X, ссЗ, pot_8; double a, Stop, B4; Инициализация переменных. В соответствии с синтаксисом языка переменные автоматической памяти после определения по умолчанию имеют неопределенные значения. Надеяться на то, что они равны, например, 0, нельзя. Однако переменным можно присваивать начальные значения, явно указывая их в определениях: тип имя_ переменной=начальное значение; Этот прием назван инициализацией. В отличие от присваивания, которое, осуществляется в процессе выполнения программы, инициализация выполняется при выделении для переменной участка памяти. Примеры определений с инициализацией: float pi=3.1415, cc=1.23; unsigned int. year=1997; Именованные константы. В языке Си, кроме переменных, могут быть определены константы, имеющие фиксированные названия (имена). В качестве имен констант используются произвольно выбираемые программистом идентификаторы, не совпадающие с ключевыми словами и с другими именами объектов. Традиционно принято, что для обозначений констант выбирают идентификаторы из больших букв латинского алфавита и символов подчеркивания. Такое соглашение позволяет при просмотре большого текста программы на языке Си легко отличать имена переменных от названий констант. Первая возможность определения именованных констант, это перечисляемые константы, вводимые с использованием служебного слова enum. Вторую возможность вводить именованные константы обеспечивают определения такого вида: const тип имя_константы=значение_константы; Здесь const - квалификатор типа, указывающий, что определяемый объект имеет постоянное значение, т.е. доступен только для чтения; тип - один из типов объектов; имя константы -идентификатор; значение_константы должно соответствовать ее типу. Примеры: const double Е=2.718282; const long M=99999999; const F=765; В последнем определении тип константы не указан, по умолчанию ей приписывается тип int. Третью возможность вводить именованные константы обеспечивает препроцессорная директива #define имя_константы значение константы Обратите внимание на отсутствие символа "точка с запятой" в конце директивы. Отличие определения именованной константы const double Е=2.718282; от определения препроцессорной константы с таким же значением #define EULER 2.718282 состоит внешне в том, что в определении константы Е явно задается ее тип, а при препроцессорном определении константы EULER ее тип определяется "внешним видом" значения константы. Например, следующее определение #define NEXT 'Z' вводит обозначение NEXT для символьной константы 'Z'. Это соответствует такому определению: const char NEXT = 'Z'; Однако различия между обычной именованной константой и препроцессорной константой, вводимой директивой #define, гораздо глубже и принципиальнее. До начала компиляции текст программы на языке Си обрабатывается специальным компонентом транслятора - препроцессором. Если в тексте встречается директива #define EULER 2.718282 а ниже ее в тексте используется имя константы EULER, например, в таком виде: double mix = EULER; d = alfa*EULER; то препроцессор заменит каждое обозначение EULER на ее значение и сформирует такой текст: double mix = 2.718282; d = alfa*2.718282; Далее текст от препроцессора поступает к компилятору, который уже "и не вспомнит" о существовании имени EULER, использованного в препроцессорной директиве #define. Константы, определяемые на препроцессорном уровне с помощью директивы #define, очень часто используются для задания размеров массивов, что будет продемонстрировано позже. Подстановка не выполняется в комментариях и в строковых константах. Именно с помощью набора именованных препроцессорных констант стандарт языка Си рекомендует авторам компиляторов определять предельные значения всех основных типов данных. Для этого в языке определен набор фиксированных имен, каждое из которых является именем одной из констант, определяющих то или иное предельное значение. Например: FLT_MAX - максимальное число с плавающей точкой типа float; CHAR_BIT- количество битов в байте; INT_МIN - минимальное значение для данных типа int. Чтобы использовать в программе указанные именованные препроцессорные константы, недостаточно записать их имена в программе. Предварительно в текст программы необходимо включить препроцессорную директиву такого вида: #include <имя заголовочного _файла> где в качестве имени заголовочного_файпа подставляются: limits.h - для данных целых типов; float.h - для вещественных данных. #include <limits.h> #include <float.h>
Дата добавления: 2014-12-16; Просмотров: 752; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |