Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемКонстантин Мишагин
1 1 Язык С++
2 2 Спец.семинар «Язык С++» Симуни Михаил Лазаревич msimuni.wikidot.com/cpp группа спец.семинар "Язык С++" (мат-мех 13)
3 3 Какие темы будут на семинаре? Простые вещи ( указатели, функции, классы, наследование, работа со строками ) Программирование по новому стандарту (auto, for по контейнеру, лямбда выражения и т.д.) STL (vector, list, map и т.д.) Более сложные вещи: исключения, переопределения операторов, шаблоны, RTTI, препроцессор Еще С++11 (rvalues, variadic templates и т.д.) Может быть что-то еще (приемы ООП, приeмы программирования шаблонов, MFC) – в зависимости от интересов участников и смотря сколько останется времени.. (но обычно его остается мало )
4 4 Что будет на семинаре? Задачи на дом (примерно по 4 на занятии) Доклады участников (темы на сайте) Баллы: 1 балл за задачу (иногда больше) 8-10 баллов за доклад М.б. больше для очень хорошего доклада (и меньше для не очень хорошего..)
5 5 Что надо будет для зачета? Набрать >= 16 баллов В конце контрольная – несколько несложных (более-менее) задач Больше баллов – льготы на зачете 24 – минус 1 задача 32 – минус 2 задачи 40 – минус 3 задачи и т.д.
6 6 Еще про задачи Правила про задачи: можно присылать по почте, или приносить на листке не позже начала пары можно писать не (совсем) правильно нельзя присылать очень похожие решения…
7 7 Еще о курсе Литература – см. на сайте На сайте - Как создать консольное приложение на Visual C++ Компилятор - в общем, любой Например бесплатная Visual Studio Express или Visual C++ Express 2010
8 8 Какие бывают числа? Когда какие использовать?
9 9 Какие бывают целые числа short – 16 бит – +- 32К long – 32 бита – +-2*10 9 long long – 64 бита +-9*10 18 int – это тот вариант, который быстрее работает Практически для всех компиляторов = long (для очень старых = short) char – 8 бит Замечание: Здесь и дальше зеленым курсивом выделены новые возможности, которых может не быть в некоторых компиляторах.
10 10 Когда какие числа использовать? Если коротко: int Подробнее: 1. Больше 2*10 9 – long long 2. меньше 32K, очень экономим память short 3. больше 32K, должно работать везде long 4. иначе int Если нужен точный размер? int16_t, int32_t, int64_t
11 11 Числа без знака unsigned short unsigned long unsigned long long unsigned char unsigned int (или просто unsigned).
12 12 Когда (не)использовать unsigned Если коротко: почти никогда Tипичная ошибка: unsigned u1, u2; … if (u1 – u2 < 0) { … никогда не выполниться … Подробнее: Надо если… 1. Если важно поведение при переполнении unsigned i = ; i = i*i; 2. Если вообще нет арифметических операций (например, работа с битами) Замечание: Здесь и дальше синим курсивом выделено личное мнение, с которым, очень может быть не все согласны.
13 13 Вещественные числа float – 4 байта – точность 6-7 цифр double – 8 байт – точность 15 цифр long double – в Visual C++ == double - почти во всех остальных компиляторах – 10 байт.
14 14 Какие вещественные числа использовать? Если коротко: double Подробнее: 1. Oчень экономим память, низкая точность float 2. Иначе double.
15 15 Арифметические операции. Какие могут быть проблемы?
16 16 Проблемы при арифметических операциях int i = 100; double x = i / 3; // Получится x == 33 Преобразования зависят только от аргументов, но не от результата unsigned u = 100; int i = 5; if (u – i < 0) { … никогда не выполниться … числа со знаком преобразуются в unsigned
17 17 Логические и целые значения, преобразования между ними
18 18 Преобразования логических значений в целые и наоборот bool b = true; b = false; операции: && - «И», || - «ИЛИ», ! – отрицание … bool там, где надо целое: true 1 false 0 целое там, где надо bool: 0 false не 0 true.
19 19 Ну, например: int i = 3; int j = i + (i>0);// bool int if (i)// int bool то же, что if (i != 0) if (!i) то же, что if (i == 0)
20 20 Порядок вычисления выражений
21 21 Порядок вычисления выражений int i = 3; int j = i++ - i++; Чему будет равно j ? x*2+y*3 Порядок вычисления не определен f(x) + g(x) + h(x) Ответ: может быть любым!
22 22 Иногда порядок вычисления определен 1. && и || && if (i++ > 0 && j++ > 0) if (i > 0 && a[i] == 5) || if (i++ > 0 || j++ > 0) Называется short-circuit evaluation 2. Еще операторы условие ? выражение1 : выражение2 k = i > j ? i : j; выражение1,выражение2 k = i++, j++; Замечание: Здесь и дальше таким цветом показывается информация «просто для сведения»
23 23 Oсновныe возможности (коротко)
24 24 Лексика, выражения, операторы
25 25 Лексика Комментарии // все до конца строки - комментарий /* Это тоже комментарий */ /* это многострочный комментарий */ Идентификаторы строчные и заглавные буквы различаются Например: max Max MAX - разные идентификаторы. нельзя использовать слова, которые используются в самом языке (if, else и т.п.) Какие имена лучше не использовать? Начинающиеся на _ (_max) Из одних заглавных букв – только препроцессор (MAX), и некоторые еще называют так константы
26 26 Основные операции арифметические операции +, -, *, /- обычные арифметические операции % - остаток от деления (mod в Паскале) сравнения ==равно!= не равно больше = больше или равно логические операции &&"и" ||"или" !отрицание
27 27 Операции типа присваивания Присваивание чему_присвоить = что_присвоить i = j*2; Операции типа присваивания i+=n;сокращенная запись для i=i+n и аналогично для *= += *= -= /= %= (и для большинства других операций) Присваивание и операции типа присваивания в С++ - это выражения. i = ( j = 5 ) + ( k += 7); Значение такого выражения - значение левой части. i = j = k = 0;
28 28 ++ и -- i++сокращенная запись для i=i+1 i-- сокращенная запись для i=i-1 В чем разница между i++ и ++i ? для i++ результат - значение до присваивания для ++i результат - значение после присваивания i = 3; cout
29 29 Простой ввод-вывод Вывод:cout > i; можно выводить или вводить несколько значений cout > x >> y >> z;
30 30 Простые описания переменных Простые описания переменных тип имя_переменной; int i; Можно задавать начальные значения: тип имя_переменнoй = начальное_значение; или тип имя_переменнoй( начальное_значение ); int i = 5; // или int i(5); int i = j + 1;// или int i(j+1); И рекомендуется задавать! int i; i = 5;// Так лучше не писать
31 31 Как описывать массивы? тип имя[размер]; int a[100]; Размер должен быть константой: Индексы элементов начинаются с 0. (Т.е. массив а состоит из элементов a[0],a[1],…,a[99] ). У массивов тоже можно задавать начальные значения при описании: int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int a[10] = {0}; // Будут все 0 int a[] = {1, 2, 3}; // Размер вычислится автоматически
32 32 sizeof sizeof тип sizeof выражение sizeof a / sizeof a[0] Количество элементов массива
33 Операторы 33
34 Оператор-выражение выражение; выражение - как правило, присваивание или вызов функции. i = 5; f(5); Но, в принципе, может быть любое выражение: i+1; // так писать можно (хотя бессмысленно) 5; 34
35 Составной оператор { несколько операторов или описаний } { int tmp = x; x = y; y = tmp; } 35
36 Условный оператор if (x > y) cout
37 Циклы while и do … while цикл while while ( условие ) оператор i = 0; while ( i < 10 ) { cout > x; } while (x != 0) всегда хотя бы 1 раз выполняется 37
38 Цикл for for (инициализация; условие окончания; шаг) оператор; for (int i = 0; i < N; i++) … for (double x = 0 ; x
39 break; и continue; break; выход из ближайшего цикла или оператора switch for (int i = 0; i < 100; i++) { if (a[i] == 0) break; s += a[i]; } continue; переход на следующий виток цикла (редко используется) for (int i = 0; i < 100; i++) { if (a[i] < 0) continue; s += a[i]; } 39
40 Простая программа на C++ #include using namespace std; int main() { int n; cin >> n; int prod = 1;// Вычисляем факториал for (int i=2; i
41 Указатели 41
42 42 Указатели Описание:тип * переменная; int* p;// Указатель на int Переход по указателю:*указатель int i = *p; *p += 10;
43 43 Указатели Адрес:&обьект; int j; p = &j; *p = 5;// То же, что j = 5 Нулевой указатель p = 0; if (p != 0) { … p = NULL; // NULL – синоним 0 p = nullptr; // C++11
44 44 Указатели – динамическая память Динамическая память: new и delete p = new int; p = new int(56);// С инициализацией … delete p; Динамическое отведение массивов p = new int[k]; // Отвести массив из k элементов Размер может быть любым целым выражением Освобождение массивов delete [] p;// Не забыть [] !!!
45 45 Указатели и массивы int a[100]; int* p; p = a; // a – адрес нулевого эл-та (&a[0]) p + n; // на n ячеек вперед p - n; // на n ячеек назад p += n p -= n p++ p p1 – p2 // Сколько ячеек между p1 и p2? if (p1 < p2)
46 46 Д.з. 1. Ввести n. Сосчитать 1/ / / / /9 2 … и так далее до 1/(2*n+1) 2 2. Ввести целые числа, пока не будет введено число 0. Найти произведение введенных чисел. Например: ответ д.б Ввести n. Найти последнюю ненулевую цифру числа n!. Например, n=5 – ответ д.б. 2 (так как n! = 120). Замечание: n может быть довольно большим, скажем n
47 47 Если вы ответите на эти вопросы и пришлете ответы мне, вы мне очень поможете.. Заранее спасибо. 1. Знаете ли вы C или С++? а. имею представление b. могу написать простую программу c. могу написать довольно сложную программу d. знаю очень хорошо 2. Какие еще языки программирования вы знаете? (Если вы не уверены, знаете вы язык или нет, можете, как в вопросе 1 указать a,b,c или d). 3. Что бы вы хотели изучить подробнее, если будет время? а. шаблоны (traits и т.д.) b. MFCc. C++11 d. Booste. еще что-то? 4. Что из этого можно пройти коротко, потому что и так все понятно? А что лучше подробно разобрать? Напишите про эти пункты, пожалуйста а. циклы, простые программы и т.д. b. функции, передача параметров c. классы d. наследование, виртуальные функции е. указатели
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.