С++. Программирование на языке высокого уровня. Простейшие программы

Содержание

Слайд 2

Лекция 2. Простейшие программы Структура простейшей программы, переменные, операции, выражения, преобразования

Лекция 2. Простейшие программы

Структура простейшей программы, переменные, операции, выражения, преобразования

базовых типов, вводные замечания о средствах ввода-вывода, особенности вывода кириллицы в консольное окно.
Слайд 3

[класс памяти] [const] тип имя [инициализатор]; инициализатор: = значение или (

[класс памяти] [const] тип имя [инициализатор];
инициализатор: = значение или ( значение )

short

int a = 1;
const char C = 'C';
char s, sf = 'f';
char t (54);
float c = 0.22, x(3), sum;

Примеры описаний:

Описание идентификаторов

Слайд 4

Каждый идентификатор имеет область действия (potential scope) и область видимости (scope),

Каждый идентификатор имеет область действия (potential scope) и область видимости (scope),

которые, как правило, совпадают (кроме случая описания такого же имени во вложенном блоке).
Область видимости начинается в точке описания.
const int i = 2; { int i[i]; }
Имя, описанное внутри блока, локально по отношению к этому блоку. Имя, описанное вне любого блока, имеет глобальную область видимости.
Область действия и класс памяти зависят не только от собственно описания, но и от места его размещения в тексте программы.

Область видимости

Слайд 5

auto — автоматическая переменная. Память выделяется в стеке и при необходимости

auto — автоматическая переменная. Память выделяется в стеке и при необходимости

инициализируется каждый раз при выполнении оператора, содержащего ее определение. Освобождение памяти - при выходе из блока
extern — переменная определяется в другом месте программы.
static — статическая переменная. Время жизни — постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными.
register — аналогично auto, но память выделяется по возможности в регистрах процессора.

Класс памяти

Слайд 6

int a; // 1 main(){ int b; // 2 extern int

int a; // 1
main(){
int b; // 2
extern int x; // 3
static int c; // 4
a

= 1; // 5
int a; // 6
a = 2; // 7
::a = 3; // 8
}
int x = 4; // 9

Область видимости. Пример 1

Слайд 7

int a; // глобальная переменная int main(){ int b; // локальная

int a; // глобальная переменная
int main(){
int b; // локальная переменная
static int

c = 1; // локальная статическая переменная
}

Область видимости. Пример 2

Слайд 8

блок файл функция прототип функции класс поименованная область Области действия

блок
файл
функция
прототип функции
класс
поименованная область

Области действия

Слайд 9

В каждой области действия различают пространства имен, в пределах которых идентификатор

В каждой области действия различают пространства имен, в пределах которых идентификатор

должен быть уникальным. В разных категориях имена могут совпадать, например:
struct Node{
int Node;
int i;
}Node;
В С++ определено четыре раздельных класса идентификаторов, в пределах которых имя должно быть уникальным:
1. имена переменных, функций, типов typedef и констант перечислений;
2. имена типов перечислений, структур, классов и объединений;
3. элементы каждой структуры, класса и объединения;
4. метки.

Пространства имен

Слайд 10

#include int main(){ int i; printf("Введите целое число\n"); scanf("%d", &i); printf("Вы

#include
int main(){
int i;
printf("Введите целое число\n");
scanf("%d", &i);
printf("Вы ввели число %d, спасибо!",

i);
}

Пример 1 - простейшая программа

#include
using namespace std;
int main(){
int i;
printf("Введите целое число\n");
scanf("%d", &i);
printf("Вы ввели число %d, спасибо!", i);
}

Слайд 11

#include int main(){ int int1 = 45, int2 = 13; printf("int1

#include
int main(){
int int1 = 45, int2 = 13;
printf("int1 = %d|

int2 = %3d| int2 = %-4d|\n",
int1, int2, int2);
printf("int1 = %X| int2 = %3x| int2 = %4o|\n",
int1, int2, int2);
}
int1 = 45| int2 = 13| int2 = 13 |
int1 = 2D| int2 = d| int2 = 15|

Пример 2 - целые форматы

Слайд 12

#include int main(){ float f = 3.621; double dbl = 2.23;

#include
int main(){
float f = 3.621;
double dbl = 2.23;
printf("f = %f|

f = %4.2f| f = %6.1f|\n", f, f, f);
printf("f = %g| f = %e| f = %+E|\n", f, f, f);
printf("dbl = %5.2lf| dbl = %e| dbl = %4.1G|\n",
dbl, dbl, dbl);
}
f = 3.621000| f = 3.62| f = 3.6|
f = 3.621| f = 3.621000e+000| f = +3.621000E+000|
dbl = 2.23| dbl = 2.230000e+000| dbl = 2|

Пример 3 - вещественные форматы

Слайд 13

#include int main(){ char ch = 'z', *str = "ramambahari"; printf("ch

#include
int main(){
char ch = 'z', *str = "ramambahari";
printf("ch = %c|

ch = %3c|\n", ch, ch);
printf("str = %14s|\nstr = %-14s|\nstr = %s|\n",
str, str, str);
}
ch = z| ch = z|
str = ramambahari|
str = ramambahari |
str = ramambahari|

Пример 4 - форматы символов и строк

Слайд 14

#include int main(){ int i; cout cin >> i; cout }

#include
int main(){
int i;
cout << "Введите целое число\n";
cin >> i;
cout <<

"Вы ввели число” << i << ", спасибо!";
}

Пример 5 - классы ввода-вывода

#include
using namespace std;
int main(){
int i;
cout << "Введите целое число\n";
cin >> i;
cout << "Вы ввели число” << i << ", спасибо!";
}

Слайд 15

Унарные операции ++ – – sizeof ~ ! – + &

Унарные операции
++ – – sizeof ~ ! – + & * new delete (type)
Бинарные операции
* / % + – << >> < <=
> >= == != & ^ | && || = *= /= %= += –= <<=
>>= &= |= ^= throw ,
Тернарная операция
? :

Операции С++ (не все!)

Слайд 16

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

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

Слайд 17

преобразование типа

преобразование типа

Слайд 18

сдвиг вправо

сдвиг вправо

Слайд 19

Слайд 20

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

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

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

#include int main(){ int x = 3, y = 3; printf("Значение

#include
int main(){
int x = 3, y = 3;
printf("Значение префиксного выражения:

%d\n", ++x);
printf("Значение постфиксного выражения: %d\n", y++);
}
Результат работы программы:
Значение префиксного выражения: 4
Значение постфиксного выражения: 3

Операции инкремента и декремента

Слайд 22

sizeof выражение sizeof ( тип ) #include int main(){ float x

sizeof выражение sizeof ( тип )
#include
int main(){
float x = 1;
cout

<< "sizeof (float) :" << sizeof (float);
cout << "\nsizeof x :" << sizeof x;
cout << "\nsizeof (x+1.0) :" << sizeof (x+1.0);
}
sizeof (float) : 4
sizeof x : 4
sizeof (x+1.0) : 8

Операция sizeof

Слайд 23

#include int main(){ cout cout cout } Результат работы программы: 6&5

#include
int main(){
cout << "\n 6&5 = " << (6&5);
cout <<

"\n 6|5 = " << (6|5);
cout << "\n 6^5 = " << (6^5);
}
Результат работы программы:
6&5 = 4
6|5 = 7
6^5 = 3

Поразрядные операции

Слайд 24

#include int main(){ int x = 11, y = 4; float

#include
int main(){
int x = 11, y = 4;
float z =

4;
printf(" %d %f\n", x/y, x/z);
printf("Остаток: %d\n", x%y);
}

2 2.750000
Остаток: 3

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

Слайд 25

a = b = c означает a = (b = c)

a = b = c означает a = (b = c)
a + b + c означает (a + b) + c
(sin(x + 2) + cos(y +

1))

i = (i < n) ? i + 1: 1

(a + 0.12)/6
x && y || !z
(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))

Тернарная операция:

Примеры выражений:

a += b

Приоритеты:

Сложное присваивание:

Слайд 26

изменяющие внутреннее представление величин (с потерей точности или без потери точности);

изменяющие внутреннее представление величин (с потерей точности или без потери

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

Явные преобразования типа:

const_cast
dynamic_cast
reinterpret_cast
static_cast
приведение в стиле С: (имя_типа)выражение

Преобразования типов