Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Список операций отношения в языке С.




Язык С имеет ровно шесть операции отношения. Почему их так называют? Дело в том, что обычно относительно двух величин, например, величины А и величины В, можно с определенностью сказать, что друг по отношению к другу они: или равны, то есть находятся в отношении равенства А=В, или не равны, то есть находятся в отношениях неравенства А не = В. Но тогда в последнем случае можно уточнять и думать уже о том, какая из этих двух величин больше и какая меньше. Тут может быть одна из двух возможностей: либо А<В, либо А>В. Иногда еще рассматривают такое отношение, в котором есть доля неопределенности, например, когда говорят, что А<=В, либо, когда А>=В. Сведем эти соотношения между двумя величинами в одну таблицу. Получим следующее:

  • "<" - меньше.
  • "<=" - меньше или равно.
  • ">" - больше.
  • ">=" - больше или равно.
  • "==" - равно.
  • "!=" - не равно.

Таким образом, А по отношению к В может быть: либо меньше, либо меньше или равно; либо больше, либо больше или равно; либо равно, либо не равно. Другого нам просто не дано.

Операции отношения используются в условных выражениях. Например, простейшие условия, которые не содержат логических операций, это следующие: "a<0", "1998>2003", "b==B", "C!=D" и так далее.

Логические операции:

В С++ существует три логические операции:
1) Логическая операция И " && ";
2) Логическая операция ИЛИ " || ";
3) Логическая операция НЕ "! " или логическое отрицание.

Логические операции образуют сложное (составное) условие из нескольких простых (два или более) условий. Эти операции упрощают структуру программного кода в несколько раз.

Логические операции Обозначение в С++ Составное условие

И && a==3 && b>4

ИЛИ || a==3 || b>4

НЕ !! (a==3)

 

следует понять разницу между логической операцией «И» и логической операцией «ИЛИ»

// or_and_not.cpp: определяет точку входа для консольного приложения.

 

#include "stdafx.h"

#include <iostream>

using namespace std;

 

int main(int argc, char* argv[])

{

bool a1 = true, a2 = false; // объявление логических переменных

bool a3 = true, a4 = false;

cout << "Tablica istinnosti log operacii &&" << endl;

cout << "true && false: " << (a1 && a2) << endl // логическое И

<< "false && true: " << (a2 && a1) << endl

<< "true && true: " << (a1 && a3) << endl

<< "false && false: " << (a2 && a4) << endl;

cout << "Tablica istinnosti log operacii ||" << endl;

cout << "true || false: " << (a1 || a2) << endl // логическое ИЛИ

<< "false || true: " << (a2 || a1) << endl

<< "true || true: " << (a1 || a3) << endl

<< "false || false: " << (a2 || a4) << endl;

cout << "Tablica istinnosti log operacii!" << endl;

cout << "!true: " << (! a1) << endl // логическое НЕ

<< "!false: "<< (! a2) << endl;

system("pause");

return 0;

}

Приоритет операций - очерёдность выполнения операций в выражении, при условии, что в выражении нет явного указания порядка следования выполнения операций (с помощью круглых скобок). Если операции имеют одинаковый приоритет, то очерёдность выполнения таких операций определяется согласно свойству ассоциативности. Ассоциативность - направление выполнения операций в случае, если операции имеют одинаковый приоритет. В таблице 1 показаны основные операции в С++, их приоритет выполнения и ассоциативность.

 

 

Таблица 1:

Приоритет операция ассоциативность Описание
  :: Слева направо унарная операция разрешения области действия
[] операция индексирования
() круглые скобки
. обращение к члену cтруктуры или класса
-> обращение к члену cтруктуры или класса через указатель
  ++ Слева направо Постфиксный инкремент
__ Постфиксный декремент
  ++ Справа налево Префиксный инкремент
__ Префиксный декремент
  * Слева направо Умножение
/ Деление
% Остаток от деления
  + Слева направо Сложение
- Вычитание
  >> Слева направо Сдвиг вправо
<< Сдвиг влево
  < Слева направо Меньше
<= Меньше либо равно
> Больше
>= Больше либо равно
  == Слева направо Равно
!= Не равно
  && Слева направо Логическое «И»
  || Слева направо Логическое «ИЛИ»
  ?: Справа налево Условная операция (тернарная операция)
  = Справа налево Присваивание
*= Умножение с присваиванием
/= Деление с присваиванием
%= Остаток от деления с присваиванием
+= Сложение с присваиванием
-= Вычитание с присваиванием
  , Слева направо Запятая

 

 

Циклы и ветвления.

Циклы и ветвления.

К операторам ветвления относятся if, if else,?, switch.

if (логическое выражение) оператор;

Если значение логического выражения истинно, то выполняется оператор.

if (логическое выражение) оператор_1;

else оператор_2;

Если значение логического выражения истинно, то выполняется оператор_1, в противном случае выполняется оператор _2.

логическое выражение? оператор_1: оператор_2;

Если значение логического выражения истинно, то выполняется оператор_1, в противном случае выполняется оператор _2.

Если требуется выполнить несколько операторов, то для if используется составной оператор, а для? операторы перечисляются через запятую.

switch (выражение)

{

case значение_1:

последовательность_операторов_1; break;

...

case значение_n:

последовательность_операторов_n; break;

default:

последовательность_операторов_n+1;

}

Ветку default можно не описывать. Она выполняется, если ни одно из вышестоящих выражений не удовлетворено.

Оператор цикла.

В Си имеются следующие конструкции, позволяющие программировать циклы: while, do while и for. Их структуру можно описать следующим образом:

Цикл с предусловием:

while (логическое выражение)

оператор;

Цикл с постусловием:

do

оператор;

while (логическое выражение);

Цикл с параметром:

for (инициализация; проверка; итерратор)

оператор;

 

if и switch как понятно из вышеизложенного-операторы выбора.

Синтаксис определения структуры и структурной переменной. Доступ к полям структуры. Присвоение структурных переменных

Использование структур обусловлено необходимостью объединить несколько переменных.

Структуры - это, обычно, группа переменных описывающих какую-нибудь сущность.

Объявления у структуры нет. Её нужно сразу определять. Тело структуры должно находиться до начала main.

Пример:

struct имя

{ int x;

Int y;

};

Int mai()

{

Имя a;

a.x=3;//доступ к полям структуры

a.y=5;//доступ к полям структуры

имя b;

b=a;//в этом случае b.x=a.x

b.y=a.y

Структурные переменные:--------------

 

Синтаксис определения и инициализация указателей на структуры. Работа с полями структуры через указатель.

Указатели

Когда компилятор обрабатывает оператор определения переменной, например, int i=10;, он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (i) заменяются компилятором на адрес области памяти, в которой хранится значение переменной. Программист может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями.

Итак, указатели предназначены для хранения адресов областей памяти. В C++ различают три вида указателей:

  • указатели на объект,
  • указатели на функцию
  • указатели на void,

Указатель на функцию

Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Указатели на функции используются для косвенного вызова функции (не через ее имя, а через обращение к переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. Указатель функции имеет тип «указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа»:

тип (*имя) (список_типов_аргументов);

Например, объявление:

int (*fun) (double, double);

задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.

Указатель на объект

Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного). Простейшее объявление указателя на объект (в дальнейшем называемого просто указателем) имеет вид:

тип *имя;

где тип может быть любым, кроме ссылки и битового поля, причем тип может быть к этому моменту только объявлен, но еще не определен (следовательно, в структуре, например, может присутствовать указатель на структуру того же типа).

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

int *a, b, *c;

описываются два указателя на целое с именами а и с, а также целая переменная b.

Размер указателя зависит от модели памяти. Можно определить указатель на указатель и т. д.

Указатель на void

Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов).

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...