Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по С++.doc
Скачиваний:
34
Добавлен:
15.12.2018
Размер:
2.31 Mб
Скачать

3. Запуск приложения

Перед тем как запустить приложение на выполнение, необходимо отладить созданный проект. Процесс отладки программы – это поиск синтаксических и семантических (смысловых) ошибок. Поиск синтаксических ошибок осуществляется при помощи компилятора и компоновщика, поэтому процесс преобразования набранной программы в исполняемую состоит из двух этапов. Первый этап состоит из компиляции программы: здесь работает компилятор, который осуществляет перевод набранной программы в некоторое внутреннее представление и поиск синтаксических ошибок error(s). Компилятор выдает сообщения об ошибках и предупреждениях warning(s) в окне сообщений об ошибках. Компиляцию программы можно осуществить, выбрав в среде Visual C++ 6.0 пункт меню Build, затем Compile. Если компилятор не выявил синтаксических ошибок в тексте программы, то создается объектный файл. Далее необходимо перейти ко второму этапу генерации исполняемой программы – к компоновке. На этом этапе происходит создание связей между всеми файлами, входящими в проект, и создается исполняемая программа. При этом все файлы, входящие в проект автоматически сохраняются. Для выполнения этого этапа нужно выбрать в среде Visual C++ 6.0 пункт меню Build, затем ещё раз Build.

Для запуска приложения выбираем в среде Visual C++ 6.0 пункт меню Build, далее Execute. При запуске нашего приложения на экран будет выведена строка “Hello World!”:

После запуска приложения, нужно проверить правильность его работы с помощью тестовых примеров, ответы на которые заранее известны. Тестовые примеры подбираются таким образом, чтобы проверить все «узкие» места программы, т.е. выявить семантические ошибки. Если программа работает неправильно хотя бы на одном тесте, то проверяется тот блок программы, который отвечает за выполнение теста. Проверить этот блок можно, например, при помощи вставки в программу (на время отладки) контрольной печати. Это означает, что в каждом логически завершенном по смыслу блоке программы ставится оператор вывода значений переменных на экран монитора. Таким образом, можно выявить неправильную работу каждого блока программы.

4. Сохранение и редактирование проекта

В папке на жестком диске, где при создании был размещен проект, будут находиться все файлы проекта и папка Debug. Для хранения проекта на каком-либо носителе нужно удалить папку Debug из проекта и сохранить все оставшиеся файлы.

Отредактировать проект можно открыв файл <имя_проекта>.dsw.

Лекция 2

Основные элементы языка С++

Цели:

  • изучить структуру программы, написанной на языке С++, и основные понятия языка.

1. Структура С++ программы. Основные элементы языка С++

Структура программы, написанной на языке С++, выглядит следующим образом:

подключение головных файлов

запись макроопределений

описание глобальных переменных

int main ( ) // заголовок главной функции

{

описание переменных

текст программы//алгоритм

return 1; // завершение работы функции int main( )

}

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

#include < имя головного файла>

Подключение головных файлов необходимо для возможности работы с библиотечными (определёнными разработчиками языка) функциями, а также для возможности работы с функциями, описанными разработчиками

программы и помещёнными в некоторый головной файл.

Некоторые библиотечные головные файлы:

stdio.h – функции ввода-вывода информации, работы с файлами и др.;

math.h – математические функции;

string.h – работа со строками;

stdlib.h – работа с динамической памятью.

  1. Запись макроопределений выполняется с помощью директивы

#define <имя_макропеременной> <определение_макропеременной>

При записи этой директивы между #define, <имя макропеременной> и <определение макропеременной> должны быть пробелы. Именем макропеременной может быть любая последовательность символов, не начинающаяся и не содержащая специальных символов. Под определением макропеременной понимается любая константа (числовая), любое арифметическое выражение, содержащее константу и имена макропеременных ранее определённых. В любом месте текста программы, где будет встречаться имя макропеременной, его будет заменять соответствующее макроопределение, описанное после директивы #define.

  1. Текст программы, написанной на языке С++, содержит различные слова (имена переменных и констант, ключевые слова), операторы и выражения, которые формируются из символов алфавита языка С++ по правилам этого языка.

В алфавит языка С++ входят:

прописные и строчные буквы латинского алфавита;

цифры 0 1 2 3 4 5 6 7 8 9;

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

Текст программы начинается с объявления переменных. Под объявлением переменных понимаются строки:

<имя типа данных 1> <имя переменной 1>,…, <имя переменной N>;

<имя типа данных М> <имя переменной 1>,…, <имя переменной К>;

Пример объявления переменных:

int f, k; //объявлены две целочисленные переменные с именами f и k

float dr; //объявлена вещественная переменная с именем dr

char ch; //объявлена символьная переменная с именем ch

Таблица 1

Тип данных

Объем занимаемой оперативной памяти в байтах

Диапазон значений

1

2

3

char

1

–128 ÷ 127

unsigned char

1

0 ÷ 255

signed char

1

-128 ÷ 127

int

4

–2147483648 ÷ 2147483647

Типы данных языка С++ приведены в табл.1.

Продолжение таблицы 1

1

2

3

unsigned int

4

0 ÷ 4294967295

signed int

4

-2147483648 ÷ 2147483647

short int

2

-32768 ÷ 32767

unsigned short int

2

0 ÷ 65535

signed short int

2

–32768 ÷ 32767

long int

4

-2147483648 ÷ 2147483647

unsigned long int

4

0 ÷ 4294967295

signed long int

4

-2147483648 ÷ 2147483647

float

4

3,4e-38 ÷ 3.4e+38

double

8

1.7e-308 ÷ 1.7e+308

long double

10

3.4е-4932 ÷ 1.1e+4932

При объявлении переменной под неё в оперативной памяти (ОП) отводится конкретное место (участок ОП). Размер участка оперативной памяти, который занимает переменная, определяется типом этой переменной. Для определения объема оперативной памяти, который занимает переменная какого-либо типа можно воспользоваться операцией sizeof(), например:

i=sizeof(int);

В этом примере значение переменной i будет равно 4.

При объявлении переменных можно сообщить им начальные значения путём помещения знака равенства после имени переменной. Этот процесс называется инициализацией и в общем случае имеет вид

<имя_типа_данных><имя_переменной1>=знач1,…,<имя_переменнойN>=значN;

Например:

int f = 10, k = 56;

Кроме переменных в программе могут быть использованы именованные и неименованные константы. Неименованная константа – число, именованная – идентификатор, которому поставлено в соответствие постоянное значение, не изменяющееся в процессе выполнения программы. Объявление констант выглядит следующим образом:

сonst <имя_типа_данных> <имя_константы1>=знач1,…,<имя_константыN>=значN;

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

сonst float pi= 3.14159;

При задании имен переменных и констант нужно учитывать то обстоятельство, что компилятор С++ различает строковые и заглавные символы. Например, переменные с именами Alfa и alfa – это различные переменные.

  1. Ключевое слово – это идентификатор, зарезервированный в языке для специального использования. В языке С++ используются ключевые слова:

asm

else

private

throw

auto

enum

protected

try

break

extern

public

typedef

case

float

register

typeid

catch

for

return

union

char

friend

short

unsigned

class

goto

signed

virtual

const

if

sizeof

void

continue

inline

static

volatile

default

int

struct

while

delete

long

switch

do

new

template

double

operator

this

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

Операции подразделяют на унарные и бинарные. Унарными называются операции над одним операндом и пишутся, как правило, перед операндом. Бинарные операции – это операции над двумя операндами. К унарным операциям относятся:

* – взятие значения по адресу оперативной памяти;

& – это операция получения адреса;

- (унарный минус) – изменяет знак арифметического операнда;

+ – унарный плюс (введён для симметрии с унарным минусом);

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

! – логическое НЕ (отрицание);

К бинарным операциям относятся:

+ – бинарный плюс (сложение арифметических операндов или сложение указателя с целочисленным операндом);

- – бинарный минус (вычитание);

* – умножение двух операндов;

/ – целочисленное деление, в результате выполнения операции получается целое число;

% – остаток от деления;

<< – сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда;

>> – сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению левого целочисленного операнда;

& – логическое умножение;

| – логическое сложение;

^ – поразрядное исключение или битовых представлений значений целочисленных операндов;

<, <= – меньше, меньше или равно;

>, >= – больше, больше или равно;

= = – логическое равенство;

!= – не равно;

&& – логическое И;

| | – логическое ИЛИ;

?: – условное выражение;

= – операция присваивания.

При использовании операций в выражениях нужно учитывать приоритет операций (табл.2).

Таблица 2

Приоритеты операций

Ранг

Операции

Смысл операции

1

( )

[ ]

–>

.

Выражение в скобках

Ограничитель индексов массива

Указатель на поле структуры

Ограничитель имени поля структуры

2

!

~

+

-

++

--

&

*

sizeof(<имя_переменной>)

(<тип_данных>)

Логическое НЕ

Побитовое отрицание

Унарный плюс

Унарный минус

Приращение на 1

Уменьшение на 1

Определение адреса

Взятие значения по адресу

Определение размера переменной в байтах

Операция приведения к типу_данных

3

*

/

%

Умножение

Целочисленное деление

Остаток от деления

4

+

-

Сложение

Вычитание

5

<<

>>

Побитовые сдвиги

6

<

<=

>

>=

Меньше

Меньше или равно

Больше

Больше или равно

7

= =

!=

Логическое равно

Не равно

8

&

|

&&

||

?:

=

,

Логическое умножение

Логическое сложение

Логическая операция и

Логическая операция или

Условное выражение

Оператор присваивания

Операция «запятая»

Запятая в качестве операции

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

Язык С++ предоставляет два полезных оператора:

++ – увеличение значения переменной на единицу;

-- – уменьшение значения переменной на единицу.

Например, х++ равносильно оператору присваивания x=x+1. Аналогично, x=x-1 – то же самое, что х--. Как оператор увеличения, так и оператор уменьшения могут стоять перед операндом (префиксный способ записи) или после операнда (постфиксный способ). Например, x=x+1 может быть записано как ++x или x++.

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

x=10;

y=++x;

В этом случае значение переменной y равно 11.

В варианте постфиксной записи, т.е.

x=10;

y=x++;

переменная у будет иметь значение 10. В обоих случаях значение переменной x будет равно 11.

  1. В языке С++ есть два способа задания комментариев. Первый способ определяет комментарий как последовательность символов, ограниченных слева парой символов /*, а справа – */. Между этими граничными парами может размещаться текст, поясняющий, что должен выполнять данный оператор или блок операторов. В комментарии разрешено использовать не только символы из алфавита языка С++, но и другие символы: /* Это комментарий, допустимый в С++ */

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

// Это односторонний комментарий, специфичный для языка С++

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

<имя_переменной> = <выражение>;

Здесь выражение – либо константа, либо сложная комбинация переменных, операторов и констант. В С++ для отображения операции присваивания используется одиночный знак равенства. В левой части операции присваивания должна стоять переменная, а не функция или константа. Присваивание может встречаться в неожиданном контексте, например x=sqrt(a=4*x). При начальном значении х = 4 значение переменной а будет равно 16, значение х после операции присваивания – 4 (sqrt() – функция вычисления квадратного корня). С++ позволяет присваивать переменным одни и те же значения путём использования многочисленных присваиваний в одном операторе. Например, оператор x=y=z=0; присваивает переменным x, y, z значение 0.

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

Оператор A=b+c; работает следующим образом:

  1. вычисляется значение b+c;

  2. значение b+c копируется в переменную A, т.е. это значение помещается в область оперативной памяти, которая отведена под переменную A.

В языке С++ существует сокращенная запись операций:

Сокращенная запись

Полная запись

x+=y;

x=x+y;

x -=y;

x=x-y;

x*=y;

x=x*y;

x/=y;

x=x/y;

x%=y;

x=x%y;

x<<=y;

x=<<y;

x>>=y;

x=x>>y;

x&=y;

x=x&y;

x|=y;

x=x|y;

x^=y;

x=x^y;

Таким образом, оператор x/=y+10; эквивалентен оператору x=x/(y+10);.

  1. Оператор-выражение обычно используется при вычислениях выражений, содержит операцию присваивания или вызов библиотечной или пользовательской функции и заканчивается точкой с запятой. Например: a=a+65; // оператор содержит операцию присваивания

printf(“Функция”); // оператор содержит вызов функции

В языке С++ допускаются смешанные выражения. Смешанное выражение – это выражение, в котором могут использоваться операции различных типов, например:

a=x>0 && x<10;

Очередность выполнения операций в таких выражениях определяется

приоритетом операций.

  1. Составной оператор – это возможно пустой список операторов, заключенный в фигурные скобки:

{

a=b+2;

b++;

}

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