Lista de Exercícios - Semana 6
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: declaração e acesso a arrays, percurso com
for, busca sequencial, e arrays parcialmente preenchidos.
1. Qual é o índice do último elemento de um array declarado como int valores[8];?
a) 8
b) 7
c) 9
d) 0
2. Qual é a saída do trecho abaixo?
int a[4] = {5, 12, 1};
cout << a[3];
a) 1
b) 0
c) 12
d) Erro de compilação
3. No trecho abaixo, qual é o problema?
int notas[5];
notas[5] = 10;
a) O array foi declarado com um tipo errado.
b) A linha 2 usa um índice que não existe nesse array, mas o compilador não acusa isso.
c) Falta inicializar o array antes de usá-lo.
d) O valor 10 não pode ser guardado num array de inteiros.
4. Qual é a saída do trecho abaixo?
int valores[3] = {4, 8, 15};
int soma = 0;
for (int i = 0; i < 3; i++) {
soma = soma + valores[i];
}
cout << soma;
a) 4
b) 15
c) 27
d) 3
5. Qual é a saída do trecho abaixo?
int valores[4] = {3, 9, 2, 9};
int contador = 0;
for (int i = 0; i < 4; i++) {
if (valores[i] == 9) {
contador++;
}
}
cout << contador;
a) 1
b) 2
c) 4
d) 9
6. No trecho abaixo, que encontra o maior valor de um array, por que o laço começa em i = 1, e não em i = 0?
int maior = valores[0];
for (int i = 1; i < 5; i++) {
if (valores[i] > maior) {
maior = valores[i];
}
}
a) Porque a posição 0 já foi usada como valor inicial de comparação.
b) Porque o índice 0 não existe em nenhum array.
c) Porque o for não aceita começar em 0 quando há um if dentro do bloco.
d) Porque, começando em 0, o programa não compila.
7. Na busca sequencial abaixo, o que a variável encontrado controla?
bool encontrado = false;
while (!encontrado && i < tamanho) {
if (valores[i] == alvo) {
encontrado = true;
} else {
i++;
}
}
a) Quantas vezes o laço já se repetiu. b) Se o valor procurado já foi achado, o que também interrompe o laço. c) O tamanho do array que está sendo percorrido. d) O valor que está sendo procurado.
8. Num array parcialmente preenchido, qual é o papel da variável separada (como quantidade), além do array em si?
a) Guardar o tipo dos valores armazenados no array. b) Substituir a necessidade de declarar o array com um tamanho máximo. c) Controlar quantas posições do array estão realmente sendo usadas. d) Impedir que o array seja alterado depois de preenchido.
9. No trecho abaixo, depois que o array valores foi parcialmente preenchido, por que o laço usa quantidade como limite, e não MAXIMO?
for (int i = 0; i < quantidade; i++) {
cout << valores[i] << endl;
}
a) Porque MAXIMO nunca pode ser usado dentro de um laço for.
b) Porque quantidade é sempre igual a MAXIMO, então tanto faz.
c) Porque usar MAXIMO mostraria posições que nunca receberam um valor válido.
d) Porque quantidade é o nome correto exigido pela sintaxe de C++.
10. Qual é a saída do trecho abaixo, considerando que o usuário digita 7, 3 e -1, nessa ordem?
const int MAXIMO = 5;
int valores[MAXIMO];
int quantidade = 0;
int numero;
cin >> numero;
while (numero != -1 && quantidade < MAXIMO) {
valores[quantidade] = numero;
quantidade++;
cin >> numero;
}
cout << quantidade;
a) 5
b) 3
c) 2
d) -1
Tarefa
- Cada exercício é um programa separado, em um arquivo
.cppcom 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 docin). 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
cinpor valor. - Sem funções: funções só entram na próxima semana. Resolva tudo dentro do
main. - Compile e rode cada programa, testando com os valores de exemplo.
Tarefa 1 - Soma de um array
Arquivo: tarefa1.cpp
Leia 5 números inteiros, guarde num array, e mostre a soma deles.
Entrada: 5 inteiros.
Saída (um único valor):
<soma>
Exemplo: entrada
2
4
6
8
10
produz saída
30
Tarefa 2 - Maior e menor de um array
Arquivo: tarefa2.cpp
Leia primeiro a quantidade de números, N (no máximo 20), e depois leia os N números, guardando-os num array. Mostre o maior valor lido, seguido do 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
Tarefa 3 - Busca num array
Arquivo: tarefa3.cpp
Leia a quantidade de números, N (no máximo 20), depois leia os N números guardando-os num array, e por fim leia um valor a ser procurado. Mostre a posição (índice, começando em 0) onde esse valor aparece pela primeira vez, ou -1 se ele não estiver no array.
Entrada: um inteiro N, seguido de N inteiros, seguido do valor procurado.
Saída (um único valor):
<posicao>
Exemplo: entrada
4
10
20
30
40
30
produz saída
2
Tarefa 4 - Corrigindo o programa com erros
Arquivo: tarefa4.cpp
O programa abaixo deveria ler 5 números inteiros, guardá-los num array, e mostrar a soma deles, mas tem 3 erros e não compila. Corrija todos e entregue a versão funcionando.
#include <iostream>
using namespace std;
int main() {
int valores[5]
int soma = 0;
for (int i = 0; i <= 5; i++) {
cin >> valores[i];
soma = soma + valores[i];
}
cout << Soma << endl;
return 0;
}
Entrada: 5 inteiros.
Saída (um único valor):
<soma>
Exemplo: entrada
1
2
3
4
5
produz saída
15
Tarefa 5 - Média com array parcialmente preenchido
Arquivo: tarefa5.cpp
Leia números inteiros, um de cada vez, até ler o valor -1 (não conte o -1). Guarde os números lidos num array com tamanho máximo 20, controlando quantas posições estão realmente em uso. Ao final, mostre a média dos números lidos.
Entrada: uma sequência de inteiros terminada por -1.
Saída (um único valor):
<media>
Exemplo: entrada
10
20
30
-1
produz saída
20
Desafio (opcional) - Maior valor e sua posição
Arquivo: desafio.cpp
Leia a quantidade de números, N (no máximo 20), depois leia os N números guardando-os num array. Mostre o maior valor, seguido da posição (índice, começando em 0) onde ele aparece pela primeira vez.
Entrada: um inteiro N, seguido de N inteiros.
Saída (duas linhas, maior valor primeiro):
<maior>
<posicao>
Exemplo: entrada
5
3
8
8
2
1
produz saída
8
1
Gabarito
Resolução de referência para consulta e correção.
Questionário
Resposta correta de cada questão, para conferência.
| Questão | Resposta |
|---|---|
| 1 | b |
| 2 | b |
| 3 | b |
| 4 | c |
| 5 | b |
| 6 | a |
| 7 | b |
| 8 | c |
| 9 | c |
| 10 | c |
1. Um array de tamanho 8 tem índices válidos de 0 a 7: o índice 7 é o último.
2. O array foi inicializado com só 3 valores (5, 12, 1), então a posição a[3], que sobrou de fora, é preenchida automaticamente com 0.
3. notas tem tamanho 5, então os índices válidos vão de 0 a 4. O índice 5 está fora do intervalo, mas o compilador não detecta esse erro: o programa compila e roda normalmente, alterando um valor de memória fora do array.
4. soma acumula valores[0] + valores[1] + valores[2], ou seja, 4 + 8 + 15 = 27.
5. O valor 9 aparece em valores[1] e valores[3]: contador é incrementado duas vezes.
6. A posição 0 já foi usada para inicializar maior, então o laço só precisa comparar as posições restantes, a partir de 1.
7. encontrado registra se o valor já foi achado. O while testa !encontrado, então, assim que encontrado vira true, essa parte da condição fica falsa e o laço para, mesmo que ainda existam posições não percorridas.
8. O array sozinho não sabe quantas das suas posições foram realmente preenchidas: quantidade guarda esse número, que costuma ser menor que o tamanho máximo declarado.
9. As posições entre quantidade e MAXIMO nunca receberam um valor válido: usar MAXIMO como limite mostraria lixo de memória, não dados de verdade.
10. O laço lê 7, guarda em valores[0], quantidade vira 1; lê 3, guarda em valores[1], quantidade vira 2; lê -1, a condição numero != -1 fica falsa e o laço para. quantidade termina valendo 2.
Tarefa
Soluções de referência, com o mesmo raciocínio esperado do aluno.
Tarefa 1:
#include <iostream>
using namespace std;
int main() {
int valores[5];
int soma = 0;
for (int i = 0; i < 5; i++) {
cin >> valores[i];
soma = soma + valores[i];
}
cout << soma << endl;
return 0;
}
Tarefa 2:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int valores[20];
for (int i = 0; i < n; i++) {
cin >> valores[i];
}
int maior = valores[0];
int menor = valores[0];
for (int i = 1; i < n; i++) {
if (valores[i] > maior) {
maior = valores[i];
}
if (valores[i] < menor) {
menor = valores[i];
}
}
cout << maior << endl;
cout << menor << endl;
return 0;
}
Tarefa 3:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int valores[20];
for (int i = 0; i < n; i++) {
cin >> valores[i];
}
int alvo;
cin >> alvo;
int posicao = -1;
for (int i = 0; i < n; i++) {
if (valores[i] == alvo && posicao == -1) {
posicao = i;
}
}
cout << posicao << endl;
return 0;
}
Tarefa 4: os três erros são: falta ; depois de int valores[5]; o laço usa i <= 5, mas os índices válidos vão só até 4 (deveria ser i < 5); e Soma, com S maiúsculo, não é a mesma variável que soma, declarada em minúsculo. Corrigido:
#include <iostream>
using namespace std;
int main() {
int valores[5];
int soma = 0;
for (int i = 0; i < 5; i++) {
cin >> valores[i];
soma = soma + valores[i];
}
cout << soma << endl;
return 0;
}
Tarefa 5:
#include <iostream>
using namespace std;
int main() {
const int MAXIMO = 20;
int valores[MAXIMO];
int quantidade = 0;
int numero;
cin >> numero;
while (numero != -1 && quantidade < MAXIMO) {
valores[quantidade] = numero;
quantidade++;
cin >> numero;
}
double soma = 0;
for (int i = 0; i < quantidade; i++) {
soma = soma + valores[i];
}
cout << soma / quantidade << endl;
return 0;
}
Desafio:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int valores[20];
for (int i = 0; i < n; i++) {
cin >> valores[i];
}
int maior = valores[0];
int posicao = 0;
for (int i = 1; i < n; i++) {
if (valores[i] > maior) {
maior = valores[i];
posicao = i;
}
}
cout << maior << endl;
cout << posicao << endl;
return 0;
}
Lista de Exercícios da Semana 6 - Base: Savitch, C++ Absoluto, seções 5.1 e 5.3. Traga suas dúvidas para o encontro síncrono.