Revisão da ETAPA 1 — Variáveis, printf e scanf

Revise as aulas 1 a 7 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 1nas tabelas a seguir.

🦴 Estrutura do programa

#include <stdio.h>

int main(void) {
    printf("Hello\n");
    return 0;
}
  • #include <stdio.h> — declara as funções printf e scanf
  • int main(void) — a execução começa aqui
  • return 0; — indica término normal

📦 Tipos de dados e especificadores

TipoExemploprintfscanf
int42%d%d
double3.14%f%lf
  • Para double, printf usa %fe scanf usa %lf(atenção!)
  • Use %d para inteiros e %f para números reais; não os misture.
  • Para definir a largura e precisão: %.2f(duas casas decimais)%5d(cinco posições, alinhado à direita).

🖨️ Como usar printf

printf("x=%d, y=%d\n", x, y);
printf("%.2f", 3.146); // → 3.14 (arredondado)
printf("%5d", 42);   // →    42 (largura 5, à direita)
printf("%05d", 42);  // → 00042 (preenchido com zeros)
  • No primeiro argumento de printf, cada %d ou %f dentro de "..." corresponde a um argumento seguinte. Separe os argumentos por vírgulas.
  • \n produz uma quebra de linha; sem ele, a saída continua na mesma linha.

⌨️ Regras de scanf

int n;
scanf("%d", &n);   // & obrigatório!

double x;
scanf("%lf", &x); // double usa %lf
  • Passe o endereço (&) da variável; esquecer & pode causar uma falha de memória.
  • Para double, scanf usa %lf(diferente de printf, que usa %f ).

🔁 Atribuições substituem valores de cima para baixo

int a = 10;  // a:10
int b = 30;  // b:30
b = a;        // b:10 (substitui 30)
a = 5;        // a:5 (substitui 10)
// Resultado: a=5, b=10
  • = copia o valor da direita para a variável da esquerda; não testa igualdade.
  • Uma atribuição posterior faz o valor anterior ser substituído

② Seis questões de leitura de código

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

Q1. Ordem das atribuições

int a = 10, b = 30;
b = a;
a = 5;
printf("%d %d\n", a, b);

Qual é a saída?

10 30
5 10
5 30
10 10
Explicação: Acompanhe de cima para baixo: primeiro, a=10 e b=30. Em seguida, b=a copia 10 para b, substituindo 30. Por fim, a=5 substitui apenas a. Portanto, a saída é 5 10.

Q2. O que acontece ao exibir um inteiro com %f?

int x = 7;
printf("%f\n", x);

Qual é a saída?

7
7.000000
Resultado indefinido (pode aparecer 0.000000 ou um valor sem sentido)
Erro de compilação
Explicação: Usar %f, que espera um argumento double, para exibir um int causa comportamento indefinido: o resultado não é confiável. Muitos compiladores emitem um aviso, mas ainda geram o executável. Use %d para int e %f para double e leia os avisos do compilador.

Q3. Arredondamento com %.2f

double a = 3.146, b = 3.144;
printf("%.2f %.2f\n", a, b);

Qual é a saída?

3.14 3.14 (truncamento)
3.14 3.14 (arredondamento, mas a também diminui)
3.15 3.14 (arredondamento)
3.146 3.144 (sem alteração)
Explicação: %.2f exibe duas casas decimais, arredondando o valor. Para 3.146, o terceiro decimal é 6, e a saída é 3.15. Para 3.144, o terceiro decimal é 4, e a saída é 3.14. Em geral, valores double não representam todos os decimais exatamente; casos na fronteira podem depender da representação e do modo de arredondamento.

Q4. O que acontece sem \n?

printf("x=%d", 3);
printf("y=%d\n", 7);

Qual é a saída?

x=3y=7
x=3
y=7
x=3 y=7(espaço automático)
Erro de compilação
Explicação: printf não acrescenta espaços nem quebras de linha automaticamente. A saída x=3 é seguida imediatamente por y=7, formando x=3y=7. Para mudar de linha, inclua \n no ponto desejado.

Q5. O que acontece ao esquecer & em scanf?

int n;
scanf("%d", n); // ← & foi esquecido
printf("%d\n", n);

O que acontece com este programa?

Funciona normalmente (o compilador acrescenta &)
A compilação sempre para com erro
Pode compilar, mas durante a execução pode ocorrer uma falha de memória(Segmentation fault)
A entrada vira 0 no lugar de n
Explicação: scanf recebe o endereço da variável, indicado por &, e grava nesse local. Sem &, o conteúdo da variável não inicializada é passado como se fosse um endereço; isso causa comportamento indefinido e pode provocar uma falha de memória. Um aviso do compilador pode não impedir a compilação: leia os avisos.

Q6. Como ler double com scanf?

double x;
scanf("???", &x);
printf("%f\n", x);

Qual especificador substitui "???"?

%f (igual a printf)
%lf
%d
%lld
Explicação: Para ler double com scanf, use %lf (letra l seguida de f). printf aceita tanto %f quanto %lf para double, mas scanf distingue esses formatos: %f espera float*, e %lf espera double*. Essa diferença é uma fonte comum de erros.

③ Lista de erros e dificuldades frequentes

Se reconhecer um erro que já cometeu, volte à página correspondente para revisar.
  1. 1
    Usar %f para int ou %d para double
    Mesmo que compile, a saída pode ficar incorreta. O erro pode passar despercebido. Aprenda o tipo e o especificador em conjunto .
  2. 2
    Esquecer & em scanf
    Isso pode provocar uma falha de memória. O correto é scanf("%d", &n), e não scanf("%d", n). Ao ler uma string em um array de char, o nome do array já fornece o endereço.
  3. 3
    Ler double com %f em scanf
    printf usa %f, mas scanf usa %lf. Os formatos de printf e scanf são diferentes nesse caso.
  4. 4
    Esquecer \n e continuar a saída na mesma linha
    printf não acrescenta quebras de linha automaticamente. Para mudar de linha, use \n .
  5. 5
    Esquecer o ponto e vírgula
    Se faltar ;, examine também uma ou duas linhas antes do local indicado pelo compilador.
  6. 6
    Errar a quantidade ou a ordem dos argumentos de printf
    "x=%d, y=%d" exige os argumentos seguintes na ordem x, y . Inverter a ordem também inverte os valores exibidos.
  7. 7
    Confundir atribuição = com comparação ==
    a = 5 atribui 5 a a; a == 5 testa se a é igual a 5.

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

Use os links para voltar diretamente à explicação correspondente.
Aula 1: O que é Programação?Para entender o que o programa faz Aula 2: Hello WorldPara revisar a estrutura (include, main, return) Aula 3: VariáveisPara revisar tipos e substituição por atribuição Aula 4: printfPara revisar %d, %f, %.2f e \n Aula 5: scanfPara revisar & e %lf Folha de consulta rápidaRevise os tipos e especificadores em uma página