Baixe o app para aproveitar ainda mais
Prévia do material em texto
ECT2303 - Linguagem de Programação Operadores e Expressões Prof. Bruno Marques F. da Silva Escola de Ciências e Tecnologia Universidade Federal do Rio Grande do Norte 1 de Agosto de 2017 Linguagem de Programação I Aula anterior: variáveis e tipos básicos I Aula de hoje: operadores e expressões Operador de Atribuição I Operador = I Atribui um determinado valor a uma variável I x = 0; → lê-se “xis recebe zero” I Sempre: variável à esquerda da atribuição e qualquer outra expressão à sua direita I Já visto na aula anterior (inicialização de variáveis) Operador de Atribuição I Em sucessivas atribuições, o valor atual sobrescreve o valor antigo I Exemplo: o que é impresso pelo programa a seguir? int main(){ int x; //declaracao x = 0; //atribuicao int y = 2, z = 3; //declaracao e inicializacao x = y = z; //atribuicao: direita para a esquerda cout << x << " " << y << " " << z << endl; return 0; } Expressões I Programas mais complexos fazem uso de expressões: I Sequências de operandos e operadores que especificam uma computação I Em C++: I Expressões aritméticas I Expressões lógicas I O valor de uma expressão é determinado pela avaliação dos seus operandos e operadores I Exemplos de expressões: 1. 10+10 2. x/y <= 5 3. x*y && x%y Operadores Aritméticos I Formam expressões aritméticas (valor resultante é um número) I Operadores de mesma precedência são avaliados da esquerda para a direita Operador Funcionalidade Precedência no Grupo () Associar operandos Primeiro a ser avaliado + Adição Último a ser avaliado - Subtração Último a ser avaliado * Multiplicação Avaliado após os parêntesis / Divisão Avaliado após os parêntesis % Resto Avaliado após os parêntesis Expressões Aritméticas I Exemplos: 1. 1+2*3 2. 1*2+3 3. (1+2)*3 4. 1*2%3 5. ((1*2)+3)*2 I Programa com expressões: int main(){ int x = 0; x + 45; x = x + 100; cout << x << endl; return 0; } I O programa compila? Qual o valor impresso? Operadores Aritméticos de Atribuição I Computam a expressão, aplicam o operador aritmético e atribuem o seu valor à variável à esquerda do op. de atribuição Operador Expressão Expresssão Equivalente += var += exp var = var + exp -= var -= exp var = var - exp *= var *= exp var = var * exp /= var /= exp var = var / exp %= var %= exp var = var % exp I Ou seja, x += 5 é equivalente a x = x + 5 I Qual o valor final das variáveis a seguir, para x = 1, y = 2, z = 3? 1. x += 2*2; 2. x += y -= z; 3. z %= y %= x; Operações de Potência e Raíz I Em C++, não existem operadores para potência e raíz I Estas operações são realizadas por chamadas a funções I pow(b,e) para potência be I sqrt(x) para a raíz quadrada de x I Ambas as funções estão na biblioteca cmath #include <cmath> Operador de Incremento/Decremento I Operadores unários (só precisam de um operando) Operador Expressão Expresssão Equivalente ++ (pré-fixado) ++var var = var + 1 -- (pré-fixado) --var var = var - 1 ++ (pós-fixado) var++ var = var + 1 -- (pós-fixado) var-- var = var - 1 I Diferença entre ++x e x++ (o mesmo para --): I Ambos incrementam x em uma unidade I O op. pré-fixado incrementa e usa o novo valor na expressão I O op. pós-fixado usa o valor na expressão e só então o incrementa I Precedência: mais alta do que a multiplicação I Exemplos (para x = 1, y = 2, z = 3): 1. x++; 2. x = ++z; 3. x = z--; 4. x = y++*4; Expressões Lógicas I Expressões que possuem como resultado os valores 0 ou 1, equivalente aos valores lógicos falso e verdadeiro, respectivamente I Em C++, valores numéricos são interpretados como falso ou verdadeiro: I O único valor a ser interpretado como falso é o 0 I Qualquer outro é interpretado como 1 (ex. 1.000001, -10000, etc.) I Expressões lógicas são formadas por dois tipos de operadores: I Operadores relacionais I Operadores lógicos I Estas expressões são muitas vezes a parte mais importante dos programas Operadores Relacionais I Possuem precedência mais alta do que o operador de atribuição e mais baixa do que os operadores aritméticos Operador Funcionalidade Precedência no Grupo == Igual Último a ser avaliado != Diferente Último a ser avaliado < Menor Primeiro a ser avaliado <= Menor ou igual Primeiro a ser avaliado > Maior Primeiro a ser avaliado >= Maior ou igual Primeiro a ser avaliado Expressões Lógicas Com Operadores Relacionais I Exemplos: 1. 1 > 2 2. 2 != 2 3. x == x 4. x = 5 > 4 == 2 > 1 5. x = 4*3 > 5+1 Operadores Lógicos I Possuem precedência mais baixa do que os operadores relacionais (exceto a negação, que tem precedência igual ao op. de incremento) Operador Funcionalidade Precedência no Grupo ! Negação (não lógico) Primeiro a ser avaliado || Disjunção (ou lógico) Último a ser avaliado && Conjunção (e lógico) Avaliado após o não lógico I Negação: inverte o valor lógico do operando (op. unário) I Disjunção: falso quando os dois operandos são falsos I Conjunção: verdadeiro quando os dois operandos são verdadeiros Operador Lógico de Negação (Não Lógico) Tabela Verdade x !x 0 1 1 0 Operador Lógico de Disjunção (Ou Lógico) Tabela Verdade x y x || y 0 0 0 0 1 1 1 0 1 1 1 1 Operador Lógico de Conjunção (E Lógico) Tabela Verdade x y x && y 0 0 0 0 1 0 1 0 0 1 1 1 Expressões Lógicas Com Todos os Operadores I Exemplos (para x = 1, y = 2, z = 3): 1. y-x == false 2. x > 0 && x < z+10 3. z >= y || true Precedência I Ordem geral: 1. Parêntesis 2. Operador de incremento/não lógico 3. Operadores aritméticos 4. Operadores relacionais 5. Operadores lógicos 6. Atribuição I Exemplo: int i = 1, j = 2, k = 3; i < j && 2 >= k I Sempre que houver dúvida: I Utilizar parêntesis Conversão de Tipos I I Em C++, o tipo do resultado de uma expressão aritmética é sempre convertido no tipo do operando com maior precisão (com mais bits para armazenamento) I Exemplo: char ch; int i; float f; double d; result = (ch/i) + (f*d) - (f+i); I ch/i é uma expressão com tipo int I f*d é uma expressão com tipo double I f+i é uma expressão com tipo float I (ch/i) + (f*d) é uma expressão com tipo double I result tem tipo double Conversão de Tipos II I Em C++, o tipo da expressão do lado direito de uma atribuição é convertido no tipo do lado esquerdo apenas quando este tem menor precisão I Exemplos: float g = 9.8; //valor de g e convertido para int int x = g; int x = 3, y = 3, z = 4; //valor da expressao NAO e convertido para float float media = (x + y + z)/3; Conversão de Tipos III I Em C++, é possível forçar uma expressão a ser interpretada como um tipo informado I Operador de molde ou typecast. Sintaxe: novo_tipo(expressao); ou (novo_tipo) expressao; I novo_tipo é um tipo conhecido. Exemplos: int x = 3, y = 3, z = 4; float media = float(x + y + z)/3; char ch = ‘A’; cout << ch << " " << int(ch) << endl; Sumário I Na aula de hoje: I Operador de atribuição I Operadores aritméticos I Operadores aritméticos de atribuição I Operadores de incremento I Operadores lógicos I Operadores relacionais I Operador de molde (typecast) I Expressões aritméticas e lógicas I Ordem de precedência e avaliação de expressões Bibliografia I MIZRAHI, V. V. Treinamento em Linguagem C++ (Módulo 1). 2. ed. São Paulo: Pearson, 2008. ASCENCIO, A. F. G.; CAMPOS, E. A. V. d. Fundamentos da Programação de Computadores. 2. ed. São Paulo: Pearson, 2008. Dúvidas: Via SIGAA ou bruno.silva@ect.ufrn.br Aula
Compartilhar