Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Лекция 3. Язык C++ является одним из наиболее распространенных языков программированияСтр 1 из 5Следующая ⇒
4. Знакомство с языком C++
Язык C++ является одним из наиболее распространенных языков программирования. Он предназначен для эффективного решения широкого круга проблем – от задач системного программирования до прикладных информационных комплексов. Кроме того, на его основе построен ряд других языков. К ним, в частности, относятся Java, JavaScript, C#. Язык C++ характеризуется следующими особенностями: · включает в качестве подмножества эффективный процедурный язык C; · является объектно-ориентированным; · имеет лаконичный и гибкий синтаксис; · во многих аспектах не содержит строгого контроля данных; · обладает мощными возможностями обобщенного программирования. Рассмотрение особенностей языка C++ и изучение практики его применения приводят, по крайней мере, к двум выводам. Во-первых, язык C++ многое умеет. Во-вторых, программист, который хочет воспользоваться его самыми глубокими возможностями, должен обладать высокой квалификацией и уметь соблюдать дисциплину программирования.
4.1. Простейшие элементы языка
Синтаксис C++, как и многих других алгоритмических языков, содержит четыре вида элементов: · алфавит языка, образованный основными неделимыми знаками – символами, с помощью которых пишутся все тексты на языке; · лексема, или элементарная конструкция, – минимальная единица языка, имеющая самостоятельный смысл; · выражение – задает правило вычисления некоторого значения; · оператор – содержит завершенное описание определенного действия. Для описания сложного действия может создаваться последовательность операторов – блок, рассматриваемый как один (сложный) оператор. Операторы бывают выполняемыми (задают действия над данными или их порядок) и невыполняемыми (служат для описания данных). Каждый элемент языка характеризуется синтаксисом (правилами построения) и семантикой (смыслом и правилами использования). Объединенная единым алгоритмом совокупность описаний и операторов образует программу. Язык C++ является компилируемым. Для выполнения программы ее необходимо перевести на язык, понятный процессору – в машинные коды. Этот процесс состоит из нескольких этапов. Вначале исходная программа передается препроцессору, который выполняет содержащиеся в ее тексте директивы,формируя полный текст программы.Полученный текст поступает на вход компилятора, который выделяет лексемы и на основе грамматики языка распознает выражения и операторы, построенные из этих лексем. При этом компилятор выявляет синтаксические ошибки и в случае их отсутствия строит объектный модуль. Затем компоновщик, или редактор связей, формирует выполняемый модуль программы, подключая к объектному модулю другие объектные модули. Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки. Обычный выполняемый модуль имеет расширение ехе и может быть выполнен после загрузки в память. Алфавит языка C++ содержит: · латинские буквы (прописные и строчные) и знак подчеркивания; · арабские цифры 0 – 9; · специальные знаки: " { }, | [ ] () + - / % *. \? < = >! & # ‘; ^ ~ · пробельные символы: пробел, табуляция, перехода на новую строку. Из символов алфавита формируютсялексемы языка: · идентификаторы; · ключевые (зарезервированные) слова; · знаки операций; · константы; · разделители (скобки, точка, запятая, пробельные символы). Границы лексем определяются разделителями или знаками операций. Идентификатор – это имя программного элемента, присвоенное ему программистом. Идентификатор может состоять из латинских букв, цифр и знака подчеркивания и не должен начинаться с цифры. Прописные и строчные буквы различаются. В целях улучшения читаемости программы идентификаторы должны быть осмысленными. Существует соглашение о правилах создания имен, называемое венгерской нотацией, по которому каждое слово, составляющее идентификатор, начинается с прописной буквы, а вначале ставится префикс, соответствующий типу величины, например, iMaxLength. Другая традиция – разделять слова, составляющие имя, знаками подчеркивания: max_length. Длина идентификатора по стандарту C++ не ограничена, но некоторые компиляторы и компоновщики ее ограничивают. Идентификатор создается в момент его объявления, и его можно использовать в последующих операторах текущего блока программы. При выборе идентификатора необходимо учитывать следующее: · идентификатор должен быть уникальным и не может совпадать с ключевым словом языка; · не рекомендуется начинать идентификаторы с символа подчеркивания: они могут совпасть с именами системных переменных или функций; · на идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика. Ключевые слова – это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они изначально определены. Список ключевых слов C++ приведен в следующей таблице.
Знак операции – это один или более символов, определяющих действие над данными (операндами). По количеству участвующих в них операндов операции делятся на унарные, бинарные и тернарные. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. в C++ все знаки операций за исключением [ ], () и?:, представляют собой лексемы. Константами называются неизменяемые величины. В C++ различают целые, вещественные, символьные, строковые и логические константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по внешнему виду (если тип не указан в данном контексте). Целые константы бывают десятичными, восьмеричными (записываются с нулем впереди) и шестнадцатеричными (начинаются с 0x и содержат шестнадцатеричные цифры 0–9, A, B, C, D, E, F). Вещественные константы могут записываться в форме с фиксированной точкой (1.01; 35.;.001) и с плавающей точкой (0.2E6;.11E-3; -5E10). Символьные константы (литералы), состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип short, при этом первый символ размещается в байте с меньшим адресом. Символ записывается в единичных апострофах (‘a’, ‘5’, ‘AB’). Любой символ (обычный, непечатный, сам апостроф и т.п.) может быть также представлен своим кодом со знаком \ (‘\073’, ‘\0xF5’, ‘\’’). Существует еще ряд управляющих символов (например, \n – «перевод строки»), используемых при вводе-выводе, с которыми мы будем знакомиться по мере необходимости. Строковые константы (строки, строковые литералы), состоят из символов в кавычках ("Издательский дом \"Питер\"").Косая черта \ может использоваться для указания кода отдельного символа или самого символа ", содержащегося в строке. В конец каждой строковой константы компилятором добавляется нулевой символ \0, поэтому длина строки всегда на единицу больше количества символов в ее записи. Запись строковой константы может переноситься на следующую строку текста символом \. К логическим константам относятся значения true и false. Программа на C++ может содержать текст, не влияющий на ее работу, а только комментирующий ее. Комментарий начинается с двух символов // и занимает всю строку справа от них. Другой способ создать комментарий – поместить его между символами-скобками /* и */.
4.2. Типы данных C++
В любом алгоритмическом языке каждый элемент данных (константа, переменная, результат вычисления выражения или функции и т.д.) относится к определенному типу, что и определяет способ его хранения в памяти и методы обработки. Выше мы рассмотрели имеющиеся в C++ типы констант. Тип данных определяет: · внутреннее представление данных в памяти компьютера; · множество значений, которые могут принимать величины этого типа; · операции, которые можно применять к величинам этого типа. Исходя из этих характеристик, программист выбирает тип каждой величины, используемой в программе для представления реальных объектов. Обязательное описание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От типа величины зависят машинные команды, которые будут использоваться для обработки данных. Все типы языка C++ можно разделить на основные и составные. Определено шесть основных типов для представления целых, вещественных, символьных и логических величин. На основе этих типов можно вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.
4.2.1. Основные типы данных
Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены ключевые слова: · int (целый); · char (символьный); · wchar_t (расширенный символьный); · bool (логический); · float (вещественный); · double (вещественный с двойной точностью). Первые четыре типа называют целочисленными (целыми), последние два – типами с плавающей точкой. Существует также четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов: · short (короткий); · long (длинный); · signed (знаковый); · unsigned (беззнаковый). Размер типа int не определяется стандартом C++, а зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного – 4 байта. Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора. Спецификатор long означает, что целая величина занимает 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном – int и long int. Некоторые современные компиляторы поддерживают тип long long и соответствующие операции с 64-разрядными целыми, однако этот тип еще не включен в стандарт языка C++. Внутреннее представление величины целого типа – целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый. Спецификатор unsigned позволяет представлять только неотрицательные числа, поскольку старший разряд рассматривается как часть кода числа. Таким образом, диапазон значений типа int зависит от спецификаторов. По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать. При использовании спецификаторов с типом int слово int также можно опускать. Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает, можно явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu. Под величину символьного типа в C++ как правило отводится 1 байт. Тип char, как и другие целые типы, может быть со знаком или без него. В символах со знаком можно хранить значения в диапазоне от -128 до 127, с модификатором unsigned – от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов. Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта (например, Unicode). Размер этого типа зависит от реализации и, как правило, соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L"Gates". Величины логического типа (в C его нет) могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false – 0 (нуль), любое другое значение интерпретируется как true. Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double. Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long) Например, константа 2E+6L будет иметь тип long double, а константа 182f – тип float. В стандарте C++ диапазоны значений для основных типов не задаются. Поэтому при написании переносимых на различные платформы программ нельзя делать предположений о размерах основных типов. Для их получения можно пользоваться операцией sizeof, выдающей размер типа в байтах. Установлены следующие соотношения между размерами основных типов: sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long); sizeof (float) <= sizeof (double) <= sizeof (long double). Кроме перечисленных, к основным типам языка относится также void, множество значений которого пусто.
4.3. Структура программы
Программа на языке C++ состоит из функций, описаний и директив препроцессора. Простейшее определение функции имеет следующий формат (здесь и далее скобками [ ] отмечаются необязательные элементы): тип_возвращаемого_значения имя ([параметры]) { операторы, составляющие тело функции } Как правило, функция используется для вычисления какого-либо значения (оно называется возвращаемым), поэтому перед именем функции указывается его тип. Подробнее функции мы рассмотрим позднее, а здесь отметим лишь самые необходимые сведения: · если функция не должна возвращать значение, указывается тип void; · тело функции является блоком и, следовательно, заключается в фигурные скобки; · функции не могут быть вложенными; · каждый оператор (кроме составного) заканчивается точкой с запятой, которая считается его частью. В программе одна из функций должна называться main. Выполнение программы начинается с первого оператора этой функции. Программа может состоять из нескольких модулей (исходных файлов). В языке C++ нет встроенных средств ввода/вывода – он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках. Используется два способа: функции, унаследованные из языка C и объекты C++. Обращение к функциям ввода/выводав стиле C выглядит так: int scanf (const char * format, …) // ввод int printf (const char * format, …) // вывод Эти функции выполняют форматированный ввод/вывод произвольного количества величин в соответствии со строкой format. Она содержит символы и спецификации преобразования. Содержащиеся в строке формата обычные символы при выводе копируются в поток (на экран), при вводе – запрашиваются из потока (с клавиатуры). Спецификации преобразованияначинаются со знака %. Они при вводе и выводе заменяются конкретными величинами. Пример программы, использующей функции ввода/вывода в стиле C: #include <stdio.h> int main() { int i; printf ("Введите целое число\n"); scanf ("%d", &i); printf ("Вы ввели число %d. Спасибо!", i); return 0; } Первая строка – это директива препроцессора, по которой в текст программы вставляется («заголовочный») файл stdio.h. Этот стандартный файл содержит описание функций ввода/вывода, которые могут быть использованы в программе. В функции main имеется описание переменной целого типа с именем i. Первое обращение к функции printf выводит приглашение и переходит на новую строку экрана в соответствии с управляющим символом \n. Функция scanf заносит введенное пользователем с клавиатуры целое число в переменную i (знак & означает операцию получения адреса), а следующий оператор выводит на экран указанный в нем текст. При этом спецификация преобразования %d (соответствует целому числу) заменяется значением переменной i. Пример программы с использованием библиотеки классов C++: #include <iostream.h> int main () { int i; cout << "Введите целое число\n"; cin >> i; cout << "Вы ввели число " << i << ". Cпасибо! "; return 0; } Заголовочный файл iostream.h содержит описание стандартного набора классов для управления вводом/выводом. В нем определены объекты-потоки cin – для ввода с клавиатуры и cout – для вывода на экран, а также операции записи в поток << и чтения из потока >>. Замечание 1. В системе программирования Visual Studio.NET стандартный заголовочный файл iostream.h заменен файлом iostream (без расширения). Для использования объявленных в нем объектов необходимо также указывать пространство имен std. Таким образом, в Visual Studio.NET начало последнего примера может быть таким: #include <iostream> using namespace std; Замечание 2. Рассматриваемые нами примеры с точки зрения операционной системы Windows представляют так называемые консольные приложения. Это программы, не создающие собственных окон. Для них система формирует стандартное консольное окно, в котором для символов используется DOS-кодировка. В связи с этим при запуске консольных примеров в Windows русские буквы могут отображаться некорректно. Возможные пути решения проблемы таковы: 1. Писать не по-русски. 2. Перед выдачей строк преобразовывать их системной функцией CharToOEM (). 3. В начале программы выполнить SetConsoleOutputCP (1251), а в консольном окне один раз установить шрифт Lucida Console. В вариантах 2–3 требуется также включить в программу заголовочный файл windows.h, содержащий объявления необходимых функций.
|