230.85K
Category: programmingprogramming

Введение в язык с++ (тема 2-1)

1.

Тема 2-1.
Введение в язык с++
для АСУб и ЭВМб

2.

В предыдущих лекциях:
Процесс создания программы для ЭВМ:
– Программа = Данные + Алгоритм + Язык
– ЭВМ
• Архитектура (процессор + память + остальное): фон Неймана
(Принстонская), Гарвардская
– Язык
• Низкого уровня: машинный, ассемблер
• Высокого уровня: С++
– Алгоритм
• Свойства алгоритма
• Описание алгоритма: словесное, блок-схема
• Структурное программирование (утверждение, 3 типа структур)
– Этапы разработки программы

3.

Язык программирования C++
BCPL (1967)
Си - 1972 Денис Ритчи
(1989 Стандарт ANSI,
1999 Новый стандарт)
С++
(начало работы:1979-й год
автор: Бьерн Страуструп)
Standard С++
(1998)
Java
C#
Первоначальное название
«С with Classes».
Основное достоинство –
наличие большого количества
специальных средств и механизмов, упрощающих написание сложных системных программ.
Основной недостаток –
незащищенный
синтаксис,
который часто не позволяет
точно
идентифицировать
ошибку на этапе компиляции
программы.

4.

Структурный аспект программы С++
Структура программы
Управляющие
структуры
Информационные
структуры
Константы
Переменные
Операции
Контролирующие
структуры
Объявления
Комментарии
Операторы

5.

Пример программы на С++
#include "stdafx.h"
#include <stdio.h>
Команды
препроцессора
int a=18,
b=24,
c;
int nod(int a,int b)
{
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
return a;
}
int main()
{
c=nod(a,b);
printf("nod=%d\n", c);
return 0;
}
Объявление
переменных
Описание
функции
Основная
функция

6.

«Языковой» аспект программы С++
примеры
программа
a=b; for (int i=0;i<n;++i)
операторы
a++ - --b/c
выражения
лексемы
символы
- идентификаторы
- ключевые слова
- константы
- знаки операций
- разделители
96 символов - из них 91
имеет графическое
изображение.
a-z, A-Z, 0-9, “,
{,},|,/,%,…

7.

Определения
• Алфавит — это тот набор знаков
(символов), который допустим в данном
языке.
• Лексемы - последовательности символов
исходного кода программы, имеющие
определенное смысловое значение.

8.

Категории лексем
• идентификаторы (identifier);
– это имя программного объекта.
• ключевые (зарезервированные) слова
(keyword);
– идентификаторы, зарезервированные в языке
для специального использования.
• знаки операций (operator);
• константы – литералы (literal);
• разделители (знаки пунктуации –
punctuator)

9.

Идентификаторы
Идентификатор – последовательность из букв латинского
алфавита, десятичных цифр и символов подчеркивания,
начинающаяся не с цифры.
Прописные и строчные буквы различаются.
Примеры:
ABC
На
abc
Abc
ABc
AbC
MY_Primer_1
Prim_123
длину различаемой части идентификатора
реализации накладывают ограничения.
конкретные
Компиляторы фирмы Borland различают не более 32-х первых
символов любого идентификатора.
Идентификаторы
используются
для
обозначения
переменных, констант, типов подпрограмм и т.д.
имен

10.

Ключевые слова
Ключевые
(служебные)
слова

это
идентификаторы,
зарезервированные в языке для специального применения.
Их использование строго регламентировано.
Далее приведен список ключевых слов, предусмотренных
стандартом ANSI.
auto
do
for
return
switch
break
double
goto
short
typedef
case
else
if
signed
union
char
enum
int
sizeof
unsigned
continue
extern
long
static
void
default
float
register
struct
while
В разных реализациях есть дополнительные ключевые слова,
например, : asm, cdecl, far, pascal, const, volatile.
Язык C++ добавляет еще несколько:
inline,new, operator, private .
catch,
class,
friend,

11.

Структуры и типы данных
языка программирования
Тип данных характеризуется множеством
допустимых значений и набором
допустимых над этими значениями
операций.
Тип переменной определяет:
- диапазон возможных значений;
- способ хранения в памяти;
- допустимые операции.

12.

Диапазоны для IBM PC-совместимых
Тип
Диапазон значений
bool
signed char
unsigned char
signed short int
unsigned short int
signed long int
Размер(байт)
true и false
–128 … 127
0 … 255
–32 768 … 32 767
0 … 65 535
–2 147 483 648 …
2 147 483 647
unsigned long int
0 … 4 294 967 295
float
3.4e–38 … 3.4e+38
double
1.7e–308 … 1.7e+308
long double
3.4e–4932 … 3.4e+4932
1
1
1
2
2
4
4
4
8
10

13.

Установленный тип данных
Тип данных
модификаторов
Основной тип
данных
unsigned
int
short
int
long
int/double
Наследуемый
тип данных
unsigned int
(Допускаются
только
положительные
числа)
short int
(Занимает
меньше места
в памяти чем int)
Long int /longdouble
(Занимает
больше места
в памяти чем
int/double)

14.

Константы и переменные
Основными объектами любой программы являются данные
Данные
Переменные
Константы
Литералы
поименованные
инициализированные
неинициализированные

15.

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

16.

Целые константы
Целые константы
могут быть десятичными, восьмиричными и
шестнадцатиричными.
Десятичная константа определена как последовательность
десятичных цифр, начинающаяся не с нуля, если это число не
нуль. Может быть отрицательной и положительной.
Пример: 16, 56783, 0, -567, 7865.
Восьмиричная константа
определена как последовательность
последовательность десятичных цифр от 0 до 7, всегда
начинающаяся
с
нуля.
Может
быть
отрицательной
и
положительной.
Пример: 016, 020, 0777,
Шестнадцатиричная константа определена как последовательность
шестнадцатиричных цифр, которая начинается сочетанием 0х.
Может быть отрицательной и положительной.
Пример: 0х30, 0хF, 0xe,0x56AD.
В зависимости от значения целой константы
компилятор
представляет ее в памяти в соответствии с типом. Для явного
указания
способа
представления
программист
может
использовать суффиксы L,l или U,u (64L, 067u, 0x56L).

17.

Вещественные константы
Вещественные константы представлены в формате с плавающей
точкой.
Константа с плавающей точкой может включать семь частей:
- целая часть (десятичная целая константа);
- десятичная точка ;
- дробная часть (десятичная целая константа) ;
- признак экспоненты (символ e или E);
- показатель десятичной степени (десятичная целая константа,
возможно со знаком) ;
- суффикс F(или f) либо L(или l).
В записи вещественного числа
могут опускаться целая или
дробная часть (но не одновременно), десятичная точка или
признак экспоненты с показателем степени, суффикс.
Пример: 66. .045 .0 3.1459F 1.34e-12 45E+6L
56.891
Без суффиксов F или L под вещественную константу отводится 8
байт.

18.

Символьные константы
Символьные константы – это один или два символа, заключенные
в апострофы.
Примеры:
‘Z’
‘db’
‘*’ ’$’ ‘\012’ ‘\0’ ‘\n’ – односимвольные константы.
‘\x07\x07’
‘\n\t’
- двухсимвольные константы.
Символ ‘\’ используется для
- записи кодов , не имеющих графического изображения
- символов (‘),(\),(?),(“)
- задания символьных констант, указывая их коды в 8-ричном
или 16 -ричном виде.
Последовательность символов, начинающаяся с символа ‘\’
называется эскейп-последовательностью.

19.

Строка
Строка или строковая константа определяется как последовательность
символов, заключенная в кавычки.
Пример:
“Это пример строки, называемой строковой константой”
Среди символов строки могут быть эскейп-последовательности, то есть
сочетания,
соответствующие
неизображаемым
символьным
константам или символам, задаваемых их внутренними кодами. В
этом случае они начинаются с символа ‘\’ .
“\nЭто строка,\nиначе -\”стринг\”,\nиначе - \”строковый литерал\”.”

20.

Процедурный тип Void
• Этот тип данных не хранит никакой
информации
• Показывает компилятору, что здесь не
присутствует никакой информации

21.

Переменные
Переменная – это величина, имеющая имя, тип
и значение. Значение переменной можно
изменять во время работы программы.
Значение
Другой тип
данных
Имя
!
?
Поместится?
В переменной хранятся данные
определенного типа!

22.

Имена переменных
В именах МОЖНО использовать
• латинские буквы (A-Z)
заглавные и строчные буквы не различаются
• цифры
имя не может начинаться с цифры
• знак подчеркивания _
В именах НЕЛЬЗЯ использовать
• русские буквы
• пробелы
• скобки, знаки +, =, !, ? и др.
Какие имена правильные??
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B

23.

Определения
• Переменная – это именованная
область памяти.
• Имя переменной – это ссылка на
некоторую область памяти.

24.

Переменные
Типы переменных:
• int
{ целая }
• float
{ вещественная }
• string
{ последовательность символов }
• и другие…
Выделение
места в памяти
Объявление переменных:
тип – целые
int a, b, c;
список имен
переменных

25.

Как записать значение в переменную?
Оператор
присваивания
a = 5;
5
!
При записи нового
значения старое
стирается!
Оператор – это команда языка
программирования (инструкция).
Оператор присваивания – это команда для
записи нового значения в переменную.

26.

Переменные
• Чтобы использовать переменные, их нужно
объявлять
• При попытке использовать переменную,
которая не была объявлена, код не будет
компилироваться.
• При попытке использовать переменную без
присваивания ей значения тоже будет
возникать ошибка.
• Имена переменных состоят из латинских букв
и цифр, начиная с буквы. Малые и большие
буквы считаются различными символами.

27.

Примеры объявлений переменных и констант
Неинициализированные переменные:
int f,c,d; float r;
I,j;unsigned int max,min;
сhar c1,c2; unsigned char c5;
Инициализированные переменные
double k=89.34; char ch=‘G’;
Поименованные константы
const long a=6; const float pp=6.6e-34;
На практике все объявления могут быть перемешаны в
описаниях программы:
const char simt=‘T’;float max=100,min=-100;
double f,s,eps=0.001;
Переменные и поименованные константы могут быть
объявлены в любом месте программы:
вне всех функций, внутри функций, в любом месте функции.
Основное условие – объявление должно стоять до обращения к
переменной или константе.

28.

Вызов функций
• Вызов функций состоит из имени функции, за которым
следует необязательный список выражений в круглых
скобках:
Имя_функции (список выражений)
sqrt(a)
корень квадратный из а, причём а не
отрицательно
pow(a, b)
возведение а в степень b
abs( a )
модуль или абсолютное значение от а
sqrt(9.0)=3.0
pow(2,3)=8
abs(-3.0) = 3.0
abs(5.0)= 5.0

29.

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

30.

Выражения
• Операция - это действие, производимое над
операндами
• Знак операции - предопределённый символ или группа
символов, предписывающие выполнить некоторую
операцию.
• Значение выражения зависит от
– расположения знаков операций
– круглых скобок в выражении,
– от приоритета выполнения операций
Выражения со знаками операций могут быть унарными
(с одним операндом), бинарными (с двумя
операндами) и тернарными (с тремя операндами).

31.

Примеры операции С++ (не все!)
Унарные операции
++
––
*
sizeof
new
Бинарные операции
*
/
%
+
>
>=
==
!=
=
*=
/=
>>= &=
|=
^=
Тернарная операция
?:
~
!
delete

+
(type)
&

<<
&
^
%=
+=
throw ,
>>
|
–=
<=
||
<
&&
<<=

32.

Арифметические операции
Операция
Символ
Пример
Операция
Унарный -
-
-y
Значение с
обратным знаком
Сложение
+
x+y
x плюс y
Вычитание

x−y
x минус y
Умножение
*
x*y
x умножить на y
Деление
/
x/y
x разделить на y
Деление с
остатком
%
x%y
Остаток от
деления x на y

33.

Инкремент и декремент
Операция
Префиксный
инкремент (преинкремент)
Символ
++
Пример
Операция
++x
Инкремент x,
затем
вычисление x
Префиксный
декремент (предекремент)
−−
−−x
Декремент x,
затем вычисление
x
Постфиксный
инкремент (постинкремент)
++
x++
Вычисление x,
затем инкремент x
Постфиксный
декремент (постдекремент)
−−
x−−
Вычисление x,
затем декремент x

34.

Операции отношения
Операции отношения – применяют к числам, символам– в
результате получают логическое значение:
<, >, ==, !=, <=, >= результат операций отношения – это истина
или ложь
В С++ истина – это не 0 (true)
ложь - это 0
(false)
Пример:
int a = 5; int b = 3;

a > b
не 0
a == b
0

35.

Логические операции
&& - конъюнкция (и) арифметических операндов или операций
отношений. Результат целочисленный 0 (ложь) или не 0
(истина).
|| - дизъюнкция (или) арифметических операндов или отношений.
Результат целочисленный 0 (ложь) или не 0 (истина).
(к логическим операциям относится и унарная операция ! отрицание).
Чаще всего операндами логических операций являются условные
выражения.
Логические выражения:
выражение1&&выражение2 – истинно только тогда, когда оба
выражения истинны;
выражение1||выражение2 – истинно, хотя бы одно из выражений
истинно;
!выражение - истинно, если выражение ложно, и наоборот.
6>2&&3==3
- истина
!(6>2&&3==3)
- ложь
x !=0 && 20/x<5 - второе выражение вычисляется, если х!=0.

36.

Поразрядные операции
& (и) - поразрядная конъюнкция (и) битовых представлений
значений целочисленных выражений,
| (или) поразрядная дизъюнкция (или) битовых представлений
значений целочисленных выражений,
^ (исключающее или) поразрядная исключающая или битовых
представлений значений целочисленных выражений.
Примеры:
6&5 4
00000110 & 00000101 00000100
6|5 -7
6^5 3
00000110 |
00000101 --> 00000111
00000110 ^
00000101 00000011

37.

Операции сдвига
>> сдвиг вправо битового представления значения левого
целочисленного операнда на количество разрядов, равное
значению правого целочисленного операнда,
<< сдвиг влево битового представления значения левого
целочисленного операнда на количество разрядов, равное
значению правого целочисленного операнда.
Примеры:
4<<2 16
00000100 << 00010000
5>>1
2
4
00000101 >>
5
16
00000010
2

38.

Операции присваивания
• формат операция простого присваивания (=):
• опреанд_1 = операнд_2
пример: a=b=c=100, это выражение выполняется справа
налево, результатом выполнения с=100, является число
100, которое затем присвоиться переменной b, потом а.
Составные операции присваивания:
(*=) – умножение с присв-ем,
( /=) - деление с присв-ем
(%= )- остаток от деления с присв-ем,
(+=) –сложение с присв.,
(-=) - вычит.с присв.
пример: к операнду _1 прибавляется операнд_2 и результат
записывается в операнд_2
• т.е. с = с + а, тогда компактная запись с += а

39.

Составные операции присваивания
int X=5;
X*=5;
X-=10;
string S="Hello, ";
S+="World";

40.

Тернарная операция
• <условие> ? <выражение_если_истина> :
<выражение если ложно>
• Пример тернарной операции:
string result = (mylnteger < 10) ? "Меньше
10" : "Больше или равно 10";

41.

Приоритет операций
1. ( ) [ ] -> :: .
2. ! (не) + - ++ -- &(адрес) *(указатель) sizeof new delete
3. .* ->*
4. * / %
5. + - (бинарные)
6. << >>
7. < <= > >=
8. = = ! =
9. &(поразрядное и)
10. ^(исключающее или)
11. | (поразрядное или)
12. &&
13. ||
14. ?:
15. = *= /= %= += -= &= ^= |= <<= >>=
16. ,

42.

Комментарии
Комментарий – неисполняемая часть
программного кода; используется для
внесения пояснений и начинается с //
Это однострочный комментарий
Можно вставлять и многострочный
комментарий, который начинается
знаками /* и заканчивается знаками */

43.

Структура программы
Программа представляет собой последовательность
операторов, манипулирующих данными.
Код на С++ состоит из ряда операторов, каждый из
которых оканчивается символом точка с запятой.
С++ является языком с блочной структурой, то есть
все операторы относятся к какому-то блоку кода.
В каждом блоке, который отделяется от остальной
части кода с помощью фигурных скобок ({ и }), может
содержаться любое количество операторов или
вообще ни одного.
Блоки кода также могут вкладываться один в другой,
то есть одни блоки могут содержать в себе другие
блоки

44.

Условный оператор
if ( выражение ) оператор_1; [else оператор_2;]
if (a<0) b = 1;
if (a<b && (a>d || a==0)) b++;
else {b* = a; a = 0;}
if (a<b){
if (a<c) m = a;
else m = c;}
else {if (b<c) m = b;
else m = c;}
if (a++) b++;
if (b>a) max = b;
else max = a;
// 1
// 2
// 3
// 4
// max = (b > a) ? b : a;
if (int i = fun(t)) a –= i; else a += i;

45.

Оператор if
Наиболее простой способ использования оператора
if выглядит так, как показано ниже, и подразумевает
вычисление выражения <условие> и выполнение
следующей за ним строки кода в случае, если
<условие> возвращает true:
if (<условие>)
<код, выполняемый, если <условие> равно true>;
После выполнения этого кода, или невыполнения изза того, что в результате вычисления выражения
<условие> было получено false, выполнение
программы возобновляется со следующей строки
кода.

46.

Оператор switch для выбора из
множества различных вариантов
• Этот оператор похож на if тем, что тоже умеет
условно выполнять код на основании проверяемого
значения.
• Однако в отличие от него, switch позволяет
проверять переменную сразу на соответствие
множеству различных значений, а не с помощью
множества отдельных условий.
• В таких проверках разрешено использовать только
дискретные значения, а не конструкции вроде
"больше чем X", поэтому и способ применения этого
оператора немного отличается.

47.

Оператор switch
switch (< проверяемая_переменная>)
{ case <значение_для_сравнения_ 1 >:
код, подлежащий выполнению, если <проверяемая_переменная>
=<значение_для_сравнения_1>
break;
case <значение_для_сравнения_2>:
код, подлежащий выполнению, если <проверяемая_переменная> =
<значение_для_сравнения_2>
break;

case <значение_для_сравнения_М>:
<код, подлежащий выполнению, если
<проверяемая_переменная>=<значение_для_сравнения_M>
break;
default:
<код, подлежащий выполнению, если <проверяемая_переменная> не
равна ни одному из значений
break;

48.

Оператор switch
include <iostream>
int main()
{
int x = 2;
switch(x)
{
case 1:
std::cout
break;
case 2:
std::cout
break;
case 3:
std::cout
break;
default:
std::cout
break;
}
return 0;
}
<< "x = 1" << "\n";
<< "x = 2" << "\n";
<< "x = 3" << "\n";
<< "x is undefined" << "\n";

49.

Операторы цикла
• Операторы цикла дают возможность
многократно выполнять один и тот же
участок программы, проводя
одинаковые вычисления с различными
данными.
• В языке C++ имеются три вида циклов:
– while
– for
– do … while

50.

Цикл с предусловием while
while(выр) // Заголовок цикла
Инструкция // Тело цикла
• Сначала вычисляется выражение выр
• Если оно истинно (не нуль), выполняется
инструкция и снова вычисляется выр
• Повторения цикла завершаются, когда выр
станет ложным (нулем)

51.

Цикл с предусловием while
while(выр) // Заголовок цикла
Инструкция // Тело цикла
• Инструкция, выполняемая в цикле,
называется телом цикла.
• Так как условие повторения проверяется до
выполнения тела цикла, данный цикл
называют циклом с предусловием
• Тело цикла может не выполниться ни одного
раза, если выр окажется ложным при первом
его вычислении.

52.

Цикл for
for(выр1; выр2; выр3) // Заголовок цикла
Инструкция // Тело цикла
• Выражение выр1 вычисляется единственный раз
перед началом работы цикла
• Условием повторения цикла является истинность
выр2
• После выполнения инструкции в теле цикла
вычисляется выр3
• Любое из трех выражений в скобках может
отсутствовать, но точки с запятой опускать нельзя
– Если отсутствует второе выражение выр2, то оно считается
истинным

53.

Цикл do-while
do
Инструкция // Тело цикла
while(выр) // Заголовок цикла
• Данный цикл целесообразно применять,
когда тело цикла должно быть выполнено, по
крайней мере, один раз
• Так
как
условие
повторения
цикла
проверяется после выполнения тела цикла,
он называется циклом с постусловием
English     Русский Rules