Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Gustavo Luís F. Vicente Linguagem C MÓDULO 2 Estruturas de Decisão Linguagem C 2 Estruturas de Controle • Sequência de Execução – instruções executadas uma após a outra, na ordem em que foram escritas • Estruturas de Decisão – executam instruções dependendo do resultado de uma expressão condicional • Estruturas de Repetição – executam instruções várias vezes, em função de uma condição • Bohn e Jacopini – Todo programa pode ser escrito em termos das três estruturas acima ?V F ? Linguagem C 3 Sequência de Execução Adiciona nota ao total Adiciona 1 ao contador total = total + nota; cont = cont + 1; FLUXOGRAMA CÓDIGO C Linguagem C 4 Sequência de Execução 1 #include <stdio.h> 2 3 main() 4 { 5 int n_pessoas; // número de pessoas no churrasco 6 float peso_carne; // qtde de carne a ser comprada 7 8 printf( ”Digite o número de pessoas do churrasco: " ); 9 scanf( “%d", &n_pessoas ); 10 peso_carne = n_pessoas * 0.3; // calcula a qtde de carne 11 printf( ”\n Quantidade de carne: %4.1f kg.\n”, peso_carne); 12 13 } /* Fim da função main() */ EXEMPLO DECLARAÇÃO DE VARIÁVEIS INSTRUÇÕES DO PROGRAMA Linguagem C 5 Estruturas de Decisão • Utilizadas para alterar o fluxo de execução do programa • Pseudocódigo Se nota do aluno maior ou igual a 6,0 Escrever “Passou” • Se a condição é verdadeira – instrução Escrever é executada • Se a condição é falsa – instrução Escrever é ignorada nota >= 6.0 Escrever “Passou” V F FLUXOGRAMA MAS, ATENÇÃO !!! Linguagem C 6 Estruturas de Decisão f (nota >= 6.0) // Se nota maior ou igual a 6.0 printf("Passou"); // Escrever “Passou” C não possui o tipo booleano: TRUE/FALSE Em C, a instrução de decisão: if Linguagem C 7 Estruturas de Decisão Como, então, representar um valor booleano??? C não possui o tipo booleano: TRUE/FALSE Avaliação/Representação de Condição em C = 0 FALSO 0 VERDADEIRO Exs.: (3 - 4) é VERDADEIRO (5 - 5) é FALSO int flag; ... if (flag) { <instruções> } Utiliza-se uma variável do tipo int : Linguagem C 8 Estruturas de Decisão int flag; ... if (flag) { <instruções> } se o conteúdo da variável flag for 0 (zero), o programa entenderá a condição como FALSO, e NÃO executará as <instruções>. se o conteúdo da variável flag for diferente de zero, o programa entenderá a condição como VERDADEIRO, e executará as <instruções>. Linguagem C 9 Estruturas de Decisão Digite a nota do aluno 7.3 Passou. Este programa indica se o aluno passou. 1 /* 2 Terceiro programa: 2 Programa que indica se o aluno passou 3 */ 3 #include <stdio.h> 4 5 /* Função main() inicia a execução do programa */ 6 int main() 7 { 8 float nota; // Nota do aluno 9 10 printf( ”Digite a nota do aluno\n" ); // prompt 11 scanf( "%f", ¬a ); // lê a nota 12 13 if ( nota >= 6.0) // Avalia a condição: 14 printf( ”\nPassou.\n" ); // Indica o resultado 15 16 return 0; /* Indica que o programa terminou normalmente */ 17 18 } /* Fim da função main() */ Linguagem C 10 Estruturas de Decisão • A instrução if...else • if • executa uma ação apenas se a condição for VERDADEIRA • if...else • especifica uma ação a ser executada se a condição for VERDADEIRA, e outra se a condição for FALSA • Pseudocódigo Se a nota do aluno é maior ou igual a 6,0 Escrever “Passou” senão Escrever “Reprovado” Linguagem C 11 Estruturas de Decisão • Instruções em C if (nota >= 6.0) printf("Passou. "); else printf("Reprovado."); • Repare a identação: espaçamento das instruções, para clareza do código. • A linguagem C não considera espaços e mudanças de linha. nota >= 6.0 Escrever “Passou” Escrever “Reprovado” F V FLUXOGRAMA Linguagem C 12 Estruturas de Decisão • Operadores relacionais • Relacionam (COMPARAM) dois valores Operadores algébricos padrão Operadores utilizados pelo C Exemplo de uso, em C Significado = == x == y x é igual a y ? ≠ != x != y x é diferente de y ? > > x > y x é maior que y ? < < x < y x é menor que y ? ≥ >= x >= y x é maior ou igual a y ? ≤ <= x <= y x é menor ou igual a y ? Linguagem C 13 Estruturas de Decisão 1 /* Quarto programa: 2 Programa que utiliza os operadores relacionais */ 3 #include <stdio.h> 4 5 /* Função main() inicia a execução do programa */ 1 int main() 2 { 3 int num1, num2; // números a serem digitados pelo usuário 4 printf( ”Digite dois números inteiros que te mostro\n" ); // Apresentação ao usuário 5 printf( ”as relações verdadeiras entre eles.\n" ); 6 printf( ”Primeiro número: " ); // prompt 7 scanf( "%d", &num1 ); // lê o primeiro número 8 printf( ”Segundo número: " ); // prompt 9 scanf( "%d", &num2 ); // lê o segundo número 10 if ( num1 == num2) // Avalia se num1 é igual a num2 11 printf( ”%d é igual a %d”, num1, num2); 12 if ( num1 != num2) // Avalia se num1 é diferente de num2 13 printf( ”%d é diferente de %d”, num1, num2); 14 if ( num1 > num2) // Avalia se num1 é maior que num2 15 printf( ”%d é maior que %d”, num1, num2); 16 if ( num1 < num2) // Avalia se num1 é menor que num2 17 printf( ”%d é menor que %d”, num1, num2); 18 if ( num1 >= num2) // Avalia se num1 é maior ou igual a num2 19 printf( ”%d é maior ou igual a %d”, num1, num2); 20 if ( num1 <= num2) // Avalia se num1 é menor ou igual a num2 21 printf( ”%d é menor ou igual a %d”, num1, num2); 22 return 0; /* Indica que o programa terminou normalmente */ 23 } /* Fim da função main() */ Linguagem C 14 Estruturas de Decisão Digite dois números inteiros e te mostro as relações verdadeiras entre eles. Primeiro número: 3 Segundo número: 7 3 é diferente de 7 3 é menor que 7 3 é menor ou igual a 7 Resultado da execução do programa Linguagem C 15 Estruturas de Decisão EXERCÍCIOS 1.Programa que pede as três notas e informa a média e se o aluno passou ou não passou. Obs.: a média deve ser mostrada com apenas uma casa decimal. 2.Programa que pede a altura de dois irmãos e informa qual é o mais alto (o primeiro ou o segundo). 3.Complemente o programa da questão 2, de forma que o programa informe também de quantos centímetros é a diferença do mais alto para o mais baixo. 4.Programa que pede dois números inteiros e informa se o primeiro é múltiplo do segundo. Linguagem C 16 Estruturas de Decisão • Aninhamento de ifs • condições compostas podem requerer o aninhamento de estruturas de decisão: uma estrutura de decisão “dentro da outra” •Pseudocódigo Se a nota do aluno é maior ou igual a 6,0 escrever “Passou” senão escrever “Reprovado” Fim_Se • Aninhamento de ifs • condições compostas podem requerer o aninhamento de estruturas de decisão: uma estrutura de decisão “dentro da outra” •Pseudocódigo Se a nota do aluno é maior ou igual a 6,0 escrever “Passou” senão Se a nota é maior ou igual 4,0 escrever “Vai pra VS” senão escrever “Reprovado” Fim_Se Fim_Se Uma decisão... ...como parte de outra decisão. 1 /* Programa que indica se o aluno passou, foi pra VS ou foi reprovado */ 2 #include <stdio.h> 3 4 /* Função main() inicia a execução do programa */ 5 main() 6 { 7 float nota; 8 9 printf( ”Digite a nota do aluno\n" ); 10 scanf( "%f", ¬a ); 11 12 if ( nota >= 6.0); 13 printf( ”\nPassou.\n" ); 14 else 15 { 16 if (nota >= 4.0) 17 printf(“Vai pra VS”); 18 else 19 printf(“Reprovado”); 20 } 21 22 } /* Fim da função main() */ Linguagem C 17 Estruturas de Decisão Linguagem C 18 Estruturas de Decisão • Operadores Lógicos • permitem a composição de condições mais elaboradas • Exemplos: • SE (fizer sol E for fim-de-semana) vou à praia • SE (o Botafogo for campeão OU o Flamengo for eliminado) ficarei feliz • SE (NÃO reprovar) raspo meu cabelo Linguagem C 19 Estruturas de Decisão • Operador Lógico E (AND): && • operador binário (precisa de dois operandos) • apenas se as duas condições forem VERDADE, a expressão retornará VERDADE • se qualquer uma das duas condições for FALSO (ou as duas), a expressão retornará FALSO OPERANDO 1 OPERANDO 2 RESULTADO FALSO FALSO FALSO FALSO VERDADE FALSO VERDADE FALSO FALSO VERDADE VERDADE VERDADE Tabela Verdade Linguagem C 20 Estruturas de Decisão • Operador Lógico OU (OR): || • operador binário (precisa de dois operandos) • apenas se as duas condições forem FALSO, a expressão retornará FALSO • se qualquer uma das duas condições for VERDADE (ou as duas), a expressão retornará VERDADE OPERANDO 1 OPERANDO 2 RESULTADO FALSO FALSO FALSO FALSO VERDADE VERDADE VERDADE FALSO VERDADE VERDADE VERDADE VERDADE Tabela Verdade Linguagem C 21 Estruturas de Decisão • Operador Lógico NÃO (NOT) – INVERSOR: ! • operador unário (precisa de apenas um operando) • retorna o valor lógico inverso do operando OPEDANDO RESULTADO FALSO VERDADE VERDADE FALSO Tabela Verdade 1 /* Programa que indica se o aluno passou, foi pra VS ou foi reprovado */ 2 #include <stdio.h> 3 4 /* Função main() inicia a execução do programa */ 5 main() 6 { 7 float nota; 8 9 printf( ”Digite a nota do aluno\n" ); 10 scanf( "%f", ¬a ); 11 12 if ( nota >= 6.0 ) 13 printf( ”\nPassou.\n" ); 14 if (nota >= 4.0 && nota<6.0) 15 printf(“Vai pra VS”); 16 if (nota < 4.0) 17 printf(“Reprovado”); 18 19 } /* Fim da função main() */ Linguagem C 22 Estruturas de Decisão Linguagem C 23 Estruturas de Decisão EXERCÍCIOS 1.Programa que pede dois números e indica qual é o maior. 2.Altere o programa anterior para considerar a digitação de dois números iguais. 3.Programa que pede três números e informa qual é o maior e qual é o menor. 4.Programa que pede um número inteiro e informa se ele é par ou impar. 5.Programa que pede a idade de uma pessoa e informa se ela é eleitora obrigatória (entre 18 e 70 anos) ou opcional (entre 16 e 18 ou maior de 70 anos). Se for eleitora obrigatória, informar também após quantos anos ela passará a ser eleitora opcional. 6.Programa que pede o valor do salário e informa o valor do desconto de imposto de renda, conforme a tabela abaixo: Salário Desconto Até R$1.500,00 Isento De R$1.501, 00 até R$3.200,00 15% Acima de R$3.200,00 20% Linguagem C 24 Estruturas de Decisão • Operador Ternário de Decisão • precisa de 3 operandos • único operador ternário em C • executa uma dentre duas expressões, de acordo com o resultado de uma expressão lógica • como um operador, retorna um valor (o valor resultante da expressão executada) Linguagem C 25 Estruturas de Decisão • Operador Ternário de Decisão • Sintaxe: <condição> ? <expressão_True> : <expressão_False> • •Pseudocódigo equivalente: SE (<condição>) <expressão_True> SENÃO <expressão_False > Fim_SE 1 /* Programa que diz qual é o maior número */ 2 #include <stdio.h> 3 4 /* Função main() inicia a execução do programa */ 5 main() 6 { 7 int n1, n2, n3, maior; 8 9 printf( ”Digite o primeiro número" ); 10 scanf( "%d", &n1 ); 11 printf( ”Digite o segundo número" ); 12 scanf( "%d", &n2 ); 13 maior = n1>n2 ? n1 : n2; 14 printf(“O maior número digitado foi o %d.”, maior); 15 16 } /* Fim da função main() */ Linguagem C 26 Estruturas de Decisão 1 /* Programa que diz qual é o maior número */ 2 #include <stdio.h> 3 4 /* Função main() inicia a execução do programa */ 5 main() 6 { 7 int n1, n2, n3, maior; 8 9 printf( ”\nDigite o primeiro número: " ); 10 scanf( "%d", &n1 ); 11 printf( ”\nDigite o segundo número: " ); 12 scanf( "%d", &n2 ); 13 printf( ”\nDigite o terceiro número: " ); 14 scanf( "%d", &n3 ); 15 maior = n1>n2 ? (n1>n3?n1:n3) : (n2>n3?n2:n3); 16 printf(“\nO maior número digitado foi o %d.\n”, maior); 17 18 } /* Fim da função main() */ Linguagem C 27 Estruturas de Decisão Linguagem C 28 Estruturas de Decisão EXERCÍCIOS Atenção: utilizar o operador ternário de decisão. 1.Programa que pede dois números e indica qual é o maior. 2.Programa que pede o valor do salário e informa o valor do desconto de imposto de renda, conforme a tabela abaixo: Salário Desconto Até R$1.500,00 Isento De R$1.501, 00 até R$3.200,00 15% Acima de R$3.200,00 20% Linguagem C 29 Operadores de Atribuição • Simplificam a expressão com atribuição de valor • expressões do tipo: variável = variável operador expressão; • podem ser expressas na forma: variável operador= expressão; • Exemplos: x += 3; equivale a x = x + 3; x -= 3; equivale a x = x - 3; x /= 3; equivale a x = x / 3; x *= 3; equivale a x = x * 3; x %= 3; equivale a x = x % 3; 1 /* Programa que calcula a média de 3 números */ 2 #include <stdio.h> 3 /* Função main() inicia a execução do programa */ 4 main() 5 { 6 float n, total, media; 7 8 total = 0; 9 printf( ”Digite o primeiro número" ); 10 scanf( "%f", &n ); 11 total += n; 12 printf( ”Digite o segundo número" ); 13 scanf( "%f", &n ); 14 total += n; 15 printf( ”Digite o terceiro número" ); 16 scanf( "%f", &n ); 17 total += n; 18 media = total /3; 19 printf(“A média é %.2f.”, media); 20 } /* Fim da função main() */ Linguagem C 30 Operadores de Atribuição Linguagem C 31 Estruturas de Decisão EXERCÍCIOS 1. Programa que pede o peso (em kg) e a altura (em metros) de uma pessoa e informa o IMC (Índice de Massa Corporal), indicando seu estado físico, conforme a tabela abaixo: IMC < 18,5 Abaixo do peso normal 18,6 a 24,9 Peso normal 25,0 a 29,9 Sobrepeso 30,0 a 34,9 Obesidade grau I 35,0 a 39,9 Obesidade grau II (severa) ≥ 40,0 Obesidade grau III (mórbida) Linguagem C 32 Estruturas de Decisão • Estrutura de Decisão Multivalorada • estrutura que permite entrar em um bloco de instruções a partir de um ponto definido pelo valor de uma variável • Em casos específicos, torna uma estrutura de ifs aninhados mais legível Linguagem C 33 Estruturas de Decisão • Estrutura de Decisão Multivalorada • Pseudocódigo verifique a <variável> caso seja valor1: <instruções> caso seja valor2: <instruções> ... caso nenhum deles: <instruções> Linguagem C 34 Estruturas de Decisão • Estrutura de Decisão Multivalorada: switch...case switch (num) { case 1: <instruções> case 2: <instruções> ... default: <instruções> } num == 1 Instruções F V num == 2 Instruções V Instruções V... Instruções Linguagem C 35 Estruturas de Decisão • Estrutura de Decisão Multivalorada • quantas cláusulas case precisar • Apenas uma cláusula default, que é opcional • ATENÇÃO: a estrutura NÃO executa apenas as instruções da cláusula case associada ao valor da variável verificada, mas TODAS as instruções A PARTIR dela. • Para executar apenas as instruções daquela cláusula, devemos usar o comando break, que “quebra” a sequência de um bloco de instruções. • Como assim ???... Linguagem C 36 Estruturas de Decisão • Estrutura de Decisão Multivalorada: switch...case switch (num) { case 1: <instruções> break; case 2: <instruções> break; ... default: <instruções> } num == 1 Instruções F V num == 2 Instruções V Instruções V... Instruções 1 #include <stdio.h> 2 main() 3 { 4 int n; 5 printf( ”\nDigite um mês do ano com 30 dias: " ); 6 scanf( "%d", &n ); 7 switch (n) 8 { 9 case 4: printf(“\nAbril\n”); 10 break; 11 case 6: printf(“\nJunho\n”); 12 break; 13 case 9: printf(“\nSetembro\n”); 14 break; 15 case 11: printf(“\nNovembro\n”); 16 break; 17 default: printf(“\nMês inválido!\n”); 18 } 19 } /* Fim da função main() */ Linguagem C 37 Estruturas de Decisão Linguagem C 38 Estruturas de Decisão EXERCÍCIO 1. Uma empresa ocupa os 9 primeiros andares de um prédio de 20 andares, com a distribuição de seus departamentos conforme a tabela abaixo. A diretoria da empresa pediu para você desenvolver um programa de auxílio ao visitante. Ela quer um programa que peça o andar e informe qual o departamento está alocado no andar digitado. Obs.: utilize a estrutura de decisão multivalorada. ANDAR DEPTO 1 Compras 2 e 3 Almoxarifado 4 Marketing 5 Recursos Humanos 6, 7 e 8 Projetos de Engenharia 9 Diretoria Linguagem C 39 Estruturas de Decisão EXERCÍCIO 1. Desenvolver uma calculadora, sendo que as operações aritméticas serão definidas através de um código numérico, conforme a tabela abaixo. O programa deverá pedir nesta ordem, o primeiro operando, a operação e o segundo operando, informando a seguir o resultado da operaçção. CÓDIGO OPERAÇÃO 1 Adição 2 Subtração 3 Multiplicação 4 Divisão