Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре icon

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


Скачать 437.67 Kb.
НазваниеАвторы поставили перед собой следующую цель: дать изложение основных особенностей языка программирования C++, показать основные приемы программирования, учитывающие специфику этого языка, обратить внимание на «подводные камни», которые подстерегают начинающих программистов. В то же время авторы стре
страница1/20
Размер437.67 Kb.
ТипДокументы
  1   2   3   4   5   6   7   8   9   ...   20

5_1776824566"> Предисловие


Предлагаемое пособие подготовлено на основе лекций, которые в течение ряда лет читаются студентам 2 курса факультета прикладной математики и информатики Белгосуниверситета (специальности «Компьютерная безопасность», «Экономическая кибернетика» и «Актуарная математика»). Оно рассчитано на студентов младших курсов, школьников, слушателей различных курсов повышения квалификации. Кроме того, оно будет полезно всем, кто решил самостоятельно изучить язык программирования C++.

Авторы поставили перед собой следующую цель: дать изложение основных особенностей языка программирования C++, показать основные приемы программирования, учитывающие специфику этого языка, обратить внимание на «подводные камни», которые подстерегают начинающих программистов. В то же время авторы стремились не перегружать текст многочисленной справочной информацией, которая широко доступна в настоящее время. В пособии также не рассмотрены вопросы системного программирования, использования библиотеки MFC и создания оконных приложений – эти темы, по нашему мнению, должны быть освещены гораздо более подробно. Планируется сделать это позднее, при подготовке очередного пособия.

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

Примеры программ, приведенные в книге, проверялись в системах программирования Microsoft Visual Studio 6.0 и Microsoft Visual Studio 2005 в режиме создания консольных приложений.

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

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

^

Тема 1.Основы языка C++

1.1.Введение


Язык C с самого начала создавался как язык высокого уровня для системного программирования и предназначался, главным образом, для развития операционных систем. Поскольку C разрабатывался как встроенное системное средство, то создаваемый им код должен был достаточно просто компилироваться и иметь высокое быстродействие. Таким образом, появился язык, который отличался:

  • высокой скоростью выполнения написанных на нем программ;

  • поддержкой модульного программирования;

  • хорошей мобильностью наряду с возможностью работы «на нижнем уровне» (т.е. с компонентами аппаратной среды).

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

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

  • хорошей скоростью выполнения;

  • ясностью и читабельностью.

  • гибкостью и выразительностью.

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

При подготовке данного пособия активно используется тот факт, что C++ – не первый язык программирования, изучаемый студентами. Поэтому многие понятия, например, «выражения» или «операторы», считаются известными. Некоторые темы, как, например, «структура программы на C++» не освещаются в рамках пособия и вынесены для рассмотрения на практических занятиях.

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

  • используется шрифт Arial;

  • необязательные конструкции заключаются в квадратные скобки, выделенные курсивом;

  • значение по умолчанию подчеркивается;

  • курсивом задаются метапеременные;

  • жирным цветом выделяются зарезервированные слова;

  • запись {конструкция}…означает многократное повторение конструкции;

  • запись {конструкция1 | конструкция2} означает выбор одного из нескольких вариантов;

  • все остальные символы, записанные прямым шрифтом, представляют собой элементы языка и должны быть записаны так, как указано в описании.
^

1.2.Базовые понятия

1.2.1Идентификаторы


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

Некоторые идентификаторы зарезервированы как ключевые слова (список таких слов можно найти в любом учебнике по C++).

Для улучшения читаемости программы стоит давать идентификаторам осмысленные имена. Кроме того, в некоторых учебниках рекомендуется пользоваться т.н. венгерской нотацией, согласно которой каждый идентификатор начинается с префикса, поясняющий тип или множество значений данной величины. Так, допустимыми именами согласно такой нотации являются iMaxValue, szNewName и т.д. (здесь i – признак целочисленности, sz – нуль-терминированной строки). По мнению авторов, эти соглашения удобны для больших и сложных проектов. В маленьких учебных программах от этих требований можно отступать. Гораздо более важными являются следующие интуитивно понятные требования:

  • не следует использовать в одной программе идентификаторы со схожим начертанием символов (например, l1, I1 и Il; SO и S0);

  • не рекомендуется использовать похожие идентификаторы для обозначения разных по смыслу объектов, например, если для организации циклов используются обозначения i, i1, j, то не стоит обозначать переменную строкового типа как j1.

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

1.2.2Основные (стандартные) типы данных


Число стандартных предопределенных типов C++ невелико, причем все они (кроме void) считаются числовыми:

  • int (целый, его размер определяется компилятором, обычно – 2 или 4 байта);

  • char (символьный, как правило, 1 байт);

  • wchar_t (предназначен для хранения набора символов, для которых недостаточно 1 байта, например, для кодировки Unicode. Как правило, переменная этого типа занимает 2 байта);

  • bool (предназначен для хранения логических величин, 0 интерпретируется как false, а любое ненулевое значение – как true. При преобразовании из типа bool к другому значение true переводится в 1);

  • float (числа с плавающей точкой длиной 4 байта);

  • double (числа с плавающей точкой длиной 8 байт);

  • void (т.н. “пустой” тип, используется для определения функций, которые не возвращают значений или не имеют аргументов, обозначения абстрактных указателей и для некоторых других целей).

Кроме того, для некоторых типов можно указывать спецификаторы, которые уточняют внутреннее представление и диапазон значений типа:

  • short;

  • long;

  • long long1;

  • signed;

  • unsigned.

Иными словами, мы можем определить тип как

unsigned char a;

unsigned int T;

signed short d2; //тип по умолчанию - int

1.2.3Константы


Рассмотрим на примерах принципы записи самоопределенных констант (литералов) C++, после чего дадим необходимые пояснения.



^ Тип константы

Примеры (разделены запятыми)

Целая десятичная

8, 0, -5, 4U, 3000L

Целая восьмеричная

077, 0111

Целая шестнадцатеричная

0xFFA2, 0X00FF

Вещественная

3.5, 0.2e6, .1E10

Символьная

's', 'П', '\n', 'ss', '\0xFF', '\077'

Строковая2

"Здесь был я", "ЗАО \"МММ\"", "C:\\autoexec.bat"

Символьные константы могут содержать один или два символа. В первом случае они соответствуют типу char, во втором – типу int.

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

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

"Эта строковая константа размещена \

на нескольких строках программы"

1.2.4Переменные


Переменная – это именованная область памяти, в которой хранятся данные определенного типа. Оператор описания переменной в простейшем случае выглядит так:

[ класспамяти ] [ const ] тип

имя [ инициализатор ] {, имя [ инициализатор ] }…;

Класс памяти может быть задан с помощью слов auto, extern, static либо register. Далее это понятие будет пояснено.

Модификатор const позволяет задать именованные константы.

Инициализатор позволяет присвоить начальное значение переменной (и обязателен при описании константы). Инициализатор можно записать в двух формах:

= значение

или

( значение )

Рассмотрим примеры описания переменных:

short int a = 1;

const char CR = '\n';

char s, sf('a'), st = '1';

static unsigned int P;

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

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

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

Время жизни переменной определяет, как долго сохраняется ее значение. Значение локальных переменных теряются при выходе из блока, в котором они описаны, если только эти переменные не были описаны с классом памяти static. Напротив, время жизни глобальных переменных и переменных с классом памяти static – постоянное.

Рассмотрим теперь остальные классы памяти. Класс памяти auto означает, что память для переменной выделяется в стеке. Этот класс задается по умолчанию. Для переменных с классом памяти register память по возможности выделяется в регистрах процессора. Класс памяти extern означает, что переменная будет определена далее по тексту (в этом же или других файлах). Использование класса памяти extern – это один из примеров объявления, но не определения переменной.

Продолжим рассмотрение примеров описания переменных.

int a;

int main() {

int b;

extern int x; //объявление, но не определение!

a = 1; // обращение к глобальной переменной

float a; // а теперь она становится невидимой

a = 2.5; // обращение к локальной переменной

::a = 4; // обращение к глобальной переменной за счет

// расширения области видимости

return 0;

}

int x = 4; // а вот теперь x определена!
^

1.2.5Операторы и выражения


Операторы3 языка C++ разделяются по количеству операндов на унарные, бинарные и один тернарный (т.е. имеющий три операнда) оператор. Унарные операторы, кроме того, разделяются по расположению знаков относительно операнда на префиксные и постфиксные.

Полный список операторов можно найти в любом учебнике по C++, в рамках пособия ограничимся рассмотрением новых (по сравнению с Паскалем) операторов.

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

Оператор присваивания = изменяет значение первого операнда на значение второго операнда. Результат выполнения этого оператора – значение первого операнда. Операторы +=, -=, *= и подобные им изменяют значение первого операнда следующим образом: a += b эквивалентно a = (a+b) и т.д.

Унарные операторы ++ и – (инкремент и декремент) изменяют на единицу свой операнд. Результат выполнения этих операторов – измененное (для префиксной формы) или старое (для постфиксной формы) значение операнда. Приведем пример использования этих операций.

int c, d, t = 3;

c = (++t); // c получит значение 4, t - 4

d = (t++); // d получит значение 4, а t - 5

Оператор измерения размера имеет две формы:

sizeof выражение и sizeof(тип)

В первом случае вычисляется размер для значения выражения, во втором – размер любой переменной заданного типа. Рассмотрим примеры (предполагается, что переменная t имеет тип int, а переменная f – тип float).

t = sizeof(int); // результат для Microsoft Visual C++ : 4

t = sizeof(float); // результат: 4

t = sizeof f; // результат: 4

t = sizeof(f+0.1);

// результат: 8, т.к. константа имеет тип double

// скобки нужны для задания приоритета

Оператор «условное выражение» имеет вид

выражение1 ? выражение2 : выражение3

Его результат равен значению выражения2, если выражение1 истинно, и значению выражения3 в противном случае. Использование этого оператора позволяет изящно записать несложные сравнения, например:

s = a>0 ? a : 0;

Оператор последовательного вычисления «запятая» используются для объединения нескольких выражений в одно без объявления блока. Суть его заключается в следующем: вычисляется и теряется значение первого операнда, после чего вычисляется значение второго операнда. Пример использования этого оператора будет рассмотрен позднее.
^

1.2.6Основные инструкции языка


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

a++; c-=2;

a=b=c=1; // присваивание нескольким переменным

// одного значения

a[++i]--; // сколько времени потребовалось Вам,

// чтобы понять смысл этого?

a==b; // бессмысленно, но допустимо …

В C++ имеются две инструкции выбора: if и switch. Инструкция if относится к составным и имеет вид

if (выражение) инструкция;

[ else инструкция ];

Для организации ветвления по нескольким направлениям используется инструкция switch со следующим форматом:

switch (целочисленноевыражение) {

case константа: операторы;

[ {case константа: операторы;}… ]

[ default: оператор; ]

}

Следует обратить особое внимание на то, что выполнение инструкции switch отличается от аналогичного оператора case в Паскале. Во-первых, если одна ветвь switch состоит из нескольких инструкций, то их не нужно заключать в блок (в Паскале – нужно). Во-вторых, и это более важно, после завершения работы одной ветви в C++ начинает выполняться следующая ветвь (в Паскале, как вы помните, происходит выход из оператора). Для того, чтобы обеспечить завершение работы инструкции switch, необходимо записать специальную инструкцию break в конце ветви. Проиллюстрируем сказанное сравнением оператора case в Паскале и инструкции switch в C++:

Паскаль

C++

case n of

0: writeln('ноль');

1: writeln('один');

2: writeln('два');

3: writeln('три');

else writeln('много');

end;

switch (n) {

case 0: cout << "ноль"; break;

case 1: cout << "один"; break;

case 2: cout << "два"; break;

case 3: cout << "три"; break;

default: cout << "много";

}

Язык C++ поддерживает три инструкции циклов. Инструкция

while (выражение) инструкция;

предназначен для организации циклов с предусловием, а инструкция

do инструкция while (выражение);

для организации циклов с постусловием. В отличие от аналогичного оператора Паскаля, в инструкции do записывается условие продолжение цикла (а не условие выхода, как в операторе repeatuntil Паскаля).

Инструкция for является гораздо более мощным средством для организации циклов, чем аналогичный оператор в Паскале. Ее формат:

for (выражение1; выражение2; выражение3) оператор;

Здесь выражение1 вычисляется один раз перед началом цикла. Выражение2 представляет собой условие продолжения цикла и вычисляется перед каждой итерацией (таким образом, цикл for является циклом с предусловием). Наконец, выражение3 вычисляется после окончания каждой итерации. Внутри этих выражений может использоваться операция последовательного вычисления «запятая», как показано в следующем примере.

Пусть нам надо обменять местами первый элемент массива4 из 100 элементов с последним, второй – с предпоследним и т.д.

int M[100], t, i, j;

// ввод массива

for (i = 0, j = 99; i
t = M[i];

M[i] = M[j];

M[j] = t;

}

Наконец, упомянем инструкции break и continue, суть которых такая же, как и в Паскале, и инструкцию

return [ выражение ] ;

позволяющую выйти из функции и возвратить ее значение.
  1   2   3   4   5   6   7   8   9   ...   20

Похожие:

Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconАвторы поставили перед собой следующую цель: дать изложение основных особенностей языка программирования C++, показать основные приемы программирования, учитывающие специфику этого языка, обратить внимание на «подводные камни», которые подстерегают начинающих программистов. В то же время авторы стре
«Компьютерная безопасность», «Экономическая кибернетика» и «Актуарная математика». Оно рассчитано на студентов младших курсов, школьников,...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconВопросы к экзамену по дисциплине «Конструирование программ и языки программирования»
Опишите и дайте определения основным понятиям (алгоритм, программа, программирование, синтаксис и семантика языка, транслятор, язык...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconПеречень вопросов к экзамену по предмету
Объясните назначение офисного программирования, его основные особенности; возможности языка vba
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconРешение задач линейного программирования
Цель работы: Изучение возможностей пакета Ms Excel при решении задач линейного программирования. Приобретение навыков решения за-дач...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconПрактическая работа №8. Тема
Цель: Получить навыки создания шаблонов в табл. Редакторе ms excel, используя средства встроенного языка программирования vba
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconФонетика раздел науки о языке, изучающий звуковую сторону языка. Фонетика представляет собой определенную систему, включенную в общую систему языка
Это подуровень общей языковой системы, неразрывно связанный со всей системой, так как основные единицы языка – слова, морфемы, словосочетания,...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconЭкзаменационные вопросы «Объектно-ориентированное программирование»
Методология (парадигма) программирования: императивная, аппликативная, логическая, объектно-ориентированная. Поддерживающие языки...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре icon«Секрет 1»: с чего должен начинаться урок иностранного языка для начинающих?
Эксперимент на тему того, какие слова иностранного языка лучше всего врезаются в память
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconИзложение грамматики арабского языка
Разрешается некоммерческое распространение этой книги при условии неизменности ее содержания. Скачать бесплатные книги для изучения...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconТема : Работа с массивами и матрицами в языке программирования
В программе используется одномерный целочисленный массив a с индексами от 0 до Ниже представлен фрагмент программы, записанный на...
Авторы поставили\nперед собой\nследующую цель:\nдать изложение\nосновных особенностей\nязыка программирования\nC++, показать\nосновные приемы\nпрограммирования,\nучитывающие\nспецифику этого\nязыка, обратить\nвнимание на\n«подводные\nкамни», которые\nподстерегают\nначинающих\nпрограммистов.\nВ то же время\nавторы стре iconТема : Работа с массивами и матрицами в языке программирования
В программе используется одномерный целочисленный массив a с индексами от 0 до Ниже представлен фрагмент программы, записанный на...
Вы можете разместить ссылку на наш сайт:
Документы


При копировании материала укажите ссылку ©ignorik.ru 2015

контакты
Документы