Язык программирования C++

Посмотреть архив целиком
Алгоритмические языки
и программирование.
2 семестр
МГТУ им. Н.Э. Баумана
Факультет Информатика и системы управления
Кафедра Компьютерные системы и сети
Лектор: д.т.н., проф.
Иванова Галина Сергеевна
1

Структура курса
Лекции – Особенности программирования на С++ в среде разработки
Microsoft Visual Studio 2008
Практики (17-19 – Delphi, 20-29 – C++ 2008):
ИУ6-21 – четверг
830-1150;
ИУ6-22 – суббота
ИУ6-23 – понедельник

830-1150;
1200-1525

РК1: динамические структуры данных (9 неделя);
РК2: иерархии классов (14 неделя);
ДЗ1: практики 17-23 с отчетами (8 неделя)
Зачет (кафедральный) по практикам.
Экзамен (результат идет в диплом):
1 – С++;
2 – Сравнение возможностей С++ и Delphi;
3 – Задача (снимается по результатам рейтингов) 2

Литература
1.
2.

3.

4.

5.

Подбельский В.В. Язык С++: Учеб. пособие. – М.: Финансы и
статистика, 2006.
Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектноориентированное программирование. Учеб. для вузов. – М.: Изд-во
МГТУ им. Н.Э. Баумана, 2007.
Агабеков Л.Е., Иванова Г.С. Программирование на С++. Часть 1.
Средства процедурного программирования. Учебное пособие. –
М.: МГТУ, 1997. – В электронном виде.
Агабеков Л.Е., Иванова Г.С. Программирование на С++. Часть 2.
Средства объектно-ориентированного программирования.
Учебное пособие. – М.: МГТУ, 1996. – В электронном виде.
Иванова Г.С., Ничушкина Т.Н. Консольные приложения С++ в среде
Microsoft Studio 2003 (Visual C++): Методические указания по
выполнению лабораторных работ. – М.: МГТУ им. Н.Э. Баумана,
2008. – 13 с. – В электронном виде.
3

История создания С++
BCPL (1967)
Си - 1972 Денис Ритчи
(1989 Стандарт ANSI,
1999 Новый стандарт)
С++
(начало работы:1979-й год
автор: Бьерн Страуструп)
Standard С++
(1998)

Java

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

C#
4

Глава 1 Скалярные типы
данных. Основные
операторы С++
МГТУ им. Н.Э. Баумана
Факультет Информатика и системы управления
Кафедра Компьютерные системы и сети
Лектор: д.т.н., проф.
Иванова Галина Сергеевна
5

1.1 Алфавит языка. Структура программы
Алфавит языка С++ включает:
1) латинские буквы;
2) арабские цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
3) шестнадцатеричные цифры: 0..9, а..f или A..F;
4) специальные символы: + - * / = ; { } и т. д.;
5) служебные слова: do, while, for, if, else и т. д.
В отличие от Паскаля С++ различает строчные и прописные буквы.

6

Структура консольной программы
Консольная программа на С++ включает:

[]
[]

[]

Нотация:
– означает
некоторую конструкцию С++;
[] – означает, что
присутствие конструкции в операторе не
обязательно

В С++ все программы/подпрограммы называются функциями.
Функция main() – основная программа, всегда имеющая имя main,
принимающая управление от операционной системы и возвращающая его ей. Присутствие этой функции (или функции WinMain() –
для Windows) является обязательным.
Команды препроцессора – команды, выполняемые перед компиляцией программы, могут использоваться для подключения необходимых библиотек.
7

Описание функции
([])
{[ < Объявление локальных переменных и констант >]

}
Если функция возвращает скалярное значение, то первое слово
описания содержит его тип. Если функция не возвращает значения,
т.е. фактически является процедурой, то указывают void – «пустой»
тип.
Независимо от наличия или отсутствия параметров скобки после
имени функции должны быть указаны обязательно. При отсутствии
параметров в скобках может быть указано void
{...} – операторные скобки, ограничивающие тело функции – аналог
begin ... end Паскаля
8

Сравнение программ, написанных на Паскале и С++
Turbo Delphi (консольный режим):
Program primer;
{$APPTYPE CONSOLE}

Microsoft Visual C++ - Пример Ex1_01:

#include

Uses SysUtils;
Var
Var

A:integer=18;
B:integer=24;
C:integer;

Function Nod(A,B:integer):integer;
Begin
while AB do
if A>B then A:=A-B
else B:=B-A;
Nod:=A;
End;
Begin
C:=Nod(A,B);
Writeln(‘Nod=‘, C);
End.

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;
9
}

1.2 Фундаментальные типы данных
1. Интегральные типы
Имя типа

Размер ,
байт

Интервал
значений

1

-128..127
0..255

short или _int[16] [signed] short
unsigned short

2

-32768..32767
0..65535

[int] или long или [signed] [int]
_int[32]
unsigned [int]
[signed] long
unsigned long

4

-231.. 231-1
0.. 232-1

long long или
_int[64]

8

-263.. 263-1
0.. 264-1

1

false (0), true(1)

char или _int[8]

bool

Подтипы
[signed] char
unsigned char

[signed] long long
Unsigned long long

Для совместимости с С по-прежнему считается: 0 – false;
10 не 0 – true.

2. Вещественные типы
Тип

Размер,
байт

Значащих
цифр

Минимальное
положительное
число

Максимальное
положительное
число

float

4

6

1.175494351е-38

3.402823466е38

double
(long
double)

8

15

2.2250738585072014
е-308

1.797693134862318
e308

3. Неопределенный («пустой») тип void
Нельзя объявлять значения типа void, этот тип используется только
при объявлении:
? нетипизированных указателей;
? функций, не возвращающих значений (процедур).
11

1.3 Объявление переменных и констант
Формат:
[] [][=];
где – описатель возможности изменения значений:
const – константа,
volatile – независимо меняющаяся переменная,
без указания – обычная переменная
– описатель типа: int, char, float, double и т.д.;
– список имен переменных или констант;
– начальное значение переменной или значение
константы.
Примеры:
а) int a, b;
// две целые переменные
б) float c=1.05, d; // инициализированное и неинициализ. значения
в) const unsigned char letter=‘a’; // константа – код буквы «a»
г) const a=15; // целая константа 15 – тип int – по умолчанию !
12

Перечисляемый тип
Используется для объявления совокупности поименованных целых
констант.
Формат:
enum {[=] [,[]…]}
;
Пример:

Имя
переменной

enum {SUN, MON, TUES, FRI=5, SAT} day;
SUN =0, MON = 1, TUES = 2, FRI=5, SAT=6

Константы присваиваются, начиная с нуля или с указанного значения.
13

Объявление типа
Появилось только в С++.
Формат:
typedef ;
Примеры:

Имя
нового типа

1) typedef unsigned int word;
2) typedef enum {false, true} boolean;
Имя
нового типа
14

1.4 Стандартные функции ввода/вывода
1 Форматный ввод /вывод

Ввод:
int scanf(,
);
// возвращает количество значений или EOF(-1)
Вывод:
int printf(, );

где - строка, которая помимо символов содержит
спецификации формата вида для выводимых значений:
%[-] [] [.]
«-» - выравнивание по левой границе,
- ширина поля вывода;
- количество цифр дробной части вещественного числа;
- определяется специальной литерой. 15

Спецификации формата
d - целое десятичное число;
u - целое десятичное число без знака;
o - целое число в восьмеричной системе счисления;
x - целое число в шестнадцатеричной системе счисления (% 4x - без
гашения незначащих нулей);
f - вещественное число;
e - вещественное число в экспоненциальной форме;
c - символ;
p - указатель (адрес);
s - символьная строка.
Кроме этого, форматная строка может содержать:
\n - переход на следующую строку;
\n hhh - вставка символа с кодом ASCII hhh (код задается в
шестнадцатеричной системе счисления);
%% - печать знака %.

16

Примеры форматного ввода/вывода
а) i=26;
printf ("%-6d???%%? %o? %x\n", i, i, i);

26???????%?32?1A ?
б) scanf(”%d

%d”,&a,&b);

Вводимые значения:

1) 24

28

2) 24?
28

в) scanf("%d,%d",&a,&b);
Вводимые значения: 24,28
г) scanf("%s",name);
Вводимые значения: Иванов Иван
Результат ввода: name="Иванов"

17

2 Ввод/вывод строк
Ввод:
char* gets();
// возвращает копию строки или NULL
Вывод:
int puts ();
Примеры:
а) puts("Это строка");
Результат: Это строка?
б) gets(st);
Вводимые значения:
Иванов Иван?
Результат:
st ="Иванов Иван"

18

3 Ввод/вывод символов
Ввод символа:
int getchar(); // возвращает символ или EOF
Вывод символа:
int putchar();
Примеры:
а) ch=getchar( );
б) putchar(’t’);

19

1.5 Операции
?

Арифметические:

+ – сложение;
- – вычитание;
* – умножение;
/ – деление – результат – вещественное, если хотя бы одно из
чисел – вещественное, результат – целое, если делимое и делитель –
целые,
% - остаток от деления целых чисел.
?
Логические: ! (не), && (и), || (или).
?

Логические поразрядные:
- (не), & (и), | (или), ^ (исключающее или).

?

Отношения:
, =, = = (равно), ! = (неравно).

20

Операции (2)
?

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

1.6 Оператор «Выражение»
Формат:
[,,...[,]...]
Примеры:
a) int a=10, b=3; float ret; ret=a/b;
b=1, c=2
б) c=1; b=c++;
в) c=1;

sum=++c;

ret=3

c=2, sum=2

г) c=ab, то с=a, иначе с=b
23

1.7 Блок операторов
Блок операторов используется в конструкциях ветвления,
выбора и циклов, предусматривающих один оператор.
Формат:
{ ;… ;}
Пример:
{
f=a+b;
a+=10;
}

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

1.8 Оператор условной передачи управления
if () [ else ]
Примеры:
а) if (!b)
puts("с - не определено"); // если b=0, то – ошибка,
else {c=a/b; printf("c=%d\n", c);} // иначе - выводится с.
б) if ((c=a+b)!=5) c+=b;
else c=a;
в) if ((ch=getchar())==?q?)
// если в ch введено q,
puts ("Программа завершена."); // то ...
else puts ("Продолжаем работу...");
// иначе ...
г) ch=?a?;
if ((oldch=ch, ch=?b?)==?a?)puts("Это символ ?a?\n");
else puts("Это символ ?b?\n");
25

1.9 Оператор выбора
switch ()
{
case :
case :
...
[ default : ]
}
Пример:
switch
{ case
case
case
case
case
case
case
}

(n_day)
1:
2:
3:
4:
5: puts("Go work!"); break;
6: printf("%s","Clean the yard and");
7: puts("relax!");
26

1.10 Операторы циклов
1. Оператор цикла while
while ()
Пример Ex1_02. Вычислить при x > 1 сумму ряда S=1+1/x1/x2+1/x3-... с точностью ?.
#include
#include
void main(int argc, char* argv[])
{ float s, r,x,eps;
puts("Input x, eps:");
scanf("%f %f", &x, &eps);
if (xeps){ s+=r; r=-r/x; }
printf("Result= %f.\n", s);
}
}
27

2. Оператор цикла for
for (;;);
Эквивалентно:

while ()
{;
;
}
Пример Ex1_03. Вычислить сумму первых десяти натуральных чисел.
#include
int main(int argc, char* argv[])
{ int i,s;
for (i=1,s=0;i
3. Оператор цикла do ... while
do while () ;
Пример. Игнорировать ввод значения, выходящего за
пределы заданного интервала.
do {
printf("Введите значение от %d до % d : ",low, high);
scanf(" %d ", &a);
}
while (ahigh);

29

1.11 Неструктурные операторы передачи
управления
1. Оператор безусловного перехода goto
goto ;
Пример:
again: x=y+a;
...
goto again;

30

2. Оператор досрочного завершения break
break;
Пример Ex1_04. Суммирование до 10 чисел
вводимой последовательности. При вводе
отрицательного числа работа программы
завершается.
#include
void main()
{ int s=0, i, k;
puts("Input up to 10 numbers.");
for (i=1; i
3. Оператор продолжения continue
continue;
Пример Ex1_05. Программа суммирует 10
целых положительных чисел.

#include
void main()
{ int s=0,i=1,k;
puts("Input 10 numbers.");
while(i
Пример Ex1_06. Вывод таблицы кодов
#include
int main(int argc, char* argv[ ])
{
int i,i1,in,col;
puts("Input first and last values");
scanf("%d %d",&i1,&in);
puts("Input colon number");
scanf("%d",&col);
for(i=i1;i





Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.