Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике.doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.53 Mб
Скачать

Базовые типы данных

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

Тип данных определяет:

  • внутреннее представление данных в памяти компьютера;

  • множество значений, которые могут принимать величины этого типа;

  • операции и функции, которые можно применять к величинам этого типа.

Основные (стандартные) типы данных часто называют арифметическими, по­скольку их можно использовать в арифметических операциях. Для описания ос­новных типов определены следующие ключевые слова:

int (целый);

char (символьный);

wchar_t (расширенный символьный);

bool (логический);

float (вещественный);

double (вещественный с двойной точностью).

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

Существует четыре спецификатора типа, уточняющих внутреннее представле­ние и диапазон значений стандартных типов:

short (короткий);

long (длинный);

signed (знаковый);

unsigned (беззнаковый).

Целочисленные величины

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

Целые числа (int, от английского integer)— это числа, не имеющие дробной части. Их значение может быть положительным, отрицательным или нулевым, но никогда не имеет в своем составе знаков после точки. В языке Си есть простая аксиома, которая гласит: «Используйте для подсчетов целые числа». Используйте целые числа всегда, когда есть возможность представить некое значение в виде целого числа, например, при подсчете количества повторов определенного события.

Каждый элемент целочисленных данных занимает в памяти столько же места, сколько два элемента символьных, независимо от величины самого числа (и число 2, и число 2000 требуют для хранения одинакового объема памяти). Но для того чтобы занимаемое место не превышало двух элементов памяти, величина целочисленных данных в языке Си ограничена. К целочисленным данным (собственно тип int) относятся величины, значение которых находится в промежутке между –32768 и +32767. Величины, значение которых выходит за эти пределы, требуют для хранения больше двух элементов памяти.

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

short int

короткие целые числа: положительные величины от 0 до 255

int

целые числа: величины от –32768 до +32767

long int

длинные целые числа: величины от –2147483648 до +2147483647

unsigned long

длинные целые числа без знака: положительные величины от 0 до 4294967295

По умолчанию все целочисленные типы считаются знаковыми, то есть специфи­катор signed можно опускать.

Константам, встречающимся в программе, приписывается тот или иной тип в со­ответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, 1 (long) и U, u (unsigned). Например, константа 321 будет иметь тип long и зани­мать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05lu.

Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed, и unsigned соответственно.

Символьные данные

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хра­нить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов. Однако Си проводит различия между символом «1» и числом 1. Как символ единица не может использоваться в математических операциях, поскольку она не рассматривается в этом случае как математическая величина. Как число единица участвует в вычислениях, при этом, как вы скоро увидите, для хранения символа «1» Си отводит объем памяти вполовину меньший, чем для хранения числа 1.

Расширенный символьный тип (wchar_t)

Тип wchar_t предназначен для работы с набором символов, для кодировки кото­рых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реа­лизации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L"Gates".

Логический тип (bool)

Величины логического типа могут принимать только значения true и false, яв­ляющиеся зарезервированными словами. Внутренняя форма представления зна­чения false - 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

Вещественные числа

Числа, которые могут содержать десятичную часть (вещественные), называются числами с плавающей точкой (floating-point values). Для работы с ними в языке Си используется тип данных с плавающей точкой (float). Так как числа с плавающей точкой могут быть чрезвычайно маленькими или большими, для их записи часто используют экспоненциальную форму, например, значение числа с плавающей точкой может равняться 3.4е+38. Расшифровать это можно следующим образом: «передвинуть точку вправо на 38 пунктов, добавив соответствующее количество нулей». Существуют дополнительные типы данных для работы в очень широких пределах величин:

float

величины от 3.4Е–38 до 3.4Е+38

double

величины от 1.7Е–308 до 1.7Е+308

long double

величины от 3.4Е–4932 до 1.1Е+4932

Тип данных с плавающей точкой имеет предел точности, диапазон которого зависит от компилятора. Например, число 6.12345678912345 в пределах допустимого диапазона для чисел типа float может быть записано компьютером только как 6.12345. Этот тип, как принято говорить, является типом с одинарной точностью, что означает, что точность его ограничена пятью или шестью знаками после точки. Тип double принято называть типом с двойной точностью, он имеет 15–16 знаков после точки.

Для записи данных с одинарной точностью резервируется четыре элемента памяти; двойная точность требует резервирования восьми, повышенная (long double)— десяти.

Почему надо использовать целые числа?

В обычной жизни, не связанной с программированием, как правило, никто не обращает внимания на различия между целыми и вещественными числами. Производя подсчеты с помощью калькулятора, просто нажимают соответствующие клавиши и независимо от того, есть у числа десятичная часть или нет, вводят его одинаково— на расчеты это не влияет. Так почему же для языка Си так важно это различие? Почему существует так много разных типов числовых данных? В конце концов, число— оно и есть число!

Частично причина кроется в необходимости резервирования памяти для хранения информации. Если компьютеру не хватает памяти для выполнения вашей программы, он прекращает работу, а память стоит денег. Хорошие программисты стараются экономить память. Чем меньше ее требуется для выполнения программы, тем лучше. Использование типа int вместо float и типа char вместо строк помогает в этом.

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

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

Структура программы на C++

Файлы, содержащие текст программы на С++, должны иметь расширение cpp.

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

#include <stdio.h> {    int a,b,c;    a=5; b=7;    c=a+b;    printf("Cумма = %d \n",c) }

Дадим некоторые пояснения. В языке Си любая пограмма, состоит из нескольких программных едениц и каждая из них - функция. Функцией называется ряд последовательных инструкций, говорящих компьютеру, как выполнить определенную задачу. Многие функции, которые могут вам понадобиться, уже написаны, откомпилированы и помещены в библиотеки, так что вам достаточно просто указать компилятору использовать одну из стандартных функций. Необходимость написания собственной функции возникает только в том случае, если подходящей нет в библиотеках.

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

Все программы на Си (и Си++) должны начинаться с функции, называемой main(). Она выглядит так:

main()

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

Следом за main() вводятся инструкции. Инструкции могут быть представлены в виде стандартных команд и имен функций, содержащихся в библиотеках или написанных вами самостоятельно. Прямая, или открывающая фигурная скобка { помещается перед первой инструкцией, а обратная, или закрывающая фигурная скобка } следует за последней инструкцией. Открывающая и закрывающая фигурные скобки называются ограничителями и служат для выделения части кода в единый блок. Когда вы пишете функцию, она всегда должна начинаться и заканчиваться фигурными скобками. Кроме того, отдельные блоки внутри функции также могут отмечаться при помощи своих собственных пар фигурных скобок.

Таким образом, простейшая структура программы, написанной на языке Си, такова:

main() Функция, означающая начало программы— точку входа

{ Здесь начинается функция

.....;

.....; Здесь помещаются инструкции,

которые должен выполнить компьютер

.....;

} Здесь функция заканчивается

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

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

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

При запуске программы компьютер начинает ее выполнение с первой инструкции функции main(). Ниже приведена завершенная программа на Си/Си++, которая выводит на экран монитора слово «OK»:

main()

{

puts("OK");

}

Си и Си++ являются языками свободного формата. Это означает, что для них не имеет значения, где будут помещены ограничители и начало строки. С таким же успехом можно написать программу следующим образом:

main(){puts("OK");}

и компилятор обработает ее так же, как и предыдущую. Но для того, чтобы сделать программу более читабельной, принято следовать определенным правилам:

  • помещать функцию main() на отдельной строке;

  • помещать фигурные скобки на отдельных строках;

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

Другие правила, принятые в Си, регулируют употребление прописных и строчных букв. Команды и имена функций всегда пишутся маленькими буквами, так что следует писать puts(), но не PUTS() или Puts(). Если эта функция определена вами, то вы не получите сообщения об ошибке, но исходный текст программы не будет похож на программу, написанную на языке Си. Заглавные буквы в языке Си обычно употребляются для задания имен констант и макроопределений.