Revisão da ETAPA 4 — for/while, vetores e strings

Revise as aulas 16 a 23 com uma folha de consulta, seis questões de leitura de código e uma lista de erros frequentes.

① Folha de consulta

Revise os conceitos essenciais da ETAPA 4nas tabelas a seguir.

🔁 As três partes de for

for (int i = 0; i < 3; i++) {
    printf("%d ", i);
}
// Saída: 0 1 2
  • Inicialização / condição / atualização separadas por ponto e vírgula
  • Uma condição falsa encerra o laço
  • Indicado quando o número de repetições é conhecido

🔄 while / do-while

// Testa a condição → executa
while (cond) {
    // Zero ou mais vezes
}

// Executa → testa a condição
do {
    // Executa pelo menos uma vez
} while (cond);
  • while: se a condição é falsa desde o início , o corpo nunca é executado
  • do-while: executa pelo menos uma vez (exige ; ao final)
  • Indicado quando o número de repetições é desconhecido

🛑 break / continue

for (int i = 0; i < 5; i++) {
    if (i == 3) break;     // Sai → 0 1 2
    if (i == 2) continue;  // Pula apenas esta iteração
    printf("%d ", i);
}
  • break: faz o laço encerrar completamente
  • continue: pula o restante e avança à próxima iteração .

📦 Fundamentos de vetores

int a[5] = {10, 20, 30, 40, 50};
// Índices de 0 a N-1 (aqui, de 0 a 4)
printf("%d\n", a[0]); // 10
printf("%d\n", a[4]); // 50
// a[5] está fora dos limites! Comportamento indefinido
  • Os índices vão de 0 a N-1(com N elementos, o último é a[N-1])
  • Acesso fora dos limites causa Comportamento indefinido(falha ou valor inesperado)
  • Combine com for: for(i=0; i<N; i++) ... a[i] ...

🔤 Strings (vetores de char)

char s[] = "Hi";
// Memória: 'H' 'i' '\0' ← terminador \0 incluído automaticamente

printf("%s\n", s);          // Hi
printf("%zu\n", strlen(s)); // 2 (não conta \0)
printf("%zu\n", sizeof s); // 3 (inclui o espaço de \0)
  • Strings em C são arrays de char terminados por \0. O literal de string inclui esse terminador automaticamente.
  • strlen conta os caracteres antes de \0;sizeof mede o tamanho do objeto em bytes
  • #include <string.h> declara strlen e outras funções

② Seis questões de leitura de código

Execute mentalmente antes de clicar em uma alternativa. Se errar, leia a explicação.

Q1. Limites de for (< e <=)

for (int i = 1; i <= 5; i++) {
    printf("%d ", i);
}

Qual é a saída?

1 2 3 4
1 2 3 4 5
0 1 2 3 4
2 3 4 5
Explicação: Com i <= 5, o corpo é executado para i=1, 2, 3, 4 e 5: cinco vezes. Se a condição fosse i < 5, seriam apenas quatro execuções, exibindo 1 2 3 4. Confundir < e <= é uma causa comum de erros de limite.

Q2. A primeira execução de do-while

int i = 10;
do {
    printf("%d ", i);
    i++;
} while (i < 3);

Qual é a saída?

Nada
10
10 11 12
Laço infinito
Explicação: O laço do-while executa o corpo antes de testar a condição. Primeiro exibe 10 e incrementa i para 11; depois, 11 < 3 é falso e o laço termina. A saída é 10. Com while, a condição inicial seria falsa e o corpo não executaria nenhuma vez. do-while sempre executa ao menos uma vez.

Q3. Soma de um vetor

int a[] = {2, 4, 6, 8};
int sum = 0;
for (int i = 0; i < 4; i++) sum += a[i];
printf("%d\n", sum);

Qual é a saída?

8
14
20
24
Explicação: sum começa em zero e recebe, nessa ordem, a[0]=2, a[1]=4, a[2]=6 e a[3]=8. Os valores acumulados são 0 → 2 → 6 → 12 → 20; a saída é 20. Um percurso comum com for visita os índices de 0 a N-1.

Q4. Sair com break

for (int i = 0; i < 5; i++) {
    if (i == 3) break;
    printf("%d ", i);
}

Qual é a saída?

0 1 2 3 4
0 1 2
0 1 2 4
0 1 2 3
Explicação: Assim que i=3, break encerra o laço inteiro, antes do printf dessa iteração. Portanto, a saída é 0 1 2. Se fosse continue, apenas a iteração de i=3 seria pulada, produzindo 0 1 2 4.

Q5. Acesso fora dos limites

int a[3] = {10, 20, 30};
for (int i = 0; i <= 3; i++) {
    printf("%d ", a[i]);
}

O que acontece neste código?

Exibe normalmente 10 20 30 na saída
Erro de compilação (verificação de limites)
Acessa a[3], causandoComportamento indefinido(valor inesperado ou falha)
a[3] é considerado zero automaticamente
Explicação: Um array com três elementos possui os índices 0, 1 e 2. A condição i <= 3 também acessa a[3], fora dos limites: um erro off-by-one. C não verifica esses limites automaticamente; o acesso causa comportamento indefinido, podendo parecer funcionar, falhar ou corromper memória. Use i < N.

Q6. Comprimento de uma string

#include <stdio.h>
#include <string.h>

int main(void) {
    char s[10] = "Hello";
    printf("%zu\n", strlen(s));
    return 0;
}

Qual é a saída?

10 (capacidade do vetor)
5
6 (incluindo \0)
"Hello"
Explicação: strlen conta os caracteres antes de \0, sem incluir o terminador. "Hello" contém H, e, l, l e o: cinco caracteres. Já sizeof s, para o array deste exercício, vale 10, sua capacidade em bytes. strlen e sizeof medem coisas diferentes.

③ Lista de erros e dificuldades frequentes

Se reconhecer um erro que já cometeu, volte à página correspondente para revisar.
  1. 1
    Confundir < e <= e executar uma vez a mais ou a menos
    Começando em zero, i<5 executa cinco vezes; i<=5, seis. Em arrays, a iteração extra pode ultrapassar os limites.
  2. 2
    Esquecer a atualização e criar um laço infinito
    Se while(i<5) não atualizar i, por exemplo com i++, a condição pode continuar verdadeira para sempre. Deve existir um caminho que encerre o laço.
  3. 3
    Contar os índices a partir de 1
    Os vetores em C começam em zero. Com N elementos, os índices são 0 – N-1.
  4. 4
    Acessar fora dos limites do vetor
    O código pode compilar sem verificação de limites, mas causaComportamento indefinido. Pode falhar, corromper outra variável ou parecer funcionar.
  5. 5
    Confundir break e continue
    break encerra o laço;continue avança à próxima iteração. Confundi-los muda a saída.
  6. 6
    Esquecer o ; ao final de do-while
    Ao contrário de while, a construção termina em } while (cond);, com ponto e vírgula.
  7. 7
    Confundir strlen e sizeof
    strlen("Hi") vale 2 (caracteres);sizeof "Hi" vale 3 (bytes, incluindo \0). São medidas diferentes.

④ Páginas para revisar — retome os pontos difíceis

Use os links para voltar diretamente à explicação correspondente.
Aula 16: forPara revisar as três partes e contar as iterações Aula 17: while / do-whilePara revisar quando a condição é testada Quiz (Laços)Pratique com questões semelhantes Técnicas de DepuraçãoPara investigar laços infinitos e erros de índice ArraysPara revisar limites e inicialização Aula 23: StringsPara revisar \0, strlen e sizeof Folha de consulta rápidaRevise formatos, vetores e strings