Доделување на вредност (=)Една променлива може, во различни временски периоди, да се користи за чување на различни вредности. Во C++, вредности на променливите им се доделуваат со примена на операторот '='. На пример, со изразот "prom=1000;" и се доделува вредност 1000 на променливата prom. Запаметете, во C++, доделувањето на вредности се извршува од десно на лево (вредноста која се наоѓа од десна страна на операторот '=' и се доделува на променливата која се наоѓа од лева страна на операторот). Обратното не важи - вредноста на променливата која се наоѓа од левата страна на операторот не влијание, на никаков начин, на вредноста на изразот кој се наоѓа од десната страна на операторот. На пример, со изразот "a=b;" на променливата a и ја доделуваме вредноста која до тој момент се наоѓала во променливата b. Променливата b си ја задржува својата вредност. Многу важно е да забележиме дека со операторот '=' се врши доделување на вредност, а не поврзување на изразите кои се наоѓаат од двете страни на операторот. На пример, по извршување на операцијата за доделување на вредност "a=b;", променливите a и b, на ниту еден начин, не се поврзани една со друга. Евентуалната промена на вредноста на променливата b подолу во програмата нема да предизвика и промена на вредноста на променливата a:
Пример
1
Едно интересно својство на операторот за доделување на вредност '=' е што неговото извршување резултира со враќање на вредноста која се наоѓа од десната страна на изразот. На пример, по извршување на наредбата "a=b=c=10;" сите три променливи (a, b и c) ќе ја содржат вредноста 10 (c=10 враќа резултат 10; потоа b=c=10 враќа резултат 10). Ова својство може да се искористи и во многу посложени пресметки. На пример, наредбата "a=b+(c=10+5);" е еквивалентна (има ист ефект) со извршувањето на двете наредби "c=10+5;" и "a=b+c;" - наведени последователно. По извршување на наредбата "a=3+(c=10+5);", променливата c ќе содржи вредност 15 (c=10+5), додека a ќе содржи вредност 18 (a=3+15).
Пример
2
Аритметичките оператори се користат за изведување на математичките
операции.
Операциите собирање, одземање и множење го имаат стандардното математичко значење. Доколку операциите (важи за сите аритметички операции) се извршуваат врз операнди од ист тип, резултатот е операнд од истиот тој тип (доколку, во изразот "a+b", а и b се променливи од тип int, и резултатот ќе биде од тип int). Доколку, барем една од променливите е од тип на податок кој овозможува чување на вредности кои се децимални (реални) броеви, тогаш и резултатот ќе биде од тип кој овозможува чување на децимални броеви (доколку, во изразот "a+b", а е променлива од тип int, а b е променлива од тип double, тогаш резултатот ќе биде од тип double). Ова не важи за операторот '%' - тој може да се извршува само врз податоци кои се цели броеви. Доколку двата податока се цели броеви, тогаш резултатот од извршување на операцијата делење (a/b) ќе биде цел број. На пример, 5/2 ќе врати вредност 2 (иако 5/2 e 2.5). Доколку барем еден од податоците е реален (децимален) број, резултатот од извршувањето на операцијата делење ќе биде реален (децимален) број. На пример, 5.8/2 ќе врати вредност 2.9 (бидејќи операндот 5.8 е реален број). Делење со 0 (или 0.0) не е дозволено. Операторот '%' може да се примени само врз целобројни податоци. Резултатот од извршувањето на операцијата a%b е остатокот од делењето на бројот a со b. На пример, 10%3 е еднакво на 1 (10/3 e 3, со остатокот 1 - бидејќи 10=3*3 + 1), 25%7 е еднакво на 4 (25/7 е 3, со остаток 4 - бидејќи 25=7*3+4). Операторот '%' најчесто се користи при проверка на тоа дали еден цел број е делив со друг - во тој случај изразот a%b треба да е еднаков на 0 (бидејќи доколку b го дели а, нема да се појави остаток при нивното делење). Следната програма го демонстрира ефектот на секој од аритметичките оператори споменати погоре:
Пример
3
Скратување на изрази (+=, -=, *=, /=, %=, ++, --)Многу често, се појавува потреба од промена на вредноста на една променлива преку вршење на математичка операција врз истата таа променлива (a=a+5). C++ подржува 5 оператори (по еден оператор за секоја аритметичка операција) кои овозможуваат скратено пишување на горенаведениот тип на операции. На пример, наместо да пишуваме "а=а+5;" сега можеме да напишеме "a+=5;", наместо "a=a*5;" може да напишеме "a*=5;", наместо "a=a/b;" може да напишеме "a/=b;", итн. Следнава табела ги содржи сите потребни информации за овие оператори:
Зголемувањето на вредност за 1 и намалувањето на вредност за 1 се, исто така, операции кои се извршуваат многу често. И овие операции, во C++, си имаат свој оператор преку кои се дефинирани (++ и --, соодветно). Всушност, постојат две верзии (prefix и postfix) за секој од овие два оператори (++ и --) - зависно од тоа дали операторот се наоѓа пред променливата (++x) или по променливата (x++):
За едноставни изрази како "x++;" двете верзии (prefix и postfix) ќе резултираат со зголемување/намалување (за 1) на вредноста која се чува во променливата x. Разликата се забележува во случаи кога резултатот од изразот се користи во некоја поголема наредба (како "y=x++;" и "y=++x;"). Во овој случај, двете верзии на операторите се однесуваат на различен начин: prefix верзијата ("y=++x;") прво ја зголемува вредноста на променливата (во случајов x) па го предава резултатот (зголемената вредност), додека postfix верзијата ("y=x++;") создава копија од вредноста на променливата x, ја предава привремената вредност, па дури потоа ја зголемува вредноста на x. На пример, доколку x=5 и ја извршиме наредбата "y=++x;", по извршување на наредбата вредноста на x ќе биде 6 и вредноста на y ќе биде 6 - прво се зголемува x, па потоа се испраќа нејзината "зголемена" вредност. Од друга страна, доколку x=5 и ја извршиме наредбата "y=x++;", вредноста на x ќе биде 6, но вредноста на y ќе биде 5 - најпрвин се прави привремена копија од вредноста на x и таа вредност се доделува на y, па дури потоа се зголемува x. Следнава програма го демонстрира ефектот на неколку оператори споменати во овој дел:
Пример
4
Споредбени
(релациони) оператори
Споредбените оператори се користат за споредба на две вредности.
Забелешка: Резултатот на споредбените искази е
bool
вредност true (вистина – 1)
или false (лага - int x = 5; Забележете ја разликата помеѓу операторите '=' и '==': операторот '=' служи за доделување на вредност на променлива, додека операторот '==' служи за споредување на два изрази (изразот кој се наоѓа од неговата лева страна и изразот кој се наоѓа од неговата десна страна). Следнава програма го илустрира начинот на користење на релациските оператори:
Пример 5
|
Oператор |
Опис |
Пример |
|
&& |
Логичко and
/ и |
Дава резултат вистина ако двата
искази се вистина |
x < 5 && x
< 10 |
|| |
Логичко or
/ или |
Дава резултат вистина ако еден од исказите е вистина |
x < 5 || x < 4 |
! |
Логичко not
/ не |
Негација, дава false ако е true и
обратно |
!(x < 5 && x <
10) |
Важно е да се наведе дека C++ ги врши само споредбите кои се задолжителни (т.н. short-circuit пресметување): доколку имаме израз од типот "a && b && c", и a има вредност false, каква и да е вредноста на b и c, изразот повторно ќе има вредност false (бидејќи, кај логичко И, изразот е true само ако сите операнди се true). Кај логичко ИЛИ важи обратното - ако еден од операндите е true, тогаш целиот израз е true (нема потреба да се проверува остатокот од изразот). Следнава програма го прикажува ефектот на логичките оператори:
#include <iostream>
using
namespace
std;
int
main() {
bool
result;
bool
b1 =
true ,
b2 =
false ;
result = !b1;
//result = false
result = !b2;
//result = true
result =
!(b1);
//result = false
result =
!(!b1);
//result = true
result = b1
&& b2;
//result = false
result = b1
|| b2;
//result = true
result = (5 >
3);
//result = true
result = !(5
> 3);
//result = false
result =
(5>3) && (7>=7);
//result =
true
result =
(2>3) || (1>2) || (4>=5);
//result =
false
int
z = 0;
result =
(1>2) && (++z == 1);
cout <<
"z="
<< z << endl;
//pechati
'z=0'
result =
(1>2) || (++z == 1);
cout <<
"z="
<< z << endl;
//pechati
'z=1'
return
0; } |
|
---|