Ameliara Freire [email protected] Em toda linguagem de programação, existem operadores que nos permitem armazenar, modificar, comparar e avaliar dados no computador. Veremos três tipos de operadores: ◦ Aritméticos, Relacionais e Lógicos. Usamos os operadores aritméticos quando precisamos executar operações aritméticas (matemáticas) sobre os nossos dados (variáveis). Operador Descrição + Adição - Subtração * Multiplicação / Divisão % Retorna o resto da divisão inteira de a por b () Parênteses Vamos dar uma atenção especial aos operadores da divisão(/) e resto(%). O resultado de uma divisão, em C, depende dos tipos dos dados que estão sendo divididos. A tabela abaixo apresenta o resultado da operação de divisão, de acordo com os tipos de dados do numerador e do denominador. numerador / denominador Resultado inteiro / inteiro inteiro inteiro/ real real real / inteiro real real/real real Quando dois números inteiros são divididos, o resultado é a parte inteira do quociente da divisão. Quando pelo menos um dos elementos (numerador e/ou denominador) é real, o resultado é um número real. O operador do resto (%) só pode ser usado quando as variáveis envolvidas são do tipo inteiro. Não poderemos usar tal operador para obter resto de divisão de números reais. Outra coisa: o operador % não tem nada haver com percentagem, certo? Prioridade dos Operadores ◦ A prioridade que o operador aritmético tem sob o outro é que vai determinar como a expressão será resolvida. ◦ Na matemática, quando montamos uma expressão, usamos parênteses, colchetes e chaves. Nas linguagens de programação, nós só temos os parênteses. ◦ Os parênteses têm um papel importante nas expressões e possibilitam que a ordem das operações seja alterada. Expressões entre parênteses são calculadas primeiro, portanto eles fornecem o maior grau de prioridade às expressões que envolvem. Os parênteses têm um papel importante nas expressões e possibilitam que a ordem das operações seja alterada. Expressões entre parênteses são calculadas primeiro, portanto eles fornecem o maior grau de prioridade às expressões que envolvem Prioridade dos Operadores Prioridade Operador 1º Operações embutidas em parênteses “mais internos” 2º % (resto) e/ou * (multiplicação) e/ou / (divisão) 3º + (adição) e/ou – (subtração) Prioridade de Operadores int X, Y, Z, W, A, B, C, D; X = 19; Y = 3; Z = 4; W = 2; A = X + Y * Z; B = (X + Y) * Z; C = X – Y * Z / W; D = (X-Y) * (Z/W); São utilizados para comparar valores de variáveis ou expressões aritméticas. Uma expressão aritmética tem como resultado um valor numérico. No caso de uma expressão relacional, o resultado será sempre um valor lógico: “Verdade” ou “Falso”. Operador Descrição == Igualdade != Diferença (≠) < Menor > Maior <= Menor ou Igual (≤) >= Maior ou Igual (≥) Sintaxe Variavel operador Valor Variável1 operador variável2 Variavel operador Expressão Aritmética Expressão Aritmética operador Expressão Aritmética Expressões relacionais X == 10 X>Y X<Y+Z X*Y>Z/W Servem para interligar duas ou mais expressões relacionais. Uma expressão lógica representa a união de expressões relacionais, permitindo que os resultados de várias expressões relacionais sejam transformados em um único resultado lógico (verdade ou falso). Os operadores lógicos são: ◦ E ◦ OU ◦ NÃO Operador Lógico Operador Lógico em C E && OU || NÃO ! Exemplos (X > 10) && (Y < 30) || (Z == 1) (A == 2) || (B <> C) && (D < 1) || (E > 10) !(A == 1) || (B <= C + B) (X + Y < Z + W) && (A < 3 + D) || (F < 5) Prioridade Operador 1º Operações embutidas em parênteses “mais internos”; 2º Resto e/ou multiplicação e/ou divisão; 3º Adição e/ou Subtração; 4º Operadores Relacionais; 5º Operadores Lógicos. A linguagem C oferece um conjunto de operadores que é uma combinação de operador de atribuição e operador aritmético, são os operadores aritméticos de atribuição. Eles são utilizados para representar de maneira reduzida uma operação aritmética, seguida de uma atribuição. Operador Exemplos de Uso Descrição += X += 4; Equivale a X = X + 4; -= Y -= X; Equivale a Y = Y – X; *= Z *= W; Equivale a Z = Z * W; /= K /= 7; Equivale a K = K / 7; %= L %= M; Equivale a L = L % M Os operadores ++ e -- são utilizados após o nome de uma variável e servem para incrementar (++) ou decrementar (--) uma unidade da variável, ou seja, somar 1 ou subtrair 1 do valor da variável. Operador Exemplos de Uso Descrição ++ X++; Equivale a X = X + 1; -- Y--; Equivale a Y = Y -- 1; Quando usamos operadores aritméticos, temos que lembrar que o resultado da expressão depende do tipo das variáveis envolvidas. É que alguns operadores só podem ser usados por um tipo de dado. É usada em uma expressão aritmética e é feita da seguinte forma: ◦ Antes da variável, colocamos entre parênteses, o tipo que queremos que a variável seja nesta expressão aritmética. ◦ É importante salientar que a conversão de tipo é feita com o dado armazenado em uma variável, mas a variável continua tendo o seu tipo original. int A,B,C; float X,Y; A=3; B=5; X=6.5; C = (int)X % B; Y = (float)A/B; Nas linhas 1 e 2, temos as declarações de cinco variáveis. Nas linhas 3, 4, e 5 foram atribuídos valores as variáveis A, B e X. Na linha 6, precisamos executar uma operação para obter o resto da divisão entre a variável X (que é do tipo float) e a variável B (que é do tipo int). Esta operação não seria possível, já que o operador do resto não aceita números reais na expressão. No entanto, esta operação se torna possível, se fizermos a conversão de tipo da variável X. Queremos que, nesta expressão, o conteúdo de X seja um inteiro. Para isso, colocamos (int) na frente da variável X, como mostra a linha 6 do exemplo. Como a variável X tem 6.5 armazenado, nesta conta, a parte fracionária será desprezada e a conta será feita considerando que X é 6. Assim, 6 % 5 = 1. Então, 1 é o valor que será atribuído a variável C. A linguagem de programação C possui uma biblioteca que agrupa um conjunto de funções matemáticas. É a biblioteca math.h. Nesta seção, vamos ver quatro funções matemáticas, da biblioteca math.h, que utilizaremos com mais frequência nos nossos programas. São as funções para encontrar a raiz quadrada de um número, potência (elevar um número a uma potência) e duas funções de arredondamento. Esta biblioteca possui outras funções, mas estas são as mais utilizadas nos nossos programas. As funções matemáticas precisam receber um ou vários parâmetros e nos retornam um resultado. Função Descrição Exemplos de uso sqrt Função para encontrar a raiz quadrada de um número. A função sqrt precisa receber como parâmetro, o número que desejamos encontrar a sua raiz quadrada. O resultado desta função é um número real. Como uma função retorna um resultado, devemos atribuílo a uma variável. R = sqrt(16); Função para encontrar a potência de um número, ou seja, eleva um número a um expoente: AB. Assim, se A = 4 e B = 3, 4 elevado a 3 é 64. A função pow irá receber dois parâmetros. O primeiro é a base (neste exemplo é o A) e o segundo é o expoente (neste caso é o B). Esta função retorna um número real como resultado. P = pow(3,4); pow R = sqrt(A); P = pow(A, 3); Função Descrição Exemplos de uso ceil A função ceil serve para arredondar um número real. Esta função arredonda o número para cima. Assim, ela retornará como resultado: o primeiro número inteiro maior que o número que desejamos arredondar. Por exemplo: se x = 1.34, e desejamos arredondar com a função ceil, o resultado será 2.0. Ou seja, o primeiro número inteiro acima de 1.34. Apesar do arredondamento, esta função retorna um número real como resultado. Z = ceil(1.67); A função floor serve para arredondar um número real. Esta função arredonda o número para baixo. Assim, ela retornará como resultado: o primeiro número inteiro menor que o número que desejamos arredondar. Por exemplo: se x = 1.34, e desejamos arredondar com a função floor, o resultado será 1.0. Ou seja, o primeiro número inteiro abaixo de 1.34. Apesar do arredondamento, esta função retorna um número real como resultado. Z = floor(1.67); Z = floor(Z); floor Z = ceil(Z); double acos(double x) Returns the arc cosine of x in radians. double asin(double x) Returns the arc sine of x in radians. double atan(double x) Returns the arc tangent of x in radians. double atan2(doubly y, double x) Returns the arc tangent in radians of y/x based on the signs of both values to determine the correct quadrant. double cos(double x) Returns the cosine of a radian angle x. double cosh(double x) Returns the hyperbolic cosine of x. double sin(double x) Returns the sine of a radian angle x. double sinh(double x) Returns the hyperbolic sine of x. double tanh(double x) Returns the hyperbolic tangent of x. double exp(double x) Returns the value of e raised to the xth power. double frexp(double x, int *exponent) The returned value is the mantissa and the integer pointed to by exponent is the exponent. The resultant value is x = mantissa * 2 ^ exponent. double ldexp(double x, int exponent) Returns x multiplied by 2 raised to the power of exponent. double log(double x) Returns the natural logarithm (base-e logarithm) of x. double log10(double x) Returns the common logarithm (base-10 logarithm) of x. double modf(double x, double *integer) The returned value is the fraction component (part after the decimal), and sets integer to the integer component. double pow(double x, double y) Returns x raised to the power of y. double sqrt(double x) Returns the square root of x. double ceil(double x) Returns the smallest integer value greater than or equal to x. double fabs(double x) Returns the absolute value of x double floor(double x) Returns the largest integer value less than or equal to x. double fmod(double x, double y) Returns the remainder of x divided by y.