0-2-5-Syntax.pptx
- Количество слайдов: 13
Синтаксис С++ Набор символов языка C++ включает в себя почти все возможные символы ASCII. В С++ различается регистр. Например: «int absolute. Value; » и «int Absolute. Value; » – разные идентификаторы. Лишние пробелы при записи программы (за редким исключением) игнорируются, используются обычно программистом для улучшения читаемости кода. Например: « int z=5*5*5; » и «int z = 5* 5 ; » значат одно и то же. Строки, начинающиеся с // игнорируются при компиляции, часть строки, находящаяся после // игнорируется. Текст, находящийся между /* и */, включая сами ограничители, игнорируется. Например: main() { printf(“Hello world!”); // здесь может быть ваша реклама! }
С++: ключевые слова Эти слова нельзя использовать в качестве идентификаторов Управление потоком и прочее break case continue default do else false for goto if return sizeof switch true typedef while Типы и свойства типов auto char class const double enum extern float int long register short signed static struct union unsigned void volatile
Система типов С++ Для числовых данных Целые значения int С плавающей точкой double В зависимости от нужд программиста имеется система модификаторов, применяемых вместе с данными типами: signed / unsigned и long / short. Первые определяют интерпретацию знакового бита числа (unsigned int способен хранить значения в диапазоне от 0 до 4294967296, а int от -2147483648 до 2147483647). Модификатор signed / unsigned не меняет размера выделяемой памяти. Модификатор short / long управляет диапазоном возможных значений и изменяет размер выделяемой памяти. Для short double принято ключевое слово float, short то же самое, что short int. Замечание: long int то же самое, что просто long, для long double нет отдельного ключевого слова. Для строковых типов char (на самом деле всегда можно представить себе обычное целое в диапазоне от 0 до 255, помните, типы – это лишь договор об интерпретации байтов памяти. Для типов char возможно применение модификатора signed / unsigned). Да и нет – логические операции bool (допустимо true или false, но на самом деле выделен 1 байт памяти = искусственный тип! Запомните, при вычислении логических выражений целочисленный 0 приравнивается к false, ложь; а любое отличное от 0 значение к true, правде!)
Система типов С++ дает возможность создать пользовательские типы данных. Ключевое слово class. Общая таблица типов С++ Тип Указатель на тип Ссылочный тип int* int& double* double& char* char& bool* bool& void* void& . . my_type* my_type& Другими словами, для каждого типа предусмотрен свой ссылочный тип (который мы обсудим позже) и свой тип-указатель.
Система типов С++ Типы могут использоваться в сочетании с модификаторами: const long int x = 10000000; unsigned short int y = 100; const char* message = “This is a text”; и даже const int* const p = &x; short m = 3; // тоже, что и short int m = 3; float p = 1. 2;
Операторы С++ Список операторов С++: http: //ru. wikipedia. org/wiki/%D 0%9 E%D 0%BF%D 0%B 5%D 1 %80%D 0%B 0%D 1%82%D 0%BE%D 1%80%D 1%8 B_%D 0% B 2_C_%D 0%B 8_C%2 B%2 B#. D 0. 9 F. D 1. 80. D 0. B 8. D 0. BE. D 1. 80. D 0. B 8. D 1. 82. D 0. B 5. D 1. 82. D 1. 8 B_. D 0. BE. D 0. BF. D 0. B 5. D 1. 80. D 0. B 0. D 1. 82. D 0. BE. D 1. 80. D 0. BE. D 0. B 2 Арифметические: * умножение / деление - вычитание или замена знака + сложение *=, /=, -=, += они же, но с присваиванием. Например: int a=5, b=10; a+=10; // теперь а=15 b=-a+a; // b=0 a*=(-b+a); Также С++ имеет два «стильных» оператора, инкремент и декремент. Например: a++ тоже самое, что a=a+1 или a+=1 a-- тоже самое, что a=a-1 или a-=1 Логические: && и || или ! не == равенство != неравенство > больше < меньше >= больше либо равно <= меньше либо равно Например: bool a=true, b=false, c=true; a=!a; // теперь a ложь b=a&&a; // b правда (a&&b)||c; a&&b&&c&&(a||b); a||(!b&&a||!a); //постарайтесь определить значения последних 3 выражений. На практике придется довольно часто составлять такие условия.
Операторы С++ Управления памятью: new – выделяет блок delete – удаляет блок & - взять адрес * - использовать значение по адресу (“dereferencing” указателя) Например: int a=10; int* b = &a; // тут * - не оператор, //а часть типа (int*) – «указатель на целое» *b=100; // теперь a =100, b указатель на a; b+=1; // теперь a=100; b указатель на 32 //бита, следующие за а. Вызовы: [ ] взятие индекса массива ( ) вызов функции -> выбор по указателю. выбор по ссылке (самые используемые операторы объектно-ориентированного программирования)
Управление потоком В С++ операторы можно группировать в смысловые блоки. Блоки ограничены фигурными скобками: { }. Операторы внутри блока выполняются последовательно, блоки выполняются как единые модули. Функция – базовая единица управления. Фактически, это именованный блок операторов. Блок из 3 операторов (2 вызова функции, 1 инкремент) { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Далее в программе блок каждый раз повторяется. Это выглядит ужасно! int i = 10; { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } printf(“And do it once more!”); { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Сделаем из него функцию void Print. And. Increment_i( ) { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Если мы определили функцию, программа станет красивой! int i = 10; Print. And. Increment_i( ); printf(“And do it once more!”); Print. And. Increment_i( ); // and again and so on…
Управление потоком Блок или один оператор можно выполнять много раз циклы Выполняет блок, пока проверка условия дает true. Примечание! Изменение переменной происходит в цикле for по выполнения последнего оператора блока for(начальные значения; проверка условия; изменение переменной) { } while(проверка условия) { } Например: //создадим массив из 100 целых, заполним //его единицами int my_array[100]; for(int k=0; k < 100; k++) my_array[k]=1; printf(“Done!”); // заметим отсутствие { }, когда 1 оператор // printf выполняется 1 раз!!! // то же, но с while int my_array[100]; int j=0; while(j< 100) { my_array[k]=1; j++; // не забывайте увеличивать j, иначе //вечный цикл } printf(“Done!”);
Управление потоком Условное исполнение блока if(условие выполняется) { } Блок (или 1 оператор) выполняется, если условие true, в противном случае блок пропускается if(условие выполняется) { } else { } Блок (или 1 оператор) выполняется, если условие true, в противном случае выполняется блок после else. if(условие выполняется) { } else if(другое условие) { } else { } Блок (или 1 оператор) выполняется, если условие true, в противном случае проверяется другое условие, если true, выполняется блок после else if, если нет, то блок после else. Конструкция if… else может содержать любое количество блоков с else if, проверяющих разные логические выражения последовательно. Выполняется либо один или несколько блоков if / else if, либо блок else (если все условия блоков if не верны).
Заголовочные файлы Директивы препроцессора #include указывает компилятору, что перед выполнением компиляции следует заменить ее на текст файла, указанного этой директивной Стандартные библиотеки С++ содержат ряд важнейших функций и структур данных: управление вводом и выводом; файловые операции; контейнеры; алгоритмы и прочее. #include<stdio. h> // выключить в программу библиотеку ввода-вывода С, которая содержит функции printf(), scanf() для чтения и записи информации в консоли, а также их аналоги для работы с файлом fprintf(), fscanf(). #include<math. h> // математические функции #include<windows. h> // функции API среды системы Windows, например, функция system(), которая выполняет системные команды строки. и многие другие файлы, о которых мы еще поговорим.
Функция fprintf() Первый аргумент – указатель на поток Идея: «ПОТОК» - некая последовательность (большой одномерный массив) «УКАЗАТЕЛЬ» -на текущее положение в потоке. 1. Создать поток из файла (функция fopen()), чтобы читать или записывать данные в файл. Передать указатель на поток (его возвращает функция fopen()) функции fscanf для чтения, или fprintf() для записи данных. В случае вывода на экран (экран-то один) поток экрана уже считается открытым, поэтому printf() и scanf() не имеют этого аргумента. 2. После работы функции fprintf() / fscanf() / printf() / scanf() указатель на поток смещается на количество байт, записанное функцией. Второй аргумент – строка форматированного ввода. Данные, только что записанные fprintf() Новое положение указателя в потоке Она формируется из указанной вами строки, в которой все символы %x (где x – спецификатор формата) заменяются на значения аргументов функции с 3 по n. Таким образом, сама функция (f)printf(. . . ) имеет 2+k = n аргументов, если в строке указаны k символов %. %i – интерпретировать аргумент как int %s – интерпретировать аргумент как char* (строка) %f – интерпретировать аргумент как float и т. д.
Официальный пример /* fscanf example */ #include <stdio. h> int main () { char str [80]; // массив достаточной длины, чтобы записать строку “PI, TEST” float f; // место в памяти для числа с плавающей точкой FILE * p. File; // указатель на объект типа FILE (тип FILE пользовательский и описан в stdio. h) p. File = fopen ("myfile. txt", "w+"); // функция fopen откроет поток в файл “myfile. txt” из каталога программы // если файла нет, его создаст. И вернет указатель на поток, в начало файла fprintf (p. File, "%f %s", 3. 1416, "PI"); // запишет в файл форматированную строку «число с плавающей точкой-пробел-строка» // используется два %, следовательно нужно дать 2 аргумента, первый из которых // интерпретируется как float, второй как char* (строка = массив из символов char) // Тонкий момент: “PI” – на самом деле массив char из 3 элементов! ‘P’, “I’, “ ’ // Поэтому вместо %s запишется содержимое памяти по char*, начиная с адреса // ‘P’ и пока в памяти не встретится ‘ ’. rewind (p. File); // перемотка – вернуть указатель потока в начало файла! fscanf (p. File, "%f", &f); // теперь чтение. Читаем 8 байт и интерпретируем как float, записываем в память по // адресу, где создалась наша f (в стеке, автоматически). Указатель p. File увеличится на 8 // байт fscanf (p. File, "%s", str); // Читаем теперь строку fclose (p. File); // Закрываем поток (а в папке с нашей программой теперь есть файл myfile. txt) printf ("I have read: %f and %s n", f, str); // Выводим на экран строку return 0; }
0-2-5-Syntax.pptx