controle_fluxo.tex 4.53 KB
Newer Older
1 2 3 4 5
\documentclass[apostila.tex]{subfiles}


\begin{document}

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
\chapter{Controle de fluxo do programa}

\section{Instrução break}
A instrução break pode ser colocada dentro de uma repeti,c~ao (for, while ou 
do...while) ou ainda dentro
de um switch (veja mais adiante).

Quando a instrução break é encontrada dentro de uma repeti,c~ao, a execu,c~ao da 
repeti,c~ao na qual ele
se encontra é encerrada.

\begin{lstlisting}
for(contagem = 0; contagem ! 10; contagem++)
f

if ( contagem == 5 ) /* quando contagem for 5 */

break; /* interrompe o loop */
g
\end{lstlisting}

\section{Instrução continue}
Como a instrução break, a instru,c~ao continue também só pode ser colocada 
dentro de um "loop"for,
while ou do...while. Quando uma instrução continue é executada, a próxima 
itera,c~ao do loop come,ca
imediatamente, ou seja, as instruções existentes entre a instru,cão continue e o 
final do "loop"n~ao s~ao
êxecutadas.

\section{Instrução return}
A instrução return termina a execu,c~ao da fun,c~ao em que se encontra o 
programa e faz com que a execu,c~ao
continue na instrução seguinte `a chamada da fun,c~ao. Esta instru,c~ao aceita 
um único argumento, que
pode ser qualquer expressão válida em C, cujo valor é retornado.

exemplo:

\begin{lstlisting}
int MAX( int a, int b )
{
	if ( a > b )
		return(a);
	else
		return(b);
}
\end{lstlisting}


\section{Função exit()}
A função exit(), que pertence `a biblioteca padr~ao stdlib.h, termina a 
execu,c~ao do programa e retorna o
controle ao sistema operacional. Esta função aceita um único argumento do tipo 
int, que é passado de
volta ao sistema operacional para indicar o sucesso ou fracasso do programa.



\section{Instrução switch}

A instrução switch é semelhante à instrução if , ou seja, a partir da 
avaliação de uma expressão a instrução switch pode realizar diferentes ações e, 
ao invés do if, não está restrita a apenas duas ações. A forma geral é a 
seguinte:


\begin{lstlisting}
switch (expressão) 
{
	case gabarito1 : 
		instruções;
		break;
	case gabarito2 : 
		instruções;
		break;
	...
	case gabaritoN : 
		instruções;
		break;
	default: 
		instruções;
}
\end{lstlisting}

Nesta instrução, expressão é qualquer expressão que resulte em um valor 
inteiro do tipo long, int, ou char. 
A instrução switch avalia a expressão e compara o seu valor com os gabaritos 
após cada item case; então:

\begin{itemize}
	\item Se for encontrada uma equivalência entre expressão e um dos 
gabaritos, a execução é transferida para as instruções subsequentes ao item 
case.
	\item Se nenhuma equivalência for encontrada, a execução é transferida para 
as instruções subsequentes ao item default, que é opcional.
	\item Se nenhuma equivalência for encontrada e não houver um item default, 
a execução é transferida para a primeira instrução subsequente à chave de 
encerramento da instrução switch.
\end{itemize}

Observe que ao término de cada item case aparece uma instrução break. 
Na verdade o break é opcional. 
Sua funcionalidade é a mesma quando utilizado dentro de repetições, ou seja, 
o break faz com que a instrução switch seja terminada.

Se ao final do corpo de comandos de um case não houver um break, todos os 
gabaritos abaixo serão
executados até que seja encontrado um break ou seja atingido o final do switch.

\begin{lstlisting}
/* Exemplo do uso da instrucao switch */
#include <stdio.h>
#include <stdlib.h>

void main()
{
	char vogal;
	
	printf("Digite uma vogal: \n");
	
	scanf ("%c",&vogal); /* le uma letra */
	
	switch (vogal) {
		case 'a': 
			vogal='e';
			break;
			
		case 'e': 
			vogal='i';
			break;
			
		case 'i': 
			vogal='o';
			break;
			
		case 'o': 
			vogal='u'; 
			break;
			
		case 'u': 
			vogal='a';
			break;
		
		default : 
			printf("Erro! A letra nao e vogal");
			exit(0);
	}
	printf ("a vogal subsequente e %c \n",vogal);
}
\end{lstlisting}


\section{Exercício}

Esse exercício consiste em desenvolver uma pequena calculadora, com várias 
opções que serão selecionadas em um menu.

O menu principal deverá ser o seguinte:

1. Soma n números
2. Multiplica n números
3. Divide a/b
4. Subtração de n números
5. Calcular $a^b$
6. Calcular a média aritmética de $n$ números
7. Sair

Cada opção deverá comportar-se da seguinte forma:

\begin{itemize}
	\item requisitar quantos números farão parte da operação (quando 
aplicável);
	\item requisitar cada entrada;
	\item ao final das iterações, imprimir o resultado e aguardar uma tecla;
	\item retornar ao menu principal.
\end{itemize}

184
\end{document}