Operadores A linguagem C é muito rica em operadores internos. Ela define quatro classes de operadores: Aritmético: -, +, *, /, %, --, ++ Relacionais: >, <, >=, <=, ==,!= Lógicos: &&,,! Além disso, C tem alguns operadores especiais para tarefas particulares.
Operadores Aritméticos
Operadores Aritméticos Os operadores aritméticos são usados para calcular expressões matemáticas. São classificados em duas categorias: os binários ou unários. Operadores binários Operadores unários (ação): (descrição): + Sinal positivo = Atribuição - Sinal negativo + Adição - Subtração / Divisão * Multiplicação Os operadores unários atuam na inversão de valores.
Operadores de incremento e decremento O operador de incremento (++) soma 1 ao seu operando enquanto que o de decremento (--) subtrai um. Eles podem ser pré-fixados ou pós-fixados Operador Instrução Pós-fixado Pré-fixado ++ var=var+1; var=var++; var=++var; ou var++; ou ++var; -- var=var-1; var=var--; var=--var; ou var--; ou --var;
Operadores de incremento e decremento Exemplos: a++; (equivale a a = a + 1;) Considerando a = 2: Pós-fixado: b = a++; resulta em b = 2 e a = 3 (primeiro atribui, depois incrementa) Pré-fixado: b = ++a; teremos b = 3 e a = 3 (primeiro incrementa, depois atribui)
Operadores - precedência A precedência dos operadores aritméticos é a seguinte: 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.
Operadores - precedência Observe o exemplo a seguir
Exercícios int n1, n2, n3; n1 n2 n3 n2=n3=0; - 0 0 n1=2; 2 0 0 n1 += n1 * 10; n2 = n1 / 5; n3 = n2 % 5 * 7 ; n2 *= n3-- % 4;
Exercícios int n1, n2, n3; n1 n2 n3 n2=n3=0; - 0 0 n1=2; 2 0 0 n1 += n1 * 10; 22 0 0 n2 = n1 / 5; n3 = n2 % 5 * 7 ; n2 *= n3-- % 4;
Exercícios int n1, n2, n3; n1 n2 n3 n2=n3=0; - 0 0 n1=2; 2 0 0 n1 += n1 * 10; 22 0 0 n2 = n1 / 5; 22 4 0 n3 = n2 % 5 * 7 ; n2 *= n3-- % 4;
Exercícios int n1, n2, n3; n1 n2 n3 n2=n3=0; - 0 0 n1=2; 2 0 0 n1 += n1 * 10; 22 0 0 n2 = n1 / 5; 22 4 0 n3 = n2 % 5 * 7 ; 22 4 28 n2 *= n3-- % 4;
Exercícios int n1, n2, n3; n1 n2 n3 n2=n3=0; - 0 0 n1=2; 2 0 0 n1 += n1 * 10; 22 0 0 n2 = n1 / 5; 22 4 0 n3 = n2 % 5 * 7 ; 22 4 28 n2 *= n3-- % 4; 22 0 27
Operadores Relacionais e Lógicos
Operadores relacionais Os operadores relacionais do C realizam comparações entre variáveis. São eles:
Operadores relacionais Os operadores relacionais retornam verdadeiro (1) ou falso (0). Em C, verdadeiro é qualquer valor diferente de zero. Os operadores relacionais tem precedência menor do que os operadores aritméticos, veja: int a = 10, b = 1, c = 12; a > b + c; O resultado da expressão acima é: Falso
Operadores Lógicos Os operadores lógicos definidos por C são os seguintes: A tabela da verdade dos operadores lógicos são mostrados a seguir, usando 1s e 0s:
Uma expressão lógica é uma comparação que sempre retorna valor verdadeiro ou falso. Podemos atribuir o resultado de uma expressão lógica à uma variável resposta a = b Operadores Lógicos se a possui valor 1 e b possui valor 1, então resposta deve receber true(verdadeiro) se a possui valor 1 e b possui valor 2, então resposta deve receber false(falso) O tipo da variável resposta que armazena os resultados das expressões lógicas é o booleano. Em Pascal temos o tipo boolean que pode receber como valores true (verdadeiro) ou false (falso) enquanto que em C não existe o tipo booleano. O resultado de uma expressão lógica em C pode ser 0 (falso) ou qualquer outro valor inteiro (verdadeiro). Para armazenar um valor booleano em C podemos usar uma variável inteira ou char.
Estrutura condicional Em Pascal if (condição) then begin comandos end else begin comandos end Em C if (condição) { comandos } else { comandos }
Exemplo - IF Um esporte só pode ser praticado por maiores de 18 anos e a divisão é feita por peso: até 80kg é considerado peso-leve, acima de 80kg até 130kg, peso-pesado, acima disso não é permitido praticar este esporte.
Pascal C OBS: quando temos vários scanf seguidos, para limpar o buffer e descartar os enters, usamos o formatador %*c
Pascal C OBS: quando temos vários scanf seguidos, para limpar o buffer e descartar os enters, usamos o formatador %*c
Exemplo #include <stdio.h> int main (void) { int a; printf("insira um numero inteiro:"); scanf("%d",&a); if (a%2 == 0) printf("voce inseriu um numero par!\n"); return 0; }
Exemplo #include <stdio.h> int main (void) { int a; printf("insira um numero inteiro:"); scanf("%d",&a); if (a%2 == 0) { printf("voce digitou o numero %d\n",a); printf("voce inseriu um numero par!\n"); } return 0; }
Exemplo #include <stdio.h> int main (void) { int a; printf("insira um numero inteiro:"); scanf("%d",&a); if (a%2 == 0) printf("voce inseriu um numero par!\n"); else printf("voce inseriu um numero impar!\n"); return 0;
if aninhado #include <stdio.h> int main (void) { int a, b; printf("insira dois numeros inteiros:"); scanf("%d%d",&a,&b); if (a%2 == 0) if (b%2 == 0) printf("voce inseriu dois numeros pares!\n"); return 0; }
if com operador lógico int main (void) { int a, b; printf("digite dois numeros inteiros:"); scanf("%d%d",&a,&b); if ((a%2 == 0) && (b%2 == 0)) printf ( "Voce digitou dois numeros pares!\n"); return 0; }
Operador condicional C possui também um chamado operador condicional. Trata-se de um operador que substitui construções do tipo:... if ( a > b ) maximo = a; else maximo = b;... Sua forma geral é: condição? expressão1 : expressão2; se a condição for verdadeira, a expressão1 é considerada; caso contrário, considera-se a expressão2. O comando: maximo = a > b? a : b ; substitui a construção com ifelse mostrada acima.
Exercício Dados três números naturais, verificar se eles formam os lados de um triângulo e ainda dizer se é um triângulo retângulo. Testar com lados 3, 4 e 5. Lembre-se que para ser triângulo: a<(b+c) b<(a+c) c<(a+b) Para ser triângulo retângulo: hipotenusa 2 =cateto 2 +cateto 2 Lembre-se que a hipotenusa é o maior lado!
Correção #include <stdio.h> int main() { int a, b, c; printf("digite tres numeros naturais: "); scanf("%d%d%d", &a,&b,&c); /*verifica se forma triangulo*/ if ((a<(b+c))&&(b<(a+c))&&(c<(a+b))) { if ((a*a == b * b + c * c) (b*b == a * a + c * c) (c*c == a * a + b * b)) printf("o triangulo é retangulo\n"); else printf("o triangulo não é retangulo\n"); } else printf("os valores digitados não formam um triangulo \n"); return 0; }
Exemplo SWITCH/CASE A mãe pergunta ao filho sobre o que ele gostaria de comer entre bolo, salgado, pipoca ou sorvete. Dependendo da resposta, ela compra os ingredientes corretos para o preparo da opção escolhida. Se ele disser outra coisa qualquer, ela nega.
Pascal C Notem que no Pascal temos else e em C temos default
Exemplo #include <stdio.h> int main (void) { int n; printf("digite um numero\n"); scanf ("%d", &n); switch (n) { case 1: printf(" domingo\n"); break; case 2: printf(" segunda-feira\n"); break; case 3: printf(" terça-feira\n"); break; case 4: printf(" quarta-feira\n"); break; case 5: printf(" quinta-feira\n"); break; case 6: printf(" sexta-feira\n"); break; case 7: printf(" sábado\n"); break; default: printf(" inválido\n"); break; } return 0; }
Exercício Faça uma calculadora de quatro operações usando a estrutura switch printf("digite: numero op numero\n"); scanf ("%f %c %f", &num1, &op, &num2);
/* calculadora de quatro operações */ Exercício case '*': #include <stdio.h> printf(" = %f\n", num1*num2); int main (void) break; { case '/': float num1, num2; { char op; if(num2!=0) printf("digite: numero op numero\n"); printf(" = %f\n", num1/num2); scanf ("%f %c %f", &num1, &op, &num2); else switch (op) printf(" não existe divisão por 0\n"); { } case '+': default: printf(" = %f\n", num1+num2); printf("operador invalido!\n"); break; break; case '-': } printf(" = %f\n", num1-num2); return 0; break; }