26
if - else O comando if O comando condicional permite incluir no programa trechos de c´ odigo que dependem de uma ou mais condi¸ oes para sua execu¸ ao. O comando condicional tem duas formas b´ asicas: if(condi¸ ao) comando if(condi¸ ao) comando1 else comando2 Sheila de Almeida ([email protected]) (IC-UNICAMP) Comando Condicional agosto - 2007 1 / 26

O comando if - Unicamp

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

if - else

O comando if

O comando condicional permite incluir no programa trechos de codigo quedependem de uma ou mais condicoes para sua execucao.

O comando condicional tem duas formas basicas:

if(condicao) comando

if(condicao) comando1 else comando2

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 1 / 26

if - else

O comando if

if(condicao) comando

if(condicao) comando1 else comando2

A condicao e uma expressao qualquer cujo valor e calculado ao se executaro comando condicional.

um valor diferente de zero para a condicao indica verdadeiro

um valor igual a zero indica falso.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 2 / 26

if - else

Exemplos de uso do if

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 de Almeida ([email protected]) (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);

elseprintf(”O numero %d e’ par! \n”,n);

Sheila de Almeida ([email protected]) (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 precedencia, que e menorque a precedencia dos operadores aritmeticos.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 5 / 26

Operadores Relacionais

Mais exemplos

if(a! = b)a = a − b;

elseb = b − 3;

——————————————————–if(a! = b)

a− = b;else

b− = 3;——————————————————if(1 <= a <= 3)

printf(“\n o valor de a e um numero primo”);else

b− = 3;

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 6 / 26

Operadores Relacionais Bloco de comandos

if-else e blocos de comandos

As vezes e necessario executar mais de uma operacao quando umacondicao e satisfeita.

Nesse caso, o bloco dos comandos que devem ser executados deve serlimitado por ”{”e ”}”.

Exemplo:

if(a < b){

t = a;a = b;b = t;

}else i + +;

Sheila de Almeida ([email protected]) (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”);

elseprintf(”Seu saldo e’: %d”,saldo);

Sheila de Almeida ([email protected]) (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”);

elseprintf(”Seu saldo e’: %d”,saldo);

O compilador nao considera isso um erro! Cuidado!

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 9 / 26

if’s aninhados

Aninhando Sentencas

O exemplo a seguir responde se um dado numero e positivo ou negativo ese e par ou ımpar.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 10 / 26

if’s aninhados

Aninhando Sentencas

int main(void){ int num;

// Obtem um numero do usuarioprintf(”\n Entre com um numero inteiro: ”);scanf(”%d”,&num);// Imprime mensagem dizendo se o numero e’ positivo ou negativo e par ou imparif(num >= 0) {

if(num%2==0)print(”O numero e’ par e positivo.\n”);

elseprint(”‘O numero e’ impar e positivo.\n”’);

}else {

if(num%2==0)print(”O numero e’ par e negativo.\n”);

elseprint(”O numero e’ impar e negativo.\n”);

}return 0;

}Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 11 / 26

if’s aninhados

Regra da Associacao

Regra da associacao: um if esta associado com a ultima ocorrencia do ifsem else.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 12 / 26

if’s aninhados

Exemplo incorreto

int main(void){ int car;

// Obtem o numero de carros num estacionamentoprintf(”\n Entre com um numero de carros: ”);scanf(”%d”,&car);/* Imprime uma mensagem dizendo se ha mais de 10 carros ou se naoha carros no estacionamento */if(car != 0)

if(car > 10)print(”Ha mais de 10 carros no estacionamento.\n”);

elseprint(”Nao ha carros no estacionamento.\n”);

return 0;}

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 13 / 26

if’s aninhados

O que esta acontecendo?

int main(void){ int car;

// Obtem o numero de carros num estacionamentoprintf(”\n Entre com um numero de carros: ”);scanf(”%d”,&car);/* Imprime uma mensagem dizendo se ha mais de 10 carros ou se naoha carros no estacionamento */if(car != 0)

if(car > 10)print(”Ha mais de 10 carros no estacionamento.\n”);

elseprint(”Nao ha carros no estacionamento.\n”);

return 0;}

Sheila de Almeida ([email protected]) (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 ha mais de 10 carros ou se naoha carros no estacionamento */if(car != 0){

if(car > 10)print(”Ha mais de 10 carros no estacionamento.\n”);

}else

print(”Nao ha carros no estacionamento.\n”);return 0;

}Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 15 / 26

Operadores Logicos

if-else aninhados ou operadores logicos

Todos os programas ate agora consideraram o comando if com condicoessimples:

b!=0

contador < 5

Quando mais de uma condicao precisa ser testada, precisamos usarsentencas if-else aninhadas.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 16 / 26

Operadores Logicos

if-else aninhados ou operadores logicos

if(num>=0)if(num%2==0)

printf(”Numero par positivo. \n”);

Nos podemos usar operadores logicos!!! Veja:

if((num>=0)&&(num%2==0))printf(”Numero par positivo. \n”);

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 17 / 26

Operadores Logicos

Operadores Logicos

&& E (todas as condicoes precisam ser verdadeiras)

|| OU (basta que uma das condicoes seja verdadeira)

! NAO/NEGACAO

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 18 / 26

Operadores Logicos

Operadores Logicos: operacao de negacao

Cada expressao resulta num valor logico:

0 falso

1 verdadeiro

A operacao de negacao pode ser usada da seguinte forma:

!expressao

E executa o seguinte papel:

!0 e 1

!1 e 0

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 19 / 26

Operadores Logicos

Operadores Logicos: operacao de negacao

Exemplo:

if(num>0 && !(num%2))printf(”Numero par e positivo. \n”);

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 20 / 26

Operadores Logicos

Operadores Logicos: operacao de negacao

Outro exemplo:

suponha que quero fazer um calculo que so e valido para numeros parespositivos.

Eu posso avisar ao usuario se ele nao digitar um numero que satisfaca ascondicoes:

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 de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 21 / 26

Operadores Logicos

Operadores Logicos: precedencias

O operador de negacao tem precedencia mais alta que os outrosoperadores logicos.

Os operadores logicos && e || tem precedencia menor que osoperadores relacionais.

Os operadores logicos && e || tem precedencia maior que a operacaode atribuicao.

O operador && tem precedencia maior que o operador ||.

precedencia menor = e executado depois!

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 22 / 26

Operadores Logicos

Operadores Logicos: precedencias

Como a precedencia dos operadores logicos e menor que a dos operadoresrelacionais, nao e necessario usar parenteses em expressoes como:

x>=3 && x<=50

x==1 || x==2 || x==3

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 23 / 26

Operadores Logicos

Exemplo

O programa a seguir verifica se os valores de lado1, lado2 e lado3 podemser lados de um triangulo reto.

Usaremos o fato de que os lados tem que ser valores positivos e que oquadrado de um dos lados e igual a soma dos quadrados dos outros doislados.

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 24 / 26

Operadores Logicos

Exemplo

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”);

elseprintf(”\n Nao e’ um triangulo reto!\n”);

}else

printf(”‘\n Nao pode ser um triangulo: tem lados negativos!\n”);return 0;

}

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 25 / 26

Operadores Logicos

Leis de DeMorgan

Duas leis de DeMorgan podem ser bastante uteis:

!(x && y) e o mesmo que !x || !y

!(x || y) e o mesmo que !x && !y

Sheila de Almeida ([email protected]) (IC-UNICAMP)Comando Condicional agosto - 2007 26 / 26