Estruturas de Decisão Permitir testes para decidir acções alternativas: if if - else switch (?:) Operador Condicional MF. 1 Comando if if (condição) instrução; #include <stdio.h> main ( ) { char ch; ch = getchar ( ); if (ch == ‘p’) printf (“Premiu a tecla p”); } if (condição) { instrução1; intrução2; } #include <stdio.h> main ( ) { if (getchar()) == ‘p’ ) { printf (“Digitou p”); printf (“ Pressione outra tecla ”); getchar( ); } } MF. 2 if aninhados Se um comando if está dentro do outro if, dizemos que o if interno está aninhado. #include <stdio.h> void main ( ) { char ch; printf (“ digite uma letra entre A e Z”); ch = getchar ( ); if (ch >= ‘A’) if (ch < = ‘Z’) printf (“Acertou”); #include <stdio.h> void main ( ) { char ch; printf (“ digite uma letra entre A e Z”); ch = getchar ( ); if((ch >= ‘A’) && (ch < = ‘Z’)) printf (“Acertou”); } } MF. 3 Comando if-else O comando if só executa a instrução caso a condição do teste seja verdadeira, nada fazendo se a expressão for falsa. O comando else executará uma instrução ou um conjunto de instruções se a expressão for falsa. MF. 4 Comando if-else if (condição) #include <stdio.h> instrução; void main ( ) { else if (getchar ( ) == ‘p’) printf (“Digitou p”); instrução; else printf (“Não digitou p”); } #include <stdio.h> void main ( ) { int nota; if (nota>= 10) printf (“Tem positiva”); else printf (“Teve negativa”); } MF. 5 Exemplo #include <stdio.h> void main() { int a,b; printf(“Digite 2 números: “); scanf(“%d%d”,&a,&b); if (b) printf(“%f”,a/b); else printf(“Não se pode efectuar divisões por zero\n”); } Deve evitar-se divisões por Zero, recorrendo ao comando if-else. MF. 6 Comando if-else aninhados if (condição1) instrução #include <stdio.h> else if (condição2) void main ( ) { instrução int numero; else if (condição3)... scanf (“%d”, &numero); if (número < 0) printf (“número menor que zero”); else if (numero < 10) printf (“ numero entre 0 e < 10”); else if (numero < 100) printf (“numero de 10 a < 100); else printf (“número > 100”); } MF. 7 Como decide computador de que if o else pertence? •O último else é sempre associado ao if mais interno • Quando será executado z = b? Ex2: EX1: if (n > 0) { if (a > b) z = a; } else z = b; if (n > 0) if (a > b){ z = a; calculafatorial(z); } else z = b; Ex1: Quando n > 0 e a < b Ex2: Quando n < 0 MF. 8 Exercício 1 Programa Adulto (maior que 21), Jovem ou Velho (maior que 70). #include <stdio.h> void main() { int i; printf(“Digite sua idade: “); scanf(“%d”,&i); if (i > 70) printf(“Esta Velho!”); else if (i > 21) printf(“Adulto”); else printf(“Jovem”); } MF. 9 Exercício 2 main() { int a,b,c; printf(“Digite o 1º Número: “); scanf(“%d”,&a); printf(“\nDigite o 2º Número: “); scanf(“%d”,&b); printf(“\nDigite o 3º Número: “); scanf(“%d”,&c); if (a > b) if (a > c) printf(“\nO Maior é %d”,a); else printf(“\nO Maior é %d”,c); else if (b > c) printf(“\nO Maior é %d”,b); else printf(“\nO Maior é %d”,c); } main() { int a,b,c,d; printf(“Digite o 1º Número: “); scanf(“%d”,&a); printf(“\nDigite o 2º Número: “); scanf(“%d”,&b); printf(“\nDigite o 3º Número: “); scanf(“%d”,&c); if (a > b) d = a; else d = b; if (c > d) printf(“\nO Maior é %d”,c); else printf(“\nO Maior é %d”,d); } Acha o número maior entre três nº Exercício 3 Dados 2 números apresenta-os ordenados main() { int a,b,t; printf(“Digite o 1º Número: “); scanf(“%d”,&a); printf(“\nDigite o 2º Número: “); scanf(“%d”,&b); if (a < b) { t = a; a = b; b = t; } printf(“\nOrdenados: %d e %d “,b,a); } MF. 11 Comando ?: Forma compacta de expressar uma instrução if – else (condição) ? expressão1 : expressão2 Max = (num1 > num2) ? num1 : num2 Note: if (num1 > num2) max = num1; else max = num2; Exemplo: ABS = (num < 0) ? - num : num; MF. 12 Comando Switch Forma de se substituir o comando if – else ao executarse vários testes Diversas vezes precisamos determinar se um valor se encontra numa lista de valores. Apesar de podermos usar uma seqüência de ifs, este recurso além de não ser elegante, por vezes confunde o entendimento do programa. A melhor opção é o comando switch. MF. 13 Comando Switch Sintaxe: switch <variável> { case <constante 1> : <comandos>; [break;] case <constante 2> : <comandos>; [break;] case <constante 3> : <comandos>; [break;] [default : <comandos>;] } OBS: “ variável” deve ser uma variável do tipo inteiro ou carácter; “break” serve para terminar a seqüência de comandos em execução, por serem opcionais, se forem suprimidos permitem que o “case” a seguir seja executado, sem haver qualquer quebra na seqüência do processamento. Comando Switch #include <stdio.h> void main ( ) { char op; float num1, num2; printf (“ digite um nº, um operador e um nº”); scanf (“ %f %c %f”, &num1, &op, &num2); switch (op) { case ‘+’: printf (“ Soma= %f”, num1 + num 2); break: case ‘-’: printf (“ Diferença= %f”, num 1 - num 2); break; default: printf (“ operador inválido”); } Exercício Seguindo a idéia do exercício anterior incrementa a calculadora com mais funções matemáticas. Sugestão: usa funções da biblioteca matemática math.h como por exemplo: sin(x) cos(x) log(x) sqrt(x) pow(x1,x2) MF. 16