13 Operadores relacionais Os operadores relacionais permitam comparar valores (ou expressões) dos tipos: inteiro, real ou caracter devolvendo como resultado: verdadeiro (true) ou falso (false)
E estes valores ( verdadeiro, falso ) são chamados valores lógicos. O valor 1 equivale ao verdadeiro. O valor 0 equivale ao falso.
Operadores relacionais: == igual > maior >= maior ou igual < menor <= menor ou igual!= diferente
Exemplos de expressões com operadores relacionais: a = 1, b = 2, c = 4, d = 5, e = -1; (inteiros!) a = = b -1 verdadeiro c = = d - e falso a = = (b+1)/2 verdadeiro
14 Operadores lógicos Os operadores lógicos permitem comparar expressões que tenham valores lógicos, devolvendo também um valor lógico: verdadeiro (true) ou falso (false).
Operadores lógicos: && e ( and ) ou ( or )! não ( not )
Prioridade sinais ( + - )! maior * / % + - ==!= < <= > >= && menor
Exemplo!(2 = = 3) && 1 = = 1 ( é verdadeiro )
Exemplos de expressões com operadores lógicos: a = 5, b = 4, c = 9, d = -2, e = 3; a + b == c d >= e verdadeiro a == d - e && e <= b falso!(a+1 == b) a+1 == b verdadeiro
15 A instrução if A instrução if permite o desvio do fluxo vertical de um programa conforme o teste de uma condição (valor lógico).
Sintaxe: if (condição) instrução1; else instrução2;
Funcionamento: condição True (sim) instrução1 False (não) instrução2
- se o valor da condição for verdadeiro (true) a instrucão1 é executada. - se o valor da condição for falso (false) a instrucão2 é executada. - apenas uma das instruções é executada.
O if sem o else Em determinadas situações conforme o resultado (valor lógico) de uma condição: se o resultado for verdadeiro, precisamos executar uma instrução, e se o resultado for falso não precisamos fazer nada.
Sintaxe: if (condição) instrução1;
Funcionamento: if sem o else condição True (sim) instrução1 False (não)
- se o valor da condição for verdadeiro (true) a instrucão1 é executada. - se o valor da condição for falso (false) a instrucão1 não é executada.
Observações A condição deve sempre estar entre parênteses. É obrigatório colocar ; (ponto e vírgula) depois da instrução1 e da instrução2.
16 Bloco de instruções É um conjunto de instruções entre chaves { instrução1; instrução2;... }
- Sintaticamente um bloco de instruções equivale a uma única instrução. - Assim se no if queremos utilizar mais de uma instrução no lugar da instrução1 (ou da instrução2) devemos utilizar um bloco de instruções. - Depois de um bloco não é necessário por o ; ( ponto e vírgula ). - Observe que o programa é um grande bloco de instruções.
Exemplo: Programa que lê um código de um produto e o respectivo valor (preço sem iva) e calcula o total (preço com iva). Se o código terminar em 0 (zero) o iva é de 5%, se o código terminar em 1 (um) o iva é de 21%.
Fluxograma (parte principal) c % 10 = = 0 True (sim) iva = 0.05 False (não) iva = 0.21
#include <stdio.h> main ( ) { int c; float iva,valor,total; printf( escreva o código\n ); scanf( %d,&c); printf( escreva o valor\n ); scanf( %f,&valor); if (c % 10 = = 0 ) iva = 0.05; else iva = 0.21; total = valor + (valor*iva); printf( O preço total é %f\n, total); }
O que acontece no programa anterior se o código não terminar nem em zero nem em um? Se for diferente de zero, equivale a ser um. Como resolver este problema:
I -... if (c % 10 = = 0 ) iva = 0.05; else iva = 0.21; total = valor + (valor*iva); if (c % 10!= 0 && c % 10!= 1) printf( O código está errado\n ); else printf( O preço total é %f\n, total); }
I I-... if (c % 10!= 0 && c % 10!=1) printf( O código está errado\n ); else { if (c % 10 = = 0 ) } } iva = 0.05; else iva = 0.21; total = valor + (valor*iva); printf( O preço total é %f\n, total);
Observe neste último if a utilização de um um bloco como sendo a instrução2. if (c % 10!= 0 && c % 10!=1) printf( O código está errado\n ) else { if (c % 10 = = 0 ) } iva = 0.05; else iva = 0.21; total = valor + (valor*iva); printf( O preço total é %f\n, total);
Condições compostas e If encadeados Suponha o seguinte problema: - Enviar um aviso ao encontrar um número inteiro par maior do que 100.
Fluxograma (parte principal) True (sim) n % 2 = = 0 n > 100 True (sim) escrever Aviso!!! False (não) False (não)
que equivale a:... if (n % 2 == 0) if ( n > 100) printf( Aviso!!!\n );...
Observe que utilizamos um segundo if como instrução do primeiro, ou seja encadeados. Neste caso é possível utilizar apenas um if com uma condição composta.
Fluxograma (parte principal) n%2 = = 0 && n>100 True (sim) escrever Aviso!!! False (não)
que equivale a:... if (n % 2 == 0 && n > 100) printf( Aviso!!!\n );...
Exercício: - se o número for par e maior que 100 escrever verde!, - se fosse apenas par (menor ou igual a 100) escrever amarelo!, - se fosse apenas maior que 100 (impar) escrever vermelho!.
Regra importante: Um else sempre pertence ao último if. if (condição) if (condição) instrução; else instrução;
Se, pela lógica do programa, o else devesse pertencer ao primeiro if, deveríamos utilizar chaves (bloco). if (condição) { if (condição) instrução; } else instrução;