Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

основы программирования на С++

.pdf
Скачиваний:
62
Добавлен:
27.05.2015
Размер:
407.41 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

ОСНОВЫ

ПРОГРАММИРОВАНИЯ НА C++

Учебно-методическое пособие для вузов

Составитель Ю.А. Крыжановская

Издательско-полиграфический центр Воронежского государственного университета

2008

Утверждено научно-методическим советом факультета ПММ 15 июня 2007 г., протокол № 10

Учебно-методическое пособие подготовлено на кафедре технической кибернетики и автоматического регулирования факультета прикладной математики, информатики и механики Воронежского государственного университета.

Рекомендуется для студентов 5 курса д/о факультета прикладной математики, информатики и механики.

Для специальности 010200 – Прикладная математика и информатика

2

Содержание

Введение ………………………………………………….………………………3

Структура программы……………………………………………………………3

Управляющие операторы ………………………………………………………10

Массивы и строки ………………………………………………………………13

Функции .………………………………………………………………………...15 Указатели ………………………………………………………………………..18 Структуры………………………………………………………………………..19 Знакомство с классами С++…………………………………………………….20 Задания …………………………………………………………………………..21 Литература ………………………………………………………………………23

Введение

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

Самое существенное улучшение по сравнению с языком С (явившимся основой для создания С++) касается концепции объектно-ориентированного программирования.

Структура программы

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

Все программы на С++ должны начинаться с функции, называемой main(). В программе должен всегда присутствовать один и только один оператор с именем main, который указывает главные операторы программы – часть программы, которая выполняется первой.

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

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

3

Функция состоит их четырех частей: типа возвращаемого значения, имени, списка параметров и тела функции. Первые три части составляют

прототип функции.

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

Точка с запятой является разделителем и отмечает конец инструкции. С++ является языком свободного формата. Это означает, что не имеет значения, где будут помещены ограничители и начало строки. Но для того, чтобы сделать программу более читабельной, принято следовать определенным правилам:

помещать функцию main() на отдельной строке;

помещать фигурные скобки на отдельных строках;

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

Команды и имена функций всегда пишутся маленькими буквами. Заглавные буквы обычно употребляются для задания имен констант и макроопределений.

Комментарии

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

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

Символы // можно использовать для того, чтобы закомментировать символы /* или */, а символами /* можно закомментировать //.

Оператор #include

При создании программ на C++ можно использовать операторы и определения, которые обеспечивает компилятор. При компиляции программы оператор #include заставляет компилятор включить содержимое заданного файла в начало вашей программы.

Файлы с расширением h, включаемые в начало (или заголовок) вашей программы, называются заголовочными файлами. Заголовочные файлы со-

4

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

Каждая создаваемая на C++ программа начинается с одного или нескольких операторов #include.

Замечание: Не стоит изменять содержимое заголовочных файлов. Это может привести к ошибкам компиляции в каждой создаваемой программе.

Использование void

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

Для указания того, что функция не возвращает значения или не имеет значений, передаваемых в нее, используется слово void. Большинство простых программ на C++ не возвращают выходное значение статуса операционной системе. В этом случае следует размещать слово void перед main, как показано ниже:

void main () // Программа не возвращает значение

Программы могут использовать информацию (например, имя файла), которую пользователь указывает в командной строке при запуске программы. Если программа не использует информацию командной строки, следует разместить слово void внутри круглых скобок после main, как показано ниже:

void main (void) // Программа не использует аргументы // командной строки

Ввод и вывод

Для вывода сообщения используется cout и двойной знак «меньше» (<<), называемый оператором вставки, как показано ниже:

cout << "Привет!";

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

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

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

Также возможно форматировать вывод вашей программы, используя модификатор setw внутри выходного потока.

Ниже приводится пример простейшей программы:

#include <iostream.h> using namespace std; void main(void)

5

{

cout << "Привет!";

}

Здесь iostream – стандартный заголовочный файл библиотеки ввода/вывода. Эта библиотека содержит информацию о потоке cout, используемом в этой программе. #include является директивой препроцессора, заставляющей включить в нашу программу текст из заголовочного файла iostream.

Если программа использует выходной поток cout, пользователь может перенаправить вывод программы с экрана дисплея в файл или на принтер. Подобным образом входной поток cin соответствует стандартному вводу операционной системы. В результате, если программа использует cin для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. Следующая программа CIN_LONG.CPP использует cin для чтения значения типа long (о типах см. раздел ниже):

#include <iostream.h> void main(void)

{

long value;

cout << "Введите большое число и нажмите Enter: "; cin >> value;

cout << "Было введено число " << value << endl;

}

Переменные

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

 

 

 

Тип

 

Хранимые значения

 

 

 

Char

 

Значения в диапазоне от –128 до 127. Обычно используется для

 

хранения букв алфавита

 

 

 

 

 

int

 

Значения в диапазоне от –32 768 до 32 767

 

 

 

unsigned

 

Значения в диапазоне от 0 до 65 535

 

 

 

Long

 

Значения в диапазоне от –2 147 483 648 до 2 147 483 647

 

 

 

Float

 

Значения в диапазоне от –3.4 × 10–38 до 3.4 × 1038

 

 

 

Double

 

Значения в диапазоне от 1.7 × 10–308 до 1.7 × 10308

 

 

 

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

тип_переменной имя_переменной;

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

float salary, income_tax, retirement_fund;

6

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

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

asm

auto

break

case

catch char

class

const

Default

delete

do

double

Else

enum

extern float

Friend

goto

if

inline

int

long

new

operator

protected public

register return

short signed

sizeof static

Switch

template this

throw

try

typedef union unsigned

void

volatile

while

continue for

private

struct

virtual

Фрагмент следующей программы сначала объявляет переменные, а затем использует оператор присваивания, чтобы присвоить переменным значения:

#include <iostream.h> void main(void)

{

int age; float salary; age = 32;

salary = 25000.75;

cout << "Служащему " << age << " года (лет)" << endl; cout << "Оклад составляет $" << salary << endl;

}

Манипулятор endl не просто выводит данные (символ перехода на новую строку), но и производит сброс буфера вывода.

Замечание: Значения, присваиваемые переменным, не должны содержать запятые (например, 25,000.75 и 238,857). Если включить запятые, компилятор будет генерировать и выводить сообщения о синтаксических ошибках.

C++ позволяет также присваивать значение во время объявления переменной, например:

int age = 32;

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

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

7

глобальным именем) область видимости простирается от точки описания до конца файла, в котором появилось описание. Описание имени в блоке может скрывать (прятать) описание во внутреннем блоке или глобальное имя. Это значит, что можно переопределять имя внутри блока для ссылки на другой объект. После выхода из блока имя вновь обретает свое прежнее значение. Например:

int

x;

 

// глобальное x

f() {

x;

// локальное x прячет глобальное x

int

x = 1;

// присвоить локальному x

{

int x;

// прячет первое локальное x

 

}

x = 2;

// присвоить второму локальному x

 

 

// присвоить первому локальному x

x = 3;

}

 

 

// взять адрес глобального x

int* p = &x

Однако скрытие имен следует минимизировать, чтобы избежать дополнительных ошибок. Использование для глобальных переменных имен вроде i или x не рекомендуется. С помощью применения операции разрешения области видимости :: можно использовать скрытое глобальное имя. Например:

int x; f()

{

int x = 1; // скрывает глобальное x ::x = 2; // присваивает глобальному x

}

Но возможности использовать скрытое локальное имя нет.

Константы

C++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char[]. Можно также задавать символические константы. Символическая константа – это имя, значение которого не может быть изменено в его области видимости. В C++ имеется три вида символических констант:

1)любому значению любого типа можно дать имя и использовать его как константу, добавив к его описанию ключевое слово const;

2)множество целых констант может быть определено как перечисление;

3)любое имя вектора или функции является константой.

8

Математические операции

Операция

Назначение

Пример

+

Сложение

total = cost + tax;

-

Вычитание

change = payment - total;

*.

Умножение

tax = cost * tax_rate;

/

Деление

average = total / count;

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

#include <iostream.h> void main(void)

{

cout << "5 + 7 = " << 5 + 7 << endl; cout << "12 - 7 = " << 12 - 7 << endl;

cout << "1.2345 * 2 = " << 1.23.45 * 2 << endl; cout << "15 / 3 = " << 15 / 3 << endl;

}

Обратите внимание, что каждое выражение сначала появляется в кавычках, которые обеспечивают вывод символов (например, 5 + 7 =) на экран. Затем программа выводит результат операции и символ новой строки.

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

#include <iostream.h> void main(void)

{

float cost =15.50; // Стоимость покупки

float sales_tax = 0.06; // Налог на продажу 6% float amount_paid = 20.00; // Деньги покупателя float tax, change, total; // Налог, сдача, счет tax = cost * sales_tax;

total = cost + tax;

change = amount_paid - total;

cout << "Стоимость покупки: $" << cost << "\tHaлor: $" << tax << "\tОбщий счет: $" << total << endl;

cout << "Сдача покупателю: $" << change << endl;

}

Так как увеличение значения переменной представляет собой обычную операцию в программах, в C++ есть операция увеличения— двойной знак плюс (++). Эта операция обеспечивает быстрый способ прибавления единицы к значению переменной. Существует операция быстрого уменьшения (– –).

При использовании операций увеличения ваши программы могут размещать оператор увеличения до или после переменной, как показано ниже:

++variable; variable++;

Так как первый оператор появляется до переменной, он называется

префиксным оператором увеличения. Аналогично этому, второй оператор появляется после переменной и называется постфиксным оператором уве-

9

личения. Вам необходимо знать, что C++ трактует эти два оператора поразному. Например, рассмотрим следующий оператор присваивания:

current_count = count++;

Этот оператор присваивания указывает C++ присвоить текущее значение count переменной current_count. В дополнение к этому постфиксный оператор увеличения заставляет C++ увеличить текущее значение count. Использование постфиксного оператора в этом случае делает показанный выше оператор эквивалентным следующим двум операторам:

current_count = count; count = count + 1;

Теперь рассмотрим следующий оператор присваивания, который использует префиксный оператор увеличения:

current_count = ++count;

В этом случае оператор присваивания указывает C++ сначала увеличить значение count, а затем присвоить результат переменной current_count. Использование префиксного оператора увеличения делает показанный выше оператор эквивалентным следующим двум операторам:

count = count + 1; current_count = count;

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

Другие операторы С++

 

 

 

Операция

 

Функция

 

 

 

%

 

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

 

ного деления

 

 

 

 

 

~

 

Дополнение; инвертирует биты значений

 

 

 

&

 

Побитовое И

 

 

 

|

 

Побитовое, включающее ИЛИ

 

 

 

^

 

Побитовое, исключающее ИЛИ

 

 

 

<<

 

Сдвиг влево; сдвигает биты значения влево на указанное количе-

 

ство разрядов

 

 

 

 

 

>>

 

Сдвиг вправо; сдвигает биты значения вправо на указанное коли-

 

чество разрядов

 

 

 

 

 

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

Управляющие операторы

Представление об if-else

По мере усложнения программы будут проверять разные условия и выполнять один набор операторов, если условие истинно, и другой набор, если

10