You are on page 1of 5

2 Operaes Aritmticas e Expresses.

Operaes Relacionais.
2.1 Operaes Aritmticas
Em C++ , ns podemos executar operaes aritmticas usando variveis e
constantes. Algumas operaes mais comuns so:
+
adio
subtrao
*
multiplicao
/
diviso
%
resto (mdulo)
Estas operaes podem ser usadas como mostram os exemplos abaixo,
assumindo que as variveis necessrias j esto declaradas:
celsius = (fahrenheit - 32) * 5.0 / 9.0;
forca =

massa * aceleracao;

i = i + 1;

2.1.1 Precedncia de Operadores


Em C++ , assim como em lgebra, h uma ordem de precedncia de
operadores.
Assim, em
, expresses em parntesis so avaliadas
primeiro, seguidos por exponenciao, multiplicao, diviso, adio e
subtrao.
Da mesma forma, em C++ , expresses entre parntesis so executadas
primeiro, seguidas de *, / e % (que tem todos a mesma precedncia), seguido
de + e - (ambos com a mesma precedncia).

Quando operaes adjacentes tm a mesma precedncia, elas so associadas


da esquerda para a direita. Assim, a * b / c * d % e o mesmo que ((((a *
b) / c) * d) % e).
2.1.2 A Operao de Resto (%)
Esta operao usada quando queremos encontrar o resto da diviso de dois
inteiros. Por exemplo, 22 dividido por 5 4, com resto 2 (
Em C++ , a expresso 22

% 5

).

ter valor 2.

Note que % s pode ser utilizados entre dois inteiros. Usando ele com um
operando do tipo float causa um erro de compilao (como em 22.3 % 5).
2.1.3 Expresses e Variveis
Expresses aritmticas podem ser usadas na maior parte dos lugares em que
uma varivel pode ser usada.
O exemplo seguinte vlido:
int raio = 3 * 5 + 1;
cout << "circunferencia = " << 2 * 3.14 * raio << endl;

Exemplos de lugares onde uma expresso aritmtica NO pode ser usada


incluem:
int yucky + 2 = 5;
cin >> oops * 5;

Este exemplo ilegal e causar erro de compilao.

2.2 Operadores Relacionais


Em C++ , h operadores que podem ser usados para comparar expresses: os
operadores relacionais.
H seis operadores relacionais em C++ :

menor que
maior que

menor ou igual que (

maior ou igual que (

==
igual a
!=
no igual a (

Os resultados deste operadores 0 (correspondendo a falso),


ou 1 (correspondendo a verdadeiro). Valores como esses so chamados
valores booleanos. Algumas linguagens de programao como Pascal tem um
tipo de varivel distinto para valores booleanos. Este no o caso do C++ ,
onde valores booleanos so armazenados como variveis numricas tais como
o int.
Considere o seguinte programa:
int main()
{
int idade;
idade =
cout <<
<< endl;
idade =
cout <<
<< endl;
}

17;
"Pode tirar carteira de motorista? " << (idade >= 18)
35;
"Pode tirar carteira de motorista? " << (idade >= 18)

A sada deste programa ser:


Pode tirar carteira de motorista? 0
Pode tirar carteira de motorista? 1

Na primeira linha, idade 17. Logo, 17


Depois disso, idade 35. Logo, 35

>= 18

>= 18

falso, que 0.

verdadeiro, que 1.

Note tambm que o operador de igualdade escrito com ``sinais de igual


duplo'', ==, no =. Tenha cuidado com esta diferena, j que colocar = no lugar
de == no um erro sinttico (no gera erro de compilao), e no significa o
que voc espera.
2.2.1 Precedncia dos operadores relacionais

Operadores aritmticos tem precedncia maior que os operadores relacionais.


Por exemplo, a expresso 3 + 5 < 6 * 2 o mesmo que (3 + 5) < (6 * 2).
Se por alguma razo voc quer que o resultado do uma operao relacional em
uma expresso aritmtica, necessrio usar parntesis. Por exemplo, a
expresso score + (score == 0) ser sempre igual ao valor de score, exceto
quando o valor de score seja 0. Neste caso, o valor da expresso
1 (porque (score == 0) igual a 1).
Uma observao sobre valores booleanos - embora voc possa assumir que o
valor de uma operao relacional 0 ou 1 em C++ , qualquer valor diferente
de zero considerado verdadeiro. Falaremos sobre isso mais tarde durante o
curso.

2.3 Reviso de Expresses:


O que impresso pelos dois programas abaixo?
#include <iostream>
using namespace std;
int main() {
int score = 5;
cout
cout
cout
cout
cout

<<
<<
<<
<<
<<

5 + 10 * 5 % 6;
10 / 4;
10.0 / 4.0;
'A' + 1
score + (score == 0);

//
//
//
//
//

7
2
2.5
B
5

}
#include <iostream>
using namespace std;
int main() {
int n1, n2, n3;
cout << "Entre com um numero inteiro: ";
cin >> n1;
n2 = n1 / 5;
n3 = n2 % 5 * 7;
cout << n2 << " " << n3 << " " << (n2 != n3 + 21) << endl;
}

Como a seguinte expresso completamente parentizada ?


a * b / c + 30 >= 45 + d * 3 ++e == 10

2.4 Exemplo de programas


Exemplo 1: escreva um programa que leia um nmero inteiro e imprima 0 se
o nmero for par e 1 se o nmero for mpar.

#include <iostream>
using namespace std;
int main() {
int numero;
cout << "Entre com um numero inteiro: ";
cin >> numero;
cout << "\nPar? " << numero % 2 << endl;
}

Exemplo 2: escreva um programa que leia 3 nmeros inteiros e calcule a


soma, mdia, e produto.
#include <iostream>
#include <iomanip>
cout
using namespace std;

// necessario para usar setw() e setf() em

int main() {
int n1, n2, n3;
int soma;
cout << "Entre com 3 numeros inteiros: ";
cin >> n1 >> n2 >> n3;
soma = n1 + n2 + n3;
cout << "Soma = " << soma << endl;
cout.setf (ios::fixed | ios::showpoint); // reais em ponto fixo
cout.precision(2);
// 2 casa decimais
// setw(8) fixa tamanho da representao em 8 digitos
cout << "Media = " << setw(8) << soma / 3.0 << endl;
cout << "Produto = " << (unsigned) n1 * n2 * n3 << endl;
}

2.5 Precedncia e associatividade de operadores


Operador

Associatividade

()

esquerda para direita

(unrios)

direita para esquerda

* / %

esquerda para direita

+ -

esquerda para direita

< <= > >=

esquerda para direita

== !=

esquerda para direita

You might also like