Основы информатики Лекция 2. Hello C++ Заикин Олег Сергеевич http://sat.isa.ru/pdsat/files/teaching/ zaikin.icc@gmail.com История языка C C – процедурный язык программирования. – Dennis Ritchie в Bell Labs разработал язык C. На нем написано ядро ОС Unix 1973 – C вытеснил Basic с позиции ведущего языка для программирования микрокомпьютеров 1970-е – C адаптирован для использования в IBM PC, что привело к резкому росту его популярности. 1980-е – принят стандарт American National Standart Institute (ANSI) C 1989 История языка C++ С++ – объектно-ориентированный язык программирования общего назначения. 1979 – Bjarne Stroustrup в Bell Laboratory разработал язык «C с классами» 1983 – переименование языка из «C с классами» в C++ 1985 – вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка 1998 –стандарт C++98 2011 – станадрт 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 Объявление переменных <тип данных> <имя1>, <имя 2>, …; Пример 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 <iostream> #include <ctype.h> Пространства имен Пространство имен (namespace) — окружение, созданное для логической группировки уникальных идентификаторов. Необходимо чтобы избежать конфликтов имен идентификаторов. Функциональные особенности стандартной библиотеки объявляются внутри пространства имен std. Вызов объекта: std :: имя_объекта std :: имя объекта; Поток ввода std :: cin std :: cin поток ввода данных с клавиатуры >> оператор ввода Для ввода данных с клавиатуры std::cin >> переменная1 >> переменная2 >> …; Пример. int num, vol; // объявление переменных std::cin >> num >> vol; // получение двух значений от пользователя (вводит с клавиатуры) Поток вывода std :: cout std :: сout поток вывода данных в консоль << оператор вывода Для вывода данных в консоль std :: cout << выражение1 << выражение2 << …; Пример std :: cout << "abc"; // вывод строки “abc” std :: cout << k; // вывод значения переменной k std :: cout << "abc " << k; // вывод строки и // значения переменной k Функция 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.cpp) –> Add Компиляция и компоновка Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке. Компиляция – трансляция программы с проблемноориентированного языка (файлы с исходным кодом) на машинно-ориентированный язык (объектные файлы). Компоновка – создание исполняемого файла (в Windows – exe-файла) по набору объектных файлов. 21 Microsoft Visual Studio C++ Ctrl + F7 компиляция F10 компиляция, сборка F5 компиляция, сборка, запуск программы Shift + F5 завершение программы Программа «Hello world» #include <iostream> int main() { std :: cout << "Hello world"; return 0; } Результат выполнения программы: Hello world Но консоль сразу после вывода текста закроется. Функция system() Операционная система получает команду “выражение”: system("выражение"); Пример Операционная система получает команду сделать паузу: system("pause"); Программа «Hello world» #include <iostream> int main() { std :: cout << "Hello world"; system("pause"); return 0; } Результат выполнения программы: Hello world Окно с консолью не закроется, будет ждать нажатия любой клавиши. Программа «Hello world» #include <iostream> using namespace std; // После подключения // пространства имен явно к нему не обращаемся int main() { cout << "Hello " << endl << "world"; system("pause"); return 0; } endl – символ новой строки Результат выполнения программы: Hello world Арифметические операции = + * / % -- ++ Присваивание Вычитание Сложение Умножение Деление Остаток от деления Декремент (предыдущий базовый элемент) Инкремент (следующий базовый элемент) Пример float y = 5/3; int k=1; ++k; int m=--k; int n=k++; k++; Присваивание и бинарные операции Вместо записи <пер. 1> = <пер. 1> <бинарная операция> <пер. 2> можно записать <пер. 1> <бинарная операция> = <пер. 2> Пример Вместо a = a + b записать a += b Вместо a = a * b записать a *= b Пример. Суммирование двух чисел #include <iostream> using namespace std; int main() { int a, b; cout << "Enter 2 values« << endl; cin >> a >> b; // считываем 2 значения cout << "Sum is " << a + b; // выводим ответ system("pause"); return 0; } Результат выполнения программы: Sum is <сумма двух введенных чисел> Операции сравнения и логические операции > >= < <= == != && || ! Больше Больше или равно Меньше Меньше или равно Равно Не равно Логическое И Логическое ИЛИ Логическое НЕ Пример int a,b,c,x=5,y=0; a=x&&y; // = false b=x||y; // = true c=!x; // = false Поразрядные операции & | ^ ~ >> << И ИЛИ Сложение по модулю два НЕ Сдвиг вправо Сдвиг влево = оператор присваивания int x=6,y=3; // 0110, 0011 x & y; // 0110 & 0011=2 x | y; // 0110 | 0011=7 x ^ y; // 0110 ^ 0011=5 ~y; // = 1…100 = -4 x>>1; // 0110>>1=0011=3 x<<1; // 0110<<1=1100=12 Условный оператор if (условие) блок операторов; else блок операторов; Пример. if (i==10) { cout << "i == 10"; break; } else i++; Условное выражение ? – условное выражение A ? C1 : C2 Если A истинно, то C1 иначе C2 Пример Вывод модуля числа cout << (n<0 ? -n: n); Поиск минимума min = a > b ? b: a; Циклы c пред- и постусловием С предусловием: while (условие) оператор; i = 0; while (i < 2) cout << i++; С постусловием: do оператор; while (условие); do cout << i++; while (i < 2) Цикл пересчетного типа for(инициализация; условие продолжения выполнения цикла; приращение) оператор; for(int i = 0; i < 2; i++) cout << “Current value of i is ” << i << endl; Начиная с i равного 0 пока i меньше 2 увеличивать i на 1. Итого 2 итерации. Инструкции перехода break; Прерывание всех итераций Пример: for(int i=0; i<10; i++) { cout << i << endl; if( i == 5) break; } Если i равно 5 прерываем цикл continue; Переход к следующей итерации Пример: for(;;) { cin >> i; if (i>0) continue; cout << i << endl; } Выводить введенные числа кроме 0 Инструкция выбора Пример switch ( val ) { case 1: cout << "Val 1"; break; case 2: cout << "Val 2"; break; … default: cout << "Unknown"; Замена больших конструкций If – else } Формат: switch (выражение) { case константа: операторы break; … default: операторы } Математические функции #include <cmath> // математические функции 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