algo 10 linguagem c controle fluxo [modo de compatibilidade]€¦ · 2 comandos um comando em c é...

24
1 Algoritmos e Lógica de Programação Linguagem C Linguagem C Reinaldo Gomes [email protected] Comandos de Controle de Fluxo Grupos: Seleção (comando condicional) Comandos de Controle de Fluxo if e switch; Iteração (laços) while, for e do-while Desvio break, continue, goto e return; Rótulo case, default e label; Bloco blocos de código { }

Upload: others

Post on 11-Nov-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

1

Algoritmos e Lógica de Programação

Linguagem CLinguagem C

Reinaldo [email protected]

Comandos de Controle de Fluxo

Grupos:Seleção (comando condicional)

Comandos de Controle de Fluxo

ç ( )• if e switch;

Iteração (laços)• while, for e do-while

Desvio• break, continue, goto e return;

Rótulo• case, default e label;

Bloco• blocos de código { }

Page 2: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

2

ComandosUm comando em C é definido em três maneiras:

Comandos de Controle de Fluxo

• Uma expressão seguida de um ponto e vírgula (;)x = 0;printf(“Alô mundo”);++i;

• Um bloco de comandos delimitados por { e }.{x = 0;printf(“Alô mundo”);printf( Alô mundo );++i;}

• Um comando de controle de fluxoif (nota >= 7.0)printf(“Aluno aprovado por média\n”);

Verdadeiro e Falso em CVerdadeiro: diferente de zero; Falso: igual a zero

Comandos de Controle de Fluxo

Comando if - elseÉ usado para tomar decisõesSeleciona a execução de um comando se uma expressão lógica for avaliada como VERDADEIRA (Diferente de Zero)Opcionalmente (quando se utilizar o else) é executado um outro comando quando a expressão for avaliada como FALSA (Valor Z )Zero)Sintaxe Geral

if (<expressao>)<comando-1>[ else<comando-2> ]

Page 3: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

3

Exemploif (nota >= 7.0 && faltas < 16)

Comandos de Controle de Fluxo

printf(“Aluno aprovado por média\n”);else {

printf(“Aluno não foi aprovado por média\n”);printf(“Vai passar parte das férias estudando!\n”);

}Quando se aninham comandos if, o else é sempre Quando se aninham comandos if, o else é sempre associado ao if mais recente (mais próximo) que ainda não tem nenhum else associado pode-se forçar uma outra forma de associação dos comandos usando-se os delimitadores de blocos { e }

Para esclarecer veja o seguinte exemplo:...if ( grupoSanguineo == ‘O’ )

Comandos de Controle de Fluxo

if ( grupoSanguineo == O )if (fatorRH == ‘-’) {

printf(“Voce eh doador universal”);printf(“Fator RH - (negativo)”);

}else /* Erro difícil de ver */

printf(“Aguarde a fase de análise\n”);

Neste exemplo há um erro, pois o else está associado ao segundo if, apesar da indentação sugerir o contrárioCorrige-se adicionando os delimitadores de bloco { e } em torno dos comandos do primeiro if

Page 4: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

4

Comando if – else (Exercício)Escreva um programa C que leia dois números do

Comandos de Controle de Fluxo

#include <stdio.h>main(){int a,b;printf(“Digite 2 números: “);

teclado e imprima na tela a divisão do primeiro pelo segundo. OBS: Deve-se evitar divisões por zero

printf( Digite 2 números: );scanf(“%d %d”,&a,&b);if (b)

printf(“%f”,a/b);else

printf(“Não posso dividir por zero\n”);}

main()

Comando if – else (Exercício)

Comandos de Controle de Fluxo

main(){int a,b,c;printf(“Digite os 3 Números: “);scanf(“%d %d %d”,&a, &b, &c);if (a > b)

if (a > c)printf(“\nO Maior é %d”,a);

else

(Exercício)

Escreva um programa C que leia três números do teclado, e imprima na tela o maior entre

printf(“\nO Maior é %d”,c);else

if (b > c)printf(“\nO Maior é %d”,b);

else printf(“\nO Maior é %d”,c);

}

na tela o maior entre eles.

Page 5: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

5

Comando if – else (Exercício)Escreva um programa C que leia dois números do

Comandos de Controle de Fluxo

main(){int a,b,t;printf(“Digite os 2 Números: “);scanf(“%d %d”,&a, &b);if ( b) {

Escreva um programa C que leia dois números do teclado, e os imprima na tela em ordem ascendente.

if (a < b) {t = a;a = b;b = t;}

printf(“Ordenados: %d e %d\n“, b, a);}

ifs AninhadosUm if aninhado é um comando if que está localizado dentro de

t if l

Comandos de Controle de Fluxo

outro if ou else;if (salario > 200) {

if (salario < 300)printf(“8% desc.”);

elseif (salario < 500)

printf(“9% desc.”);

obs: este códigofunciona, mas oteste não éeficiente!

elseprintf(“11% desc.”);

} elseprintf(“sem desconto”);

O padrão ANSI especifica que até 15 níveis de aninhamento devem ser suportados.

eficiente!

Page 6: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

6

Escada if-else-ifAs condições são avaliadas de cima para baixo

Comandos de Controle de Fluxo

As condições são avaliadas de cima para baixoAssim que uma condição verdadeira é encontrada, o comando associado a ela é executado e o fluxo é desviado do resto da escada

Sintaxe:

Comando ?: Forma compacta de expressar uma instrução if – else

Comandos de Controle de Fluxo

• (condição) ? expressão1 : expressão2Exemplo 1: Determinar o maior entre dois números.(num1 > num2) ? printf(“%d”, num1) : printf(“%d”, num2);Forma estendida:

if (num1 > num2)printf(“%d”, num1);

else printf(“%d”, num2);

Exemplo 2: Determinar o valor absoluto de um número.• ABS = (num < 0) ? - num : num;

Exercício: Determinar e imprimir se um número é par ou ímpar.

Page 7: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

7

Comando switch Verifica se uma dada expressão corresponde a um dos

Comandos de Controle de Fluxo

Verifica se uma dada expressão corresponde a um dos valores especificados. Permite tomar múltiplas decisões a partir da avaliação de uma expressão.

Forma de se substituir o comando if – else ao se executar vários testesexecutar vários testes

• Diversas vezes precisamos determinar se um valor encontra-se 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

switch (<expressão>) {OBS:

A ã d iá l d ti

Comandos de Controle de FluxoComando switch

( p ) {case <valor 1> :

<instruções>;[break;]

case <valor 2> :< instruções>;[break;]

case <valor 3> :

• A expressão deve ser uma variável do tipo inteiro ou caractere

• Os valores podem ser caracteres, inteiros, ou uma expressão de constantes, mas nunca variáveis ou referências a funções

•Execução começa no primeiro case com valor igual ao da expressão, e continua pelos casescase valor 3 :

< instruções>;[break;]

[default :< instruções>;]

}

igual ao da expressão, e continua pelos cases seguintes até encontrar o final do switch ou um comando de escape (break)

• O rótulo default é opcional e é executado quando nenhum dos cases corresponde ao valor da expressão

•O comando switch sé pode testar a igualdade

Page 8: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

8

Exemplo ...opcao = getche(); // Lê do teclado a opcaoswitch (opcao) {

Comandos de Controle de Fluxo

switch (opcao) {case ‘1’:

incluir();break;

case ‘2’:alterar();break; ‘3’case ‘3’:excluir();break;

default:puts(“opção inválida”);

}...

Vejamos a seguinte situação…i=2; // depois i=4,5 e 6. O que vai ser impresso?switch(i) {

Comandos de Controle de Fluxo

switch(i) {case 1:case 2:case 3:

printf(“computacao”);break;

case 4:i f(“f di l i ”)printf(“fonoaudiologia”);

case 5:printf(“fisioterapia”);break;

defaultprintf(“Nao ha correspondencia!”);

}

Page 9: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

9

Observe…switch(i) {

case 1:

Comandos de Controle de Fluxo

int t;t = 10; // Está errado!

case 2:...

}

switch(i) {case 1: { /* criando um bloco */case 1: { / criando um bloco /

int t;t = 10;printf(“%d”, t);break;

}case 2:...

Comando switch (Exemplo Calculadora: Escreva um programa C que receba 2 números e um

Comandos de Controle de Fluxo

um programa C que receba 2 números e um caractere operador (+, -, * ou /) do teclado, realize a operação determinada entre eles e imprima na tela o resultado.

Page 10: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

10

#include <stdio.h>i ( ) {

Comandos de Controle de Fluxo

main ( ) {char op;float num1, num2;printf (“ Digite um número, um operador e um número:”);scanf (“ %f %c %f”, &num1, &op, &num2);switch (op) {

case ‘+’:printf (“ = %f”, num1 + num2);break;;

case ‘-’:printf (“ = %f”, num1 - num2);break;

default:printf (“ Operador inválido!”);

}}

switch aninhadoswitch(i) {

case 1:

Comandos de Controle de Fluxo

case 1:switch(j) {

case 0:printf(“Erro de divisão por zero”);break;

case 1:printf(“%d”, i/j);

} // i h d j} // switch do jbreak;

case 2:...

}

Page 11: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

11

Estruturas de repetiçãoComo imprimir os 1000 primeiros números a partir de 1?

Comandos de Controle de Fluxo

#include <stdio.h>

main ( )

{

printf (“1 ”);

i tf (“2 ”)

Como imprimir os 1000 primeiros números a partir de 1?

printf (“2 ”);

: : :

printf (“10 ”);

}

saída: 1 2 3 4 ... 10

Estruturas de repetição (laços ou loops)Repetem uma seqüência de comandos

Comandos de Controle de Fluxo

Repetem uma seqüência de comandos• for

• while

• do-while

Page 12: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

12

Comando forSintaxe:f (<i i i li ã > < ã ló i > <i t >)

Comandos de Controle de Fluxo

for (<inicialização>; <expressão lógica>; <incremento>)<instrução>;

• <inicialização>:– Expressão de atribuição.– Sempre é executada uma única vez.

• <expressão lógica>:– Condição que controla a execução do laço.– É sempre avaliada a cada execução.– Se Verdadeiro continua a execução.– Se falso pára a execução.

• <incremento>:– Define como a variável de controle será alterada.– É sempre executada após a execução do corpo do laço.

Comando forExemplo 1: Como imprimir os 1000 primeiros números

Comandos de Controle de Fluxo

#include <stdio.h>main ( )

{int num;

Exemplo 1: Como imprimir os 1000 primeiros números a partir de 1?

for (num = 1; num <= 1000; num++)printf (“ % d”, num);

}Saída: 1 2 3 ... 1000

Page 13: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

13

Comando forExercício: Como imprimir os números pares entre 0 e

Comandos de Controle de Fluxo

#include<stdio.h>main ( ){

int num;

Exercício: Como imprimir os números pares entre 0 e 100?

for ( num = 0; num <= 100; num += 2 )printf (“ %d”, num);

}

Saída: 2 4 6 8

Comando forFlexibilidade: qualquer expressão de um laço “for” pode

Comandos de Controle de Fluxo

q q p ç pconter várias instruções separadas por vírgula.

for (x=0, y=0; x + y < 100; ++x, y = y + x) printf(“%d”, x + y);

Esta instrução inicializa x e y com zero, incrementando d 1 1 b d l id d l x de 1 em 1 e y recebendo seu valor acrescido do valor

de x. O resultado a cada iteração seria impresso desta forma: 0 (x=0 e y=0) 2 (x=1 e y=1) 5 (x=2 e y=3) 9 14 e assim sucessivamente.

Page 14: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

14

A condição como sentença relacional ou lógica

Comandos de Controle de Fluxo

...int x;char ch = ‘A’;for (x =0; x<3 && ch != ‘#’; x++) {

printf(“digite o número: “);ch = getche();g ();

}

if (x == 3)exit(0);

…/* Executa as operações em caso de sucesso */

Comando for – Laço Infinitofor(;;)

Comandos de Controle de Fluxo

for(;;)printf(“Este laço executará eternamente!\n”);

Qualquer das 3 partes do for pode ser omitida, no entanto os ponto e vírgula (;) devem permanecerNo caso da <expressão lógica> ser omitida a avaliação No caso da <expressão lógica> ser omitida, a avaliação será sempre VERDADEIRA. Desta forma será criado um laço infinito na execução do programa

Page 15: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

15

Comando for – Laço InfinitoAo contrário de outras linguagens que não permitem o

Comandos de Controle de Fluxo

for(;;) {

Ao contrário de outras linguagens que não permitem o término do laço a não ser quando a condição de finalização for satisfeita, C permite que um laço seja interrompido antes de seu término normal sem qualquer inconveniente através do comando “break”

for(;;) {scanf(“%c”,&c);if (c == ‘A’)

break; /*interrompe o que deveria ser um laço infinito*/

}printf(“Fim do Laço!”);

Comando continue utilizado em laçosForça a próxima iteração do laço

Comandos de Controle de Fluxo

main(){ int x;

Força a próxima iteração do laço.Pula o código que estiver em seguida.Exercício: Escreve um programa C que imprima na tela os números pares compreendidos entre 0 e 100

for(x = 0; x <= 100; x++) {

if (x % 2) continue;

printf(“%d ”, x); }

}

Page 16: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

16

Comando for – Laço Vazio

Comandos de Controle de Fluxo

for(i=0;i<10;i++);

A presença do ponto e vírgula finalizando o comando, força a execução do laço sem que seja executado qualquer outro comandoqualquer outro comando.

Comando whileExecuta um comando ou um bloco destes, enquanto uma

Comandos de Controle de Fluxo

expressão (condição) lógica for avaliada como VERDADEIRA.Sintaxe geral

while (<expressao>)<comando>O while é um comando de repetição (loop) com teste “antes” (em cima)(em cima)Expressão lógica é avaliada antes da execução do comando associado, de tal forma que se a expressão for avaliada como FALSA na primeira vez, o comando não será executado mais executado

Page 17: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

17

Comando whileExemplo: Como imprimir os 1000 primeiros números a

Comandos de Controle de Fluxo

#include <stdio.h>main(){int i=1;

Exemplo: Como imprimir os 1000 primeiros números a partir de 1?

int i 1;while (i <= 1000) {

printf(“%d ”,i);i++;

}}

Comando whileExercício: Como imprimir os números pares entre 0 e

Comandos de Controle de Fluxo

#include <stdio.h>main(){int i=0;while (i <= 100) {

printf(“%d\n”, i);

Exercício: Como imprimir os números pares entre 0 e 100.

i+=2;}

}

Page 18: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

18

Comando whileExemplo – Quando o laço será interrompido?

Comandos de Controle de Fluxo

. . .int emTrabalho=1;while (emTrabalho) {emTrabalho=processa();

}. . .

Exemplo Quando o laço será interrompido?

Comando do – whileExecuta um comando, ou um bloco destes, e em seguida avalia

ã C j li d

Comandos de Controle de Fluxo

uma expressão. Caso a mesma seja avaliada como VERDADEIRA os comandos são repetidos.Sintaxe geral

do<comando>

while (<expressao>);

O do-while é um comando de repetição (loop) com teste “depois” (em baixo), ou seja, a expressão lógica é avaliada após a execução do comando associadoO comando será executado ao menos uma vez

Page 19: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

19

Comando do – whileExemplo 1: Seleção de Menu

Comandos de Controle de Fluxo

. . .do {

clrscr();puts(“Menu Principal\n\n”);puts(“1 - Incluir”); ...puts(“4 - Sair”);do

opcao = getche();while (opcao < ‘1’ || opcao > ‘5’);while (opcao < 1 || opcao > 5 );switch (opcao) {

case ‘1’:incluir();break;

. . .}

} while (opcao != ‘4’);. . .

Comando do – whileExemplo 2: Programa que lê números do teclados

Comandos de Controle de Fluxo

#include <stdio.h>main(){int num;do {

Exemplo 2: Programa que lê números do teclados enquanto esses números são menores que 10.

do {printf(“Digite um número menor que 10:”);scanf(“%d”,&num);

} while (num < 10);printf(“Programa encerrado – Você digitou um número maior que 10!”);}

Page 20: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

20

Comando breakInterrompe a execução de um loop (for, while, do-while)

Comandos de Desvio de Fluxo

independentemente da expressão lógica que controla o mesmoEvita o teste condicional normal do laçoQuando usado em um switch interrompe a sequência de execução do mesmo, fazendo com que todos os case’s posteriores ao break sejam descartadosToda vez que um comando break é encontrado o loop (ou Toda vez que um comando break é encontrado, o loop (ou switch) mais interno é interrompido.Sintaxe geral

• break;

Exemplo...

Comandos de Desvio de Fluxo

clrscr();for (nl = 0, i = 0; i < 256; ++i) {

printf(“%03d - %c\n”, i, i);if (++nl > 23) {

printf(“<Esc> aborta <Enter> continua ”);if (getch() == 27)(g () )break;clrscr();nl = 0;

}}

Page 21: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

21

Comando continueDesvia o fluxo de execução de um loop para a próxima iteração d l d l ódi i t diá i

Comandos de Desvio de Fluxo

do mesmo, pulando qualquer código intermediárioAo contrário do break, o continue se aplica somente aos loops, e não ao switch.O comando continue num switch dentro de um loop, provoca a próxima iteração do loopQuando o loop é um while ou um do-while, a expressão lógica será imediatamente executadaserá imediatamente executadaQuando o loop é um for, no entanto a expressão de incremento será executada primeiro, seguida então da expressão lógicaSintaxe geral

• continue;

Exemplo...

Comandos de Desvio de Fluxo

for (i = 0; i < 10; ++i) {scanf(“%d”, &numero);if ( numero <= 0)

continue; /* Salta numeros menores igual a 0 *//* Trata elementos acima de zero */

soma += numero;}printf(“Soma =%d”)...

Page 22: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

22

Comando gotoDesvia, incondicionalmente, o fluxo de execução para um bloco d d i i i d ót l (l b l)

Comandos de Desvio de Fluxo

de comandos iniciados por um rótulo (label)Sintaxe geral

• goto <rótulo>;As regras de formação para o nome do rótulo são as mesmas para a formação do nome de identificadores em C. No ponto de início do bloco de comandos, o rótulo tem seu nome acrescido de dois pontos (:)de dois pontos (:)Uso indiscriminado deve ser evitado, pois em geral dificulta o entendimento da lógica do programaSó quando se tem um aninhamento de vários loops e se deseja encerrar todos eles, o goto deve ser utilizado

Exemplo...

Comandos de Desvio de Fluxo

for (...) {for (...) {

...if (houve erro)

goto ERRO;}}

}

ERRO:/* arruma a casa */...

Page 23: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

23

Comando exitFunção que provoca a saída imediata de um programa, forçando t i t i l

Comandos de Desvio de Fluxo

o retorno ao sistema operacional;

Sintaxe geral• exit( int <código de retorno>);• Código de retorno: retornado ao processo chamador (normalmente é o

sistema operacional)• O valor zero: indica uma terminação normal do programa. Outros ç p g

argumentos são usados para indicar outro tipo de erro

Uso:• Quando uma condição para a execução do programa não é satisfeita

Exemplo...do {

Comandos de Desvio de Fluxo

do {ch = getchar();switch(ch) {

case ‘1’:incluir();break;

case ‘2’:l ()alterar();

break;case ‘3’:

exit(0);}

} while ( ch != ‘1’ && ch!=‘2’);

Page 24: algo 10 linguagem C controle fluxo [Modo de Compatibilidade]€¦ · 2 Comandos Um comando em C é definido em três maneiras: Comandos de Controle de Fluxo • Uma expressão se

24

Algoritmos e Lógica de Programação

Linguagem CLinguagem C

Reinaldo [email protected]

Comandos de Controle de Fluxo