Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 4_Проектор.docx
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
53.93 Кб
Скачать

Вещественный тип

Стандарт С++ определяет три вещественных типа данных:

float 4 байта 1.17*10-38 <|x|<3.4*10+38 ; x=0

double 8 байтов 2.2*10-308 <|x|<1.7*10+308 ; x=0

long double 10 байтов 3.4*10-4932 <|x|<1.19*10+4932 ; x=0

Операции для вещественного типа:

OP(вещественный)={+оо ; * / ; + - ; < <= >= > ;== != }

Функции для вещественного типа: #include<cmath>

Fun(вещественный)={fabs(x), sin(x), cos(x), log(x), log10(x), exp(x), pow(a,b), tan(x), atan(x), asin(x), acos(x), sqrt(x)}

Константы вещественного типа

например, естественный вид: [xx…xx].[xx..xx], 136.25, 136. , .25

Константа с порядком: : [xxxx][.][xx..xx] [{E/e} [{+/-}]xx],

например .15е1 , 3Е5 , 1.25Е-3 это константы 0.15*101 ,3*105 ,1.25*10-3

По умолчанию у вещественной константы тип double, можно явно указать тип с помощью суффиксов F,f (для float), L,l(для long double).

Логический тип: bool

Множество значений логического типа {false, true}(эти слова зарезервированы как константы логического типа), false представляется значением 0, любое другое значение интерпретируется как true, если true преобразуется к целому типу, оно имеет значение 1. Переменные логического типа чаще всего используются для хранения результатов сравнения или некоторого условия.

Операции для логического типа:

Op (bool )={ ! ; < <= >= >; == != ; && ; || }

Функции для логического типа: Fun(bool)= ø (нет стандартных)

Символьный тип: char

Возможны типы

Signed char (≈ char) 1байт -128 ÷ 127

Unsigned char 1байт 0 ÷ 255

Множество значений типа char – множество символов ASCII, каждый символ в байте представлен своим кодом (0 ÷ 255),

  • часть символов (с кодами 0÷31)является управляющими , они не имеют графического изображения,

  • символы с кодами 32÷127 имеют фиксированное графическое написание ,

  • наборы символов с кодами 128÷255 отличаются для разных операционных систем , платформ и часто не содержат русских букв.

Коды цифр 0….9 упорядочены по возрастанию и идут без пропусков. Коды больших латинских букв упорядочены по алфавиту и идут без пропусков. То же самое верно и для малых латинских букв.

Операции для символьного типа: -те же, что и для целого типа

(в операциях отношения сравниваются коды символов)

Множество функций для символьного типа пусто, но есть функции, которые выполняют проверку символов и выдают логические значения (истина или ложь).

#include <cctype> //подключение функций классификации и преобразования //символов

isalnum (int ch)-проверка является ли символ буквой или цифрой.

isalpha (int ch)-проверка является ли символ буквой .

isdigit (int ch)-проверка является ли символ цифрой.

iscntrl (int ch)-проверка является ли символ управляющим.

Константы символьного типа

Символьные константы записываются в одиночных кавычках: 'А',’+' и т. д. (это символы, имеющие графическое изображение).

Управляющие символы не имеют графического написания и изображаются '\ символ', говорят в виде управляющей последовательности, это означает, что символ \ «управляет» интерпретацией следующих за ним символов последовательности. Так, ‘\t’ воспринимается не как символ 't', а как символ табуляции. (Символ табуляции означает, что весь поток вывода будет условно разделен на фрагменты одинаковой длины, определяемой шагом табуляции, и следующий символ будет напечатан в начале следующего фрагмента, а не сразу за предыдущим символом. В консольных программах шаг табуляции равен восьми позициям.) Символьная константа '\п' означает перевод курсора в начало следующей строки. Управляющие символы могут использоваться и в составе строк.

Символ обратной косой черты используется для представления символов ’ ” \ ? : ‘\’’, ‘\\’, ‘\”’ , ‘\?’.

Тип void имеет пустое множество значений, он используется для обозначения типа результата функции, которая ничего не возвращает и в др. случаях.

Структура описания функции:

Заголовок_функции { тело функции }

int main()

{<тело функции >}

Программа содержит:

<Директивы препроцессора>

<описания>

< описание функции>

…….

< описание функции>

Функции не могут быть вложенными. Одна из функций обязательно есть функция main(). Программа может состоять из одного текстового файла (его наз. исходный модуль) или из нескольких исходных модулей.

Переменная – объект программы, который может изменять значение в ходе выполнения программы, переменная имеет имя и значение.

Объявление и определение переменной

До первого использования переменной, её обязательно надо объявить (описать). Объявления переменных могут располагаться в любом месте программы. Не обязательно делать все объявления переменных до появления первого исполняемого оператора, как это было принято в С. Тем не менее, объявления наиболее часто употребляемых переменных целесообразно производить в начале программы, чтобы обеспечить ее удобочитаемость.

Объявление переменной предполагает указание имени переменной и ее типа (в простейшем случае):

имя_типа имя_переменной [инициализатор];

Возможно указание нескольких имён:

тип имя [,имя …];

Например:

int a,b;

float x, y, s;

При описании можно присвоить переменной начальное значение, говорят инициализировать её, есть 2 способа сделать это:

short k,I=1; // тип имя =значение ;

int x(10); // тип имя (значение);

Модификатор const перед описанием переменной указывает, что переменная является именованной константой, она должна быть инициализирована при описании и её значение в программе изменять нельзя.

const int=100;

По описанию переменной отводится область памяти размера, соответствующего типу, в которой хранится значение переменной. Доступ к этой памяти – по имени переменной.

Описание переменной определяет её область действия – часть программы, где её можно использовать для доступа к выделенной ей области памяти. Если переменная определена в блоке (внутри{ }) , то она говорят явл. локальной и область её действия от места описания и до конца блока. Если переменная определена вне любого блока, она наз. глобальной, область её действия – весь файл, где она описана.

Есть разница между терминами объявление переменной и определение переменной.

Если при объявлении переменной одновременно выделяется память под нее, то происходит определение переменной. Предложения – объявления переменных, описанные выше, являются и объявлениями, и определениями.

Выражение –языковая конструкция, которая задаёт правило для вычисления значения. Тип этого значения – тип выражения. Выражение содержит операнды , знаки операции и круглые скобки. Операнды: переменные, константы, функции (вызовы функций) и выражения , заключённые в круглые скобки. В языке определены приоритеты операций. (см. список операций с их приоритетами). Записываются выражения в строку, без опущенных и приподнятых символов. a/(b+c)

При вычислении выражения операции выполняются в соответствии с их приоритетами.Чтобы изменить этот порядок, используют круглые скобки. Последовательные операции одного приоритета выполняются так: унарные, условная операция(тернарная) и операции присваивания справа налево, остальные слева направо.т.е. a+b+c-d ≈ (((a+b)+c)-d) а x=y=z ≈ x=(y=z).

Порядок вычисления подвыражений внутри выражений не определён: (sin(x+1)+cos(y-2)), какое слагаемое будет считаться раньше –неясно.

Компилятор С++ знает, как вычислять результат операции, если операнды имеют идентичные типы, тот же тип будет и у результата. Чтобы обеспечить одинаковый тип операндов (в случае когда они разных типов),компилятор выполняет операцию преобразования по умолчанию (так называемое неявное преобразование типа) над выделенными операндами.Например,

int x;

float z; // В выражении x+z x преобразуется к типу float.

Правила преобразования обеспечивают преобразование более коротких типов в более длинные (чтобы обеспечить сохранение значимости и точности). Все типы выстраиваются в иерархическую цепочку:

Int < unsigned int < long < unsigned long < float < double < long double

Операнды типов char, unsigned char,short int, unsigned short int преобразуются к типу int.

Часто бывает необходимо значение одного типа преобразовать в значение другого типа. Есть два способа записи явного преобразования типа:

== традиционная в С запись приведения к типу, например (double)a. Это унарная операция.

==функциональная запись double(a), она не применима к типам , у которых нет простого имени.

char * p= (char *)0777;

Или Typedef char * Pchar;

char * p= Pchar(0777);

Некоторые особенности выражений в С++:

1)Присваивание является операцией выражения, у неё самый низкий приоритет (кроме ,). Простое присваивание:

операнд1 =операнд2; означает, что значение операнд2 получает и операнд1, который размещается слева и называется L-value (L-значение),т.е.то, чему можно присвоить значение.

Присваивание может быть и внутри выражения, но так,чтобы левый операнд был L-value, например, a+b*(c=2), но выражение a+c=3-b является ошибочным (a+с не явл. L-value).

В языке С++ есть сложное присваивание += ,-=, *=, /=, %=, <<=, >>= и др. При выполнении операции в правой части используется и L-значение из левой части: оператор a+=b; означает a=a+b;

n%=b/10; эквивалентно n=n % (b/10);

2)Операция определения размера sizeof имеет две формы и применяется для вычисления размера в байтах некоторого объекта или типа:

a) sizeof выражение // cout << sizeof (x+1.0); (8)

b) sizeof (тип) // cout << sizeof(float); (4)

3)Операции инкремента (++)- увеличения на 1 и декремента (--) –уменьшения на 1 имеют две формы записи префиксную (++х или --х) и постфиксную (х++ или х--). В префиксной операции сначала изменяется операнд, а затем его новое значение используется в следующей операции, а в постфиксной - используется исходное значение операнда, а после он изменяется на 1. Операнд в операции всегда является L-значением. Пример:

int a,b,c;

a=2; b=3;

c=a*b++ +a*a*b; // c=2*3+2*2*3; а затем b становится равным 4.

4) Операции отношения сравнивают два операнда арифметического типа(или указатели), результат логического типа true или false, причём приоритет операций сравнения на равенство или неравенство меньше приоритета остальных операций отношения.

4) Логические операции И (&&) и ИЛИ (||) выполняются над арифметическими операндами или указателями. Если операнды разных типов, то преобразования их не производится, каждый операнд оценивается с точки зрения его эквивалентности нулю. Результат операции true или false. Если по значению первого опранда можно определить результат операции, второй операнд не вычисляется.

5)Условная операция (?:)или тернарная(три операнда).Её формат:

оп1 ? оп2: оп3 Результат операции - true или false. оп1 сравнивается с нулём, если он равен true, результатом условной операции будет значение оп2, иначе – оп3. Например,

Int a,b,m;

m= (a<b) ? a : b;

6) операция : xy= exp( ln(xy) )= exp(y*ln(x ))

остальные операции рассмотрим позже.

Основные управляющие структуры С++.

Т

Д1

ак называются операторы языка. Их количество в языке не минимально, это сделано для удобства пользователей. Доказано, чтобы иметь возможность описать любой алгоритм на некотором языке, достато иметь в нем операторы трех видов: структуры следования:

?,.,&,,

Р азвилки: и

л

Ц икл «пока»:

?

ист

ложь

Это базовые конструкции, каждая имеет 1 вход и 1 выход, они могут вкладываться одна в другую произвольным образом.

Операторы С++.

1)Оператор ввода данных с клавиатуры.

Ввод данных с клавиатуры выполняется с помощью объекта cin, который определён в С++ для работы со стандартным потоком ввода. Этот поток содержит данные, вводимые с клавиатуры (если он не переопределён). Оператор ввода записывается так

cin >> <переменная>; Например, cin>>x;

Операция >> является операцией извлечения. Она извлекает данные из потокового объекта, стоящего в левой части, и присваивает эти данные переменной в правой части. В конце оператора ставится ;. Вводить можно последовательно значения нескольких переменных: cin >> a>>b>>c; Значения их должны стоять во входном потоке в соответствующем порядке, набираются они в символьном виде по одному и за ним нажимается Enter ,либо одно за другим, разделяются пробелами и за последним значением нажимается Enter (клавиша исполнения). Тип переменной в правой части операции >> определяет интерпретации вводимых символов и то, куда будут записываться значения из входного потока.

Int k;

cin>>k;// считывается целое значение в k

double x;

cin>>x; // считывается вещественное число удвоенной точности в x