Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Лекция 3. Язык C++ является одним из наиболее распространенных языков программирования





 

4. Знакомство с языком C++

 

Язык C++ является одним из наиболее распространенных языков программирования. Он предназначен для эффективного решения широкого круга проблем – от задач системного программирования до прикладных информационных комплексов. Кроме того, на его основе построен ряд других языков. К ним, в частности, относятся Java, JavaScript, C#.

Язык C++ характеризуется следующими особенностями:

· включает в качестве подмножества эффективный процедурный язык C;

· является объектно-ориентированным;

· имеет лаконичный и гибкий синтаксис;

· во многих аспектах не содержит строгого контроля данных;

· обладает мощными возможностями обобщенного программирования.

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

 

4.1. Простейшие элементы языка

 

Синтаксис C++, как и многих других алгоритмических языков, содержит четыре вида элементов:

· алфавит языка, образованный основными неделимыми знаками – символами, с помощью которых пишутся все тексты на языке;

· лексема, или элементарная конструкция, – минимальная единица языка, имеющая самостоятельный смысл;

· выражение – задает правило вычисления некоторого значения;

· оператор – содержит завершенное описание определенного действия.

Для описания сложного действия может создаваться последовательность операторов – блок, рассматриваемый как один (сложный) оператор.

Операторы бывают выполняемыми (зада­ют действия над данными или их порядок) и невыполняемыми (служат для описания дан­ных).

Каждый элемент языка характеризуется синтаксисом (правилами построения) и семантикой (смыслом и правилами использования).

Объединенная единым алгоритмом совокупность описаний и операторов образу­ет программу. Язык C++ является компилируемым. Для выполнения программы ее необходимо перевести на язык, понятный процессору – в машинные коды. Этот процесс состоит из нескольких этапов.

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

Алфавит языка C++ содержит:

· латинские буквы (прописные и строчные) и знак подчеркивания;

· арабские цифры 0 – 9;

· специальные знаки: " { }, | [ ] () + - / % *. \? < = >! & # ‘; ^ ~

· пробельные символы: пробел, табуляция, перехода на но­вую строку.

Из символов алфавита формируютсялексемы языка:

· идентификаторы;

· ключевые (зарезервированные) слова;

· знаки операций;

· константы;

· разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются разделителями или знаками операций.

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

В целях улучшения читаемости программы идентификаторы должны быть осмысленными. Су­ществует соглашение о правилах создания имен, называемое венгерской нотацией, по которому каждое слово, составляющее идентификатор, начинается с прописной буквы, а вначале ставится префикс, соответствующий типу величины, например, iMaxLength. Другая традиция – разделять слова, составляющие имя, знаками под­черкивания: max_length.

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

· идентификатор должен быть уникальным и не может совпадать с ключевым словом языка;

· не рекомендуется начинать идентификаторы с символа подчеркивания: они могут совпасть с именами системных переменных или функций;

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

Ключевые слова – это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смыс­ле, в котором они изначально определены. Список ключевых слов C++ приведен в следующей таблице.

asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default inline static void
delete int static_cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template  

Знак операции – это один или более символов, определяющих действие над данными (операндами). По количеству участвующих в них операндов операции делятся на унарные, бинарные и тернарные. Один и тот же знак может интерпретироваться по-разному в зависимости от кон­текста. в 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, содержащий объявления необходимых функций.

Date: 2015-11-13; view: 346; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию