Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Структурированные типы данных
К структурированным типам данных относятся структуры и объединения. struct <name> {type1 name1; type2 name2;}; // структура union <name> {type1 name1; type2 name2;}; // объединение (все данные размещены с одного адреса в памяти) Константы Целые константы задаются с помощью целых чисел без разделяющей точки и имеют тип int. Можно явно указать тип long или unsigned при помощи использования суффиксов соответственно «l», «L», «u», «U». Пример: 123L, 43u, 53lu, 63UL Константа с плавающей точкой может включать семь частей: целая часть, десятичная точка, дробная часть, символ экспоненты, показатель десятичной степени (со знаком или без), суффикс. При отсутствии суффикса константы имеют представление double, суффикс f или F соответствует float, суффикс l или L – long double. В записях вещественных констант могут опускаться (не одновременно): или целая или дробная часть; или десятичная точка или признак экспоненты; суффикс. Пример: 45. .6 4.6 1.25f 3.5e-4 5E+6L Перечислимые константы вводятся при помощи служебного слова enum. Это целочисленные константы, которым присвоены идентификаторы. Идентификаторы могут быть перечислены через запятую, тогда им последовательно присваиваются значения от нуля, или для каких-нибудь из них могут быть указаны значения, которые меняют порядок присвоения. Примеры: enum {zero ,one, two, three} соответствует zero=0, one=1, two=2, three=3. enum {one=1, two, three} соответствует one=1, two=2, three=3. enum {ten=10, two=2, three} соответствует ten=10, two=2, three=3. Символьные (литерные) константы – это один или два символа, заключённые в апострофы. Во время компиляции символьные константы заменяются их кодами. Для записи специальных символов используют эскейп-последовательности, которые состоят из двух-четырёх символов и начинаются с символа «обратный слеш». Например \n соответствует переводу строки (код 10), \r – возврат каретки (код 13), \t – табуляция (код 09) и т.д. Для записи некоторых символов также используются эскейп-последовательности: \\ – обратный слеш, \” – двойная кавычка, \’ – одинарная кавычка, \? – знак вопроса. ВНИМАНИЕ Частой ошибкой является запись «\» вместо «\\», т.к. она не определяется компилятором. Строковые константы – это набор символов, заключённый в двойные кавычки. в строковых константах также могут быть применены эскейп-последовательности. Для записи строковой константы, которая занимает несколько строк, в конце каждой из них должен быть использован символ «\». Операции Присваивание. x=a; Присваивания является операцией и имеет возвращаемое значение, что позволяет использовать её в других выражениях. A=x=9; 5+(x=4) → 9 Операция присваивания является правоассоциативной, то есть, несколько подряд записанных операций присваивания будут выполняться справа налево. Арифметические: a+b; a-b; a*b; a/b– соответственно сложение, вычитание, умножение, деление. a%b - остаток от деления ВНИМАНИЕ при делении целочисленных операндов результат также целочисленный (например 5/2 даст 2) a<<b, a>>b - сдвиги операнда а на b двоичных разрядов влево / вправо. -a; +a – унарные минус и плюс. a&b - поразрядное логическое И (например, 1001b & 1100b → 1000b) a|b - поразрядное логическое ИЛИ a^b - поразрядное логическое исключающее ИЛИ (XOR) ~x - логическое поразрядное отрицание Логические (результат – логическое значение). В языке «С» результатом логической операции является целое число: «1», если результат истинен, и «0», если ложен. В языке «С++» результатом является логическое значение. a&&b, a||b - логические И и ИЛИ Например, 5&&3 → 1 (в значении ИСТИНА), 8||0 → 1, 5&&0 → 0. a<b ,a>b, a<=b,a>=b - все понятно a= =b - проверка на равенство (например, 5==3 → 0, 4==4 → 1) a!=b - проверка на неравенство !x - логическое общее отрицание Операции работы с указателями. &x - взятие адреса *x - разыменовывание указателя Укороченные операции: x+=a - тоже, что и x=x+a аналогично определены операции x-=a, x*=a, x/=a, x%=a, x&=a, x|=a, x^=a, x<<=a, x>>=a. Инкремент и декремент ++x, --x - увеличивает или уменьшает x на 1, затем подставляет в выражение. x++ ,x-- - подставляет x в выражение, а затем увеличивает/уменьшает на 1. Пример (в каждом примере изначально x=3): (++x)+6 → 10, (x++)+6 → 9 (в обоих случаях в результате x=4) (++x) + (++x) → 9 (x++) + (x++) → 7 Операция "," возвращает крайнее правое значение. Пример (объявлены переменные x,x1,x2,x3): x = (x1=4+6, x2=x1-2, x3=x2+7) В результате: x1=10, x2=8, x3=15, x=15. Операция "?:" x?a:b - возвращает a, если х истинно, иначе возвращает b. Пример: (5>2?4:6) → 4, (8>3?5:9) → 9, 5+(7>3?5:2) → 10 Операция sizeof(тип_данных/имя_переменной). Возвращает размер (в байтах), занимаемый данной переменной или типом данных. sizeof(short) → 4
Операторы ветвления и цикла if if (условие) действие1; else действие2; Если условие истинно, выполняется действие1, иначе выполняется действие2. Секция else необязательна. While while (условие) действие; Цикл с предусловием. Действие выполняется, пока условие истинно. Есть также цикл с постусловием: do действие while (условие); For Цикл for выглядит следующим образом и в общем случае не является циклом с заданным числом повторений (в отличие, например, от ЯВУ Pascal). for (инициализация; условие_цикла; изменение_переменых) действие; Например, for (x=0;x<10;x++) a+=f(x); Break Оператор break используют для выхода из циклов for / while и ветвления switch. Для вложенных циклов выход осуществляется на один уровень. Continue Данный оператор вызывает принудительный переход к следующему шагу цикла. Например, требуется сложить все целые числа от a до b не кратные трём. for(int i=a, s=0; i<b; i++) { if (i%3==0) continue; //переходим к следующему значению i s+=i; } Switch Структура записи оператора switch следующая. switch(переменная) { case значение1: набор_действий1; break; case значение2: набор_действий2; break; … default: набор_действий_по_умолчанию; } При равенстве переменной значению 1, выполняется соответствующий набор действий, который может состоять из нескольких операторов и заканчивается словом break. При несовпадении ни с одним из значений, выполняется секция default. Формально, секции «case …: » являются метками, на которые осуществляется переход при совпадении значений. Именно поэтому после перехода на метку выполняются все команды до конца секции switch-case либо до оператора break. Этим можно пользоваться для уменьшения дублирования кода. Например, пусть задано условие: если переменная x равна 0, то вызвать функцию f1(), а если равно 2, то вызвать f1() и f2(). switch(x) { case 2: f2(); //не используем break, т.к. требуется выполнение и следующей команды. case 0: f1(); //не используем break, т.к. дошли до конца. } Функции Объявляются следующим образом: возвращаемый_тип имя_функции(список_формальных_параметров) { ТЕЛО ФУНКЦИИ } список формальных параметров представляет собой перечисление через запятую пар тип данного – имя переменной (имя переменной может отсутствовать). Для функции, которая не возвращает значения (процедура в Паскале), предусмотрен тип данных void. Функции, возвращающие значение, должны обязательно содержать оператор "return возвращаемые_данные". На данном операторе происходит возврат из функции независимо от того, есть ли дальше другие операторы. Для функций void можно использовать return без аргументов для явного выхода из функции в требуемом месте. Пример. int sum(int x, int y) { return x+y; } Описание функции обязательно должно быть раньше (выше) в тексте программы, чем любой её вызов. Функция может быть описана без реализации (упреждающее описание). В этом случае тело функции не записывают, а после описания её заголовка ставят «;». Также при упреждающем описании могут не указываться имена переменных. Пример: void myfunc(int, int); // здесь продолжение кода с вызовом myfunc void myfunc(int x, int y) {…} Допустимо явно не указывать параметры функции, для этого используется многоточие в конце списка параметров. В этом случае компилятор контролирует только явно указанные аргументы. Никаких специальных средств по работе с неявно указанными параметрами функции языки «С» и «С++» не предоставляют, но известно, что переданные фактические параметры располагаются в памяти после явно указанных. Языки «С» и «С++» разрешают использование рекурсии, то есть вызова функцией самой себя. Пример (функция вычисления факториала): long fact(int k) { if (k<0) return 0; if (k==0) return 1; return k*fact(k-1); } Язык «С++» предоставляет дополнительные возможности: – перегрузка функций – несколько функций могут иметь одно имя и тип, но разный набор формальных аргументов, в этом случае компилятор сам выбирает подходящую функцию по фактическим аргументам; – параметры по умолчанию (С++); – подставляемые (inline) функции (С++); Директивы препроцессора Есть специальные команды, которые не компилируются, а лишь указывают препроцессору на необходимость выполнения некоторых действий. Директивы начинаются с символа #. #include <имя_файла> - добавить в данное место содержимое файла, файл содержится в специальном каталоге подключаемых файлов; #include "имя_файла" - тоже, но для файла из текущей папки.
Стандартные заголовочные файлы (аналоги библиотек в других ЯВУ): stdio.h – стандартный ввод-вывод; conio.h – консольный ввод-вывод; string.h – работа со строками; math.h – математические операции; mem.h – функции работы с памятью; limits.h – константы предельных значений; dos.h – команды ОС Ms Dos.
#define идентификатор строка_замещения - заменяет все идентификаторы от директивы до конца файла на строку замещения. #undef идентификатор - отменяет директиву define, после данной директивы замен не производится. #if, #elif, #else, #endif – организуют ветвление. #ifdef, #ifndef – далее следующий код будет откомпилирован только если определена / неопределенна макроподстановка. Метки Идентификатор с последующим двоеточием является меткой. Метка является адресом оператора, следующего за меткой. Используется в операторах switch и goto. Пример есть выше. Указатели Переменные хранят данные и не позволяют их управлять размещением в памяти. Единственная доступная операция – взятие адреса (&). Указатель на переменную хранит адрес размещения данного. Обратиться к данному можно через операцию разыменовывания указателя (*). Объявление указателя осуществляется символом «*» перед именем переменной. Пример: int x; int *t; // объявили указатель t на переменную типа int t = &x; // присваиваем указателю адрес переменной x *t = 4; // используя указатель, присваиваем x значение 4 Указатели и объекты одного типа могут быть объявлены вместе. Пример (см. предыдущий пример): int x,*t=&x; Приведение типов В языке «C» простые типы данных автоматически приводятся к требуемому. Вещественные преобразуются к целым путём отсечения дробной части. Данные большего размера приводятся к данным меньшего размера отбрасыванием старших байт. Для более сложных типов данных, а также для указателей требуется явное преобразование типов. Операция преобразования типа имеет вид: (новый_тип)переменная При этом для объектов (экземпляров классов и структур) операция приведения должна быть определена. Для указателей допустимо приведение к другому указателю. Приведение указателей никак не преобразует сами данные. Примеры приведены далее. |
||
Последнее изменение этой страницы: 2018-05-27; просмотров: 163. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |