Baixe o app para aproveitar ainda mais
Prévia do material em texto
P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Estruturas de Controle de Seleção Linguagem C •Comando if Comandos de Seleção (condicionais) •Comando switch Selecionam o curso de uma ação entre várias ações possíveis, dependendo do valor de uma expressão (constante, aritmética, boleana). Vale lembrar que em C, todo valor diferente de zero é verdadeiro. Palavras reservadas a serem exploradas nas próximas duas aulas : if, else, switch, case, break e default. P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando de Seleção - switch É um comando usado em situações de seleção múltipla, ou seja, permite escolher o curso de uma ação entre várias ações possíveis. Pode ser usado em muitos casos (não em todos) para substituir um conjunto de if’s aninhados (encadeados), tornando o código mais elegante e conseqüentemente mais legível. P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando de Seleção - switch Forma geral Æ switch (expressão_inteira) { }; // switch proxima_instrução case constante1: comandos1; break; case constante2: comandos2; break; case constante3: comandos3; break; case constanten: comandosn; break; default: comandos; ..... Em geral é uma variável_de_seleção e deve ser de um tipo enumerável (char, int, long, ...). P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando de Seleção - switch ÆO valor da variável de seleção é testado com as constantes associadas aos diferentes case´s. Quando o valor coincidir com uma das constantes, então, as respectivas instruções (comandos) associadas a esse case serão executadas, até encontrar um comando break, terminando a execução do comando switch. Na sequência, proxima_instrução é executada; ÆNo caso do valor da variável de seleção não coincidir com nenhum dos valores associados as constantes, então, as respectivas instruções associadas a opção default serão executadas, se essa opção estiver presente. Caso contrário, nenhuma ação será executada; Observações: Æ ÆComo foi dito, a opção default é opcional, ou seja, ela não precisa estar presente toda vez que você utilizar o comando switch; Æ Os valores associados as constantes devem ser do mesmo tipo de dados da expressão_inteira; Æ As constantes devem ser únicas, ou seja, não podem aparecer em mais de um case; P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando de Seleção - switch Observações: Æ Æ Só pode existir uma única opção default no interior do comando switch. Não necessariamente precisa ser a última opção; Æ As constantes constante1, constante2, ..., constanten são possíveis valores que a expressão_inteira (variável de seleção) podem assumir. Devem ser constantes, jamais variáveis; Æ Para cada constante pode haver uma ou mais instruções a serem executadas; Æ A instrução/comando break interrompe a execução do switch, redirecionando o fluxo de execução para a próxima_instrução, após o comando switch; Æ Se o comando break não for encontrado, as instruções seguintes, no interior do próximo case serão executadas, independente do valor das constantes, até que um comando break seja encontrado ou o final do switch seja alcançado; P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando de Seleção - switch Observações: Æ Æ Para cada um dos valores das constantes, caso haja mais de uma instrução a ser executada (grupo de instruções), não é necessário colocar os delimitadores de bloco, que como sabemos é representado pelo par de chaves ‘{’ e ‘}’ . Isso se deve em função do fato dos limites superior e inferior estarem bem definidos; Æ O valor da expressão_inteira associado ao comando switch, testa somente igualdade e não expressões relacionais arbitrárias semelhantes a ( a > b ), ou ainda, ( (c > d) && (d != 2*a*b) ); Æ Quando trabalharmos com o conceito de função, o comando switch poderá ser usado para a elaboração de algumas interfaces baseadas em texto, que são simples, porém eficientes dentro do propósito inicial de nossa disciplina. P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Equivalência entre os comandos switch e if ... if ( expressao1 == constante1 ){ instruções1; } else if ( expressao1 == constante2 ) { instruções2; } else if ( expressao1 == constante3 ) { instruções3; } else if ( expressao1 == constante4 ) { instruções4; } else if ( expressao1 == constante5 ) { instruções5; } else if ( expressao1 == constante6 ) { instruções6; } else { outras_instruções; } próxima_instrução; ... A seqüência de ifs encadeados É equivalente a seguinte instrução switch ... switch ( expressao1) { case constante1 : instruções1; break; case constante2 : instruções2; break; case constante3 : instruções3; break; case constante4 : instruções4; break; case constante5 : instruções5; break; case constante6 : instruções6; break; default outras_instruções; } // final do switch próxima_instrução;... P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Equivalência entre os comandos switch e if Problema 01:Æ Leia um numero inteiro no intervalo [1,7] e escreva o respectivo dia da semana, supondo que 1 seja segunda-feira e 7 seja domingo. ... if ( (x >= 1)&&( x<= 7) ) if (x == 1) printf(“\n segunda-feira”); else if (x == 2) printf(“\n terça-feira”); else if (x == 3) printf(“\n quarta-feira”); else if (x == 4) printf(“\n quinta-feira”); else if (x == 5) printf(“\n sexta-feira”); else if (x == 6) printf(“\n sabado”); else printf(“\n domingo”); else printf(“\n o valor introduzido esta incorreto!!!”); ... trecho de código com a solução do problema usando utilizando ifs encadeados P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Equivalência entre os comandos switch e if Problema 01:Æ Leia um numero inteiro no intervalo [1,7] e escreva o respectivo dia da semana, supondo que 1 seja segunda-feira e 7 seja domingo. trecho de código com a solução do problema usando utilizando o comando switch ... if ( (x >= 1)&&( x <= 7) ) switch( x ) { case 1: printf("\n\n segunda-feira!!"); break; case 2: printf("\n\n terca-feira!!"); break; case 3: printf("\n\n quarta-feira!!"); break; case 4: printf("\n\n quinta-feira!!"); break; case 5: printf("\n\n sexta-feira!!"); break; case 6: printf("\n\n sabado!!"); break; case 7: printf("\n\n domingo!!"); break; } // switch else printf(“\n o valor introduzido esta incorreto!!!”); ... P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Equivalência entre os comandos switch e if Problema 01:Æ Leia um numero inteiro no intervalo [1,7] e escreva o respectivo dia da semana, supondo que 1 seja segunda-feira e 7 seja domingo. uma outra solução do mesmo problema. ... switch( x ) { case 1: printf("\n\n segunda-feira!!"); break; case 2: printf("\n\n terca-feira!!"); break; case 3: printf("\n\n quarta-feira!!"); break; case 4: printf("\n\n quinta-feira!!"); break; case 5: printf("\n\n sexta-feira!!"); break; case 6: printf("\n\n sabado!!"); break; case 7: printf("\n\n domingo!!"); break; default : printf("\n\n Entrada Incorreta!!!"); } // switch ... Observe que o comando if foi removido e a entrada incorreta é tratada dentro do switch. P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando switch Problema 02:Æ Elabore um programa em C para ler um caractere qualquer e verificar se esse caractere é uma vogal minúscula ou maiúscula (‘a’, ‘e’, ‘i’, ‘o’, ‘u’, ‘A’, ‘E’, ‘I’, ‘O’, ‘U’ ). O programa completo estará nos anexos. ... if((ch == 'a') || (ch == 'A')) printf("\n\n Vogal pressionada foi 'A'!!!"); else if((ch == 'e') || (ch == 'E')) printf("\n\n Vogal pressionadafoi 'E'!!!"); else if((ch == 'i') || (ch == 'I')) printf("\n\n Vogal pressionada foi 'I'!!!"); else if((ch == 'o') || (ch == 'O')) printf("\n\n Vogal pressionada foi 'O'!!!"); else if((ch == 'u') || (ch == 'U')) printf("\n\n Vogal pressionada foi 'U'!!!"); else printf("\n\n O caractere introduzido não é uma VOGAL!!!"); ... trecho de código com a solução do problema usando utilizando ifs encadeados P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando switch Problema 02:Æ Elabore um programa em C para ler um caractere qualquer e verificar se esse caractere é uma vogal minúscula ou maiúscula (‘a’, ‘e’, ‘i’, ‘o’, ‘u’, ‘A’, ‘E’, ‘I’, ‘O’, ‘U’ ). Ver programa completo nos anexos. trecho de código com a solução do problema usando utilizando o comando switch ... switch( ch ){ case 'a': case 'A': printf("\n\n Vogal pressionada foi A!!!"); break; case 'e': case 'E': printf("\n\n Vogal pressionada foi E!!!"); break; case 'i': case 'I': printf("\n\n Vogal pressionada foi I!!!"); break; case 'o': case 'O': printf("\n\n Vogal pressionada foi O!!!"); break; case 'u': case 'U': printf("\n\n Vogal pressionada foi U!!!"); break; default : printf("\n\n O caractere introduzido não é uma VOGAL!!!"); } //switch ... P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Comando switch ... uma outra forma de escrever o código do slide anterior é dado abaixo. Obviamente que ambos os códigos possuem a mesma estrutura lógica. ... switch( ch ){ case 'a': case 'A': printf("\n\n Vogal pressionada foi A!!!"); break; case 'e': case 'E': printf("\n\n Vogal pressionada foi E!!!"); break; case 'i': case 'I': printf("\n\n Vogal pressionada foi I!!!"); break; case 'o': case 'O': printf("\n\n Vogal pressionada foi O!!!"); break; case 'u': case 'U': printf("\n\n Vogal pressionada foi U!!!"); break; default : printf("\n\n O caractere introduzido não é uma VOGAL!!!"); } //switch ... P r o f . P i t e r i - 3 ª A u l a – L i n g u a g e m C Atividade Laboratorial – Comando switch Se você desejar, sinta-se a vontade para resolver o problema usando if´s encadeados. Æ Vogal minúscula; Æ Vogal maiúscula; Æ Consoante minúscula; Æ Consoante maiúscula; Æ Operador aritmético (´+´, ´-´, ´*´, ´/´, ´%´); Æ Dígitos (´0´...´9´); Æ Sinais de pontuação (´,´, ´.´, ´:´, ´;´, ´?´, ´!´); Æ Outros caracteres. Exercício:Æ Elabore um programa em C para ler um caractere qualquer e classificá- lo entre uma das classes abaixo: A saída do seu programa deve ser algo do tipo: “O caractere pressionado (< : >) é um SINAL DE PONTUAÇÃO” Ou ainda : “O caractere pressionado (< a >) é uma VOGAL MINÚSCULA”
Compartilhar