Anda di halaman 1dari 7

Linguagem de Programao

Notas de Aula

Captulo 2 Operadores A funo scanf() A funo scanf() outra das funes de E/S implementadas em todos os compiladores e nos permite ler dados formatados da entrada padro (teclado). Sintaxe: scanf(expresso de controle, lista de argumentos); Por enquanto, assuma que a expresso de controle pode conter apenas cdigos de formatao, que indica funo que deve ser lido um valor do tipo indicado pelo cdigo. A lista de argumentos deve consistir nos endereos das variveis que iro armazenar os valores lidos. C possui um operador para tipos bsicos chamado operador de endereo e referenciado pelo smbolo & que fornece o endereo do operando.

O operador de endereo (&) A memria do seu computador divida em bytes, e estes bytes so numerados de 0 at o limite de memria de sua mquina. Estes nmeros so chamados de endereos. Um endereo o nome que o computador usa para identificar a varivel. Toda varivel ocupa uma certa localizao na memria, e seu endereo o do primeiro byte ocupado por ela. Um inteiro ocupa 2 bytes. Se voc declarou a varivel 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 endereo do primeiro byte onde n est armazenada. O programa seguinte imprime o endereo de n e o valor armazenado em n:

#include <stdio.h> main() { int n = 2; printf(Endereco: %u, Valor: %d, n, &n); }

Um endereo de memria visto como um nmero inteiro sem sinal, por isso usamos %u. A tabela abaixo mostra os cdigos de formatao da funo scanf() cdigo %c %d %e %f %o %s %u %x %l %lf Significado caracter simples inteiro decimal notao cientfica ponto flutuante inteiro octal cadeia de caracteres decimal sem sinal hexadecimal inteiro longo double

Vamos escrever um programa para exemplificar a utilizao da funo scanf(). O programa tambm mostra a sada formatada printf():

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

#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 funes getche() e getch() O C oferece funes que lem um caracter no instante em que digitado sem esperar [enter]. Essas funes esto definidas na biblioteca conio.h. A funo getche() l o caracter do teclado e o imprime na tela imediatamente. Esta funo no aceita argumentos e devolve o caracter lido para a funo 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 funo getch() l o caracter do teclado mas no imprime o caracter lido na tela. Esta funo no aceita argumentos e devolve o caracter lido para a funo 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 funes getchar() e putchar() A funo getchar() est definida na biblioteca stdio.h e l um caracter do teclado s terminando a leitura quando a tecla [enter] pressionada. A funo putchar(), tambm definida na biblioteca stdio.h, aceita um argumento cujo valor ser impresso na sada padro (tela).

#include <stdio.h> main() { char ch; printf(Digite um caracter: ); ch = getchar(); putchar(ch); }

Um argumento de uma funo pode ser outra funo. Por exemplo, o programa anterior pode ser escrito como:

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

#include <stdio.h> main() { char ch; printf(Digite um caracter: ); putchar(getchar()); }

Operadores Um operador um smbolo que diz ao compilador para realizar manipulaes matemticas e lgicas especficas. A linguagem C oferece trs classes de operadores: aritmticos, relacionais e lgicos e de atribuio.

Operador de atribuio Em C, o sinal de igual (=) no tem a mesma interpretao dada em matemtica. Representa a atribuio da expresso direita ao nome da varivel esquerda. Por exemplo:
num = 20;

Neste exemplo o valor 20 atribudo a varivel num. C aceita vrias atribuies numa mesma instruo:
num1 = num2 = num3 = 20;

Neste exemplo o valor 20 atribudo as variveis num1, num2 num3.

Operadores aritmticos C oferece 5 operadores aritmticos binrios (operam sobre dois operandos) e um operador aritmtico unrio (opera sobre um operando). operador + * / % operao adio subtrao e menos unrio multiplicao diviso resto da diviso inteira

Operadores binrios: + - / * Representam as operaes aritmticas bsicas de soma, subtrao, diviso e multiplicao 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); }

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

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 = (ftemp32)*5/9; printf(Temperatura em graus Celsius e: %d\n, ctemp); }

Exemplo 3: programa para adivinhar a soma de 5 nmeros. O usurio digita um nmero qualquer e o computador informa o resultado da soma dos 5 nmeros dos quais o primeiro o usurio j forneceu. O usurio digita o segundo nmero e o computador mostra o terceiro. O usurio digita o quarto nmero e o computador mostra o quinto.

#include <stdio.h> main() { int num, aux; printf(Informe um nmero de ate 4 algarismos: ); scanf(%d, &num); aux = 19998 + num; printf(O resultado da nossa conta sera: %d\n, aux); printf(Informe o segundo nmero (4 algarismos): ); scanf(%d, &num); printf(O meu numero e: %d\n, 9999-num); printf(Informe o quarto nmero (4 algarismos): ); scanf(%d, &num); printf(O meu numero e: %d\n, 9999-num); }

Operador menos unrio: Este operador utilizado somente para indicar a troca do sinal algbrico do valor. Por exemplo:
num = -8; num1 = -num;

Depois destas duas instrues, o contedo de num1 ser 8.

Operador mdulo: % O operador mdulo aceita apenas operandos inteiros. Resulta o resto da diviso do inteiro sua esquerda pelo inteiro sua direita. Por exemplo:
num = 17%5;

Depois desta instruo, o contedo de num ser 2.

Operadores de incremento (++) e decremento (--) A linguagem C permite dois operadores bastante teis geralmente no encontrados em outras linguagens. So eles 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.

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

Estes operandos trabalham de dois modos. O primeiro modo chamado pr-fixado e o operador aparece antes do nome da varivel. O segundo o modo ps-fixado em que o operador aparece seguindo o nome da varivel. Em ambos os casos, a varivel incrementada (++) ou decrementada (--). Porm quando ++n usado numa instruo, n incrementada antes de seu valor ser usado, e quando n++ estiver numa instruo, 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 sada ser: x = 5 n = 6 . Isto porque o valor de n atribudo 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 sada ser: x = 6 n = 6 . Isto porque o valor de n incrementado de 1 e depois seu valor atribudo a x. Quando um desses operadores aparece sozinho numa instruo (como em num++;) no faz diferena o uso do modo pr-fixado ou ps-fixado.

Precedncia dos operadores aritmticos A tabela abaixo mostra a precedncia dos operadores aritmticos; mais alta ++ -- (unrio) */% +-

mais baixa

Operadores do mesmo nvel de precedncia so avaliados pelo compilador da esquerda para a direita. Parnteses podem ser usados para alterar a ordem de avaliao. Os parnteses foram uma operao, ou conjunto de operaes, para o nvel mais alto de precedncia.

Operadores aritmticos de atribuio: +=, -=, *=, /=, %= Cada um destes operadores usado com uma varivel a sua esquerda e uma expresso sua direita. A operao consiste em atribuir um novo valor varivel que depender do operador e da expresso direita. Se x uma varivel, exp uma expresso e op um operador aritmtico (+,-.*,/ ou %), ento x op= exp; equivale a x = x op exp; Exemplos:

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

i x t p d

+= *= /= %= -=

2; equivale a i = i+2; y+1; equivale a x = x*(y+1); 2.5; equivale a t = t/2.5; 5; equivale a p = p%5; 3; equivale a d = d-3;

As expresses com estes operadores so mais compactas e normalmente produzem um cdigo de mquina 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 lgicos Nos termos operador relacional e lgico, relacional refere-se aos relacionamentos que podem haver entre dois valores e lgico maneira como esses relacionamentos podem ser conectados. A chave para o conceito de operadores relacionais e lgicos a idia de verdadeiro e falso. Em C, verdadeiro qualquer valor diferente de zero e falso zero. Expresses que operadores relacionais e lgicos retornaro 0 para falso e 1 para verdadeiro. Operadores relacionais: operador > >= < <= == != ao maior que maior ou igual que menor que menor ou igual que igual diferente

Os operadores relacionais so 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 operao 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); }

DCT/UFMS Prof. Marcos Alves

Linguagem de Programao

Notas de Aula

Os operadores relacionais podem ser aplicados a qualquer dos tipos de dados bsicos. No prximo captulo voc ver outras aplicaes para os operadores relacionais. Operadores lgicos: operador && || ! ao AND (E) OR (OU) NOT (NO)

Os operadores lgicos so usados para dar suporte s operaes lgicas bsicas 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 prximo programa ilustra a ao dos operadores lgicos:

#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 lgicos como os relacionais tm menor precedncia que os operadores aritmticos. Isto significa que a expresso 10 > 1+12 avaliada como 10 > (1+12). A tabela abaixo mostra a precedncia relativa dos operadores relacionais e lgicos: mais alta ! > >= < <= == != && ||

mais baixa

Assim como nas expresses aritmticas possvel usar parnteses para alterar a ordem natural de avaliao em uma expresso relacional e/ou lgica.

DCT/UFMS Prof. Marcos Alves