
** vcp1 ** 16.02.2004
ЛЕКЦИЯ 4. Введение в язык С++
4.1 О разработке языков Си и С++
Язык С++ является расширением, причем существенным, языка Си, т.е.
во всех системах с С++ можно составлять программы на Си.
Разработка языка Си тесно связана с разработкой операционной системы (ОС)
Unix, широкое внедрение которой начинается в 70-х годах. Язык В, а затем
язык С (по - русски Си) предназначались для упрощения написания ОС Unix и
трансляторов для нее. Отметим, что Unix - это первая большая ОС, которая
написана не на ассемблере. Это ОС для рабочих станций и серверов.
Первая публикация о языке Си появилась в 1978 г., а стандарт на этот язык
принят в 1988 г. Си можно рассматривать как язык среднего уровня, объединяющий
высокую эффективность языка низкого уровня - ассемблера и удобство использования
и мобильность (т.е. переносимость) языка высокого уровня типа Фортрана или Паскаля.
Это можно изобразить следующим образом:
Фортран,
Паскаль, С + +
_______________________
Си,
C++
_____________
Ассемблер
____________
Рис. 4.1 Си - язык среднего уровня
Хотя язык Си создавался как язык системного программирования, то сейчас
он считается удобным, выразительным и гибким инструментом для програм-
мирования широкого класса задач. Язык Си существенно сложнее, чем Фортран или
Паскаль, но наиболее важные для простых программ операторы этих языков похожи.
Язык С++ можно рассматривать как дальнейшее развитие языка С или
как новый язык, включающий в себя язык С. Его разработку начал Страуструп Б. в 1979г.
Он хотел сделать язык, удобный для работы групп программистов, возможно даже больших коллективов, создающих сложные программные продукты с красивыми и удобными интерфейсами. Кроме того, новый язык должен был обеспечивать
программистов средствами для защиты данных.
Можно считать, что он справился с этой задачей. Об этом говорит быстрое распространение языка без какой-либо коммерческой поддержки. Приведем данные о количестве пользователей по годам:
1979 - 1
1982 - 85
1990 - 150 000
1992 - очень много.
В 1992 г. было продано свыше 1 млн. компиляторов С++. Отметим, что в настоящее время многие компании держат в секрете число пользователей и характер их деятельности,
а поэтому оценки распространения различных языков невозможны.
Стандарт на С++ принят в 1998 г.
Можно говорить о моде на С++. Язык очень сложный и поэтому обычно
программисты на С++ оплачиваются лучше, чем «паскальщики».
Программы на С++ разрабатываются в конкретных средах.
Среда программирования включает компилятор, интегрированный с редактором текстов, файловые системы, стандартные библиотеки и многие другие инструментальные средства .
Для С++ существуют и всегда будет существовать несколько сред разработки. Сейчас распространены такие системы как Borland C++, MS C++, Watcom C++, Visual C++, Borland C++ Builder.
Последние две системы включают технологию визуального программирования, с которой мы познакомимся при изучении системы С++ Builder в последних лекциях курса «Информатика2».
В лекциях курса будут рассмотрены лишь некоторые элементы С++ и
предполагается при этом, что в процессе их изучения должны появиться навыки чтения и понимания программ на С++, т.к. составление их очень трудно для многих студентов групп Р, РС.
Язык С++ сохраняет все свойства языка Си, но его главное отличие от Си
- это возможность работы с классами ( особый сложный тип). Появление классов
резко изменило технологию программирования, которое из функционального
( иначе процедурного) стало объектно-ориентированным.
Объектно-ориентированное программирование (ООП) – это “революция”
в программировании и ему будет посвящена вторая часть курса.
Традиционное программирование на языке С+ + , в отличие от ООП, называют функциональным или процедурным, но обычно используется последний термин,
т.к. у слова «функциональный» есть много других значений.
О версиях Borland С++ .
4.2 Числа и переменные
Целое число - последовательность цифр со знаком или без знака.
Вещественное число имеет дробную часть. Например, 5. или 5.0 . Любое
вещественное число содержит либо точку, либо десятичную экспоненту e, либо
то и другое. Например, записи 1.e3, 10e2, 1e3, 0.1e4, 1000. эквивалентны.
Напомним, что в соответствии с лекцией 1, целые и вещественные числа
различаются формой хранения их в ячейке основной памяти (ОП) и теми
аппаратными командами, которые их обрабатывают. Сравните, например,
алгоритмы умножения целых и вещественных чисел.
Все операции с целыми числами выполняются точно, а с вещественными
приближенно: в мантиссе вещественных чисел при обычной точности
учитывается только 7 цифр. Если нужно больше знаков в мантиссе, что в
инженерных задачах бывает редко, переходят на двойную
точность (double), например, 3.14159265359. Все вещественные константы
по умолчанию имеют двойную точность, а для перехода к обычной точности
в конце числа добавляется суффикс f , например, 3.141593f . Это означает
переход от типа double к типу float .
Порядки вещественных чисел изменяются от -38 до 38, а для чисел
двойной точности от -308 до 308 ( при мантиссе, равной примерно 1).
Увеличение диапазона значений и количества цифр обусловлено тем,
что для вещественных чисел в ОП отводится 4 байта ( 24 бита для мантиссы
и 8 битов для порядка), а для чисел c двойной точностью - 8 байтов.
Переменная - это данное с именем.
Имеет три атрибута: имя, тип, значение.
Слово “атрибут ” означает “неотъемлемое свойство” и оно часто применяется в
программировании. Заметим, что в алгебре были только имя и значение.
Имя является комбинацией букв, цифр и специальных символов, но первым
символом должна быть английская буква.
Переменным целесообразно давать содержательные имена, например,
a8, massa, dlina2, stip1_2003. С++ различает строчные и заглавные буквы,
т.е. massa и Massa - это разные переменные. Существует традиция для записи
имен: первая буква -строчная, а слова внутри имени - с прописной. Часто для
разделения слов в сложном имени используют символ подчеркивания.
Примеры: myText, studFit, array_old.
Каждая переменная имеет значение. Оно может быть
Целым, вещественным или более сложным.
Очень важно, что тип переменной определяет тип значения, которое
она хранит, а также правила выполнения операций с этими значениями.
Тип переменных указывается с помощью специальных слов:
Int для целых,
float для вещественных,
double для вещественных с двойной точностью,
char для символьных.
Пример int m; float x, y; double u, ves, dtoch;
Это описания переменных. Каждое описание заканчивается точкой с запятой,
а запятые разделяют имена переменных одного типа.
Тип переменной, как и любого другого объекта, характеризует:
- объем выделяемой памяти,
- правила интерпретации двоичных кодов ( 0 и 1) в ней,
- набор допустимых операций.
|
| | | | | | | |
байты
Рис. 4.2 Объект – это часть ОП
Есть специальная операция sizeof для определения размера памяти,
выделяемой любому объекту в программе, например,
sizeof (1), sizeof (x), sizeof (float).
Приведем размеры в байтах некоторых операндов sizeof.
Операнд 1 1L 1. 1.f 1.L 1e12 x sin(x) float double char “st”
Результат 4 4 8 4 10 8 4 8 4 8 1 3
sizeof
Здесь полагается, что переменная x имеет описание float x; “st” –это строка, в которой
два символа. Для строки “st” получено значение 3, т.к. любая строка в С++ содержит обязательный дополнительный символ ‘\0’ – символ конца строки, т.е. нулевой символ.
Все переменные программы должны обязательно описываться,
т.е. должен быть указан тип каждой.
Описания обязательны!
Будьте внимательны.
Описания переменных могут стоять в любом месте программы, но до их
использования.
Если в скобках перед именем переменной некоторого типа указать другой тип,
например,
(int) x или (float) m,
то эта операция преобразования типа изменит тип результата, но не изменит
саму переменную. Преобразования типов указываются не всегда, т.к. многие
выполняются по умолчанию. Например, сложение 1 + 1.5 будет выполняться
по умолчанию как 1. + 1.5, т.е. с типом double, но можно также записать его как
(float) 1 + (float) 1.5 или 1.f + 1.5f
Отметим, что тип числовой константы не описывается, т.к. компилятор
определяет его по форме записи числа, см. выше.
Символьные переменные рассмотрим в лекции 10.