Quiz (Variáveis e printf)

Quiz interativo sobre variáveis em C e printf.

Questão 1 — Acompanhe as atribuições

Primeiro acompanhe o programa mentalmente, depois escolha uma resposta.
#include<stdio.h>

int main(void){
  int a, b;
  a = 10;
  b = 30;
  b = a;
  a = 5;
  printf("a is %d, b is %d \n", a, b);
  return 0;
}

O que isso imprime?

a is 10, b is 30
a is 5, b is 10
a is 5, b is 30
a is 10, b is 10
Explicação: Acompanhe as atribuições uma a uma.
(1) a = 10 → a: 10
(2) b = 30 → b: 30
(3) b = ab recebe o valor atual de a (10) → b: 10 (o 30 é sobrescrito)
(4) a = 5a é sobrescrito com 5 → a: 5
a is 5, b is 10

Questão 2 — E se você usar %f para um int?

Mesmo programa da Questão 1, mas o %d do printf foi trocado por %f.
int a, b;
a = 10; b = 30; b = a; a = 5;
printf("a is %f, b is %f \n", a, b); // mudou para %f!

O que isso imprime?

a is 5.000000, b is 10.000000
a is 0.000000, b is 0.000000 (ou valor lixo semelhante)
Erro de compilação
Explicação: Usar %f (para ponto flutuante) em um int produz o valor errado.
A saída exata depende da plataforma, mas normalmente você vê 0.000000 ou algum número sem sentido.
Use %d para int e %f para double.

Questão 3 — E se você usar %d para um double?

double a, b;
a = 3.1; b = 2.6; b = 2.12; a = 4.52;
printf("a is %f, b is %d \n", a, b); // só b usa %d!

O que isso imprime?

a is 4.520000, b is 2.120000
a is 4.520000, b is 2
a is 4.520000, b is (valor lixo)
Explicação: a é impresso corretamente como 4.520000 com %f, mas b é um double sendo impresso com %d (para int), então não será exibido corretamente.
Em algumas plataformas você verá algo como -488420520.
Sempre use %f para valores double.

Questão 4 — %.2f e arredondamento

Como %.2f lida com os dígitos finais?
#include<stdio.h>

int main(void){
  double a = 3.145;
  double b = 3.144;
  printf("a=%.2f, b=%.2f\n", a, b);
  return 0;
}

O que isso imprime?

a=3.14, b=3.14 (truncado)
a=3.14, b=3.15
a=3.15, b=3.14 (arredondado)
a=3.145, b=3.144 (como está)
Explicação: %.2f arredonda o valor (não trunca).
3.145 → terceira casa decimal é 5 → arredonda para cima → 3.15
3.144 → terceira casa decimal é 4 → arredonda para baixo → 3.14
Isso muda apenas como o valor é exibido; as variáveis a e b não são alteradas.

Questão 5 — Múltiplos valores em um printf

Um único printf pode exibir várias variáveis de uma vez.
#include<stdio.h>

int main(void){
  int age = 25;
  int score = 82;
  printf("age: %d score: %d\n", age, score);
  return 0;
}

O que isso imprime?

age: 25 score: 82
age: %d score: %d
age: 25 score: %d (segundo %d não substituído)
age: 82 score: 25 (ordem trocada)
Explicação: Cada %d na string de formato é preenchido na ordem dos argumentos depois da vírgula.
(1) Primeiro %d ← age (=25)
(2) Segundo %d ← score (=82)
Resposta: age: 25 score: 82

Ponto-chave: Você não precisa de um printf separado para cada variável — uma chamada só pode imprimir quantos valores você quiser. Só garanta que o número de especificadores de formato case com o número de argumentos.

Questão 6 — \n no meio do printf

Você pode colocar \n em qualquer lugar da string de formato para quebrar linhas.
#include<stdio.h>

int main(void){
  int x = 3, y = 7;
  printf("x = %d\ny = %d\n", x, y);
  return 0;
}

O que isso imprime?

x = 3 y = 7 (tudo numa linha)
Linha 1: x = 3 / Linha 2: y = 7 (duas linhas)
x = 3\ny = 7\n (\n impresso como texto)
Erro de compilação (só um \n permitido)
Explicação: \n pode aparecer em qualquer lugar da string de formato e significa "vá para a próxima linha" naquele ponto.
Percorrendo "x = %d\ny = %d\n":
(1) Imprime x = 3.
(2) \n → nova linha.
(3) Imprime y = 7.
(4) \n final → nova linha.
Saída:
x = 3
y = 7

Ponto-chave: Um único printf pode produzir saída em várias linhas embutindo \n no meio da string.

Aulas relacionadas

Introdução
Variáveis
O que são variáveis em C? Guia visual de int, double e char.
Introdução
printf e scanf
Como usar printf e scanf em C. Referência de especificadores de formato.
Introdução
Quiz (scanf)
Quiz interativo sobre scanf em C.
← Aula anterior
Aula 4: printf e scanf
Próxima aula →
Aula 7: Quiz (scanf)