WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 17 |
Министерство образования Российской Федерации Томский политехнический университет В.И. Рейзлин ЯЗЫК С++ И ПРОГРАММИРОВАНИЕ НА НЁМ Учебное пособие Томск 2004 3 УДК 681.3.06(075.8) ББК 32.973.я73 Р35 Рейзлин В.И.

Р35 Язык С++ и программирование на нём. Учебное пособие – Томск: Изд-во ТПУ, 2004. – 197 с.

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

Пособие подготовлено на кафедре информатики и проектирования систем Томского политехнического университета и предназначено для студентов, обучающихся по направлению 230100 "Информатика и вычислительная техника".

Печатается по постановлению Редакционно-издательского Совета Томского политехнического университета Темплан 2004 © Рейзлин В.И., 2004 © Томский политехнический университет, 2004 4 1. Введение Язык программирования C++ был разработан на основе языка С Бьярном Страуструпом.

Авторство языка С принадлежит Денису Ритчи, сотруднику AT&T Bell Laboratories (1970 г.). Сначала язык программирования С был написан для создания и поддержки операционной системы UNIX.

До того времени все программы операционной системы UNIX были написаны либо на языке ассемблера, либо на языке В, разработанном Кеном Томпсоном — создателем системы UNIX. Язык С – это язык общего назначения, и он может быть использован для написания различных программ, но его популярность была связана в основном с операционной системой UNIX. Для поддержки системы UNIX необходимо было писать программы на языке С. Язык С и UNIX настолько подходили друг к другу, что вскоре почти все коммерческие программы для среды UNIX оказались написанными на С. Язык С стал настолько популярным, что его специально приспособили и для других операционных систем, и его применение не ограничивалось только UNIX-системами.

Несмотря на такую популярность, язык С не был лишен недостатков.

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

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

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

Чтобы преодолеть эти и другие недостатки языка С, Бьярн Страуструп из AT&T Bell Laboratories в 1980 году разработал на его основе язык программирования C++. Большая часть С – это подмножество языка C++, и, таким образом, большинство С-программ являются также С++-программами. В программах на языке C++ можно использовать тексты на языке С и обращаться к библиотечным функциям языка С.

Основное отличие языка C++ от С заключается в реализации объектноориентированного подхода программирования – чрезвычайно мощного современного способа программирования.

Через несколько лет практического использования языка C++ стандартом языка фактически стала спецификация языка AT&T C++ release 2.0, разработанная под руководством Б. Страуструпа в Bell Laboratories фирмы AT&T. В настоящее время в Национальном Институте Стандартов США (NIST) существует комитет по языку C++ (X3J16). Изданное в 1990 году описание языка с комментариями принято комитетом NIST в качестве исходного материала для стандартизации C++. Последняя версия стандарта датирована 26 мая 1994 г.

В настоящее время широкое распространение получили реализации языка в системах Visual C++, Borland C++ x.x, Borland C++ Builder x и др. В настоящем учебном пособии мы будем ориентироваться на версии Borland C++ 3.1 – 5.x.

2. Элементы языка 2.1. Первые программы Напишем простейшую программу.

#include void main(){ cout<<”Hello, World!\n”;

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

Во второй строке исходного текста программы находится заголовок функции с именем main. Пустые круглые скобки говорят о том, что эта функция не имеет аргументов, а ключевое слово void означает, что функция main не возвращает никакого значения. В фигурных скобках находится блок, который часто называют телом программы.

В третьей строке стоит оператор, действие которого – вывод в поток cout (на английском звучит как see-out), который здесь ассоциируется с экраном дисплея, строки Hello, World! Символ ‘\n‘ в конце текста в кавычках сообщает компилятору, что после вывода текста на экран нужно перейти на новую строку.

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



#include void main(){ int m, n, sum; // Описания.

cout<<”Для ввода чисел задайте два числа на клавиатуре\n”;

cout<<”(через пробелы) и нажмите Enter.\n”;

cin>>m>>n; // Ввод чисел.

sum = m + n;

cout<<”При m= ”<

} При выполнении этой программы на экране монитора появится следующий диалог:

Для ввода чисел задайте два числа на клавиатуре (через пробелы) и нажмите Enter.

20 При m= 20 и n= 45 их сумма равна 65.

В этой программе за символами // стоят комментарии. В третьей строке описываются целые переменные с именами m, n и sum.

Оператор, начинающийся со слова cin сообщает компилятору, что введенные пользователем значения, равные 20 и 45, нужно поместить соответственно в переменные m и n. Объект cin (читается как see-in) – поток ввода – здесь понимается как клавиатура, а стрелки << и >> указывают направление, в котором перемещаются данные.

Перейдем теперь к описанию языка С++ и его возможностей.

2.2. Алфавит языка В алфавит языка входят Прописные латинские буквы А.. Z Строчные латинские буквы a.. z Арабские цифры 0.. Символ подчеркивания _ (рассматривается как буква).

Все эти символы используются для образования ключевых слов и имён языка. Имя есть последовательность букв и цифр, начинающаяся с буквы и не являющаяся ключевым словом. ( _ в начале имени ставить не рекомендуется).

В С++ прописные и строчные буквы различаются, поэтому имена ARG1 и arg1 являются различными.

Знаки пунктуации и специальные символы, приведенные в табл. 1.

Таблица Знаки пунктуации и специальные символы Символы Наименование Символы Наименование, запятая { открывающая скобка. точка } закрывающая скобка ; точка с запятой < меньше : двоеточие > больше знак вопроса [ открывающая скобка ‘ апостроф ] закрывающая скобка ! восклицательный # номер или решетка знак | прямая черта % процент / слэш & амперсанд \ обратный слэш ^ НЕ-логическое ~ тильда - минус * звездочка = равенство ( открывающая “ кавычки скобка ) закрывающая + плюс скобка Пробельные символы.

К этой группе относятся пробел, символы табуляции, перевода строки, возврат каретки, перевода страницы. Эти символы отделяют друг от друга лексемы языка. Любая последовательность пробельных символов рассматривается при компиляции как один пробел.

2.3. Комментарии Комментарии ограничиваются так:

// символы до конца строки.

или так:

/* символы символы...

символы */ В комментариях символы – это не только литеры из алфавита языка С++, но и любые возможные символы, включая русские буквы.

2.4. Типы данных Все типы данных можно разделить на две категории: скалярные и составные.

С к а л я р н ы е С о с т а в н ы е Арифметические указатели void массив перечисление класс (основные, или базовые) целые плавающие структура класс объединение Ключевыми словами, используемыми при объявлении основных типов данных, являются:

Для целых типов:

char, int, short, long, signed, unsigned;

Для плавающих типов:

float, double, long double;

Для классов: structure union class;

Для перечисления: enum;

Для типа void: void (пустой).

2.5. Целые типы данных Тип char, или символьный Данными типа char являются различные символы, причем значением этих символов является численное значение во внутренней кодировке ЭВМ.

Символьная константа – это символ, заключенный в апострофы, например: ‘&’, ‘4’, ‘@’, ‘а’. Символ ‘0’, например, имеет в кодировке ASCII значение 48.

Существуют две модификации этого типа: signed char и unsigned char.

Данные char занимают один байт и меняются в диапазоне:

signed char (или просто char) -128.. 127;

unsigned char 0.. 255.

Отметим, что если необходимо иметь дело с переменными, принимающими значения русских букв, то их тип должен быть unsigned char, так как коды русских букв >127 (B кодировке ASCII).

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

Управляющая последовательность – это специальные символьные комбинации, которые начинаются с \, за которым следует буква или комбинация цифр (см. табл. 2).

Последовательности ’\ddd’ и ‘\xddd’ позволяют представлять любой символ из набора ЭВМ как последовательность восьмеричных или шестнадцатеричных цифр соответственно. Например, символ возврата каретки можно задать так: ‘\r’ или ‘\015’ или ‘x00D’.

Таблица Специальные управляющие последовательности Управляющая Наименование последовательность \a Звонок \b Возврат на шаг \t Горизонтальная табуляция \n Перевод строки \v Вертикальная табуляция \r Возврат каретки \f Перевод страницы \” Кавычки \’ Апостроф \\ Обратный слэш Тип short (эквивалент short int).

Данные типа short занимают 2 байта и принимают целые значения из диапазона: -32768.. 32767.

Тип int.

Данные типа int в разных системах могут занимать либо 2 байта и принимать соответственно целые значения из диапазона 32768.. 32767, либо 4 байта, и тогда их диапазон значений будет -2147 483 648.. 2 147 483 647.





Тип unsigned short.

Данные такого типа занимают 2 байта, их диапазон: 0.. 65535.

Тип long (long int) Такие данные занимают 4 байта и изменяются в диапазоне -2 147 483 648.. 2 147 483 647.

Тип unsigned long (int) Такие данные занимают 4 байта и изменяются в диапазоне 0.. 4 298 876 555.

Отметим, что если целая константа выходит из диапазона int, то она автоматически становится константой типа long или даже unsigned long.

Так, 32768 имеет (при двухбайтном int) тип long, имеет тип unsigned long.

Задать тип константы можно и явно с помощью суффиксов ‘U’ и ‘L’:

-6L 6U 33UL.

Заметим, что в стандарте языка определено лишь, что sizeof (char)=1 и sizeof (char)<=sizeof (short)<=sizeof (int)<= sizeof (long).

Здесь sizeof (type) – операция, определяющая размер типа type в байтах.

Целая константа, которая начинается с нуля, является восьмеричной константой, а начинающаяся символами 0x – шестнадцатеричной константой, например 031 0750 01 – восьмеричные константы;

0x17 0xA9 0xFF – шестнадцатеричные константы.

2.6. Плавающие типы данных Информацию о данных плавающих типов, которые представляют в ЭВМ вещественные числа, приведем в табл. 3.

Таблица Плавающие типы Тип Длина Диапазон Десятичных цифр float 4 3.4e-38.. 3.4e38 double 8 1.7e-308.. 1.7e308 long double 10 3.4e-4932.. 1.1e4932 По умолчанию, плавающие константы имеют тип double, если они не выходят из соответствующего диапазона:

1.0,.3 -6. 2.3e-6 (означает 2.310–6), 3e-19, 1.2 – типа double.

Суффикс говорит о том, что плавающая константа будет иметь тип long double:

3, 3E8, 1.6e-19, 1.3e-200 – типа long double.

2.7. Константы-строки, или литералы Константа-строка – это последовательность символов, взятая в кавычки:

“строка“ “\“a+b=c\“ – это равенство“.

Строковый литерал представляется в памяти как массив элементов типа char.

Для удобства при компиляции в конец каждой строки автоматически добавляется нуль-символ ‘\0’, являющийся признаком конца строки.

Таким образом, в памяти литерал “три” занимает не три, а четыре байта.

2.8. Директива препроцессора define Директива препроцессора define имеет вид #define имя текст_подстановки, например, #define nmax #define km (nmax3+1) Имя, которое указано в #define, в области его видимости заменяется в тексте программы текстом подстановки. Таким образом, вместо имени nmax (в области его видимости) в тексте везде появится 1000, а вместо km – (1000*3+1).

Отметим, что есть еще одна форма директивы #define (с параметрами).

2.9. Описания Все переменные должны быть описаны до их использования.

Описание состоит из спецификатора типа и следующего за ним списка переменных, которые будут иметь указанный тип:

int i, j, k, pmax;

float radix, a, b, s_m;

double k, kr;

char ch, ch1;

char symbol;

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

char t=‘t’, BACKSLASH=‘\\’;

int i=0, j, k, s=1;

float ro, eps=1e-6;

2.10. Модификатор const Если в объявлении имени присутствует модификатор const, то объект, с которым сопоставлено данное имя, рассматривается в области существования этого имени как константа. Например:

const int i=50; // то же, что const i=50;

const double pi=3.14159;

Такие именованные константы в программе изменять нельзя. Использовать эти константы можно так же, как и обычные.

3. Выражения Выражение – это сочетание различных операндов и операций.

Например:

a+b a/b c<

3.1. Операция и выражение присваивания Операция присваивания обозначается символом ‘=‘ Простейший вид операции присвоения:

v = e Здесь v – любое выражение, которое может принимать значение, e – произвольное выражение.

Операция присвоения выполняется справа налево, т.е. сначала вычисляется значение выражения e, а затем это значение присваивается левому операнду v. Левый операнд в операции присваивания должен быть т.н. адресным выражением, которое иначе называют -value.

Примером адресного, или именующего, выражения является имя переменной.

Не является - value, например, выражение a+b.

Адресным выражением никогда не являются константы.

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

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

a = b = c = d = e + 2;

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

int i; char ch;

i=3.14; ch=777;

Здесь i получает значение 3, а значение 777 слишком велико, чтобы быть представленным как char, поэтому значение ch будет зависеть от способа, которым конкретная реализация производит преобразование из большего в меньший целый тип.

Существует так называемая комбинированная операция присваивания вида a оп =b, здесь оп – знак одной из бинарных операций:

+ – * / % >> << & | ^ && ||.

Присваивание a оп=b эквивалентно a = a оп b, за исключением того, что адресное выражение вычисляется только один раз.

Примеры:

Pages:     || 2 | 3 | 4 | 5 |   ...   | 17 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.