Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos • 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; Lógicos; Operadores aritméticos 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 Operadores aritméticos • 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 Operadores aritméticos • 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? Operadores aritméticos • 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; Operadores aritméticos • 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) Operadores aritméticos 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); Operadores relacionais • 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 (≥) Operadores relacionais 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 Operadores lógicos • 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 Operadores lógicos 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) Operadores lógicos 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; 4º Operadores Relacionais; 5º Operadores Lógicos. Operadores aritméticos • Operadores de atribuição: • 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 Operadores aritméticos 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; Conversão do tipo • 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; Conversão do tipo - exemplo int A,B,C; float X,Y; A=3; B=5; X=6.5; C = (int)X % B; Y = (float)A/B; Conversão do tipo - exemplo • 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; Funções matemáticas – math.h • 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ções matemáticas [biblioteca math.h] 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ções matemáticas [biblioteca math.h] 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); Exemplo • Ler o nome e duas notas do usuário e imprimir a média na tela; #include <stdio.h <stdio.h> stdio.h> //ler o nome e as duas notas do aluno e imprimir a media main() main() { char nome[20]; float nota1, nota2, media; printf(“Calcular printf(“Calcular a media do aluno\ aluno\n\n”); printf(“Seu printf(“Seu nome: “); fflush( fflush(stdin); stdin); gets(nome); gets(nome); printf(“Nota printf(“Nota 1: “); scanf(“%f”, scanf(“%f”, ¬a1); printf(“Nota printf(“Nota 2: “); scanf(“%f”, scanf(“%f”, ¬a2); media = (nota1 + nota2)/2; printf(“ printf(“\ (“\n\n%s, n%s, sua media = %.2f”, nome, media); getche(); getche(); } Exemplo • Linha 1: Como iremos ler o nome do aluno, precisamos incluir a biblioteca stdio.h onde estão os comandos fflush e gets; • Linha 2: Comentário informando o que o programa faz; • Linha 3: início do programa principal, que é definido pelo: main(); • Linha 4: um abre chaves, que irá delimitar o corpo do programa principal; • Linhas 5 e 6: declarações das quatro variáveis do programa: nome, nota1, nota2 e media; • Linha 7: um printf que serve para colocar, no início da tela, o título do que o programa faz; Exemplo • Linha 8: printf para que o usuário saiba que precisa fornecer seu nome; • Linha 9: comando fflush, que DEVE sempre vir antes do comando gets. Utilizado para limpar o buffer de entrada de dados; • Linha 10: gets que efetuará a leitura do nome do usuário; • Linha 11: printf para que o usuário saiba que precisa fornecer a primeira nota; • Linha 12: scanf que lê a primeira nota e armazena na variável nota1; • Linha 13: printf para que o usuário saiba que precisa fornecer a segunda nota; Exemplo • Linha 14: scanf que lê a segunda nota e armazena na variável nota2; • Linha 15: cálculo da média do aluno. Notem que a soma das nota1 e nota2 aparece entre parênteses. Devemos lembrar que o operador da divisão tem prioridade maior que o operador da soma. Assim, para que a soma das notas seja feita primeiro, ela deve vir entre parênteses. Não esqueçam deste detalhe! • Linha 16: printf que apresenta a média do aluno. Notem que na mensagem, também será escrito o nome do aluno. A média do aluno será apresentada com duas casas decimais (%.2f); Exemplo Linha 17: comando getche que faz com que a tela de execução do programa fique aberta, e assim podemos ver o resultado do programa. Nesta linha também poderíamos usar o system(“pause”); Linha 18: fecha chaves, indicando o final do programa principal; Conheça mais Pesquisem na Internet outra funções matemáticas disponíveis na biblioteca math.h. Comecem a pesquisa pelo site: http://visualcplus.blogspot.com/2006/03/mathh.html Operadores, expressões e funções •O material para os estudos já está disponível no site da disciplina em: http://hugovlsouza.com •Dúvidas entre em contato com o professor por email: [email protected] •Ou pelo http://facebook.com/hugovlsouza1 •Nas próximas aulas continuaremos com a lógica de programação com na linguagem C estudando as estruturas de controle;