Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Язык си типы переменных

Типы данных в языке Си

Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.

Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных . Различают следующие виды типизации:

  • Статическая типизация — контроль типов осуществляется при компиляции.
  • Динамическая типизация — контроль типов осуществляется во время выполнения.

Язык Си поддерживает статическую типизацию, и типы всех используемых в программе данных должны быть указаны перед ее компиляцией.

Различают простые, составные и прочие типы данных.

Простые данные

Простые данные можно разделить на

  • целочисленные,
  • вещественные,
  • символьные
  • логические.

Составные (сложные) данные

  • Массив — индексированный набор элементов одного типа.
  • Строковый тип — массив, хранящий строку символов.
  • Структура — набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.

Другие типы данных

  • Указатель — хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.

Программа, написанная на языке Си, оперирует с данными различных типов. Все данные имеют имя и тип. Обращение к данным в программе осуществляется по их именам (идентификаторам).

Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a — z, A — Z, цифры 0 — 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.

Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.

Компилятор языка Си придерживается строгого соответствия прописных и строчных букв в именах идентификаторов и лексем.

ВерноНеверно
int a = 2, b;
b = a+3;
Int a=2; // правильно int
INT a=2;int a = 2, b;
b = A + 3; // идентификатор А не объявленint a = 2;
b = a + 3; // идентификатор b не объявлен

Целочисленные данные

Целочисленные данные могут быть представлены в знаковой и беззнаковой форме.

Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2 n -1, где n-количество занимаемых битов.

Знаковые целые числа представляются в диапазоне -2 n-1 …+2 n-1 -1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).

Основные типы и размеры целочисленных данных:

Количество битБеззнаковый типЗнаковый тип
8unsigned char
0…255
char
-128…127
16unsigned short
0…65535
short
-32768…32767
32unsigned intint
64unsigned long intlong int

Вещественные данные

Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме.

Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как

12345,678 = 1,2345678·10 4

Число 0,009876 в нормированной форме можно представить как

0,009876 = 9,876·10 -3

В двоичной системе счисления значащий разряд, стоящий перед разделителем целой и дробной части, может быть равен только 1. В случае если число нельзя представить в нормированной форме (например, число 0), значащий разряд перед разделителем целой и дробной части равен 0.

Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа .

В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.

  • знак — бит, определяющий знак вещественного числа (0 для положительных чисел, 1 — для отрицательных).
  • степень — определяет степень 2, на которую требуется умножить число в нормированной форме. Поскольку степень 2 для числа в нормированной форме может быть как положительной, так и отрицательной, нулевой степени 2 в представлении вещественного числа соответствует величина сдвига, которая определяется как

2 n -1,

где n — количество разрядов, отводимых для представления степени числа.

  • целое — бит, который для нормированных чисел всегда равен 1, поэтому в некоторых представлениях типов этот бит опущен и принимается равным 1.
  • мантисса — значащие разряды представления числа, стоящие после разделителя целой и дробной части в нормированной форме.
  • Различают три основных типа представления вещественных чисел в языке Си:

    ТипОбозна-
    чение в Си
    Кол-во битБиты степениМантиссаСдвиг
    простоеfloat3230…2322…0127
    двойной точностиdouble6462…5251…01023
    двойной расширен- ной точностиlong double8078…6462…016383

    Как видно из таблицы, бит целое у типов float и double отсутствует. При этом диапазон представления вещественного числа состоит из двух диапазонов, расположенных симметрично относительно нуля. Например, диапазон представления чисел типа float можно представить в виде:

    Пример : представить число -178,125 в 32-разрядной сетке (тип float ).

    Для представления числа в двоичной системе счисления преобразуем отдельно целую и дробную части:

    178,12510 = 10110010,0012=1,0110010001·2 111

    Для преобразования в нормированную форму осуществляется сдвиг на 7 разрядов влево).

    Для определения степени числа применяем сдвиг:

    0111111+00000111 = 10000110.

    Таким образом, число -178,125 представится в разрядной сетке как

    Символьный тип

    Символьный тип хранит код символа и используется для отображения символов в различных кодировках. Символьные данные задаются в кодах и по сути представляют собой целочисленные значения. Для хранения кодов символов в языке Си используется тип char .
    Подробнее о кодировке символов

    Логический тип

    Логический тип применяется в логических операциях, используется при алгоритмических проверках условий и в циклах и имеет два значения:

    В программе должно быть дано объявление всех используемых данных с указанием их имени и типа. Описание данных должно предшествовать их использованию в программе.

    Переменные

    Переменные

    П еременные используются для хранения значений (sic!). Переменная характеризуется типом и именем. Начнём с имени. В си переменная может начинаться с подчерка или буквы, но не с числа. Переменная может включать в себя символы английского алфавита, цифры и знак подчёркивания. Переменная не должна совпадать с ключевыми словами (это специальные слова, которые используются в качестве управляющих конструкций, для определения типов и т.п.)

    autodoubleintstruct
    breakelselongswitch
    registertypedefcharextern
    returnvoidcasefloat
    unsigneddefaultforsigned
    uniondoifsizeof
    volatilecontinueenumshort
    whileinline

    А также ряд других слов, специфичных для данной версии компилятора, например far, near, tiny, huge, asm, asm_ и пр.

    Например, правильные идентификаторы
    a, _, _1_, Sarkasm, a_long_variable, aLongVariable, var19, defaultX, char_type
    неверные
    1a, $value, a-long-value, short

    Си — регистрозависимый язык. Переменные с именами a и A, или end и END, или perfectDark и PerfectDarK – это различные переменные.

    Типы переменных

    Т ип переменной определяет

    • 1) Размер переменной в байтах (сколько байт памяти выделит компьютер для хранения значения)
    • 2) Представление переменной в памяти (как в двоичном виде будут расположены биты в выделенной области памяти).

    В си несколько основных типов. Разделим их на две группы — целые и числа с плавающей точкой.

    Целые

    • char — размер 1 байт. Всегда! Это нужно запомнить.
    • short — размер 2 байта
    • int — размер 4 байта
    • long — размер 4 байта
    • long long — размер 8 байт.

    Здесь следует сделать замечание. Размер переменных в си не определён явно, как размер в байтах. В стандарте только указано, что

    Указанные выше значения характерны для компилятора VC2012 на 32-разрядной машине. Так что, если ваша программа зависит от размера переменной, не поленитесь узнать её размер.

    Теперь давайте определим максимальное и минимальное число, которое может хранить переменная каждого из типов. Числа могут быть как положительными, так и отрицательными. Отрицательные числа используют один бит для хранения знака. Иногда знак необходим (например, храним счёт в банке, температуру, координату и т.д.), а иногда в нём нет необходимости (вес, размер массива, возраст человека и т.д.). Для этого в си используется модификатор типа signed и unsigned. unsigned char — все 8 бит под число, итого имеем набор чисел от 00000000 до 11111111 в двоичном виде, то есть от 0 до 255 signed char от -128 до 128. В си переменные по умолчанию со знаком. Поэтому запись char и signed char эквивалентны.

    Таб. 1 Размер целых типов в си.

    ТипРазмер, байтМинимальное значениеМаксимальное значение
    unsigned char1255
    signed char
    ( char )
    1-128127
    unsigned short265535
    signed short
    ( short )
    2-3276832767
    unsigned int
    ( unsigned )
    44294967296
    signed int
    ( int )
    4-21474836482147483647
    unsigned long44294967296
    signed long
    ( long )
    4-21474836482147483647
    unsigned long long818446744073709551615
    signed long long
    ( long long )
    8-92233720368547758089223372036854775807

    sizeof

    В си есть оператор, который позволяет получить размер переменной в байтах. sizeof переменная, или sizeof(переменная) или sizeof(тип). Это именно оператор, потому что функция не имеет возможности получить информацию о размере типов во время выполнения приложения. Напишем небольшую программу чтобы удостовериться в размерах переменных.

    (Я думаю ясно, что переменные могут иметь любое валидное имя). Эту программу можно было написать и проще

    В си один и тот же тип может иметь несколько названий
    short === short int
    long === long int
    long long === long long int
    unsigned int === unsigned

    Типы с плавающей точкой

    • float — 4 байта,
    • long float — 8 байт
    • double — 8 байт
    • long double — 8 байт.

    Здесь также приведены значения для VC2012, по стандарту размер типов float Таб. 2 Размер типов с плавающей точкой в си.

    ТипРазмер, байтКоличество значащих знаков мантиссыМинимальное значениеМаксимальное значениеfloat46-71.175494351 E – 383.402823466 E + 38double815-162.2250738585072014 E – 3081.7976931348623158 E + 308

    Переполнение переменных

    Си не следит за переполнением переменных. Это значит, что постоянно увеличивая значение, скажем, переменной типа int в конце концов мы «сбросим значение»

    Вообще, поведение при переполнении переменной определено только для типа unsigned: Беззнаковое целое сбросит значение. Для остальных типов может произойти что угодно, и если вам необходимо следить за переполнением, делайте это вручную, проверяя аргументы, либо используйте иные способы, зависящие от компилятора и архитектуры процессора.

    Постфиксное обозначение типа

    П ри работе с числами можно с помощью литер в конце числа явно указывать его тип, например

    • 11 — число типа int
    • 10u — unsigned
    • 22l или 22L — long
    • 3890ll или 3890LL — long long (а также lL или Ll)
    • 80.0f или 80.f или 80.0F — float (обязательно наличие десятичной точки в записи)
    • 3.0 — число типа double

    Экспоненциальная форма записи также по умолчанию обозначает число типа double.

    Следующий код, однако, не будет приводить к ошибкам, потому что происходит неявное преобразование типа

    Шестнадцатеричный и восьмеричный формат

    В о время работы с числами можно использовать шестнадцатеричный и восьмеричный формат представления. Числа в шестнадцатиричной системе счисления начинаются с 0x, в восьмеричной системе с нуля. Соответственно, если число начинается с нуля, то в нём не должно быть цифр выше 7:

    Экспоненциальная форма представления чисел

    Э кспоненциальной формой представления числа называют представление числа в виде M e ± p , где M — мантиса числа, p — степень десяти. При этом у мантисы должен быть один ненулевой знак перед десятичной запятой.
    Например 1.25 === 1.25e0, 123.5 === 1.235e2, 0.0002341 === 2.341e-4 и т.д.
    Представления 3.2435e7 эквивалентно 3.2435e+7
    Существеут и другое представление («инженерное»), в котором степень должна быть кратной тройке. Например 1.25 === 1.25e0, 123.5 === 123.5e0, 0.0002341 === 234.1e-6, 0.25873256 === 258.73256e-3 и т.д.

    Объявление переменных

    В си переменные объявляются всегда в начале блока (блок — участок кода ,ограниченный фигурными скобками)

    При объявлении переменной пишется её тип и имя.

    Можно объявить несколько переменных одного типа, разделив имена запятой

    Здесь объявлены переменные a и b внутри функции main, и переменная z внутри тела цикла. Следующий код вызовет ошибку компиляции

    Это связано с тем, что объявление переменной стоит после оператора присваивания. При объявлении переменных можно их сразу инициализировать.
    int i = 0;
    При этом инициализация при объявлении переменной не считается за отдельный оператор, поэтому следующий код будет работать

    Начальное значение переменной

    О чень важно запомнить, что переменные в си не инициализируются по умолчанию нулями, как во многих других языках программирования. После объявления переменной в ней хранится «мусор» — случайное значение, которое осталось в той области памяти, которая была выделена под переменную. Это связано, в первую очередь, с оптимизацией работы программы: если нет необходимости в инициализации, то незачем тратить ресурсы для записи нулей (замечание: глобальные переменные инициализируются нулями, почему так, читайте в этой статье).

    Если выполнять эту программу на VC, то во время выполнения вылетит предупреждение
    Run-Time Check Failure #3 — The variable ‘i’ is being used without being initialized.
    Если нажать «Продолжить», то программа выведет «мусор». В многих других компиляторах при выполнении программы не будет предупреждения.

    Область видимости переменной

    П еременные бывают локальными (объявленными внутри какой-нибудь функции) и глобальными. Глобальная переменная видна всем функциям, объявленным в данном файле. Локальная переменная ограничена своей областью видимости. Когда я говорю, что переменная «видна в каком-то месте», это означает, что в этом месте она определена и её можно использовать. Например, рассмотрим программу, в которой есть глобальная переменная

    Будет выведено
    foo: 100
    bar: 333
    Здесь глобальная переменная global видна всем функциям. Но аргумент функции затирает глобальную переменную, поэтому при передаче аргумента 333 выводится локальное значение 333.
    Вот другой пример

    Программа выведет 555. Также, как и в прошлом случае, локальная переменная «важнее». Переменная, объявленная в некоторой области видимости не видна вне её, например

    Этот пример не скомпилируется, потому что переменная y существует только внутри своего блока.
    Вот ещё пример, когда переменные, объявленные внутри блока перекрывают друг друга

    Программа выведет
    30
    20
    10
    Глобальных переменных необходимо избегать. Очень часто можно услышать такое. Давайте попытаемся разобраться, почему. В ваших простых проектах глобальные переменные выглядят вполне нормально. Но представьте, что у вас приложение, которое

    • 1) Разрабатывается несколькими людьми и состоит из сотен тысяч строк кода
    • 2) Работает в несколько потоков

    Во-первых, глобальная переменная, если она видна всем, может быть изменена любой частью программы. Вы изменили глобальную переменную, хотите её записать, а другая часть программы уже перезаписала в неё другое значение (на самом деле это целый класс проблем, которые возникают в многопоточной среде). Во-вторых, при больших размерах проекта не уследить, кто и когда насоздавал глобальных переменных. В приведённых выше примерах видно, как переменные могут перекрывать друг друга, то же произойдёт и в крупном проекте.

    Безусловно, есть ситуации, когда глобальные переменные упрощают программу, но такие ситуации случаются не часто и не в ваших домашних заданиях, так что НЕ СОЗДАВАЙТЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ!
    Переменные могут быть не только целочисленными и с плавающей точкой. Существует множество других типов, которые мы будем изучать в дальнейшем.

    Переменные в языке Си. Объявление переменной в Си

    Пожалуйста, приостановите работу AdBlock на этом сайте.

    Чтобы хранить в своей программе какие-либо данные, вам понадобятся переменные. Прежде всего, нужно научиться эти переменные в программе создавать. Другими словами, вспоминая нашу аналогию с коробками, чтобы в коробку что-то положить, её, эту самую коробку, хорошо бы сначала где-нибудь раздобыть.

    В книжках по программированию процесс создания переменной называют объявлением переменной . Это словосочетание хорошо бы знать, чтобы понимать профессиональную литературу и речь других программистов. Но ещё более важно понимать, что за этим словосочетанием скрывается.

    Как объявить переменную?

    Для того чтобы объявить переменную, необходимо указать её тип и записать её имя. Ну и не забыть поставить «;». Общая стуктура объявления переменной показана на следующем рисунке.

    Рис.1. Общий синтаксис объявления переменной.».

    В примере на рисунке мы создаём переменную с именем num, в которой можно будет хранить целые числа. На то, что мы собираемся использовать переменную для хранения целых чисел, указывает тип данных int.

    Ещё парочка примеров:

    Листинг 1. Объявление переменных

    Для имён переменных есть одно правило, которое надо будет запомнить.

    В качестве имени переменной может выступать любая последовательность символов латинского алфавита, цифр и знака нижнего подчеркивания «_», которая начинается с буквы.

    На самом деле, на имя переменной есть дополнительные ограничения, но мы пока в такие детали вдаваться не будем. Давайте лучше посмотрим на примеры правильных и неправильных имён.

    Правильные имена переменных

    Peremennaya, flag, f3, var4, KolichestvoBukv, fd4s, FLaG, key_number

    Неправильные имена переменных

    2num – начинается с цифры
    num flat – содержит пробел в имени
    nomer-telefona – содержит дефис

    И ещё один важный момент. В языке программирования Си регистр букв очень важен. Например, переменные с именами flag, FLAG, FlAg, fLAg — это всё различные переменные. Кроме того, есть ряд слов, которые нельзя использовать для названия переменных. Например, int, vo >ключевые слова , которые зарезервированы для нужд самого языка и нигде в другом месте не могу быть использованы.

    Кстати, за одно объявление можно создать сразу несколько переменных одного типа.

    Листинг 2. Объявление нескольких переменных

    Всё просто и логично. Сначала указывает тип переменных, а потом их имена, разделённые запятой.

    Переменная в памяти компьютера.

    Пару слов о том, как выглядит объявление переменной с точки зрения компьютера.

    Можно считать, что при объявлении мы сообщаем компьютеру, чтобы он выделил под переменную место в памяти и связал это место определенным именем. Количество места, которое будет выделено в памяти для хранения переменной, зависит от типа этой переменной. Проиллюстрируем эту мысль следующим рисунком.

    Листинг 3. Объявление двух переменных

    Рис.3. Переменные в памяти компьютера.

    На рисунке условно изображена память компьютера как набор ячеек, в каждой из которых может что-то храниться. При этом вещественная переменная занимает две ячейки, а целочисленная всего одну. Это соотношение (два к одному) условное. На самом деле, в вашем компьютере переменная вещественного типа может занимать, например, в четыре раза больше места в памяти, чем целочисленная переменная.

    Практика

    Решите предложенные задачи: Для удобства работы сразу переходите в полноэкранный режим

    Исследовательские задачи для хакеров

    1. Объявите в программе переменную с неправильным именем и попробуйте скомпилировать программу. Посмотрите, какую ошибку выдаст компилятор.
    2. Найдите список всех ключевых слов языка Си. Можно искать в стандарте языка(подсказка: «keywords»), а можно в интернете. Запоминать наизусть их не нужно, но разок посмотреть на них стоит.

    Типы данных и их вывод

    На этом уроке мы познакомимся с особенностями функции printf() и типами данных: целыми и вещественными числами, символами, массивами и строками. Это далеко не все допустимые в C типы. Есть еще указатели, структуры, объединения, перечисления, также в C есть возможность определять собственные типы данных.

    Функция printf() и форматированный вывод

    Вывод символов на экран, а точнее в стандартный поток вывода, осуществляется в языке C помощью функции printf(). Эта функция выводит на экран строку, переданную первым аргументом, предварительно заменив в ней специальные комбинации символов преобразованными в символы данными, переданными последующими аргументами. Следующие после первой строки данные могут быть строками, символами, целыми или вещественными числами, а также указателями. У каждого типа данных имеется свое обозначение — своя спецификация формата.

    На прошлом уроке мы выводили строку «Hello World» вот так:

    Однако то же самое можно было получить так:

    Здесь %s — это спецификация строкового формата, т. е. вместо %s будет подставлен следующий аргумент, данные которого должны быть строкой. Вывод целого числа может выглядеть так:

    Вместо числа 5 может стоять переменная целочисленного типа. Функция printf() может принимать произвольное число аргументов:

    При выводе данные подставляются по очередности следования: 3 на место первой спецификации, dogs на место второй и т.д. Т. е. следует строго соблюдать соответствие форматов и последующих данных.

    Под выводимые данные можно выделять больше знакомест, чем необходимо. Для этого между знаком % и буквой формата прописывается целое число, обозначающие ширину поля, например так: %10d. По умолчанию выравнивание происходит по правому краю. Для выравнивания по левому краю перед числом ставится знак минус.

    Задание

    Напишите программу, которая выводила бы на экране данные примерно так, как на картинке. При этом используйте возможность задать ширину поля, а также выравнивание по левому и правому краям.

    Целочисленные типы

    В языке C существует несколько типов целых чисел. Они различаются между собой объемом памяти, отводимым под переменную, а также возможностью присваивания положительных и отрицательных чисел. От объема памяти, т. е. от количества выделяемых байтов под переменную, зависит, каким может быть максимально возможное значение, записанное в данную переменную. Следует отметить, что в языке Си объем памяти, выделяемый под конкретный тип, может зависеть от операционной системы.

    Так, если под переменную какого-либо целочисленного типа выделяется 2 байта, что составляет 16 бит, и ей можно присваивать только положительные числа и ноль, то эти числа будут в диапазоне от 0 до 65535, т. к. 2 16 = 65536, но одна вариация забирается на нуль. Если же тип допускает отрицательные числа, то диапазон допустимых значений уже будет лежать в пределах от -32768 до +32767.

    Часто в программах используется тип int. Вот пример, где происходит объявление и определение (присваивание значений) целочисленных переменных, а также вывод их значений на экран:

    Обратите внимание, что в языке C присваивать значение можно при объявлении переменных.

    Обычно под переменную типа int, которая может принимать как положительные так и отрицательные значения, отводится 4 байта, что равно 32-м битам. Отсюда допустимый диапазон значений будет лежать в пределах от -2 147 483 648 до 2 147 483 647. Если в исходном коде на C мы объявим переменную int max, присвоим ей максимально допустимое значение, а потом будем его увеличивать, то сообщений об ошибке не будет ни на этапе компиляции, ни на этапе выполнения.

    Результат будет таким:

    Чтобы понять, почему такое происходит, представьте себе числовую ось не в виде прямой, а в виде окружности. Когда мы достигаем конца, двигаясь например по часовой стрелке, то это значит, что мы пришли в начало. Поэтому, продолжая движение по часовой стрелке, следующее число, которое мы увидим за максимально возможным, – это самое минимальное. Данную особенность языка Си следует иметь в виду при выполнении арифметических действий.

    То же самое с минимумом int. Если мы начнем из него вычитать, т. е. двигаться против часовой стрелки, то перескочим максимальную границу и будем идти в направлении уменьшения уже от нее:

    Помимо типа int в языке программирования C существуют другие (модифицированные) целочисленные типы:

    short — отводится меньше байтов, чем на int;

    long — отводится больше байтов, чем на int (не всегда, зависит от системы);

    unsigned — столько же байт как у int, но без отрицательных чисел; в результате чего знаковый разряд освобождается, и количество положительных значений увеличивается;

    При выводе длинных чисел следует дополнять спецификацию формата буквой l перед буквой формата. Например:

    Символы

    Под символьный тип данных отводится 1 байт памяти. У каждого символа есть соответствующее ему целое число по таблице символов ASCII.

    Тип char языка программирования C включает диапазон чисел от -128 до 127. Значения от 0 до 127 могут быть заданы или выведены на экран в виде соответствующих символов (на самом деле не все). Если значение переменной задается в виде символа, то символ заключается в одиночные кавычки, например, так: ‘w’. Также в языке существует тип unsigned char с диапазоном чисел от 0 до 255.

    С другой стороны, если переменная задана как int или short и ей присвоено значение в диапазоне, где оно может быть представлено символом, то значение можно вывести как символ. Соответственно целочисленной переменной можно присвоить символ.

    Если в программе вы будете использовать целые числа со значениями до 127 или 255 и хотите сэкономить память, то объявите переменную как char или unsigned char.

    Получается, что в программе символы — это числа, а числа — символы. Тогда как указать, что мы хотим видеть на экране: символ или число? Для вывода на экран символов используется спецификация формата вида %c.

    Так программа, представленная ниже,

    выдает такой результат:

    Число 63 по таблице символов ASCII соответствует знаку ‘?’. Сначала мы выводим значение переменной ch в формате символа, затем – числа. Тоже самое с переменной uch, однако ее значение было задано через символ, а не число.

    Вещественные типы данных

    В языке C существует три типа чисел с плавающей точкой: float и double (двойной точности) и long double. Также существует три формата вывода вещественных чисел, причем они не связаны с типами, а связаны с удобством представления числа. Вещественные числа могут иметь высокую точность, очень маленькое или очень большое значение. Если выполнить функции printf() с такими параметрами:

    , то на экране мы увидим следующее:

    В первом случае (%f) выводится число в обычном виде. По умолчанию точность представления числа равна шести знакам после точки.

    Во втором случае (%g) число выводится как обычно, если количество значащих нулей не больше четырех. Если количество значащих нулей четыре и больше, то число выводится в нормализованном виде (третий случай). Запись 5e-5 означает 5 * 10 -5 , что равно 0.00005. А, например, запись 4.325e+3 является экспоненциальной записью 4.325 * 10 3 , что равно 4325. Если с такой формой представления чисел вы сталкиваетесь первый раз, то почитайте дополнительные источники, например, статью в Википедии «Экспоненциальная запись».

    Четвертый формат (%e) выведет число исключительно в нормализованном виде, каким бы это вещественное число ни было.

    Если при выводе требуется округлить число до определенной точности, то перед буквой-форматом ставят точку и число-указатель точности. Например, printf(«%.2f», 0.23) выведет на экран 0.23, а не 0.230000. Когда требуется указать еще и поле, то его ширину прописывают перед точкой, например, %10.3f.

    Массивы

    Переменные, содержащие массивы, в языке программирования C объявляются, например, так:

    Если при указании количества элементов используется константа, она должна быть определена до своего использования следующим образом (чаще константы определяют вне функций):

    На самом деле #define является командой препроцессора, используемой не только для определения констант. Когда препроцессор обрабатывает исходный файл программы, он подставляет во все места, где была упомянута константа, ее значение.

    Индексация массивов в языке программирования C начинается с нуля.

    Присваивание значений элементам массивов можно произвести сразу или в процессе выполнения программы. Например:

    Когда переменная-массив объявляется и сразу определяется (как в случае vowels), то размер массива можно не указывать, т. к. он вычисляется по количеству элементов, переданных в фигурных скобках.

    Строки

    В языке программирования С нет отдельного строкового типа данных, хотя формат вывода строки есть (%s). Строки в C – это массивы символов, последний элемент которых является первым (с номером 0) символом в таблице ASCII. В этом месте таблицы стоит «ничто», имеющее символьное обозначение ‘’.

    С другой стороны, строки — это необычные массивы в том смысле, что работа с ними в языке программирования C несколько отличается от работы с числовыми массивами. В этом мы убедимся позже.

    Выше мы объявили и определили массив vowels. Если бы мы его определили вот так:

    то он был бы строкой. Во втором случае сами двойные кавычки «говорят» что это строка, и символ окончания строки ‘’ записывается в память автоматом.

    Массивы символов можно выводить на экран, просто указав имя переменной, а вот с массивами чисел такой номер не пройдет:

    Функция sizeof()

    Функция sizeof() языка C принимает в качестве аргумента константу, тип данных или переменную и возвращает количество байт, которые отведено под этот объект в памяти.

    При выводе на экран значения, возвращаемого sizeof() используется формат %lu (длинное целое без знака). Примеры:

    Задание

    Напишите программу, выводящую информацию о количестве байтов, отводимых в памяти под типы данных, которые были изучены на данном уроке. При работе с массивами символов, определяемыми как строковые литералы (в двойных кавычках), обратите внимание, что размер массива больше на единицу, чем количество видимых символов.

    Читать еще:  Единица си крутизны фронта импульса
    Ссылка на основную публикацию
    Adblock
    detector