Em C++ , nós podemos executar operações aritméticas usando variáveis e constantes. Algumas operações mais comuns são:
Estas operações podem ser usadas como mostram os exemplos abaixo, assumindo que as variáveis necessárias já estão declaradas:
celsius = (fahrenheit - 32) * 5.0 / 9.0; forca = massa * aceleracao; i = i + 1;
Em C++ , assim como em álgebra, há uma ordem de precedência de operadores.
Assim, em
, expressões em parêntesis
são avaliadas primeiro, seguidos por exponenciação,
multiplicação, divisão, adição e subtração.
Da mesma forma, em C++ , expressões entre parêntesis são executadas primeiro, seguidas de *, / e % (que tem todos a mesma precedência), seguido de + e - (ambos com a mesma precedência).
Quando operações adjacentes têm a mesma precedência, elas são associadas da esquerda para a direita. Assim, a * b / c * d % e é o mesmo que ((((a * b) / c) * d) % e).
Esta operação é usada quando queremos encontrar o resto da
divisão de dois inteiros. Por exemplo, 22 dividido por 5 é 4,
com resto 2 (
).
Em C++ , a expressão 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 compilação (como em 22.3 % 5).
Expressões aritméticas podem ser usadas na maior parte dos lugares em que uma variável pode ser usada.
O exemplo seguinte é válido:
int raio = 3 * 5 + 1; cout << "circunferencia = " << 2 * 3.14 * raio << endl;
Exemplos de lugares onde uma expressão aritmética NÃO pode ser usada incluem:
int yucky + 2 = 5; cin >> oops * 5;
Este exemplo é ilegal e causará erro de compilação.
Em C++ , há operadores que podem ser usados para comparar expressões: os operadores relacionais.
Há seis operadores relacionais em C++ :
Os resultados deste operadores é 0 (correspondendo a falso), ou 1 (correspondendo a verdadeiro). Valores como esses são chamados valores booleanos. Algumas linguagens de programação como Pascal tem um tipo de variável distinto para valores booleanos. Este não é o caso do C++ , onde valores booleanos são armazenados como variáveis numéricas tais como o int.
Considere o seguinte programa:
int main() { int idade; idade = 17; cout << "Pode tirar carteira de motorista? " << (idade >= 18) << endl; idade = 35; cout << "Pode tirar carteira de motorista? " << (idade >= 18) << endl; }
A saída deste programa será:
Pode tirar carteira de motorista? 0 Pode tirar carteira de motorista? 1
Na primeira linha, idade é 17. Logo, 17 >= 18 é falso, que é 0.
Depois disso, idade é 35. Logo, 35 >= 18 é verdadeiro, que é 1.
Note também que o operador de igualdade é escrito com “sinais de igual duplo”, ==, não =. Tenha cuidado com esta diferença, já que colocar = no lugar de == não é um erro sintático (não gera erro de compilação), e não significa o que você espera.
Operadores aritméticos tem precedência maior que os operadores relacionais. Por exemplo, a expressão 3 + 5 < 6 * 2 é o mesmo que (3 + 5) < (6 * 2).
Se por alguma razão você quer que o resultado do uma operação relacional em uma expressão aritmética, é necessário usar parêntesis. Por exemplo, a expressão score + (score == 0) será sempre igual ao valor de score, exceto quando o valor de score seja 0. Neste caso, o valor da expressão é 1 (porque (score == 0) é igual a 1).
Uma observação sobre valores booleanos - embora você possa assumir que o valor de uma operação relacional é 0 ou 1 em C++ , qualquer valor diferente de zero é considerado verdadeiro. Falaremos sobre isso mais tarde durante o curso.
O que é impresso pelos dois programas abaixo?
#include <iostream> using namespace std; int main() { int score = 5; cout << 5 + 10 * 5 % 6; // 7 cout << 10 / 4; // 2 cout << 10.0 / 4.0; // 2.5 cout << 'A' + 1 // B cout << score + (score == 0); // 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 expressão completamente parentizada ?
a * b / c + 30 >= 45 + d * 3 ++e == 10
Exemplo 1: escreva um programa que leia um número inteiro e imprima 0 se o número for par e 1 se o número 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 números inteiros e calcule a soma, média, e produto.
#include <iostream> #include <iomanip> // necessario para usar setw() e setf() em cout using namespace std; 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 representação em 8 digitos cout << "Media = " << setw(8) << soma / 3.0 << endl; cout << "Produto = " << (unsigned) n1 * n2 * n3 << endl; }
Operador | Associatividade |
() |
esquerda para direita |
- (unários) |
direita para esquerda |
* / % |
esquerda para direita |
+ - |
esquerda para direita |
< <= > >= |
esquerda para direita |
== != |
esquerda para direita |