Основы информатики Лекция 1 Заикин Олег Сергеевич
Заикин Олег Сергеевич к.т.н. н.с. Института динамики систем и теории управления СО РАН ст. преп. кафедры прикладной алгебры и защиты информации ИМЭИ ИГУ Научные интересы: параллельное программирование, криптография О себе
Структура курса базовые алгоритмы и структуры данных введение в программирование на языке C++
Рекомендуемая литература Алгоритмы и структуры данных 1.Левитин А. В. Алгоритмы: введение в разработку и анализ 2. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ. 2-е издание Программирование на C++ 1. Герберт Шилдт. Базовый курс C++, 3-е издание Бьерн Страуструп. Язык программирования С++ (в качестве справочника)
История языка C C – процедурный язык программирования – Dennis Ritchie в Bell Labs разработал язык C. На нем написано ядро ОС Unix 1970-е – C вытеснил Basic с позиции ведущего языка для программирования микрокомпьютеров 1980-е – C адаптирован для использования в IBM PC, что привело к резкому росту его популярности – принят стандарт American National Standart Institute (ANSI) C
История языка C++ С++ – объектно-ориентированный язык программирования общего назначения – Bjarne Stroustrup в Bell Laboratory разработал язык «C с классами» 1983 – переименование языка из «C с классами» в C – вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка 1998 –стандарт C – станадрт C++11
Философия C++ Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C. Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C. Непосредственно и всесторонне поддерживать множество стилей программирования Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно. Не требовать слишком усложнённой среды программирования.
C и С ++ Язык программирования С++ произошёл от C. В дальнейшем они развивались независимо, что привело к росту несовместимостей между ними. Эти различия затрудняют написание программ и библиотек, которые могли бы нормально компилироваться и работать одинаково и в C и в C++.
ВВЕДЕНИЕ В С ++
Инструкция, блок Инструкция – некое действие. Каждая отдельная инструкция завершается точкой с запятой ; Блок – набор инструкций, заключенный между фигурными скобками { } (аналог begin end в паскале). Блок не завершается точкой с запятой.
Комментарии // однострочный комментарий /* многострочный комментарий */ Многострочные комментарии не могут быть вложенными, однострочный комментарий можно вкладывать внутрь многострочного /* Это многострочный комментарий, внутрь него // вложен однострочный комментарий. Это окончание многострочного комментария. */
Идентификаторы Идентификатор – имя, которое присваивается переменной, функции или иному элементу, определенному пользователем. Должны начинаться с буквы или символа подчеркивания. Регистр имеет значение – myvar и MyVar это разные идентификаторы Нельзя использовать в качестве идентификаторов ключевые слова и имена стандартных функций.
Символьные: char (1 байт). Например f Целочисленные short int (2 байта), int (4 байта), unsigned short int (2 байта), unsigned int (4 байта), long long int (8 байт) Например 549 С плавающей точкой: float (4 байта), double (8 байт), long double (10 байт). Например 0,255 Логический: bool, имеющий значения true и false Базовые типы данных
,, …; Пример int a; // переменная целого типа bool b, c; // две переменные логического типа Переменные можно объявлять в любом месте, не обязательно в начале функций. Объявление переменных
выражение – строка, переменная, выражение. Пример hello a a + b В отличие от инструкции, выражение это не действие, а формула. Выражение
Заголовочные файлы Заголовочный файл – «вставляется» компилятором в исходный текст в том месте, где располагается соответствующая директива. #include – директива добавления исходного кода из файла. Используется для подключения заголовочных файлов. Подключение заголовочных файлов: #include строка - путь к заголовочному файлу Пример #Include../folder1/something.h
Заголовочные файлы Стандартная Библиотека коллекция классов и функций, написанных на базовом языке. Основные заголовочные файлы: iostream – потоки ввода/вывода fstream – файловые потоки sstream – строковые потоки iostream – функции и переменные для организации ввода-вывода. Название образовано от Input/Output Stream («поток ввода- вывода»).
Заголовочные файлы Заголовочные файлы стандартной библиотеки подключаются так: #include Эти файлы уже есть в системе, поэтому не нужно указывать их путь. Для заголовочных файлов языка Си нужно указывать расширение h. Пример. #include
Пространства имен Пространство имен (namespace) окружение, созданное для логической группировки уникальных идентификаторов. Необходимо чтобы избежать конфликтов имен идентификаторов. Функциональные особенности стандартной библиотеки объявляются внутри пространства имен std. Вызов объекта: std :: имя_объекта std :: имя объекта;
Поток ввода std :: cin std :: cin поток ввода данных с клавиатуры >> оператор ввода Для ввода данных с клавиатуры std::cin >> переменная1 >> переменная2 >> …; Пример. int num, vol; // объявление переменных std::cin >> num >> vol; // получение двух значений от пользователя (вводит с клавиатуры)
Поток вывода std :: cout std :: сout поток вывода данных в консоль
Функция main Функция int main() обозначает точку начала выполнения программы на C++. Возвращение 0 из функции main() показывает, что программа была завершена успешно. int main() { return 0; // завершается без ошибок } Завершение программы на C++ с ошибкой обозначается путём возврата ненулевого значения. Например, return 1;
Microsoft Visual Studio C++ Как создать проект ( в зависимости от версии VS инструкция может немного отличаться ). File -> New -> Project -> Visual C++ -> General -> Empty project -> Задать имя проекта -> Next -> Finish Добавить файл исходного кода: Project –> Add New Item -> Code –> С++ File (.cpp) -> Задать имя файла (если первый файл, то main) –> Add
Microsoft Visual Studio C++ Ctrl + F7 компиляция F10 компиляция, сборка F5 компиляция, сборка, запуск программы Shift + F5 завершение программы
Первая программа #include int main() { std :: cout
Функция system() Операционная система получает командувыражение: system(выражение); Пример Операционная система получает команду сделать паузу: system(pause);
Первая программа #include int main() { std :: cout
Первая программа #include using namespace std; // После подключения // пространства имен явно к нему не обращаемся int main() { cout
Арифметические операции = Присваивание - Вычитание + Сложение * Умножение / Деление % Остаток от деления -- Декремент ( предыдущий базовый элемент ) ++ Инкремент ( следующий базовый элемент ) Пример float y = 5/3; int k=1; ++k; int m=--k; int n=k++; k++;
Присваивание и бинарные операции Вместо записи = можно записать = Пример Вместо a = a + b; записать a += b; Вместо a = a * b; записать a *= b;
Пример. Суммирование двух чисел #include using namespace std; int main() { int a, b; cout a >> b; // считываем 2 значения cout
Операции сравнения и логические операции > Больше >= Больше или равно < Меньше
Поразрядные операции & И | ИЛИ ^ Сложение по модулю два ~ НЕ >> Сдвиг вправо >1; // 0110>>1=0011=3 x
Условный оператор if (условие) блок операторов; else блок операторов; Пример. if (i==10) { cout
Условное выражение ? – условное выражение A ? C1 : C2 Если A истинно, то C1 иначе C2 Пример Вывод модуля числа cout
Циклы c пред - и постусловием С предусловием: while (условие) оператор; i = 0; while (i < 2) cout
Цикл пересчетного типа for(инициализация; условие продолжения выполнения цикла; приращение) оператор; for (int i = 0; i < 2; i++) cout
Инструкции перехода break; Прерывание всех итераций Пример : for(int i=0; i0) continue; } Если вводится положительное число, продолжаем цикл
Формат: switch (выражение) { case константа: операторы break; … default: операторы } Инструкция выбора Пример switch ( val ) { case 1: cout
Математические функции #include // математические функции abs модуль sin синус cos косинус sqrt квадратный корень pow степень ( аргументы – основание и показатель степени ) floor округление вниз ( наибольшее целое, не большее х )
Явное преобразование к типу ( тип ) - явное преобразование к заданному типу float z; z = sqrt(3); // ошибка z = sqrt((float)3); // ошибки нет
Последовательное вычисление,- последовательное вычисление int k=(y=J, 2*y); Сначала выполняется y=J затем k = 2*y