Search buenodc

Nesta página
  1. Questionário
  2. Tarefa
  3. Gabarito

Lista de Exercícios - Semana 5

Questionário

  • Questionário individual, de múltipla escolha, com uma resposta correta por questão.
  • Cobre a leitura do material e dos vídeos: for, laços aninhados, break/continue no laço interno, e o critério de escolha entre while, do-while e for.

1. Qual é a saída do trecho abaixo?

for (int i = 1; i <= 3; i++)
    cout << i << " ";

a) 1 2 3 b) 0 1 2 c) 1 2 3 4 d) O laço não executa nenhuma vez

2. Qual das opções abaixo é equivalente ao for a seguir, usando while?

for (int i = 0; i < 5; i++)
    cout << i << endl;

a)

int i = 0;
i++;
while (i < 5) {
    cout << i << endl;
}

b)

int i = 0;
while (i < 5) {
    cout << i << endl;
    i++;
}

c)

int i = 0;
while (i < 5) {
    i++;
    cout << i << endl;
}

d)

while (i < 5) {
    int i = 0;
    cout << i << endl;
    i++;
}

3. Qual é a saída do trecho abaixo?

int soma = 0;
int i;
for (i = 1; i <= 5; i++);
soma = soma + i;
cout << soma << endl;

a) 15 b) 5 c) 6 d) Erro de compilação

4. Qual é a saída do trecho abaixo?

for (int a = 1; a <= 2; a++) {
    for (int b = 1; b <= 3; b++) {
        cout << a << b << " ";
    }
}

a) 11 21 12 22 13 23 b) 1 2 3 1 2 3 c) 123123 d) 11 12 13 21 22 23

5. Quantos asteriscos o trecho abaixo mostra ao todo, somando as três repetições do laço externo?

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        cout << "*";
    }
}

a) 6 b) 9 c) 3 d) 12

6. No trecho abaixo, o break interrompe:

for (int x = 1; x <= 3; x++) {
    for (int y = 1; y <= 3; y++) {
        if (y == 2) break;
        cout << x << y << " ";
    }
}

a) Os dois laços ao mesmo tempo b) Só o laço de y c) Só o laço de x d) Nenhum laço: o break é ignorado dentro de laços aninhados

7. Qual é a saída do trecho abaixo?

for (int i = 1; i <= 4; i++) {
    if (i == 2) continue;
    cout << i << " ";
}

a) 1 2 3 4 b) 1 c) 1 3 4 d) 3 4

8. Você precisa escrever um programa que peça repetidamente a senha do usuário até ele digitar a senha correta, sabendo que precisa perguntar pelo menos uma vez. Qual laço é mais indicado?

a) for b) switch c) while d) do-while

9. Você precisa somar os valores de compras digitadas por um caixa, um de cada vez, até ele digitar zero para fechar o caixa, sem saber quantas compras vão ocorrer. Qual laço é mais indicado?

a) while b) for c) do-while d) Nenhum dos três laços resolve isso

10. Um colega escreveu o trecho abaixo para somar números digitados até aparecer -1, mas usou um limite arbitrário de 1000 no for. Qual é o problema com essa escolha?

for (int i = 0; i < 1000; i++) {
    cin >> numero;
    if (numero == -1) break;
    soma = soma + numero;
}

a) O código tem um erro de sintaxe e não compila b) O total de repetições não é conhecido de antemão: esse problema pedia um while, não um for com limite inventado c) O break não funciona dentro de um for, só dentro de while d) O valor 1000 deveria ser exatamente igual ao número de valores digitados

Tarefa

  • Cada exercício é um programa separado, em um arquivo .cpp com o nome exato indicado (letras minúsculas, sem espaço).
  • Formato estilo juiz online: a entrada é só os valores pedidos, sem mensagem de prompt (nada de cout << "Digite..." antes do cin). A saída é só o valor esperado, sem nenhum texto de rótulo junto.
  • Entrada: os valores são lidos na ordem exata indicada em cada exercício, um cin por valor.
  • Compile e rode cada programa, testando com os valores de exemplo.

Tarefa 1 - Tabuada com for

Arquivo: tarefa1.cpp

Leia um número inteiro N e mostre a tabuada dele, do 1 ao 10, no formato N x i = resultado, uma linha por multiplicador, usando um laço for.

Entrada: um inteiro, N.

Saída (dez linhas):

N x 1 = <resultado>
N x 2 = <resultado>
...
N x 10 = <resultado>

Exemplo: entrada

5

produz saída (as três primeiras linhas)

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15

Tarefa 2 - Soma dos pares

Arquivo: tarefa2.cpp

Leia um número inteiro N e mostre a soma de todos os números pares de 1 até N, usando um laço for.

Entrada: um inteiro, N.

Saída (um único valor):

<soma>

Exemplo: entrada

10

produz saída

30

Tarefa 3 - Triângulo de asteriscos

Arquivo: tarefa3.cpp

Leia um número inteiro N e mostre um triângulo de asteriscos com N linhas, usando laços aninhados: a linha i deve ter i asteriscos.

Entrada: um inteiro, N.

Saída (N linhas):

*
**
...

Exemplo: entrada

4

produz saída

*
**
***
****

Tarefa 4 - Corrigindo o programa com erros

Arquivo: tarefa4.cpp

O programa abaixo deveria mostrar os números de 1 a 5, um por linha, mas tem 3 erros e não compila. Corrija todos e entregue a versão funcionando.

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++);
        cout << i << endl
    return 0;
}

Entrada: nenhuma.

Saída (cinco linhas):

1
2
3
4
5

Tarefa 5 - Maior e menor

Arquivo: tarefa5.cpp

Leia primeiro a quantidade de números, N, e depois leia os N números, um de cada vez. Mostre o maior valor lido, seguido do menor, sem guardar os números em nenhum lugar além das variáveis que controlam o maior e o menor.

Entrada: um inteiro N, seguido de N inteiros.

Saída (duas linhas, maior primeiro):

<maior>
<menor>

Exemplo: entrada

4
5
2
9
1

produz saída

9
1

Desafio (opcional) - Pirâmide numérica

Arquivo: desafio.cpp

Leia um número inteiro N e mostre um triângulo onde a linha i (de 1 a N) contém os números de 1 até i, separados por espaço, usando laços aninhados.

Entrada: um inteiro, N.

Saída (N linhas):

1
1 2
1 2 3
...

Exemplo: entrada

3

produz saída

1
1 2
1 2 3

Gabarito

Resolução de referência para consulta e correção.

Questionário

Resposta correta de cada questão, para conferência.

QuestãoResposta
1a
2b
3c
4d
5a
6b
7c
8d
9a
10b

1. i começa em 1 e o laço roda enquanto i <= 3, incrementando a cada volta: mostra 1, 2 e 3.

2. A tradução correta preserva a ordem original do for: primeiro mostra i, depois incrementa, exatamente como no for (inicialização, teste, corpo, atualização, teste de novo).

3. O for tem um ponto e vírgula sobrando logo após o parêntese, então roda com corpo vazio até i valer 6 (quando i <= 5 fica falsa). A linha seguinte, fora do laço, executa uma única vez: soma recebe 0 + 6, ou seja, 6.

4. O laço externo, de a, começa em a = 1: para cada valor de a, o laço interno, de b, roda inteiro, de 1 a 3, antes do laço externo avançar. Resultado: 11 12 13 21 22 23.

5. O laço interno roda i vezes a cada repetição do laço externo: 1 asterisco quando i = 1, 2 quando i = 2, 3 quando i = 3, somando 1 + 2 + 3 = 6.

6. Um break dentro de laços aninhados se aplica sempre ao laço mais interno que o contém: aqui, interrompe só o laço de y, sem afetar o laço de x.

7. O continue pula só a repetição em que i vale 2, sem mostrar nada nessa volta, mas o laço segue normalmente: 1, depois pula o 2, depois 3 e 4.

8. O bloco precisa perguntar a senha pelo menos uma vez antes de checar se está certa: é exatamente o cenário que o do-while resolve, testando a condição só depois de executar o bloco.

9. O número de compras não é conhecido de antemão, e pode ser zero: é o cenário do while, que testa a condição antes de cada repetição, sem exigir nenhuma execução mínima.

10. Quando quem realmente decide o fim do laço é um break lá dentro, e o limite do for é só um número grande escolhido no chute, isso é sinal de que o total de repetições não era conhecido: o problema pedia um while desde o início.

Tarefa

Soluções de referência, com o mesmo raciocínio esperado do aluno.

Tarefa 1: for de 1 a 10, multiplicando N pelo contador a cada repetição e mostrando no formato pedido.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    for (int i = 1; i <= 10; i++) {
        cout << n << " x " << i << " = " << n * i << endl;
    }
    return 0;
}

Tarefa 2: for de 1 a N, testando if (i % 2 == 0) a cada repetição para somar só os pares.

#include <iostream>
using namespace std;

int main() {
    int n, soma = 0;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        if (i % 2 == 0) {
            soma = soma + i;
        }
    }

    cout << soma << endl;
    return 0;
}

Tarefa 3: laço externo de 1 a N controla a linha; laço interno, de 1 até o valor da linha atual, imprime os asteriscos daquela linha, seguido de um endl.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}

Tarefa 4: os três erros são: o ponto e vírgula sobrando logo após o for, que deixa o corpo do laço vazio; a falta do ponto e vírgula ao final da linha do cout; e o uso de i fora do escopo do for, já que ela foi declarada dentro dele. Corrigido:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++)
        cout << i << endl;
    return 0;
}

Tarefa 5: inicializar maior e menor com o primeiro valor lido, depois, a cada novo valor, comparar e atualizar maior (se o novo valor for maior) ou menor (se for menor), dentro do mesmo laço que lê os N valores.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    int numero, maior, menor;
    cin >> numero;
    maior = numero;
    menor = numero;

    for (int i = 1; i < n; i++) {
        cin >> numero;
        if (numero > maior) {
            maior = numero;
        }
        if (numero < menor) {
            menor = numero;
        }
    }

    cout << maior << endl;
    cout << menor << endl;
    return 0;
}

Desafio: laço externo de 1 a N controla a linha; laço interno, de 1 até o valor da linha atual, imprime os números separados por espaço, seguido de um endl. É a mesma estrutura da Tarefa 3, trocando o asterisco fixo pelo próprio contador do laço interno.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            cout << j;
            if (j < i) {
                cout << " ";
            }
        }
        cout << endl;
    }
    return 0;
}

Lista de Exercícios da Semana 5 - Base: Savitch, C++ Absoluto, seção 2.3. Traga suas dúvidas para o encontro síncrono.