LINGUAGEM C CONTROLE DE FLUXO Introdução à Programação Prof. Cayo Fontana
SUMÁRIO Instruções Condicionais Simples Composta Seleção Instruções de Repetição Instruções de Desvio
INSTRUÇÕES CONDICIONAIS Praticamente todos os algoritmos, computacionais ou não, efetuam testes condicionais à todo o momento durante o processamento de suas informações. Na linguagem de programação C existem os seguintes tipos de instruções condicionais: Simples Composta Seleção Estes tipos serão detalhados nos slides seguintes
INSTRUÇÕES CONDICIONAIS SIMPLES As instruções condicionais simples e composta utilizam as instruções if / if else para condicionar um determinado fluxo do programa, ou seja; Controla a execução de um determinado bloco de código de acordo com a validade de uma expressão condicional: if (condicional) Estrutura: if (condicao) { }, onde // demais instruções e regras do programa A condicao define uma expressão lógica que será validada antes de execução do bloco de instruções, definido para a instrução if. Se verdadeiro o bloco é executado.
INSTRUÇÕES CONDICIONAIS SIMPLES if (condicional) Exemplo: int main() { int a = 40; int b = 50; if (a > b) printf( Expressão verdadeira!\n ); * return (0); } Caso haja apenas uma única instrução, dentro de uma instrução de controle, não torna-se obrigatório o uso dos delimitadores de bloco de código { }.
INSTRUÇÕES CONDICIONAIS SIMPLES if else (condicional) Estrutura: if (condicao) { // instruções e regras da condição válida em if else } else { // instruções e regras da condição inválida em if else }, onde A condicao define uma expressão lógica que será validada antes de execução do bloco de instruções, definido para a instrução if. Se verdadeiro o bloco em if é executado. Se falso, o bloco em else é executado.
INSTRUÇÕES CONDICIONAIS COMPOSTA if else (condicional) Instruções condicionais compostas possuem sua(s) condição(ões) formada(s) por expressões lógicas, sendo cada uma destas definidas por mais de um argumento lógico. Estrutura: if (condicao1 operador_lógico1 condicao2 operador_lógico2 operador_lógicon-1 condicaon) { // instruções e regras da condicao válida em if else } else { }, onde: // instruções e regras da condicao inválida em if else A condicao define um conjunto de argumentos lógicos formando uma expressão lógica, composta, encadeadas por operadores lógicos responsáveis por sua validação. Se verdadeiro o bloco em if é executado. Se falso, o bloco em else é executado.
INSTRUÇÕES CONDICIONAIS COMPOSTA if else (condicional) É possível ter várias expressões condicionais em um bloco de instruções if else: if (condicao1 operador_lógico1 condicao2) { } else if (condicao2 operador_lógico1 condicao3) { } else if (condicao4 operador_lógico2 condicao5) { } else { }
INSTRUÇÕES CONDICIONAIS EXEMPLOS Exemplo 1: Recebendo a idade de um usuário e verificando se o mesmo é maior ou menor de idade perante a constituição #include <stdio.h> int main() { int idade; printf("informe a sua idade: "); scanf("\n%d", &idade); if (idade >= 18) printf("você é maior de idade!\n"); else printf("você é menor de idade!\n"); return (0); }
INSTRUÇÕES CONDICIONAIS - SELEÇÃO switch case (seleção) Instruções de seleção permitem o processamento de um determinado bloco de instruções se um determinado valor do critério de seleção esteja disponível nos possíveis casos que a instrução switch case pode tratar. Caso nenhuma critério seja alcançado ocorre a execução do bloco de instruções contidos em default (padrão). É possível que o bloco para o evento padrão (default) não esteja definido em switch. Neste caso, nenhum bloco de instruções será executado.
INSTRUÇÕES CONDICIONAIS - SELEÇÃO switch case (seleção) Estrutura de um laço: switch (valor) { case 10: // instruções e regras que serão executadas caso o valor de valor seja 10 break; case 15: // instruções e regras que serão executadas caso o valor de valor seja 15 break; default: // instruções e regras que serão executadas caso o valor de valor não seja nenhum dos casos tratados por switch }
INSTRUÇÕES CONDICIONAIS - SELEÇÃO switch case (seleção) Exemplo: Verificando se um caractere é uma vogal ou uma consoante switch (caractere) { case a : printf( Vogal!\n"); break; case e : printf( Vogal!\n"); break; case i : printf( Vogal!\n"); break; case o : printf( Vogal!\n"); break; case u :
INSTRUÇÕES CONDICIONAIS - SELEÇÃO switch case (seleção) (cont...) printf( Vogal!\n"); break; default: printf( Consoante!\n"); }, O programa acima poderia ser reescrito da seguinte maneira: switch (caractere) { case a : case e : case i : case o : case u : printf( Vogal!\n"); break; default: printf( Consoante!\n");
INSTRUÇÕES DE REPETIÇÃO while / do while (laço) As instrução while e do while são instruções de laço que executam um determinado bloco de instruções de acordo com a validade de um determinado critério de condição. Geralmente, a utilização das instruções while / do while ocorrem quando a quantidade de vezes que o laço será executado é desconhecida, dependendo da validade de um critério de condição: O conhecimento da quantidade de vezes que o laço será executado, não invalida a utilização do while / do while. Entretanto, comumente utilizase a instrução for nestas situações;
INSTRUÇÕES DE REPETIÇÃO while (laço) Estrutura de um laço: while (condicao) { // instruções e regras da condicao válida em while }, onde: A condicao define uma expressão lógica que será verificada antes de cada execução do bloco de instruções, definido para a instrução while. PS: caso a expressão lógica apresente um resultado falso, logo na primeira verificação, o bloco de código definido em while não será executado.
INSTRUÇÕES DE REPETIÇÃO while (laço) Exemplo: int i = 20; while (i % 3!= 0) { } printf( %d\n, i); i--; O exemplo acima exibirá mensagens, com o valor de i, enquanto o módulo (resto) da divisão de i por 3 for diferente de 0 (valida e depois executa).
INSTRUÇÕES DE REPETIÇÃO do while (laço) Estrutura de um laço: do { // instruções e regras da condicao válida em do while } while (condicao);, onde: A condicao define uma expressão lógica que será verificada após cada execução do bloco de instruções, definido para a instrução while. PS: o bloco de código definido em while será executado, no mínimo, uma vez mesmo que a expressão lógica definida em condicao apresente um resultado falso logo na primeira verificação.
INSTRUÇÕES DE REPETIÇÃO do while (laço) Exemplo: int i = 20; do { printf( %d\n, i); i--; } while (i % 3!= 0); O exemplo acima exibirá mensagens de alerta, com o valor de i, enquanto o módulo (resto) da divisão de i por 3 for diferente de 0 (executa e depois valida).
INSTRUÇÕES DE REPETIÇÃO for (laço) Assim como as instruções while / do while, apresentadas anteriormente, instruções de laço executam um determinado bloco de instruções por n vezes. Geralmente, a utilização da instrução for ocorre quando a quantidade de vezes que o laço será executado é conhecida: Existe uma variável que controla o número de laços à serem executados; O desconhecimento da quantidade de vezes que o laço será executado, não invalida a utilização do for. Entretanto, comumente utiliza-se a instrução while nestas situações.
INSTRUÇÕES DE REPETIÇÃO for (laço) Estrutura de um laço: for (instrução1; instrução2; instrução3) { // instruções e regras de acordo com a condicao e critérios do for }, onde o processamento das instruções 1, 2 e 3 ocorre da seguinte maneira: instrução 1: Executada apenas uma vez, antes da primeira execução do laço; Utilizada por uma (ou um conjunto de) variável que controlará, quantitativamente, o número de laços à serem executados.
INSTRUÇÕES DE REPETIÇÃO for (laço) instrução 2: É o critério de condição do laço; Executada antes de cada execução do laço (n vezes). instrução 3: Efetua operações de atribução (incremento, decremento entre outras) em uma (ou um conjunto de) variável que controlará, quantitativamente, o número de laços à serem executados; Executada ao final de cada execução do laço.
INSTRUÇÕES DE REPETIÇÃO for (laço) Exemplo: int i; for (i = 0; i < 10; i++) { printf( %d\n, i); } O exemplo acima exibirá mensagens de alerta 10 vezes, contendo, em cada uma destas mensagens, valores de 0 a 9. O laço for permite muitas variações, objetivando flexibilizar sua aplicação. Algumas destas variações serão mostradas à seguir.
INSTRUÇÕES DE REPETIÇÃO for (laço) Exemplo: as variáveis i e j controlam o laço à seguir: int i, j; for (i = 0, j = 0; i < 10 && j < 35; i++, j += i) { } printf("i: %d, j: %d\n", i, j); O exemplo acima exibirá mensagens contendo os valores de i e j enquanto as condições i < 10 e (conjunção &&) j < 35 forem atendidas. Os valores das variavéis i e j são modificadas ao final de cada laço em i++, j += i.
INSTRUÇÕES DE DESVIO Instruções de desvio são utilizadas para alterar o atual curso de execução do programa em processamento. A linguagem C possui 4 tipos de instruções de desvio de fluxo: break; continue; goto; return;
INSTRUÇÕES DE DESVIO break A instrução break é, e somente é, utilizada dentro de blocos de código no contexto de instruções de laço (for, while, do while) ou dentro de uma instrução de seleção (switch case), sendo utilizada na(s) estrutura(s) de caso(s) (case). O uso do break interrompe (quebra) imediatamente o fluxo de informações dentro do bloco de códigos. Exemplo: for (i = 1; i <= 40; i++) { soma *= i; if (soma > 100) break; }, o laço finalizará quando alcançar uma das condições: ou i <= 40 ou soma > 100.
INSTRUÇÕES DE DESVIO continue A instrução continue é, e somente é, utilizada dentro de blocos de código no contexto de instruções de laço (for, while, do while). O uso do continue força para a próxima iteração do laço para o fluxo de informações dentro do bloco de códigos. Exemplo: for (i = 1; i <= 40; i++) { if (i < 10) continue; soma *= i; }, a operação soma *= i só ocorrerá quando a condição i < 10 for falsa.
INSTRUÇÕES DE DESVIO goto A instrução goto é, além das instruções condicionais, uma outra alternativa para controlar o fluxo de informações no código. O uso do goto sofreu rejeição, por longos anos, por parte da comunidade global de programadores. Entretanto, alguns especialistas e cientistas afirmam que seu uso de maneira adequada oferece melhor desempenho para o processamento em hardware Exemplo: laco_x: x++; if (x < 100) goto laco_x;
INSTRUÇÕES DE DESVIO return A instrução return é utilizada para que o fluxo de processamento em uma determinada função, retorne imediatamente do ponto de onde a função foi chamada. Se return possui algum valor associado, este valor é o valor de retorno da função. Caso contrário assume-se que valores inesperados (lixo) serão retornados. Alguns compiladores retornam o valor zero, mas não é aconselhável esperar por este comportamento. Exemplo: int somar(int x, int y) { return x + y; }