Search buenodc

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

Lista de Exercícios - Semana 4

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: switch, break, while, do-while, contadores e acumuladores.

1. No trecho abaixo, qual é o valor de pedagio se classe valer 1?

switch (classe) {
    case 1:
        pedagio = 0.50;
    case 2:
        pedagio = 1.50;
        break;
}

a) 1.50 b) 0.50 c) 0 (não definido) d) Erro de compilação

2. Qual das opções abaixo não pode ser usada diretamente na condição de um switch?

a) int b) double c) char d) Nenhuma das anteriores: todas funcionam

3. Qual situação é mais bem resolvida com uma cadeia de else if, em vez de switch?

a) Testar se um número digitado é 1, 2 ou 3 b) Testar se um caractere digitado é 'S' ou 'N' c) Testar se uma nota está entre 0 e 10, ou entre 10 e 100 d) Testar se um dia da semana é 1, 2, 3, 4, 5, 6 ou 7

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

int x = 1;
while (x <= 3) {
    cout << x << endl;
    x++;
}

a) 1, 2, 3 e 4 b) Nada é mostrado c) O programa trava, sem nunca parar d) 1, 2 e 3

5. No trecho abaixo, quantas vezes o bloco do laço executa?

int x = 10;
while (x <= 5) {
    cout << x << endl;
    x++;
}

a) Zero vezes b) Uma vez c) Cinco vezes d) Infinitas vezes

6. O trecho abaixo tem um erro que causa um laço infinito. Qual é a causa?

int x = 1;
while (x <= 5) {
    cout << x << endl;
}

a) A condição deveria usar == em vez de <= b) Falta atualizar o valor de x dentro do bloco c) Falta um break dentro do laço d) O valor inicial de x deveria ser 0

7. O trecho abaixo também é um laço infinito, mesmo atualizando x a cada repetição. Por quê?

int x = 1;
while (x != 12) {
    x = x + 2;
}

a) Porque x nunca é usado dentro do laço b) Porque a condição deveria usar > em vez de != c) Porque x pula de 11 para 13, nunca sendo igual a 12 d) Porque o valor inicial de x precisa ser par

8. Qual a principal diferença entre while e do-while?

a) O while sempre executa pelo menos uma vez; o do-while pode executar zero vezes b) O do-while não aceita operadores relacionais na condição c) Não existe diferença nenhuma entre os dois d) O do-while sempre executa o bloco pelo menos uma vez; o while pode executar zero vezes

9. O que caracteriza uma variável usada como contador dentro de um laço?

a) Ela registra quantas vezes o laço já se repetiu b) Ela guarda o resultado de uma soma calculada ao longo das repetições c) Ela sempre precisa começar com o valor zero d) Ela só pode ser usada dentro de um do-while

10. Por que um acumulador usado para somar valores precisa começar com o valor 0?

a) Porque 0 é o único valor aceito pelo tipo int b) Porque somar 0 não altera o resultado da primeira soma feita com ele c) Porque, sem isso, o compilador não aceita a variável d) Porque 0 é sempre o valor final esperado

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, exceto quando o próprio texto pedido é o resultado (como o nome de um dia da semana).
  • 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 - Dia da semana

Arquivo: tarefa1.cpp

Leia um número de 1 a 7 e mostre o nome do dia da semana correspondente, usando switch (1 = Domingo, 2 = Segunda, 3 = Terca, 4 = Quarta, 5 = Quinta, 6 = Sexta, 7 = Sabado). Se o número não estiver entre 1 e 7, mostre Invalido.

Entrada: um inteiro, DIA.

Saída (um único valor):

<nome do dia, ou Invalido>

Exemplo: entrada

4

produz saída

Quarta

Tarefa 2 - Contagem regressiva

Arquivo: tarefa2.cpp

Leia um número inteiro N (maior ou igual a 1) e mostre a contagem regressiva de N até 1, um número por linha, usando um laço.

Entrada: um inteiro, N.

Saída (N linhas):

<N>
<N-1>
...
<1>

Exemplo: entrada

3

produz saída

3
2
1

Tarefa 3 - Soma até o sinal de parada

Arquivo: tarefa3.cpp

Leia números inteiros, um de cada vez, até ler o valor 0 (o 0 não entra na soma, e a quantidade de números antes dele varia). Ao final, mostre a soma total.

Entrada: uma sequência de inteiros terminada por 0.

Saída (um único valor):

<soma>

Exemplo: entrada

5
3
2
0

produz saída

10

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() {
    int x = 1
    While (x <= 5) {
        cout << x << endl;
        x++
    }
    return 0;
}

Entrada: nenhuma.

Saída (cinco linhas):

1
2
3
4
5

Tarefa 5 - Média de N notas

Arquivo: tarefa5.cpp

Leia primeiro a quantidade de notas, N, e depois leia as N notas, uma de cada vez. Mostre a média delas.

Entrada: um inteiro N, seguido de N números reais.

Saída (um único valor):

<media>

Exemplo: entrada

3
7
8
9

produz saída

8

Desafio (opcional) - Tabuada

Arquivo: desafio.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.

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

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. Sem break no case 1, a execução cai (fall-through) no case 2: pedagio recebe 0.50 e depois 1.50, ficando com 1.50.

2. double não é um tipo aceito na condição de um switch, que precisa ser inteiro (int, char, enum).

3. Faixas de valores contínuas (como uma nota entre 0 e 10) pedem else if; switch é para valores discretos e fixos.

4. x começa em 1 e o laço roda enquanto x <= 3, mostrando 1, 2 e 3.

5. x já vale 10 quando a condição x <= 5 é testada pela primeira vez: como o while testa antes de executar, o bloco roda zero vezes.

6. Sem x++ (ou qualquer atualização) dentro do bloco, x nunca muda, e a condição x <= 5 nunca vira falsa.

7. Partindo de 1 e somando 2 a cada passo, x assume só valores ímpares (1, 3, 5, 7, 9, 11, 13...), pulando por cima de 12, que é par.

8. O do-while testa a condição depois de executar o bloco, garantindo pelo menos uma execução; o while testa antes, podendo executar zero vezes.

9. Um contador registra o número de repetições; quem acumula um resultado ao longo delas é o acumulador (questão anterior).

10. 0 é o valor neutro da soma: somar 0 a qualquer número não altera o resultado, permitindo que o acumulador comece “vazio”.

Tarefa

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

Tarefa 1:

#include <iostream>
using namespace std;

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

    switch (dia) {
        case 1:
            cout << "Domingo" << endl;
            break;
        case 2:
            cout << "Segunda" << endl;
            break;
        case 3:
            cout << "Terca" << endl;
            break;
        case 4:
            cout << "Quarta" << endl;
            break;
        case 5:
            cout << "Quinta" << endl;
            break;
        case 6:
            cout << "Sexta" << endl;
            break;
        case 7:
            cout << "Sabado" << endl;
            break;
        default:
            cout << "Invalido" << endl;
    }
    return 0;
}

Tarefa 2:

#include <iostream>
using namespace std;

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

    while (n >= 1) {
        cout << n << endl;
        n--;
    }
    return 0;
}

Tarefa 3:

#include <iostream>
using namespace std;

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

    while (numero != 0) {
        soma = soma + numero;
        cin >> numero;
    }

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

Tarefa 4: os três erros são: falta ; depois de int x = 1; While está com W maiúsculo, deveria ser while; e falta ; depois de x++. Corrigido:

#include <iostream>
using namespace std;

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

Tarefa 5:

#include <iostream>
using namespace std;

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

    double soma = 0, nota;
    for (int i = 0; i < n; i++) {
        cin >> nota;
        soma = soma + nota;
    }

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

Desafio:

#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;
}

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