Você está na página 1de 47

Linguagem C:

Estruturas de Controle

Prof. Leonardo Barreto Campos

Sumrio



Estrutura de Controle e de Fluxo


Comandos de Seleo:







O comando if;
Ifs Aninhados;
A escada if-else-if;
A expresso condicional;
Switch;
Comandos switch aninhados;

Comandos de Interao:




O lao for;
O lao while;
O lao do-while.

Prof. Leonardo Barreto Campos

2/47

Estrutura de Controle e de Fluxo




As estruturas de controle so fundamentais para


qualquer linguagem de programao;
Sem elas s haveria uma maneira do programa ser
executado: de cima para baixo, comando por comando;
O padro ANSI divide os comandos de C nestes
grupos:







Seleo;
Interao;
Desvio;
Rtulo;
Expresso;
Bloco.

Prof. Leonardo Barreto Campos

3/47

Estrutura de Controle e de Fluxo




Muitos comando em C contam com um


condicional que determina o curso da ao;

teste

Uma expresso condicional


verdadeiro ou falso.

valor

Em C, um valor verdadeiro qualquer valor diferente


de zero, incluindo nmeros negativos;

O valor falso 0;

chega

Prof. Leonardo Barreto Campos

um

4/47

Comandos de Seleo


C suporta dois tipos de comandos de seleo: if e


switch. Alm disso o operador ? uma alternativa ao
if em certas circunstncias.

A forma geral da sentena if :


if(expresso)
{ comando; }
else
{ comando; }


Onde comando pode ser um nico comando, um bloco de


comandos ou nada (comandos vazios);
A clusula else opcional.
Prof. Leonardo Barreto Campos

5/47

O comando if


A expresso avaliada. Se ela for verdadeira


(diferente de 0), o comando ou bloco que forma o
corpo do if executado;

Caso contrrio, o comando ou bloco que o corpo do


else (se existir) executado.

Lembre-se: Apenas o cdigo associado ao if ou o


cdigo associado ao else ser executado, nunca
ambos;

Prof. Leonardo Barreto Campos

6/47

O comando if


Aqui representamos um exemplo de uso do comando if,


veja:

Prof. Leonardo Barreto Campos

7/47

O comando if


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

8/47

O comando if aninhado


Pode-se tambm usar unicamento o comando if (sem


else), veja:

Prof. Leonardo Barreto Campos

9/47

O comando if aninhado


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

10/47

O comando if-else-if


A estrutura if-else-if apenas uma extenso da


estrutura if-else;
A sua forma geral :
if(expresso) comando;
else
if(expresso) comando;
else
if(expresso) comando;
...
else comando;

As condies so avaliadas de cima para baixo.


Prof. Leonardo Barreto Campos

11/47

O comando if-else-if


Embora seja tecnicamente correta, o recuo da escada if-else-if


anterior pode ser excessivamente profundo.
Por essa razo, a escada if-else-if geralmente recuada deste
forma:
if(expresso) comando;
else if(expresso)
comando;
else if(expresso)
comando;
...
else
comando;
Prof. Leonardo Barreto Campos

12/47

O comando if-else-if


Vejamos um exemplo da escada if-else-if:

Prof. Leonardo Barreto Campos

13/47

O comando if-else-if


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

14/47

A expresso condicional


Em C, o controlador do if precisa, apenas, ser zero ou


no-zero, vejamos:

if(num2!=0)

Prof. Leonardo Barreto Campos

15/47

A expresso condicional


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

16/47

O comando switch


A linguagem C tem um comando interno de seleo


mltipla chamado switch;

O switch testa
sucessivamente o
valor de uma
expresso contra
uma
lista
de
constantes
inteiras ou de
caractere;
Prof. Leonardo Barreto Campos

17/47

O comando switch


A forma geral do comando switch :

switch(expresso){
case constante1:
seqncia de comandos
break;
case constante2:
seqncia de comandos
break;
case constante3:
seqncia de comandos
break;
...
default:
seqncia de comandos
}

O valor da expresso testado, na


ordem,
contra
os
valores
das
constantes especificadas nos comandos
case;

Quando
uma
coincidncia
for
encontrada, a seqncia de comando
associada quele case ser executada
at que o comando break ou o fim do
comando switch seja alcanado;

O comando default executado se se


nenhuma coincidncia for detectada;

O default opcional.

Prof. Leonardo Barreto Campos

18/47

O comando switch


Exemplo de utilizao do switch:

Continua no prximo slide


Prof. Leonardo Barreto Campos

getche() funo usada para


leitura de caracteres, um
por vez, da entrada padro.
Comum apenas para DOS
19/47

O comando switch


Exemplo de utilizao do switch(Continuao):

Define
quantas
casas
decimais sero impressas
Prof. Leonardo Barreto Campos

20/47

O comando switch


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

21/47

O comando switch


O padro ANSI C especifica que um switch pode ter


pelo menos 257 comandos case;

Embora case seja um rtulo ele no pode existir


sozinho, fora de um switch;

O comando break um dos comandos de desvio em C.


Pode us-lo em laos tal como no comando switch;


Quando um break encontrado em um switch, a execuo do


programa salta para a linha de cdigo seguinte ao comando
switch;

Prof. Leonardo Barreto Campos

22/47

O comando switch


Se o comando break for omitido, a execuo do programa continua pelos


prximos comandos case at que um break, ou o fim do switch seja
encontrado;
Ex:
int x=0, op; scanf(%d, op);
switch(op) {
case 1: /*Nada*/
x
Opo
case 2:
10
1
x= 10;
break;
10
2
case 3:
x++;
1
3
case 4:
0
4
x++;
-1
default
default:
x--;
}

Prof. Leonardo Barreto Campos

23/47

O comando switch


H trs observaes importantes a saber sobre o


comando switch:


switch s pode testar igualdade, enquanto que o if pode


avaliar uma expresso lgica e/ou relacional;
Duas constantes case no mesmo switch no podem ter valores
idnticos;
Se constantes de caractere so usadas em um comando
switch, elas so automaticamente convertidas para seus
valores inteiros;

Prof. Leonardo Barreto Campos

24/47

O comando switch


Os comandos associados a cada case no so blocos de


cdigos mas, sim, seqncia de comandos. Vejamos em
que essa distino tcnica influencia:

/* Incorreto */
switch(op) {
case 1:
int i;
...

/* Correto */
switch(op) {
case 1:
{
int i;
...
}
Prof. Leonardo Barreto Campos

25/47

Comandos switch aninhados




Podemos ter um switch como parte de uma seqncia de


comandos de outro switch, vejamos:
switch(x) {
case 1:
switch(y) {
case 0:

printf(\n10 em decimal eh 2);


break;

case 1: ...
}
case 2:
...
}

No ocorre conflito com o case mais


externo
Prof. Leonardo Barreto Campos

26/47

Comandos de Interao


Na linguagem C, comando de interao (tambm


chamados laos) permitem que um conjunto de
instrues seja executado at que ocorra uma certa
condio;

As estruturas de repetio em C apresentam-se em 3


formas distintas:




for
while
do-while

Prof. Leonardo Barreto Campos

27/47

O lao for


O lao for a instruo mais poderosa na criao de estruturas


de repetio;
Vejamos sua forma geral mais comum:
for(inicializao; condio; incremento)
{
comandos;
}


Inicializao , geralmente, um comando de atribuio que usado


para colocar um valor na varivel de controle do lao;
A condio uma expresso relacional que determina quando o lao
acaba;
O incremento define como a varivel de controle do lao varia cada
vez que o lao repetido;

Prof. Leonardo Barreto Campos

28/47

O lao for


As sees no comando for so separadas por pontose-vrgulas;


Uma vez que a condio se torne falsa, a execuo do
programa continua no comando seguinte ao for,
vejamos:

Prof. Leonardo Barreto Campos

29/47

O lao for


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

30/47

O lao for


Podemos utilizar outras estruturas de controle dentro


do lao for, vejamos:

O
comando
if
est
selecionando apenas os
nmeros mpares

Prof. Leonardo Barreto Campos

31/47

O lao for


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

32/47

O lao for


O mesmo programa anterior poderia ser escrito da


seguinte forma:

i = i +2;

A lgica tambm
mudou um pouco
Prof. Leonardo Barreto Campos

33/47

O lao for


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

34/47

Variaes do lao for




Uma das variaes mais comuns do lao for usa o


operador vrgula ( , ) para permitir que duas ou mais
variveis controlem o lao, veja:
int x, y;
for (x=0, y=0; x+y<10, x++)
{
y = getche();
x = y 0;/* Subtrai o cdigo ASCII do caracter 0 de Y */
}
Prof. Leonardo Barreto Campos

35/47

Variaes do lao for




Alm da sintaxe vista anteriormente, o lao for


permite escrita de expresses mais elaboradas,
vejamos:

Prof. Leonardo Barreto Campos

36/47

Variaes do lao for




A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

37/47

Laos for aninhados




Quando um lao for faz parte de outro lao for,


dizemos que o lao interno est aninhado. Vejamos:
sada
0
1
2
1
2
3
2
3
4
Prof. Leonardo Barreto Campos

38/47

O lao while


O segundo lao disponvel em C o lao while. A sua


forma geral :
while(condio)
{
comando;
}


comando um comando vazio, um comando simples ou um bloco


de comandos;
A condio pode ser qualquer expresso, e verdadeiro
qualquer valor no-zero;
O lao se repete quando a condio for verdadeira. Quando a
condio falsa, o controle do programa passa para a linha
aps o digo do lao
Prof. Leonardo Barreto Campos

39/47

O lao while


O exemplo a seguir mostra uma rotina de entrada pelo


teclado, que simplesmente se repete at que o usurio
digite n:

Prof. Leonardo Barreto Campos

40/47

O lao while


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

41/47

O lao do-while


Ao contrrio dos laos for e while, que testam a


condio do lao no comeo, o lao do-while verifica a
condio ao final do lao;
Portanto, o lao do-while ser executado ao menos
uma vez;
A forma geral do lado do-while :
do{
comando;
} while(condio);


O lao do-while repete at que a condio se torne falsa.

Prof. Leonardo Barreto Campos

42/47

O lao do-while


Vejamos a principal diferena entre o lao do-while e


o lao while:
int num = 101;
do{
scanf(%d, &num);
} while(num<100);

int num = 101;


while(num<100)
{
scanf(%d, &num);
}

do-while executa pelo menos uma vez.

Prof. Leonardo Barreto Campos

43/47

O lao do-while


Talvez o uso mais comum do lao do-while seja em uma


rotina de seleo por menu, vejamos:

Prof. Leonardo Barreto Campos

44/47

O lao do-while

Prof. Leonardo Barreto Campos

45/47

O lao do-while


A sada no console para o programa anterior ser:

Prof. Leonardo Barreto Campos

46/47

Bibliografia


SCHILDT H. C Completo e Total, Makron Books. SP,


1997.
MIZRAHI, V. V. Treinamento em Linguagem C++
Mdulo 1, Makron Books, SP, 1995.
FORBELLONE, A. L. V. Lgica de Programao: A
construo de algoritmos e estruturas de dados,
Prentice Hall, SP, 2005.

Prof. Leonardo Barreto Campos

47/47