Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 1 Capítulo 2 – Operadores A função scanf() • A função scanf() é outra das funções de E/S implementadas em todos os compiladores e nos permite ler dados formatados da entrada padrão (teclado). • Sintaxe: scanf(“expressão de controle”, lista de argumentos); • Por enquanto, assuma que a expressão de controle pode conter apenas códigos de formatação, que indica à função que deve ser lido um valor do tipo indicado pelo código. • A lista de argumentos deve consistir nos endereços das variáveis que irão armazenar os valores lidos. C possui um operador para tipos básicos chamado operador de endereço e referenciado pelo símbolo & que fornece o endereço do operando. O operador de endereço (&) • A memória do seu computador é divida em bytes, e estes bytes são numerados de 0 até o limite de memória de sua máquina. Estes números são chamados de endereços. Um endereço é o nome que o computador usa para identificar a variável. • Toda variável ocupa uma certa localização na memória, e seu endereço é o do primeiro byte ocupado por ela. • Um inteiro ocupa 2 bytes. Se você declarou a variável n como inteira a atribuiu a ela o valor 2, quando n for referenciada devolverá 2. Entretanto, se você referenciar n precedido de & (&n) devolverá o endereço do primeiro byte onde n está armazenada. • O programa seguinte imprime o endereço de n e o valor armazenado em n: #include <stdio.h> main() { int n = 2; printf(“Endereco: %u, Valor: %d”, n, &n); } • Um endereço de memória é visto como um número inteiro sem sinal, por isso usamos %u. • A tabela abaixo mostra os códigos de formatação da função scanf() código Significado %c caracter simples %d inteiro decimal %e notação científica %f ponto flutuante %o inteiro octal %s cadeia de caracteres %u decimal sem sinal %x hexadecimal %l inteiro longo %lf double • Vamos escrever um programa para exemplificar a utilização da função scanf(). O programa também mostra a saída formatada printf(): Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 2 #include <stdio.h> main() { char ch; printf(“Digite um caracter e veja-o em decimal, ”); printf(“octal e hexadecimal \n”); scanf(“%c”, &ch); printf(“\n %c corresponde a %d em decimal, %o em octal e %x em hexadecimal.\n”, ch, ch, ch, ch); } As funções getche() e getch() • O C oferece funções que lêem um caracter no instante em que é digitado sem esperar [enter]. Essas funções estão definidas na biblioteca conio.h. • A função getche() lê o caracter do teclado e o imprime na tela imediatamente. Esta função não aceita argumentos e devolve o caracter lido para a função que a chamou. #include <stdio.h> #include <conio.h> main() { char ch; printf(“Digite um caracter: ”); ch = getche(); printf(“\n A tecla pressionada foi: %c”, ch); } • A função getch() lê o caracter do teclado mas não imprime o caracter lido na tela. Esta função não aceita argumentos e devolve o caracter lido para a função que a chamou. #include <stdio.h> #include <conio.h> main() { char ch; printf(“Digite um caracter: ”); ch = getch(); printf(“\n A tecla pressionada foi: %c”, ch); } As funções getchar() e putchar() • A função getchar() está definida na biblioteca stdio.h e lê um caracter do teclado só terminando a leitura quando a tecla [enter] é pressionada. • A função putchar(), também definida na biblioteca stdio.h, aceita um argumento cujo valor será impresso na saída padrão (tela). #include <stdio.h> main() { char ch; printf(“Digite um caracter: ”); ch = getchar(); putchar(ch); } • Um argumento de uma função pode ser outra função. Por exemplo, o programa anterior pode ser escrito como: Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 3 #include <stdio.h> main() { char ch; printf(“Digite um caracter: ”); putchar(getchar()); } Operadores • Um operador é um símbolo que diz ao compilador para realizar manipulações matemáticas e lógicas específicas. A linguagem C oferece três classes de operadores: aritméticos, relacionais e lógicos e de atribuição. Operador de atribuição • Em C, o sinal de igual (=) não tem a mesma interpretação dada em matemática. Representa a atribuição da expressão à direita ao nome da variável à esquerda. Por exemplo: num = 20; • Neste exemplo o valor 20 é atribuído a variável num. C aceita várias atribuições numa mesma instrução: num1 = num2 = num3 = 20; • Neste exemplo o valor 20 é atribuído as variáveis num1, num2 num3. Operadores aritméticos • C oferece 5 operadores aritméticos binários (operam sobre dois operandos) e um operador aritmético unário (opera sobre um operando). operador operação + adição - subtração e menos unário * multiplicação / divisão % resto da divisão inteira Operadores binários: + - / * • Representam as operações aritméticas básicas de soma, subtração, divisão e multiplicação respectivamente. Estes operadores podem ser aplicados a qualquer tipo de dado interno permitido pelo C. • Exemplo 1: programa que calcula a idade em dias #include <stdio.h> main() { float anos, dias; printf(“Informe sua idade em anos: ”); scanf(“%f”, &anos); dias = anos*365; printf(“Sua idade em dias e’: %.0f \n”, dias); } Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 4 • Exemplo 2: programa que converte temperatura Fahrenheit em seus correspondentes graus Celsius. #include <stdio.h> main() { int ftemp, ctemp; printf(“Informe a temperatura em graus Fahrenheit: ”); scanf(“%d”, &ftemp); ctemp = (ftemp–32)*5/9; printf(“Temperatura em graus Celsius e’: %d\n”, ctemp); } • Exemplo 3: programa para adivinhar a soma de 5 números. O usuário digita um número qualquer e o computador informa o resultado da soma dos 5 números dos quais o primeiro o usuário já forneceu. O usuário digita o segundo número e o computador mostra o terceiro. O usuário digita o quarto número e o computador mostra o quinto. #include <stdio.h> main() { int num, aux; printf(“Informe um número de ate’ 4 algarismos: ”); scanf(“%d”, &num); aux = 19998 + num; printf(“O resultado da nossa conta sera’: %d\n”, aux); printf(“Informe o segundo número (4 algarismos): ”); scanf(“%d”, &num); printf(“O meu numero e’: %d\n”, 9999-num); printf(“Informe o quarto número (4 algarismos): ”); scanf(“%d”, &num); printf(“O meu numero e’: %d\n”, 9999-num); } Operador menos unário: - • Este operador é utilizado somente para indicar a troca do sinal algébrico do valor. Por exemplo: num = -8; num1 = -num; • Depois destas duas instruções, o conteúdo de num1 será 8. Operador módulo: % • O operador módulo aceita apenas operandos inteiros. Resulta o resto da divisão do inteiro à sua esquerda pelo inteiro à sua direita. Por exemplo: num = 17%5; • Depois desta instrução, o conteúdo de num será 2. Operadores de incremento (++) e decremento (--) • A linguagem C permite dois operadores bastante úteis geralmente não encontrados em outras linguagens. Sãoeles os operadores de incremento (++) e decremento (--). • O operador de incremento (++) adiciona um ao seu operando, enquanto o operador de decremento (--) subtrai um do seu operando. Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 5 • Estes operandos trabalham de dois modos. O primeiro modo é chamado pré-fixado e o operador aparece antes do nome da variável. O segundo é o modo pós-fixado em que o operador aparece seguindo o nome da variável. • Em ambos os casos, a variável é incrementada (++) ou decrementada (--). Porém quando ++n é usado numa instrução, n é incrementada antes de seu valor ser usado, e quando n++ estiver numa instrução, n é incrementada depois de seu valor ser usado. #include <stdio.h> main() { int n, x; n = 5; x = n++; printf(“x=%d n=%d\n”, x, n); } • Quando o programa acima for executado a saída será: x = 5 n = 6 . Isto porque o valor de n é atribuído a x e depois n é incrementado de 1. #include <stdio.h> main() { int n, x; n = 5; x = ++n; printf(“x=%d n=%d\n”, x, n); } • Quando o programa acima for executado a saída será: x = 6 n = 6 . Isto porque o valor de n é incrementado de 1 e depois seu valor é atribuído a x. • Quando um desses operadores aparece sozinho numa instrução (como em num++;) não faz diferença o uso do modo pré-fixado ou pós-fixado. Precedência dos operadores aritméticos • A tabela abaixo mostra a precedência dos operadores aritméticos; mais alta ++ -- - (unário) * / % mais baixa + - • Operadores do mesmo nível de precedência são avaliados pelo compilador da esquerda para a direita. Parênteses podem ser usados para alterar a ordem de avaliação. Os parênteses forçam uma operação, ou conjunto de operações, para o nível mais alto de precedência. Operadores aritméticos de atribuição: +=, -=, *=, /=, %= • Cada um destes operadores é usado com uma variável a sua esquerda e uma expressão à sua direita. A operação consiste em atribuir um novo valor à variável que dependerá do operador e da expressão à direita. • Se x é uma variável, exp uma expressão e op um operador aritmético (+,-.*,/ ou %), então x op= exp; equivale a x = x op exp; • Exemplos: Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 6 i += 2; equivale a i = i+2; x *= y+1; equivale a x = x*(y+1); t /= 2.5; equivale a t = t/2.5; p %= 5; equivale a p = p%5; d -= 3; equivale a d = d-3; • As expressões com estes operadores são mais compactas e normalmente produzem um código de máquina mais eficiente. #include <stdio.h> main() { int total = 0; int cont = 10; printf(“Total: %d\n”, total); total += cont; printf(“Total: %d\n”, total); total *= cont; printf(“Total: %d\n”, total); } Operadores relacionais e lógicos • Nos termos operador relacional e lógico, relacional refere-se aos relacionamentos que podem haver entre dois valores e lógico à maneira como esses relacionamentos podem ser conectados. • A chave para o conceito de operadores relacionais e lógicos é a idéia de verdadeiro e falso. Em C, verdadeiro é qualquer valor diferente de zero e falso é zero. Expressões que operadores relacionais e lógicos retornarão 0 para falso e 1 para verdadeiro. • Operadores relacionais: operador ação > maior que >= maior ou igual que < menor que <= menor ou igual que == igual != diferente • Os operadores relacionais são usados para determinar o relacionamento de uma quantidade com outra. Eles sempre retornam 0 ou 1, dependendo do resultado do teste. O programa seguinte ilustra o uso de cada operação e exibe o resultado de cada uma como 0 ou 1: #include <stdio.h> main() { int i, j; printf(“Informe dois numeros: ”); scanf(“%d%d”, &i, &j); printf(“%d == %d eh %d\n”, i, j, i==j); printf(“%d != %d eh %d\n”, i, j, i!=j); printf(“%d <= %d eh %d\n”, i, j, i<=j); printf(“%d >= %d eh %d\n”, i, j, i>=j); printf(“%d < %d eh %d\n”, i, j, i>j); printf(“%d < %d eh %d\n”, i, j, i<j); } Linguagem de Programação Notas de Aula DCT/UFMS – Prof. Marcos Alves 7 • Os operadores relacionais podem ser aplicados a qualquer dos tipos de dados básicos. No próximo capítulo você verá outras aplicações para os operadores relacionais. • Operadores lógicos: operador ação && AND (E) || OR (OU) ! NOT (NÃO) • Os operadores lógicos são usados para dar suporte às operações lógicas básicas de AND, OR e NOT, de acordo com a tabela esta verdade. A tabela usa 1 para verdadeiro e 0 para falso. p q p AND q p OR q NOT p 0 0 0 0 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 • O próximo programa ilustra a ação dos operadores lógicos: #include <stdio.h> main() { int i, j; printf(“Informe dois numeros (cada um sendo 0 ou 1): ”); scanf(“%d%d”, &i, &j); printf(“%d AND %d eh %d\n”, i, j, i&&j); printf(“%d OR %d eh %d\n”, i, j, i||j); printf(“NOT %d eh %d\n”, i, !i); } • Tanto operadores lógicos como os relacionais têm menor precedência que os operadores aritméticos. Isto significa que a expressão 10 > 1+12 é avaliada como 10 > (1+12). • A tabela abaixo mostra a precedência relativa dos operadores relacionais e lógicos: mais alta ! > >= < <= == != && mais baixa || • Assim como nas expressões aritméticas é possível usar parênteses para alterar a ordem natural de avaliação em uma expressão relacional e/ou lógica.
Compartilhar