O comando if if - else O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução. O comando condicional tem duas formas básicas: if(condição) comando if(condição) comando1 else comando2 (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 1 / 26
if - else O comando if if(condição) comando if(condição) comando1 else comando2 A condição é uma expressão qualquer cujo valor é calculado ao se executar o comando condicional. um valor diferente de zero para a condição indica verdadeiro um valor igual a zero indica falso. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 2 / 26
Exemplos de uso do if if - else if(a > 10) b=0; if(c 10) d = 3; if(e 32 >= 789)a = b + 32 k; if(n%2) printf( O numero %d e impar! \n,n); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 3 / 26
if - else Exemplos de uso do if - else if(a == 10) b = 0; else b = 25; if(c 10) d = 3; else c = 34/d; if(e 32 <= 789) a = b + 32 k; else a = 0; if(n%2) printf( O numero %d e impar! \n,n); else printf( O numero %d e par! \n,n); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 4 / 26
Operadores Relacionais Operadores Relacionais <... menor que <=... menor ou igual a ==... igual a! =... diferente de >=... maior ou igual a >... maior que Todos os operadores relacionais tem a mesma precedência, que é menor que a precedência dos operadores aritméticos. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 5 / 26
Mais exemplos Operadores Relacionais if(a! = b) a = a b; else b = b 3; if(a! = b) a = b; else b = 3; if(1 <= a <= 3) printf( \n o valor de a é um numero primo ); else b = 3; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 6 / 26
Operadores Relacionais if-else e blocos de comandos Bloco de comandos Às vezes é necessário executar mais de uma operação quando uma condição é satisfeita. Nesse caso, o bloco dos comandos que devem ser executados deve ser limitado por { e }. Exemplo: if(a < b) { t = a; a = b; b = t; } else i + +; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 7 / 26
Operadores Relacionais Erro comum Cuidado com o sinal de igual == int saldo = 2000; if(saldo==0) printf( Voce esta quebrado!\n ); else printf( Seu saldo e : %d,saldo); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 8 / 26
Operadores Relacionais Erro comum Cuidado com o sinal de igual == int saldo = 2000; if(saldo=0) printf( Voce esta quebrado!\n ); else printf( Seu saldo e : %d,saldo); O compilador não considera isso um erro! Cuidado! (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 9 / 26
Aninhando Sentenças if s aninhados O exemplo a seguir responde se um dado número é positivo ou negativo e se é par ou ímpar. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 10 / 26
if s aninhados Aninhando Sentenças int main(void) { int num; // Obtem um numero do usuario printf( \n Entre com um numero inteiro: ); scanf( %d,&num); // Imprime mensagem dizendo se o numero e positivo ou negativo e par ou impar if(num >= 0) { if(num%2==0) print( O numero e par e positivo.\n ); else print( O numero e impar e positivo.\n ); } else { if(num%2==0) print( O numero e par e negativo.\n ); else print( O numero e impar e negativo.\n ); } return 0; Sheila } de Almeida (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 11 / 26
Regra da Associação if s aninhados Regra da associação: um if está associado com a última ocorrência do if sem else. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 12 / 26
Exemplo incorreto if s aninhados int main(void) { int car; } // Obtem o numero de carros num estacionamento printf( \n Entre com um numero de carros: ); scanf( %d,&car); /* Imprime uma mensagem dizendo se há mais de 10 carros ou se não há carros no estacionamento */ if(car!= 0) if(car > 10) print( Ha mais de 10 carros no estacionamento.\n ); else print( Não ha carros no estacionamento.\n ); return 0; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 13 / 26
O que está acontecendo? if s aninhados int main(void) { int car; } // Obtem o numero de carros num estacionamento printf( \n Entre com um numero de carros: ); scanf( %d,&car); /* Imprime uma mensagem dizendo se há mais de 10 carros ou se não há carros no estacionamento */ if(car!= 0) if(car > 10) print( Ha mais de 10 carros no estacionamento.\n ); else print( Não ha carros no estacionamento.\n ); return 0; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 14 / 26
if s aninhados Corrigindo o problema: use { e }. int main(void) { int car; } printf( \n Entre com um numero de carros: ); scanf( %d,&car); /* Imprime uma mensagem dizendo se há mais de 10 carros ou se não há carros no estacionamento */ if(car!= 0) { if(car > 10) print( Ha mais de 10 carros no estacionamento.\n ); } else print( Não ha carros no estacionamento.\n ); return 0; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 15 / 26
Operadores Lógicos if-else aninhados ou operadores lógicos Todos os programas até agora consideraram o comando if com condições simples: b!=0 contador < 5 Quando mais de uma condição precisa ser testada, precisamos usar sentenças if-else aninhadas. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 16 / 26
Operadores Lógicos if-else aninhados ou operadores lógicos if(num>=0) if(num%2==0) printf( Numero par positivo. \n ); Nós podemos usar operadores lógicos!!! Veja: if((num>=0)&&(num%2==0)) printf( Numero par positivo. \n ); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 17 / 26
Operadores Lógicos Operadores Lógicos && E (todas as condições precisam ser verdadeiras) OU (basta que uma das condições seja verdadeira)! NÃO/NEGAÇÃO (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 18 / 26
Operadores Lógicos Operadores Lógicos: operação de negação Cada expressão resulta num valor lógico: 0 falso 1 verdadeiro A operação de negação pode ser usada da seguinte forma:!expressão E executa o seguinte papel:!0 é 1!1 é 0 (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 19 / 26
Operadores Lógicos Operadores Lógicos: operação de negação Exemplo: if(num>0 &&!(num%2)) printf( Numero par e positivo. \n ); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 20 / 26
Operadores Lógicos Operadores Lógicos: operação de negação Outro exemplo: suponha que quero fazer um cálculo que só é válido para números pares positivos. Eu posso avisar ao usuário se ele não digitar um número que satisfaça as condições: printf( digite um numero par positivo: ); scanf( %d,&num); if(!(num>0 && num%2==0)) printf( O numero digitado nao satisfaz as condicoes. \n ); (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 21 / 26
Operadores Lógicos Operadores Lógicos: precedências O operador de negação tem precedência mais alta que os outros operadores lógicos. Os operadores lógicos && e tem precedência menor que os operadores relacionais. Os operadores lógicos && e tem precedência maior que a operação de atribuição. O operador && tem precedência maior que o operador. precedência menor = é executado depois! (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 22 / 26
Operadores Lógicos Operadores Lógicos: precedências Como a precedência dos operadores lógicos é menor que a dos operadores relacionais, não é necessário usar parênteses em expressões como: x>=3 && x<=50 x==1 x==2 x==3 (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 23 / 26
Exemplo Operadores Lógicos O programa a seguir verifica se os valores de lado1, lado2 e lado3 podem ser lados de um triângulo reto. Usaremos o fato de que os lados tem que ser valores positivos e que o quadrado de um dos lados é igual à soma dos quadrados dos outros dois lados. (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 24 / 26
Exemplo Operadores Lógicos int maind(void) { int lado1, lado2, lado3, q1, q2, q3; } printf( Entre com o tamanho dos lados do triangulo: ); scanf( %d %d %d,&lado1, &lado2, &lado3); q1=lado1*lado1; q2=lado2*lado2; q3=lado3*lado3; if(lado1>0 && lado2>0 && lado3>0) { if(s1==s2+s3 s2==s1+s3 s3==s1+s2) printf( \n Trinagulo reto! \n ); else printf( \n Nao e um triangulo reto!\n ); } else printf( \n Não pode ser um triangulo: tem lados negativos!\n ); return 0; (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 25 / 26
Leis de DeMorgan Operadores Lógicos Duas leis de DeMorgan podem ser bastante úteis:!(x && y) é o mesmo que!x!y!(x y) é o mesmo que!x &&!y (sheila@ic.unicamp.br) (IC-UNICAMP) Comando Condicional agosto - 2007 26 / 26