Exercícios de revisão 4.1 Preencha as lacunas em cada uma das ...
Exercícios de revisão 4.1 Preencha as lacunas em cada uma das ...
Exercícios de revisão 4.1 Preencha as lacunas em cada uma das ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Exercícios</strong> <strong>de</strong> <strong>revisão</strong><br />
<strong>4.1</strong> <strong>Preencha</strong> <strong>as</strong> lacun<strong>as</strong> <strong>em</strong> <strong>cada</strong> <strong>uma</strong> d<strong>as</strong> seguintes expressões.<br />
a) A repetição controlada por contador também é conhecida como repetição __ porque<br />
sabe-se <strong>de</strong> ant<strong>em</strong>ão quant<strong>as</strong> vezes o loop será executado.<br />
b) A repetição controlada por sentinela também é conhecida como repetição __ porque<br />
não se sabe <strong>de</strong> ant<strong>em</strong>ão quant<strong>as</strong> vezes o loop será executado.<br />
c)Em <strong>uma</strong> repetição controlada por contador, utiliza-se um __ para contar o número <strong>de</strong><br />
vezes que um grupo <strong>de</strong> instruções <strong>de</strong>ve ser repetido.<br />
d)A instrução ____, quando executada <strong>em</strong> <strong>uma</strong> estrutura <strong>de</strong> repetição, faz com que a<br />
próxima interação do loop seja realizada imediatamente.<br />
e) A instrução __, quando executada <strong>em</strong> <strong>uma</strong> estrutura <strong>de</strong> repetição ou instrução switch<br />
causa a saída imediata da estrutura.<br />
f) A __ é usada para examinar <strong>cada</strong> um dos valores constantes inteiros que <strong>uma</strong><br />
<strong>de</strong>terminada variável ou expressão po<strong>de</strong> <strong>as</strong>sumir.<br />
4.2 Diga se <strong>cada</strong> <strong>uma</strong> d<strong>as</strong> seguintes afirmações é verda<strong>de</strong>ira ou falsa. Se a afirmação for<br />
falsa, explique por quê.<br />
a) A estrutura <strong>de</strong> seleção switch exige o c<strong>as</strong>o <strong>de</strong>fault.<br />
b) O c<strong>as</strong>o <strong>de</strong>fault <strong>de</strong> <strong>uma</strong> estrutura <strong>de</strong> seleção switch exige a instrução break.<br />
c) A expressão (x>y&&ay for verda<strong>de</strong>iro ou se a
d) Imprima os inteiros <strong>de</strong> I a 20 usando um loop while e a variável x. Consi<strong>de</strong>re que a<br />
variável x já foi <strong>de</strong>clarada, m<strong>as</strong> não inicializada. Imprima somente 5 inteiros por linha.<br />
Sugestão: Use o cálculo x % 5. Quando o valor <strong>de</strong>sse cálculo for O, imprima um<br />
caractere <strong>de</strong> nova linha: c<strong>as</strong>o contrário, imprima um caractere <strong>de</strong> tabulação.<br />
e) Repita o exercício 4.3(d) usando <strong>uma</strong> estrutura for<br />
4.4 Encontre o erro <strong>em</strong> <strong>cada</strong> um dos segmentos <strong>de</strong> código a seguir e explique como<br />
corrigi-lo.<br />
a) x = 1;<br />
while (x
e) break,<br />
f)estrutura <strong>de</strong> seleção switch.<br />
4.2 a) Falso. O c<strong>as</strong>o <strong>de</strong>fault é opcional. Se não for<strong>em</strong> necessári<strong>as</strong> ações <strong>de</strong>fault, não há<br />
necessida<strong>de</strong> <strong>de</strong> um c<strong>as</strong>o<strong>de</strong>fau1t.<br />
b) Falso. A instrução break é usada para sair da estrutura switch. A instrução break não<br />
é exigida quando o c<strong>as</strong>o <strong>de</strong>fau1t é o último.<br />
c) Falso. Amb<strong>as</strong> <strong>as</strong> expressões relacionais <strong>de</strong>v<strong>em</strong> ser verda<strong>de</strong>ir<strong>as</strong> para que toda a<br />
expressão seja verda<strong>de</strong>ira quando o "operador && é utilizado.<br />
d) Verda<strong>de</strong>iro.<br />
4.3 a) soma = O;<br />
for (contag<strong>em</strong> = 1; contag<strong>em</strong>
x = 1;<br />
while (x
) Erro: Usar um número <strong>de</strong> ponto flutuante para controlar <strong>uma</strong> estrutura <strong>de</strong> repetição<br />
for<br />
Correção: Usar um número inteiro e realizar o cálculo a<strong>de</strong>quado para obter os valores<br />
<strong>de</strong>sejados.<br />
for (y = 1; y ! = 10; y++)<br />
printf ("%f\n", (float) y / 10);<br />
c) Erro: Falta a instrução break n<strong>as</strong> instruções do primeiro c<strong>as</strong>e.<br />
Correção: Adicionar <strong>uma</strong> instrução break no final d<strong>as</strong> instruções do primeiro c<strong>as</strong>e.<br />
Note que isto não é necessariamente um erro se o programador quiser que a instrução<br />
do c<strong>as</strong>e 2: seja executada s<strong>em</strong>pre que a instrução <strong>de</strong> c<strong>as</strong>e 1: for executada.<br />
d) Erro: Operador relacional ina<strong>de</strong>quado na condição <strong>de</strong> repetição do whi1e.<br />
Correção: Usar
contador = 2;<br />
Do {<br />
if (contador % 2 = = 0)<br />
printf ("%d\n", contador);<br />
contador =+ 2;<br />
} While. (contador < 100),<br />
g) O código a seguir <strong>de</strong>ve somar os inteiros <strong>de</strong> 100 até 150 (admita que total foi<br />
inicializado como 0).<br />
for ( x = 100; x
4.8) O que o seguinte programa faz?<br />
}<br />
#inclu<strong>de</strong> <br />
int main ()<br />
{<br />
}<br />
int i, j, x, y;<br />
printf (“Entre com inteiros no intervalo 1-20:”);<br />
scanf (“%d%d”, &x, &y) ;<br />
for (i = 1, i
<strong>4.1</strong>2 Escreva um programa que calcule e imprima a soma dos inteiros pares <strong>de</strong> 2 a 30.<br />
<strong>4.1</strong>3 Escreva um programa que calcule e imprima o produto dos inteiros ímpares <strong>de</strong> 1 a<br />
15.<br />
<strong>4.1</strong>4 A função fatorial é usada com freqüência <strong>em</strong> probl<strong>em</strong><strong>as</strong> <strong>de</strong> probabilida<strong>de</strong>. O<br />
fatorial <strong>de</strong> um número positivo n (escrito n! e pronunciado "fatorial <strong>de</strong> n”) é igual ao<br />
produto dos inteiros positivos <strong>de</strong> 1a n. Escreva um programa que calcule os fatoriais dos<br />
inteiros <strong>de</strong> 1 a 5. Imprima o resultado no formato <strong>de</strong> <strong>uma</strong> tabela. Que probl<strong>em</strong>a po<strong>de</strong><br />
evitar que você possa calcular o fatorial <strong>de</strong> 20?<br />
<strong>4.1</strong>5 Modifique o programa <strong>de</strong> juros compostos da Seção 4.6 para repetir seus p<strong>as</strong>sos<br />
para tax<strong>as</strong> <strong>de</strong> juros <strong>de</strong> 5 por cento,6 por cento, 7 por cento, 8 por cento, 9 por cento e 10<br />
por cento. Use um loop for para variar a taxa <strong>de</strong> juros.<br />
<strong>4.1</strong>6 Escreva um programa que imprima os seguintes padrões separadamente, um<br />
abaixo do outro. Use loops for para gerar os padrões. Todos os <strong>as</strong>teriscos (*) <strong>de</strong>v<strong>em</strong> ser<br />
impressos por <strong>uma</strong> única instrução printf na forma printf (“*”); (isto faz com que os<br />
<strong>as</strong>teriscos sejam impressos lado a lado). Sugestão; Os dois ultimos padrões exig<strong>em</strong> que<br />
<strong>cada</strong> linha comece com um número a<strong>de</strong>quado <strong>de</strong> espaços <strong>em</strong> branco.<br />
(A) (B) (C) (D)<br />
* ********** ********** *<br />
** ********* ********* **<br />
*** ******** ******** ***<br />
**** ******* ******* ****<br />
***** ****** ****** *****<br />
****** ***** ***** ******<br />
******* **** **** *******<br />
******** *** *** ********<br />
********* ** ** *********<br />
********** * * **********<br />
<strong>4.1</strong>7 Economizar dinhei1ro se torna muito difícil <strong>em</strong> períodos <strong>de</strong> recessão, portanto <strong>as</strong><br />
<strong>em</strong>pres<strong>as</strong> po<strong>de</strong>m reduzir seus limites <strong>de</strong> crédito para evitar que su<strong>as</strong> cont<strong>as</strong> a receber<br />
(dinheiro que lhes é <strong>de</strong>vido) se torn<strong>em</strong> muito gran<strong>de</strong>s. Em resposta a <strong>uma</strong> recessão<br />
prolongada, <strong>uma</strong> companhia reduziu o limite <strong>de</strong> crédito <strong>de</strong> seus clientes à meta<strong>de</strong>. Desta
forma, se um cliente tinha um limite <strong>de</strong> crédito <strong>de</strong> $2000, agora seu limite p<strong>as</strong>sou a ser<br />
1000. Se um cliente tinha um limite <strong>de</strong> crédito <strong>de</strong> $5000, seu limite p<strong>as</strong>sou a ser $2500.<br />
Escreva um programa que analise a situação do crédito <strong>de</strong> três clientes <strong>de</strong>ssa<br />
companhia. De <strong>cada</strong> cliente você recebe<br />
1. O número <strong>de</strong> sua conta<br />
2. Seu limite <strong>de</strong> crédito antes da recessão<br />
3. Seu saldo atual (i.e., a quantia que o c1iente <strong>de</strong>ve à companhia).<br />
Seu programa <strong>de</strong>ve calcular e imprimir o novo limite <strong>de</strong> crédito <strong>de</strong> <strong>cada</strong> cliente e<br />
<strong>de</strong>terminar (e imprimir) que clientes possu<strong>em</strong> saldos que exce<strong>de</strong>m seus novos limites <strong>de</strong><br />
crédito.<br />
<strong>4.1</strong>8 Uma aplicação interessante dos computadores é para <strong>de</strong>senhar gráficos <strong>de</strong> linh<strong>as</strong> e<br />
<strong>de</strong> barr<strong>as</strong> (chamados algum<strong>as</strong> vezes "histogram<strong>as</strong>”). Escreva um programa que leia<br />
cinco números (<strong>cada</strong> um <strong>de</strong>les entre 1 e 30).<br />
Para <strong>cada</strong> número lido, seu programa <strong>de</strong>ve imprimir <strong>uma</strong> linha contendo aquele número<br />
<strong>de</strong> <strong>as</strong>teriscos adjacentes. Por ex<strong>em</strong>plo, se seu programa ler o número sete, <strong>de</strong>ve imprimir<br />
*******.<br />
<strong>4.1</strong>9 Uma loja <strong>de</strong> venda <strong>de</strong> produtos por re<strong>em</strong>bolso postal ven<strong>de</strong> cinco produtos<br />
diferentes cujos preços <strong>de</strong> varejo são mostrados na tabela seguir:<br />
Número do produto Preço <strong>de</strong> Varejo<br />
1 $ 2.98<br />
2 4.50<br />
3 9.98<br />
4 4.49<br />
5 6.87<br />
Escreva um programa que leia urna série <strong>de</strong> pares <strong>de</strong> números como se segue:<br />
1. Número do produto<br />
2. Quantida<strong>de</strong> vendida <strong>em</strong> um dia<br />
Seu programa <strong>de</strong>ve usar <strong>uma</strong> instrução switch para ajudar a <strong>de</strong>terminar o preço <strong>de</strong><br />
varejo <strong>de</strong> <strong>cada</strong> produ10. Seu programa <strong>de</strong>ve calcular e mostrar o valor total a<br />
varejo <strong>de</strong> todos os produtos vendidos na s<strong>em</strong>ana p<strong>as</strong>sada.<br />
4.20 Complete <strong>as</strong> seguintes tabel<strong>as</strong> <strong>de</strong> verda<strong>de</strong> preenchendo <strong>cada</strong> espaço <strong>em</strong> branco com<br />
0 ou 1.<br />
Condição l Condição2 Condição 1 && Condição 2<br />
0 0 0
0 diferente <strong>de</strong> zero 0<br />
diferente <strong>de</strong> zero 0 __<br />
diferente <strong>de</strong> zero diferente <strong>de</strong> zero __<br />
Condição l Condição2 Condição 1 | | Condição 2<br />
0 0 0<br />
0 diferente <strong>de</strong> zero 1<br />
diferente <strong>de</strong> zero 0 __<br />
diferente <strong>de</strong> zero diferente <strong>de</strong> zero __<br />
Condição l Condição2<br />
0 1<br />
diferente <strong>de</strong> zero ___<br />
4.21 Escreva novamente o programa da Fig. 4.2 <strong>de</strong> modo que a inicialização da variável<br />
contador seja feita na <strong>de</strong>claração e não na estrutura for.<br />
4.22 Modifique o programa da Fig. 4.7 <strong>de</strong> forma que ele calcule o grau médio da turma.<br />
4.23 Modifique o programa da Fig. 4.6 <strong>de</strong> forma que ele use somente inteiros para<br />
calcular os juros compostos.<br />
(Sugestão: Trate tod<strong>as</strong> <strong>as</strong> quanti<strong>as</strong> monetári<strong>as</strong> como números inteiros <strong>de</strong> pennies,<br />
sabendo que um penny é um centésimo <strong>de</strong> um dólar. A seguir, "divida" o resultado <strong>em</strong><br />
su<strong>as</strong> partes <strong>de</strong> dó1ares e cents usando <strong>as</strong> operações <strong>de</strong> divisão e resto, respectivamente.<br />
Insira um ponto.)<br />
4.24 Admita que i = 1, j = 2, k = 3 e m = 2. O que <strong>cada</strong> <strong>uma</strong> d<strong>as</strong> seguintes instruções<br />
imprime?<br />
a) printf ("%d", i = = 1);<br />
b) printf (“%d", i );<br />
c) printf (“%d", i >= 1 && j < 4);<br />
d) printf (“%d", m < = 99 && k < m);<br />
e) printf (“%d", j >= I | | k = = m);<br />
f) printf (“%d", k < m < j | | 3 – j >= k);<br />
g) printf (“%d", !m);<br />
h) printf (“%d", ! (j – m));<br />
i) printf (“%d", ! (k > m));
j) printf (“%d", ! (j > k));<br />
4.25 Imprima <strong>uma</strong> tabela <strong>de</strong> valores equivalentes <strong>de</strong>cimais, binários. octais e<br />
hexa<strong>de</strong>cimais. Se você não está familiarizado com estes sist<strong>em</strong><strong>as</strong> <strong>de</strong> numeração, leia<br />
inicialmente o Apêndice D se quiser tentar solucionar este exercício.<br />
4.26 Calcule o valor <strong>de</strong> π a partir da série infinita<br />
π = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 + ......<br />
Imprima <strong>uma</strong> tabela que mostra o valor <strong>de</strong> π aproximado por 1 termo <strong>de</strong>ssa série, por<br />
dois termos, por três termos etc. Quantos termos <strong>de</strong>ssa série são necessários para obter<br />
3.14? 3.141? 3.1415? 3.14159?<br />
4.27 (Números <strong>de</strong> Pitágor<strong>as</strong>) Um triângulo retângulo po<strong>de</strong> ter lados que sejam todos<br />
inteiros. O conjunto <strong>de</strong> três valores inteiros para os lados <strong>de</strong> um triângulo retângulo é<br />
chamado números <strong>de</strong> Pitágor<strong>as</strong>. Esses três lados <strong>de</strong>v<strong>em</strong> satisfazer o relacionamento <strong>de</strong><br />
que a soma dos quadrados dos dois lados (catetos) <strong>de</strong>ve ser igual ao quadrado da<br />
hipotenusa. Encontre todos os números <strong>de</strong> Pitágor<strong>as</strong> para cateto 1, cateto2 e hipotenusa<br />
menores que 500. Use três loops for aninhados que simplesmente experiment<strong>em</strong> tod<strong>as</strong><br />
<strong>as</strong> possibilida<strong>de</strong>s. Este é um ex<strong>em</strong>plo <strong>de</strong> cálculo por "força bruta". Ela não é<br />
esteticamente agradável para muit<strong>as</strong> pesso<strong>as</strong>. M<strong>as</strong> há muit<strong>as</strong> razões para est<strong>as</strong> técnic<strong>as</strong><br />
ser<strong>em</strong> importantes. Em primeiro lugar. com o po<strong>de</strong>r da computação crescendo a um<br />
ritmo tão acelerado, <strong>as</strong> soluções que levariam anos ou mesmo séculos <strong>de</strong> t<strong>em</strong>po <strong>de</strong><br />
cálculo para ser<strong>em</strong> produzid<strong>as</strong> com a tecnologia <strong>de</strong> apen<strong>as</strong> alguns anos atrás po<strong>de</strong>m ser<br />
produzid<strong>as</strong> atualmente <strong>em</strong> hor<strong>as</strong>. Minutos ou mesmo segundos. Os chips recentes <strong>de</strong><br />
microprocessadores po<strong>de</strong>m processar mais <strong>de</strong> 100 milhões <strong>de</strong> instruções por segundo! E<br />
é provável que chips capazes <strong>de</strong> processar bilhões <strong>de</strong> instruções por segundo apreçam<br />
ainda nos anos 90. Em segundo lugar, como você apren<strong>de</strong>rá <strong>em</strong> cursos mais avançados<br />
<strong>de</strong> ciência da computação, há um número gran<strong>de</strong> <strong>de</strong> probl<strong>em</strong><strong>as</strong> interessantes para os<br />
quais não há método conhecido para um algoritmo diferente daquele utilizado pela força<br />
bruta. Investigamos muitos tipos <strong>de</strong> metodologi<strong>as</strong> para resolução <strong>de</strong> probl<strong>em</strong><strong>as</strong> neste<br />
livro. Levar<strong>em</strong>os <strong>em</strong> consi<strong>de</strong>ração muitos métodos <strong>de</strong> força bruta <strong>em</strong> vários probl<strong>em</strong><strong>as</strong><br />
interessantes.<br />
4.28 Uma <strong>em</strong>presa paga seus <strong>em</strong>pregados como gerentes (que receb<strong>em</strong> um salário fixo<br />
mensal), trabalhadores comuns (que receb<strong>em</strong> um salário fixo por hora para <strong>as</strong> primeir<strong>as</strong><br />
40 hor<strong>as</strong> <strong>de</strong> trabalho e 1,5 vez seu salário hora normal para <strong>as</strong> hor<strong>as</strong> extr<strong>as</strong> trabalhad<strong>as</strong>),<br />
trabalhadores por comissão (que receb<strong>em</strong> $250 mais 5,7% <strong>de</strong> su<strong>as</strong> vend<strong>as</strong> brut<strong>as</strong>) ou<br />
trabalhadores por <strong>em</strong>preitada, (que receb<strong>em</strong> <strong>uma</strong> quantia fixa por it<strong>em</strong> para <strong>cada</strong> um dos<br />
itens produzidos - <strong>cada</strong> trabalhador por <strong>em</strong>preitada <strong>de</strong>ssa <strong>em</strong>presa trabalha com apen<strong>as</strong><br />
um tipo <strong>de</strong> it<strong>em</strong>. Escreva um programa que calcule o pagamento s<strong>em</strong>anal <strong>de</strong> <strong>cada</strong><br />
<strong>em</strong>pregado. Você não sabe <strong>de</strong> ant<strong>em</strong>ão o número <strong>de</strong> <strong>em</strong>pregados. Cada tipo <strong>de</strong><br />
<strong>em</strong>pregado t<strong>em</strong> seu código próprio <strong>de</strong> pagamento: gerentes possu<strong>em</strong> o código 1,<br />
trabalhadores comuns, o código 2, trabalhadores por comissão, o código 3, e<br />
trabalhadores por <strong>em</strong>preitada, o código 4. Use switch para calcular o pagamento <strong>de</strong> <strong>cada</strong><br />
<strong>em</strong>pregado com b<strong>as</strong>e <strong>em</strong> seu código <strong>de</strong> pagamento. Dentro do switch peça ao usuário<br />
(i.e., o responsável pela folha <strong>de</strong> pagamento) para entrar com os fatos a<strong>de</strong>quados à
necessida<strong>de</strong> <strong>de</strong> seu programa para calcular o pagamento <strong>de</strong> <strong>cada</strong> <strong>em</strong>preRItdo com b<strong>as</strong>e<br />
<strong>em</strong> seu código.<br />
4.29 (Leis <strong>de</strong> Morgan) Neste capítulo, analisamos os operadores lógicos &&, | | e !. As<br />
Leis <strong>de</strong> De Morgan po<strong>de</strong>m fazer com que algum<strong>as</strong> vezes nos seja mais conveniente<br />
exprimir <strong>uma</strong> expressão lógica. Est<strong>as</strong> leis afirmam que a expressão ! (condição 1 &&<br />
condição 2 ) é logicamente equivalente à expressão (!condição1 | | !condição2). Além<br />
disso, a expressão (!condição1 | | condição2) é logicamente equivalente à expressão<br />
(!condição1 | | !condição2). Use <strong>as</strong> Leis <strong>de</strong> De Morgan para escrever expressões<br />
equivalentes a <strong>cada</strong> um dos itens seguintes e <strong>de</strong>pois escreva um programa que mostre<br />
que a expressão original e a nova expressão <strong>em</strong> <strong>cada</strong> c<strong>as</strong>o são equivalentes.<br />
a) ! (x < 5) && ! (y >= 7)<br />
b) ! (a = = b) | | ! (g ! = 5)<br />
c) ! ((x < = 8) && (y 4))<br />
d) ! ((i > 4) | | (j < = 6))<br />
4.30 Escreva novamente o prtograma da Fig. 4.7 substituindo a instrução switch por<br />
<strong>uma</strong> instrução if/else aninhada: tenha o cuidado <strong>de</strong> lidar a<strong>de</strong>quadamente com o c<strong>as</strong>o<br />
<strong>de</strong>fault. Depois escreva novamente esta nova versão substituindo a instrução if/else<br />
aninhada por <strong>uma</strong> série <strong>de</strong> instruções if: aqui,também, tenha o cuidado <strong>de</strong> lidar<br />
apropriadamente com o c<strong>as</strong>o <strong>de</strong>fault (isso é mais difícil do que com a versão if/else<br />
aninhada). Este exercício <strong>de</strong>monstra que switch é <strong>uma</strong> comodida<strong>de</strong> e que qualquer<br />
instrução switch po<strong>de</strong> ser escrita apen<strong>as</strong> com instruções <strong>de</strong> seleção simples.<br />
4.31 Escreva um programa que imprima o seguinte losango. Você po<strong>de</strong> usar instruções<br />
printf que imprimam tanto um único <strong>as</strong>terisco como um único espaço <strong>em</strong> branco.<br />
Maximize seu uso <strong>de</strong> repetições (com estrutur<strong>as</strong> for aninhad<strong>as</strong>) e minimize o número <strong>de</strong><br />
instruções printf.<br />
*<br />
***<br />
*****<br />
*******<br />
*********<br />
*******<br />
*****<br />
***<br />
*<br />
4.32 Modifique o programa escrito no Exercício 4.31 para ler um número impar <strong>de</strong> 1 a<br />
19 para especificar o número <strong>de</strong> linh<strong>as</strong> no losango. Seu programa <strong>de</strong>ve então exibir um<br />
losango do tamanho apropriado.<br />
4.33 Se você está familiarizado com numerais romanos, escreva um programa que<br />
imprima <strong>uma</strong> tabela <strong>de</strong> todos os números romanos equivalentes aos números <strong>de</strong>cimais<br />
<strong>de</strong> 1 a 100.<br />
4.34 Escreva um programa que imprima <strong>uma</strong> tabela <strong>de</strong> números binários, octais e<br />
hexa<strong>de</strong>cimais equivalentes aos números <strong>de</strong>cimais no intervalo <strong>de</strong> 1 a 256. Se você não
estiver familiarizado com esses sist<strong>em</strong><strong>as</strong> <strong>de</strong> numeração leia primeiro o Apêndice D se é<br />
seu <strong>de</strong>sejo tentar fazer este exercício.<br />
4.35 Descreva o processo que você gostaria <strong>de</strong> usar para substituir um loop do/while por<br />
um loop while equivalente. Que probl<strong>em</strong>a ocorre quando se tenta substituir um loop<br />
while por um loop do/whil. equivalente? Suponha que você <strong>de</strong>ve r<strong>em</strong>over um loop<br />
while e substitui-lo por um do/while. Que estrutura adicional <strong>de</strong> controle seria<br />
necessária utilizar e como ela seria usada para <strong>as</strong>segurar que o programa resultante se<br />
comporte exatamente como o original?<br />
4.36 Escreva um programa que receba como entrada o ano no intervalo <strong>de</strong> 1994 a 1999<br />
e use o loop for para produzir um calendário con<strong>de</strong>nsado e impresso <strong>de</strong> <strong>uma</strong> forma<br />
organizada. Tome cuidado com os anos bissextos.<br />
4.37 Uma critica às instruções break e continue é que <strong>cada</strong> <strong>uma</strong> <strong>de</strong>l<strong>as</strong> não é estruturada.<br />
Realmente <strong>as</strong> instruções break e continue s<strong>em</strong>pre po<strong>de</strong>m ser substituíd<strong>as</strong> por instruções<br />
estruturad<strong>as</strong>, <strong>em</strong>bora fazer isto possa ser esquisito. Descreva <strong>de</strong> <strong>uma</strong> forma geral como<br />
qualquer instrução break po<strong>de</strong>ria ser r<strong>em</strong>ovida <strong>de</strong> um loop <strong>de</strong> um programa e substitua<br />
essa instrução por alg<strong>uma</strong> instrução estruturada equivalente. (Sugestão: A instrução<br />
break abandona um loop <strong>de</strong> <strong>de</strong>ntro <strong>de</strong> seu corpo. A outra maneira <strong>de</strong> fazer isto é<br />
impondo <strong>uma</strong> falha no teste <strong>de</strong> continuação do loop. Pense <strong>em</strong> utilizar no teste <strong>de</strong><br />
continuação do loop um segundo teste que indique "saída pr<strong>em</strong>atura <strong>de</strong>vido a <strong>uma</strong><br />
condição idêntica ao break".) Use a técnica <strong>de</strong>senvolvida aqui para r<strong>em</strong>over a instrução<br />
break do programa da Fig. <strong>4.1</strong>1.<br />
4.38 Que faz o seguinte segmento <strong>de</strong> programa?<br />
for (i = 1; i