Типы данных С++

1


Содержание

Введение

1. Структура программы

2. Комментарии

3. Переменные и типы данных

4. Константы

5. Перечисления

6. Преобразования типов

Выводы

Список использованной литературы

Введение

В начале 80-х годов сотрудник фирмы AT&T Bell Laboratories Бьярн Страуструп (Bjarne Siroustrup) разработал язык программирования С++. Этот язык был построен на базе языка программирования С и включал объектно-ориентированные конструкции, такие как классы, производные классы и виртуальные функции, заимствованные из языка simula67. Целью разработки С++ было «ускорить написание хороших программ и сделать этот процесс более приятным для каждого отдельно взятого программиста» (Б. Страус труп. «Язык профаммирования С++». -М., Наука, 1991).

Название С++, которое придумал Рик Маскити (Rick Mascitti) в 1983 году, отражает факт происхождения этого языка от С (вначале он назывался «С с классами»). В 1989 году Бьярн Страуструп опубликовал вместе с Маргарет Эллис «Справочное руководство но языку С++», послужившее основой для разработки проекта стандарта ANSI С++, разработанного комитетом ANSI X3J16. В начале 90-х годов к работе этого комитета подключился комитет WG21 Международной организации по стандартизации (ISO), и была начата работа по созданию единого стандарта ANSI/ISO С++. Результатом этой работы стал стандарт International Standard for Information Systems -Programming Language С++ (ISO/IEC JTC1/SC22/WG21), опубликованный в начале 1998 года. Большинство новейших компиляторов С++ сейчас в большей или меньшей мере соответствуют этому стандарту. И нет сомнения в том, что в ближайшее время все компиляторы этого языка будут приведены в соответствие стандарту.

Цель контрольной работы – ознакомиться с типом данных С++, а именно со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов.

Типы данных С++

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

    Структура программы

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

Все существующие средства программирования можно разделить на две основные категории:

■ языки программирования низкого уровня;

■ языки программирования высокого уровня.

К первой группе относят семейство языков Ассемблера (например, Turbo Assembler, Macro Assembler). Эти средства разработки программного обеспечения позволяют получить наиболее короткий и быстродействующий код (разумеется, при условии грамотного использования всей мощи, предоставляемой операционной системой). Однако следует отметить, что процесс программирования на языке низкого уровня - занятие весьма кропотливое, утомительное и занимает гораздо больше времени, чем при использовании языка высокого уровня. Кроме того, программы, написанные на Ассемблере, достаточно тяжелы для восприятия, вследствие чего вероятность возникновения ошибок в них значительно выше.

В свою очередь, этих недочетов лишены языки программирования высокого уровня, к которым относится и С++. Вместе с тем, данной группе языков присущи недостатки другого рода, например такие, как значительное увеличение размера и времени выполнения исполняемого кода. Связано это с тем, что при написании программ на языке высокого уровня результирующий машинный код генерируется из исходного текста компилятором и в исполняемом модуле может образовываться «балласт», состоящий из функций и процедур подключаемых библиотек, которые могут неэффективно использоваться самой программой. Другими словами, компилятор самостоятельно принимает решения (зачастую неоптимальные) по подключению библиотечных функций.

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

История появления языка С++ берет начало с 1972 года, когда Деннисом Ритчи и Брайаном Керниганом был разработан язык программирования С, сочетающий в себе возможности языков высокого и низкого уровня, позднее утвержденный Американским Национальным Институтом Стандартизации (ANSI).

В 1980 году благодаря стараниям Бьярна Страуструпа на свет появился прямой потомок ANSI С - язык С++, вобравший в себя положительные черты еще нескольких языков программирования. Необходимо отметить, что С++, в отличие от С, позволяет программисту разрабатывать программы (или приложения) с использованием как традиционного структурного, так и объектно-ориентированного подхода.

Программирование на С++ включает такие ключевые понятия языка, как идентификаторы, ключевые слова, функции, переменные, константы, операторы, выражения, директивы препроцессора, структуры, массивы и ряд других элементов.

Рассмотрим элементарную, ставшую классической, программу на С++, результат работы которой - вывод на экран строки Hello, World!

Первая строка приведенного на рис. 1.1 листинга (директива препроцессора #include...) подключает заголовочный файл iostream.h, содержащий объявления функций и переменных для потокового ввода/вывода. Имя подключаемого модуля указывается в косых скобках (< > - заголовочный файл находится в каталоге \INCLUDE\ конкретной среды разработки) либо в кавычках (" " - файл находится в том же каталоге, где и включающий его модуль разрабатываемой программы с расширением *.с или *.срр).

Далее следует описание единственной в примере функции main().

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

#in clude<itream.h>

Подключение заголовочного файла

int main()

Описание главной функции

{

Начало блока

cout<<"Hello,World\ n";

Вывод строки символов

return 0;

Возврат из функции

}

Конец блока

Рис. 1.1. Пример программы Hello, World

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

Тело самой функции содержит оператор консольного вывода последовательности символов cout << и оператор возврата из функции return.

В отличие от ANSI С, в С++ для организации консольного ввода/вывода применяются операции >> и <<, известные в С как правый и левый сдвиг соответственно, хотя, безусловно, допустимо использование традиционных функций языка С. Как будет показано в дальнейшем, данные операции в С++ по-прежнему выполняют сдвиги бит в переменных, однако их возможности расширены за счет перегрузки операций.

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

В С++ стандартный поток ввода связан с константой cin, а поток вывода - с константой cout (для использования этих констант подключается заголовочный файл iostream.h). Таким образом, для вывода информации в стандартный поток используется формат

cout << выражение;

где выражение может быть представлено переменной или некоторым смысловым выражением. Например:

int variable = 324;

cout << variable; // вывод целого

Для консольного ввода данных используют формат записи:

cin >> переменная;

При этом переменная служит приемником вводимого значения:

int Age;

cout << "Введите Ваш возраст: "; cin >> Age;

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

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

В случае если в приемник должна быть введена строка символов, ввод продолжается до первого символа пробела или ввода Enter:

char String[80];

cin >> String;

Так, при вводе строки "Да здравствует С+ +!" переменная String воспримет только подстроку "Да". Остальная часть строки останется в буфере до тех пор, пока в программе не встретится следующий оператор ввода.

Ниже показано, как ввод одной строки с символом пробела "12345 67890" разделяется и заполняет две совершенно разные переменные - String 1 и String2.

#indude <iostream.h>

int main()

{

char Stringl[80];

char String2[80];

cout << "Input string: ";

cin >> Stringl;

cout << Stringl << '\n';

cout << "Input string: ";

cin >> String2;

cout << '\n' << String2 << '\n'; return 0;

}

В результате работы программы получим, например:

Input string: 12345 67890

12345

Input string: 67890

Как видно из примера, строка символов вводилась лишь один раз, хотя в программе оператор ввода встречается дважды. При этом первые пять вводимых символов были помещены в переменную Stringl, а последующие символы - в переменную String2.

    Комментарии

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

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

В С++ используется две разновидности комментариев.

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

Второй вид - однострочный комментарий - следует за «двойным слешем» (//) до конца текущей строки. Этот тип комментария может быть вложенным в многострочный комментарий.

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

Например:

inc. main()

{

II примеры комментария

int а = 0; // int d;

/*int b = 15;*/

int с = 7;

/* <- начало комментария

а = с;

конец комментария -> */ return 0;

}

В приведенном примере компилятор проигнорирует объявление переменной b и d, а также присвоение переменной а значения переменной с.

    Переменные и типы данных

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

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

Одним из базовых свойств программы является идентификатор.

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

Следующим базовым понятием любого языка программирования является ключевое слово.

Ключевые слова - это зарезервированные языком идентификаторы, имеющие специальное назначение. В табл. 1.1 приводится список ключевых слов языка С++.

Таблица 1.1

Ключевые слова

asm

else

new

template

auto

enum

operator

this

break

explicit

private

throw

case

extern

protected

try

catch

float

public

typedef

char

for

register

typename

class

friend

return

union

const

goto

short

unsigned

continue

if

signed

virtual

default

inline

sizeof

void

delete

int

static

volatile

do

long

struct

while

double

mutable

switch

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

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

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

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

Таблица 1.2

Базовые типы данных для ПК на базе платформы Intel

Тип

Размер, байт

Значение

bool

1

true или false

unsigned short int

2

от 0 до 65 535

short int

2

от -32 768 до 32 767

unsigned long int

4

от 0 до 4 294 967 295

long int

4

от -2 147 483 648

до 2 147 483 647

int (16 разрядов)

2

от -32 768 до 32 767

int (32 разряда)

4

от -2 147 483 648

до 2 147 483 647

unsigned int (16 разрядов)

2

от 0 до 65 535

unsigned int (32 разряда)

4

от 0

до 4 294 967 295

char

1

от 0 до 256

float

4

от 1.2е-38 до 3.4е38

double

8

от 2.2е-308 до 1.8е308

void

2 или 4

-

Объявление переменной начинается с ключевого слова, определяющего его тип, за которым следует собственно имя переменой и (необязательно) инициализация - присвоение начального значения.

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

Имя переменной (идентификатор) не должно превышать 256 символов (разные компиляторы накладывают свои ограничения на количество распознаваемых символов в идентификаторе). При этом важно учитывать регистр букв (Abe и abc - не одно и то же)! Конечно, имя должно быть достаточно информативным, однако не следует использовать слишком длинные имена, так как это приводит к опискам.

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

Установка начального значения переменной осуществляется с помощью оператора присваивания (=).

Рассмотрим подробно основные типы переменных.

Переменная типа bool занимает всего 1 байт и используется, прежде всего, в логических операциях, так как может принимать значение 0 (false, ложь) или отличное от нуля (true, истина). В старых текстах программ вы можете встретить тип данных BOOL и переменные этого типа, принимающие значения TRUE и FALSE. Этот тип данных и указанные значения не являлись частью языка, а объявлялись в заголовочных файлах как unsigned short, с присвоением начальных значений 1 и 0 соответственно. В новой редакции С++ bool - самостоятельный, полноправный тип.

Часто в программе бывает необходимо указать, что переменная должна принимать только целые значения. Целочисленные переменные (типа int, long, short), как следует из названия, призваны хранить целые значения, и отличаются только размером допустимого значения. Целочисленные переменные могут быть знаковыми и беззнаковыми.

Знаковые переменные могут представлять как положительные, так и отрицательные числа. Для этого в их представлении один бит (самый старший) отводится под знак. В отличие от них, беззнаковые переменные принимают только положительные значения. Чтобы указать, что неременная будет беззнаковой, используется ключевое слово unsigned. По умолчанию целочисленные переменные считаются знаковыми (signed, чаще всего опускается; используется при преобразовании типов данных).

Из табл. 1.2 видно, что переменная типа int в разных случаях может занимать в памяти различное число байт.

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

Для представления чисел с плавающей запятой применяют тип данных float. Этот тип, как правило, используется для хранения не очень больших дробных чисел и занимает в памяти 4 байта: 1 бит - знак, 8 бит - экспонента, 23 бита - мантисса.

Если вещественное число может принимать очень большие значения, используют переменные двойной точности, тип double.

Переменная типа void не имеет значения и служит для согласования синтаксиса. Например, синтаксис требует, чтобы функция возвращала значение. Если не требуется использовать возвращенное значение, перед именем функции ставится тип void.

Приведем несколько примеров объявления переменных:

int а = О, А = 1;

float aGe = 17.5;

double PointX;

bool bTheLightlsOn=false;

char LETTER = 'Z';

void MyFunctionQ; //возвращаемое функцией

//значение игнорируется

    Константы

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

Символьные константы представляются отдельным символом, заключенным в одинарные кавычки (апострофы): 'е', '@', '<'.

Строковые константы - это последовательность символов, заключенная в двойные кавычки: "Это пример не самой длинной строковой константы!".

Целые константы бывают следующих форматов:

■ десятичные;

■ восьмеричные;

■ шестнадцатеричные.

Десятичные могут быть представлены как последовательность цифр, начинающаяся не с нуля, например: 123; 2384.

Восьмеричные константы - последовательность восьмеричных цифр (от 0 до 7), начинающаяся с нуля, например: 034; 047.

Шестнадцатеричный формат констант начинается с символов Ох или ОХ с последующими шестнадцатеричными цифрами (0...9, A...F), например: 0xF4; 0X5D. Буквенные символы при этом могут быть представлены в как в нижнем, так и в верхнем регистре.

Длинные целые константы, используемые в переменных типа long, определяются латинской буквой I или L сразу после константы без пробела: 36L, 012L, 0x52L.

Вещественные константы - числа с плавающей запятой могут быть записаны в десятичном формате (24.58; 13.0;.71) или в экспоненциальной форме (1е4; 5е+2; 2.2е-5, при этом в мантиссе может пропускаться целая или дробная часть:.2е4).

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

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

Рассмотрим небольшой пример:

// Объявление переменной int i;

// Инициализация переменной i

// литеральной целочисленной константой 25600

i = 25600;

// Теперь объявим типизованную

// строковую константу MyCatName

// и инициализируем ее литеральной строковой константой

const MyCatName[] = "Рудик";

Символьные константы в С++ занимают в памяти 1 байт и, следовательно, могут принимать значения от 0 до 255 (см. табл. 1.2). При этом существует ряд символов, которые не отображаются при печати, - они выполняют специальные действия: возврат каретки, табуляция и т.д., и называются символами escape-последовательности. Термин «escape-последовательность» ввела компания Epson, ставшая первой фирмой, которая для управления выводом информации на своих принтерах стала использовать неотображаемые символы. Исторически сложилось так, что управляющие последовательности начинались с кода с десятичным значением 27 (0x1В), что соответствовало символу «Escape» кодировки ASCII,

Escape-символы в программе изображаются в виде обратного слеша, за которым следует буква или символ (см. табл. 1.3).

Таблица 1.3

Символы escape-последовательности

Символ

Описание

\\

Вывод на печать обратной черты

\!

Вывод апострофа

\"

Вывод при печати кавычки

\?

Символ вопросительного знака

Подача звукового сигнала

•возврат курсора на 1 символ назад

\f

Перевод страницы

\п

Перевод строки

Возврат курсора на начало текущей строки

\t

Перевод курсора к следующей позиции табуляции

\v

Вертикальная табуляция (вниз)

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

#include <iostream.h>

int main()

{

const double pi = 3.1415;

const int Radius = 3;

double Square = 0;

Square = pi * Radius * Radius;

// Выведем вычисленное значение

// и осуществим перевод строки ('\п')

cout << Square << '\n'; return 0;

}

В начале главной функции программы объявляются две константы: pi и Radius. Значение переменной Square изменяется в ходе выполнения программы и не может быть представлено как константа. Поскольку значение радиуса задано явно и в тексте программы не предусмотрено его изменение, переменная Radius объявлена как константа.

    Перечисления

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

Перечисления имеют вид:

enum Name

{

iteml[=def],

item2[=def],

……..

itemN[ = def]

};

где

enum - ключевое слово (от enumerate - перечислять),

Name - имя списка констант,

iteml...itemN - перечень целочисленных констант,

[=def] - необязательный параметр инициализации.

Предположим, нам необходимо в программе описать работу светофора. Известно, что его цвет может принимать лишь 3 значения: красный (RED), желтый (YELLOW) и зеленый (GREEN). Для обработки полученных от светофора сигналов заведем три константы с такими же именами - RED, YELLOW и GREEN, проинициализировав их любыми неповторяющимися значениями с тем, чтобы в дальнейшем проверять, какой из этих трех цветов горит.

Например, мы могли бы записать:

const int RED = 0;

const int YELLOW = 1;

const int GREEN = 2;

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

enum COLOR {RED, YELLOW, GREEN};

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

То же перечисление можно было проинициализировать другими значениями:

enum COLOR {RED=13, YELLOW=l, GREEN};

При этом константа GREEN по-прежнему имеет значение 2.

    Преобразования типов

В С++ существует явное и неявное преобразование типов.

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

Для явного преобразования переменной одного типа в другой перед именем переменной в скобках указывается присваиваемый ей новый тин:

#include <iostream.h>

int main()

{

int Integer = 54;

float Floating = 15.854;

Integer = (int) Floating; // явное преобразование типов

cout << "New integer: ";

cout << Integer << '\n';

return 0;

}

В приведенном листинге после объявления соответствующих переменных (целочисленной Integer и вещественной Floating) производится явное преобразование типа с плавающей запятой (Floating) к целочисленному (Integer).

Пример неявного преобразования:

#include <iostream.h>

int main()

{.

int Integer = 0;

float Floating = 15.854;

Integer = Floating; // неявное преобразование типов

cout << "New integer: ";

cout << Integer << '\n';

return 0;

}

В отличие от предыдущего варианта про1раммы, в данном случае после объявления и инициализации переменных осуществляется присваивание значения переменной с плавающей Floating целочисленной переменной Integer.

Результат работы обеих программ выглядит следующим образом:

New integer: 15

То есть произошло отсечение дробной части переменной Floating.

Выводы

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

Список использованной литературы

    Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988.

    Довгаль С.И., Литвинов Б.Ю., Сбитнев А..И. Персональные ЭВМ: Турбо Паскаль V7.0, объектное программирование, локальные сети. – Киев: Информсиситема сервис, 1993.

    Епанешников А.М., Епанешникова В.А. Программирование в среде Turbo Pascal 7.0.-М.: Диалог –МИФИ,1999.

    Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0. – М.: Радио и связь, Веста,1993.

    Кандзюба С.П., Громов В.Н. Delphi 7.Базы данных и приложения. Лекции и упражнения. – К.: Издательство "ДиаСофт", 2001.

    Климова Л.М. Pascal 7.0. Практическое программирование. Решение типовых задач. –М.:КУДИУ ОБРАЗ, 2000.

    Марченко А. И., Марченко Л.А.. Программирование в среде Turbo Pascal 7.0.-К.: Век+,1999.

    Фаронов В.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.

    Глушаков С.В., Коваль А.В., Смирнов С.В. Практикум по С++- Х., Фолио, 2006 – 525 с.

    Методические указания к выполнению курсовой работы по дисциплине "Программирование" для студентов специальностей 7.091501 "Компьютерные системы и сети" и 7.091502 «Системное программирование» дневной и заочной форм обучения. /Сост.: Н.С. Семенова, С.А. Сафонова – Северодонецк: Изд-во СТИ ВНУ, 2006. - 37с.