\documentclass[apostila.tex]{subfiles} \begin{document} \chapter{estrutura de condição e loops} \section{Formatos} A instrução if avalia uma expressão e conduz a execução do programa dependendo do resultado obtido. Ela utiliza os seguintes formatos: \begin{itemize} \item Formato 1: \begin{lstlisting} if (expressão) instrução1; próxima instrução; \end{lstlisting} Quando a expressão é verdadeira, a instrução1 é executada. Quando a expressão é falsa, a instrução1 não é executada. Em ambos os casos, a próxima instrução é executada. \item Formato 2: \begin{lstlisting} if (expressão) instrução1; else instrução2; próxima instrução; \end{lstlisting} Quando a expressão é verdadeira, a instrução1 é executada e a instrução2 não. Quando a expressão é falsa, a instrução1 não é executada e a instrução2 é. Em ambos os casos, a próxima instrução é executada. \item Formato 3: \begin{lstlisting} if (expressão1) instrução1; else if (expressão2) instrução2; else instrução3; próxima instrução; \end{lstlisting} Esse formato utiliza uma instrução if aninhada. Se a expressão1 for verdadeira, a instrução1 será executada; caso contrário, a expressão2 será avaliada. Se esta for verdadeira, a instrução2 será executada, caso contrário, a instrução3 será executada. Em todos os casos, a próxima instrução é executada. \end{itemize} Uma instrução if pode controlar a execução de múltiplas instruções através de uma instrução composta, ou bloco. Um bloco é um conjunto de uma ou mais instruções delimitadas por chaves. Por exemplo: \begin{lstlisting} if (expressao) { instrucao1; instrucao2; ... instrucaoN; } \end{lstlisting} \begin{lstlisting} // Demonstra o uso da instrucao if #include void main() { int x = 10, y = 7; if (x > y) { printf("x e maior que y\n"); printf("O valor de x e %d\n", x); } else if (x < y) { printf("y e maior que x\n"); printf("O valor de y e %d\n",y); } else printf("x e igual a y"); } \end{lstlisting} A saída será: \begin{verbatim} x é maior que y O valor de x é 10 \end{verbatim} \section*{Exercício} Faça um programa em C que, dadas as três notas e o número de matrícula de dois alunos, calcule e imprima a média e o estado de cada aluno conforme a tabela abaixo: \begin[!h]{table*} \centering \begin{tabular}{|l|l|} \hline Média & Estado \\ \hline \verb|<| 40 & Reprovado \\ \hline \verb|<| 70 & Exame Final \\ \hline \verb|>|= 70 & Aprovado \\ \hline \end{tabular} \end{table*} Feito isto, informe o número de matrícula do aluno com maior e menor média, respectivamente. \section{Instrução for} A instrução for é um ``loop'' que permite repetir um determinado número de vezes a execução de um bloco contendo uma ou mais instruções. Ela tem a seguinte estrutura: \begin{lstlisting} for(inicial; condição; incremento) { instruções; } \end{lstlisting} Nesse caso inicial, condição e incremento são expressões válidas em C. Quando uma instrução for é encontrada durante a execução de um programa, os seguintes eventos ocorrem: \begin{enumerate} \item A expressão inicial é avaliada. Em geral, inicial é uma instrução de atribuição que inicializa uma variável com um determinado valor. \item A expressão condição é avaliada. Tipicamente, condição é uma expressão relacional. \item Se condição for falsa (ou seja, igual a zero), a instrução for termina a execução e passa para a instrução seguinte. \item Se condição for verdadeira (ou seja, não zero), as instruções do for são executadas. \item A expressão incremento é avaliada e a execução volta à etapa 2. \end{enumerate} \begin{lstlisting} // Exemplo que demonstra o uso da instrucao for #include void main () { int contagem; // Imprime na tela os numeros de 1 a 10 for(contagem = 1; contagem <= 10; contagem++) printf("%d ", contagem); } \end{lstlisting} A saída será: \begin{verbatim} 1 2 3 4 5 6 7 8 9 10 \end{verbatim} \section{Instrução while} A instrução while é um ``loop'' que executa um bloco de instru,cões enquanto determinada condição permanecer verdadeira. A instrução while utiliza o seguinte formato: \begin{lstlisting} while( condição ) { instruções; } \end{lstlisting} A condição é qualquer expressão válida em C. Quando a execução do programa chega a uma instrução while, os seguintes eventos ocorrem: \begin{enumerate} \item A expressão condição é avaliada. \item Se condição for falsa (ou seja, zero), a instrução while é terminada e a execução passa para a primeira instrução subsequente. \item Se condição for verdadeira (ou seja, diferente de zero), as instruções do while são executadas e a execução volta à etapa 1. \end{enumerate} \begin{lstlisting} // Demonstra o uso da instrucao while #include void main () { int contagem = 1; // Imprime na tela os numeros de 1 a 10 while ( contagem <= 10 ) { printf(" %d", contagem); contagem++; } } \end{lstlisting} A saída será: \begin{verbatim} 1 2 3 4 5 6 7 8 9 10 \end{verbatim} \section{Instrução do...while} A terceira estrutura de ``loop'' em C é o ``loop'' do...while, que executa um bloco de instruções enquanto uma determinada condição for verdadeira. Ao contrário do que fazem os ``loops'' for e while, o ``loop'' do...while testa a condição no final do ``loop'' e não no início. Ele usa a seguinte estrutura: \begin{lstlisting} do { instruções; } while (condição); \end{lstlisting} No caso, condição é qualquer instrução válida em C. Quando a execução do programa atinge uma instrução do...while, os seguintes eventos ocorrem: \begin{itemize} \item São executadas as instruções do ``loop''. \item Condição é avaliada. Se for verdadeira, a execução volta ao passo 1, senão, o ``loop'' é encerrado. \end{itemize} \begin{lstlisting} // Exemplo que demonstra o uso da instrucao do...while #include void main () { int contagem = 1; // Imprime na tela os numeros de 1 a 10 do { printf(" %d", contagem); contagem++; } while ( contagem <= 10 ); } \end{lstlisting} A saída será: \begin{verbatim} 1 2 3 4 5 6 7 8 9 10 \end{verbatim} \section{Exercício} 1. Faça um programa em C para ler números inteiros e determinar se o número lido é primo, imprimindo o resultado. A execução encerra quando o número lido for zero, e o programa deve então imprimir o maior e o segundo maior número primo lido. 2. Faça um programa com uma função para calcular a série de Fibonacci de um número n qualquer. A série de Fibonacci (F) é definida da seguinte maneira: \begin{itemize} \item F(1) = 1 \item F(2) = 1 \item F(n) = F(n-1)+F(n-2) \end{itemize} 3. Escreva um programa em C para calcular o máximo divisor comum e o mínimo múltiplo comum entre dois números. Abaixo está o diagrama do algoritmo que calcula o mdc: \begin{lstlisting} MDC (a,b) Parar quando b == 0 q = a/b r = resto de a/b a = b b = r \end{lstlisting} 4. Escreva um programa em C que seja capaz de converter um número de decimal para binário e de binário para decimal. \end{document}