Операторы отношения (сравнения) и логические


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

Операторы отношения и логические перечислены в табл. 3.1. Обратите внимание на отношения равенства и неравенства: в С++ не равно обозначается знаками !=, а равно - двойным знаком равенства, ==. В С++ результат операции отношения или логической образует результат типа bool. Другими словами, результат операции отношения или логической всегда равен либо true, либо false.

Таблица 3.1. Операторы отношения и логические в С++

Операторы отношения  
Оператор Значение
> Больше чем
>= Больше чем или равно
< Меньше чем
<= Меньше чем или равно
== Равно
!= Не равно
Операторы логические  
Оператор Значение
&& И
!! ИЛИ
! НЕ

Замечание

Для старых компиляторов результат операции отношения и логической может быть целым числом, принимающим значение 0 или 1. Это различие носит в основном академический характер, потому что С++, как это уже отмечалось, автоматически преобразует true в 1, a false в 0 и наоборот.

Операнды, участвующие в операции отношения, могут принадлежать почти любому типу; необходимо только, чтобы их сравнение имело смысл. Операнды логической операции должны образовывать истинный или ложный результат. Поскольку ненулевое значение истинно, а нулевое ложно, это означает, что логические операторы допустимо использовать с любым выражением, дающим нулевой или ненулевой результат. Логические операторы используются для поддержки базовых логических операций И (AND), ИЛИ (OR) и НЕ (NOT), согласно следующей таблице истинности:

Р q p И q p ИЛИ q НЕ р
Ложь Ложь Ложь Ложь Истина
Ложь Истина Ложь Истина Истина
Истина Истина Истина Истина Ложь
Истина Ложь Ложь Истина Ложь

Оба типа операторов, и логические, и отношения, имеют более низкий приоритет, чем арифметические операторы. Это означает, что выражение вроде 10 > 1 + 12 дает тот же результат, что и вариант 10 > (1 + 12). Результат, разумеется, ложен.

С помощью логических операторов можно объединять любое количество операторов отношения. Например, в этом выражении объединены три оператора отношения:var > 15 || !(10< count) && 3 <= item

 

26. Передача аргументов по ссылке

Пример

Для того чтобы аргумент передавался не по значению, а по ссылке, перед именем соответствующего аргумента необходимо указать оператор &. В листинге приведен практически тот же программный код, что и в листинге 7.1, однако аргумент функции incr () в этом случае передается по ссылке.

#include "stdafx.h"

#include <iostream>

using namespace std;

//Аргумент передается по ссылке:

int incr (int &m);

int main()

{int n=5;

cout << "n =" << incr (n) << endl;

cout << "n =" << n << endl;

cin >> n;

return 0;}

int incr (int &m)

{m=m+1;

return m;}

 

27. Передача аргументов по значению

Пример

#include "stdafx.h"

#include <iostream>

using namespace std;

//Аргумент передается по значению:

int incr (int m);

int main()

{ int n=5;

cout << "n =" << incr (n) << endl;

cout << "n =" << n << endl;

cin >> n;

return 0;}

int incr (int m)

{ m=m+1;

return m; }

Программный код функции incr () предельно прост: функция в качестве значения возвращает целочисленную величину, на единицу превышающую аргумент функции. Особенность программного кода состоит в том, что в теле функции выполняется команда m=m+1, которой с формальной точки зрения аргумент функции т увеличивается на единицу, и именно это значение возвращается в качестве результата. Поэтому с точки зрения здравой логики после вызова функции переменная, переданная ей в качестве аргумента, должна увеличиться на единицу. Однако это не так. Вывод результатов выполнения программы на экран будет выглядеть так:

n =6

n =5

Если с первой строкой проблем не возникает, то вторая выглядит несколько неожиданно. Хотя это только на первый взгляд. Остановимся подробнее на том, что происходит при выполнении программы.

В начале главного метода main () инициализируется со значением 5 целочисленная переменная n. Далее на экран выводится результат вычисления выражения incr (n) и затем значение переменной n. Поскольку функция incr () возвращает значение, на единицу большее аргумента, результат этого выражения равен 6. Но почему же тогда не меняется переменная n? Все дело в механизме передачи аргумента функции. Поскольку аргумент передается по значению, при выполнении инструкции incr (n) для переменной n автоматически создается копия, которая и передается аргументом функции incr (). В соответствии с кодом функции значение переменной-копии увеличивается на единицу и полученное значение возвращается в качестве результата функции. Как только результат функцией возвращен, переменная-копия прекращает свое существование. Поэтому функция вычисляется корректно, а переменная-аргумент не меняется!

 

Переменная

Айнымалы – атауы бар жад облысы

Жариялау форматы: тип айнымалы аты[];/массив

Тип айнымалы аты ();/функция

Возможно, в программировании нет более фундаментальной конструкции, чем переменная. Переменная представляет собой именованную ячейку памяти, которой может быть присвоено определенное значение. В дальнейшем, по ходу выполнения программы, значение переменной может быть изменено. Другими словами, содержимое переменной не фиксировано, а поддается изменениям.

В С++ все переменные, перед тем, как их использовать, должны быть объявлены, при этом в объявлении переменной должно быть указано, какого рода значения будут содержаться в этой переменной. Эта называется типом переменной. В нашем случае length может содержать только целочисленные значения, т. е. целые числа в диапазоне от -32768 до 32767. Для того, чтобы в языке С++ объявить целочисленную переменную, перед ее именем следует поставить ключевое слово int.

Общая форма объявления переменной имеет следующий вид:

тип_переменной имя_переменной ;

 

Присваивание(Меншіктеу)

В одной строке может стоять больше одной операции присваивания =.

Пример.

a=b=c=d=100;

Знак = всегда означает: "переменной слева присвоить значение, стоящее справа ". Операция выполняется справа налево. Поэтому первой значение 100 получает переменная d, затем с, b и а.

Знак присвоить может стоять даже внутри математического выражения:

value=5+(r=9-c)

Присваивание имеет более высокий приоритет, чем сложение и вычитание. Поэтому сначала переменной r будет присвоено значение 9-с. А затем переменная value получит значение 5+9-с.

Құрама меншіктеу(Составное присваивание)

При написании программы часто требуется изменить значение переменной. Например, требуется взять текущее значение переменной, прибавить или умножить это значение на какое-то выражение, а затем присвоить это значение той же переменной. Такие операции выполняют операторы составного присваивания.

 

Операция Пример Эквивалент

+ = B+ = 500; B= b+ 500;

- = С- = 50; C = с - 50;

* = D* = 1.2; D = d*1.2;

/ = F/ = 50; f = f/.50;

% = m% = 7; M = m% 7;

 

Прототип функции

Если нужно вызвать функцию до ее определения в этом файле или определение функции находится в другом исходном файле, то вызов функции следует предварить ее объявлением, т. е. задать прототип функции, который позволит компилятору выполнить проверку типов аргументов и возвращаемого значения.Формат прототипа:

<класс памяти><тип>имя (список формальных параметров);

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

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

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

Если прототип функции не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции. При этом список типов и числа параметров функции формируется на основании типов и числа фактических аргументов, используемых при данном вызове.

Вызов функции

Для обращения к функции используется имя функции.

Формат вызова:

Имя_функции (список),

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

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

Выполнение вызова функции происходит следующим образом.

Вычисляются выражения в списке фактических аргументов. Затем, если известен прототип функции, тип полученного фактического параметра сравнивается с типом соответствующего формального параметра. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных параметров, если только функция не имеет переменного числа параметров. В последнем случае проверке подлежат только обязательные параметры. Если в прототипе функции указано, что ей не требуются параметры, а при вызове они указаны, формируется сообщение об ошибке. Происходит присваивание значений или адресов фактических аргументов соответствующим формальным параметрам. Управление передается на первый оператор функции. Выполняются действия, указанные в теле функции. Выполнение оператораreturn в теле функции возвращает управление и вычисленное значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено.

Пример программы

Найти корни уравнения x = sin2 x / 4 + 0,27 методом итераций с точностью e.

Расчетная формула x1 = sin2 x0 / 4 + 0,27, где условие нахождения искомого корня |x1x0| < e – x0 - начальное значение корня уравнения (обычно принимается равным нулю), x1 - значение корня уравнения на следующей итерации, e - заданная точность вычисления корня (например, 0.001).

В программе используется старый стиль определения функции:

#include <stdio.h>

#include <math.h> /*Подключение стандартных библиотек*/

#define EPS 0.001 /*Задание точности вычисления корня*/

float root(x, E) /*Заголовок функции с именем root*/

float x,E; /*Описание аргументов функции*/

{ /*Тело функции*/

float x1;

for (x1=pow(sin(x),2)*.25+.27;

fabs (x1−x)>E;

x=x1,

x1=pow(sin(x),2)*.25+.27);

return (x1);

} /*Завершение описания функции root*/

int main()

{

floatx0;

printf ("\n Введите значение x0");

scanf ("%f",&x0);

printf ("\n Корень уравнения %f", root(x0,EPS));

//Вызов функции root()

return 0;

}

 









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь