O Departamento de trânsito do estado anotou dados de acidentes de trânsito no último ano. Para cada motorista envolvido no acidente, tem-se as seguintes informações:
  • Ano de nascimento;
  • Sexo (M - Masculino, F - Feminino)
  • Procedência ( 0 - Capital, 1 - Interior, 2 - Outro estado);
Faça um programa em C que :
c) Calcule quantos motoristas do interior do estado tem idade maior que 60 anos;

Passo 1

O que o enunciado pede:
  • Calcular quantos motoristas do interior do estado têm idade maior que 60 anos.
Informações que o enunciado fornece por motorista (cada registro):
  • Ano de nascimento: ano\_nasc.
  • Sexo: sexo (caractere ‘M’ ou ‘F’).
  • Procedência: procedencia com códigos 0 = Capital, 1 = Interior, 2 = Outro estado.
O que precisamos produzir:
  • Um programa em C que leia os registros e imprima o total de motoristas cuja procedência é 1 (Interior) e cuja idade é estritamente maior que 60.

Passo 2

Escolha do método e formato de entrada:
  • Vamos escrever um programa simples em C que:
    1. Leia primeiro dois inteiros: o número de registros n e o ano de levantamento ano\_levant (o ano em que os dados foram coletados). Pedimos o ano para evitar assumir um ano fixo.
    2. Em seguida leia n registros, cada um contendo: ano\_nasc (inteiro), sexo (caractere) e procedencia (inteiro).
    3. Para cada registro calcularemos a idade como idade = ano\_levant - ano\_nasc. Se idade > 60 e procedencia == 1, incrementamos um contador.
    4. No final, imprimimos o contador.
Por que pedir ano\_levant?
  • O enunciado diz “último ano” mas não fala qual é o número do ano. Pedir o ano\_levant torna o programa reutilizável e evita suposições erradas.
Formato de entrada sugerido (linha a linha, exemplo):
  • Primeira linha: dois inteiros n e ano\_levant.
  • Em seguida n linhas, cada linha com: ano\_nasc sexo procedencia.
    Exemplo de entrada:
  • 5\\\ 2024\n
  • 1950\\ M\\\ 1\n
  • 1970\\ F\\\ 0\n
  • 1935\\ M\\\ 1\n
  • 1990\\ F\\\ 2\n
  • 1945\\ F\\\ 1

Passo 3

Variáveis em C e seus papéis (aula rápida):
  • int\\ n: número de registros a ler. Tipo inteiro porque conta registros.
  • int\\ ano\_levant: ano em que os dados foram coletados.
  • int\\ ano\_nasc: ano de nascimento do motorista (para cada registro).
  • char\\ sexo: ‘M’ ou ‘F’ — usamos char porque é um único caractere.
  • int\\ procedencia: código da procedência ( 0,1,2).
  • int\\ idade: calculada como ano\_levant - ano\_nasc.
  • int\\ contador: acumulador que guarda quantos motoristas do interior têm idade > 60.
Por que esses tipos?
  • Anos e contadores são números inteiros, então usamos int.
  • Sexo é um único caractere, então char é mais prático.

Passo 4

Lógica detalhada (pseudocódigo explicadinho):
  1. Ler n e ano\_levant.
  2. Inicializar contador = 0.
  3. Repetir i de 1 até n:
    a. Ler ano\_nasc, sexo, procedencia.
    b. Calcular idade = ano\_levant - ano\_nasc.
    c. Se idade > 60 e procedencia == 1 então contador = contador + 1.
  4. Imprimir contador.
Observações importantes:
  • Use a condição estrita idade > 60 (idade maior que 60), não \ge 60.
  • Ao ler sexo com scanf use um espaço antes do "%c" na string de formato: " %c" — isso faz o scanf pular espaços em branco e quebras de linha que podem ficar no buffer.
  • Validação simples: se idade < 0 (data de nascimento depois do ano\_levant), esse registro é inconsistente; podemos ignorá-lo (não contar) e continuar.

Passo 5

Como ler em C (detalhes práticos para a prova):
  • Para ler dois inteiros: scanf("%d %d", &n, &ano_levant);
  • Para ler ano\_nasc, sexo, procedencia em cada registro: scanf("%d %c %d", &ano_nasc, &sexo, &procedencia);
    mas colocar um espaço antes de %c para evitar ler uma nova linha residual: scanf("%d %c %d", &ano_nasc, &sexo, &procedencia) funciona se a entrada estiver formatada corretamente; a forma mais segura é scanf("%d %c %d", &ano_nasc, &sexo, &procedencia) com a entrada organizada linha a linha (ou usar " %c" mesmo).
  • Cuidado com falhas de leitura: em prova, assumir que a entrada está no formato correto normalmente é aceitável, mas entender o porquê do espaço em " %c" é massa: o espaço faz o scanf ignorar quaisquer caracteres de espaço até achar o próximo caractere não-espaço.

Passo 6

Exemplo prático (manual) para fixar:
  • Dados: ano\_levant = 2024.
  • Registro 1: ano\_nasc = 1950, procedencia = 1. Então idade = 2024 - 1950 = 74. Como 74 > 60 e procedência é 1, contamos.
  • Registro 2: ano\_nasc = 1970, procedencia = 0. idade = 54. Não conta.
  • Registro 3: ano\_nasc = 1935, procedencia = 1. idade = 89. Conta.
  • Resultado: contador = 2.

Passo 7

Dicas para a prova:
  • Escreva primeiro o esqueleto: declaração de variáveis, leitura de n e ano\_levant, loop for, condição e impressão.
  • Não esqueça do detalhe do espaço antes de "%c" para ler o sexo.
  • Teste mentalmente com um pequeno exemplo para garantir idade e procedencia estão sendo avaliados corretamente.
  • Se precisar, inclua uma verificação simples para ignorar registros com idade < 0 (erro de entrada).

Passo 8

Programa em C completo (pronto para compilar e usar). O programa lê n e ano\_levant e depois n registros; no final imprime o número de motoristas do interior com idade maior que 60.

Resposta

#include <stdio.h>
int main(void) {
int n, ano_levant;
if (scanf("%d %d", &n, &ano_levant) != 2) {
return 1;
}
int contador = 0;
for (int i = 0; i < n; i++) {
    int ano_nasc, procedencia;
    char sexo;
    if (scanf("%d %c %d", &ano_nasc, &sexo, &procedencia) != 3) {
        return 1;
    }
    int idade = ano_levant - ano_nasc;
    if (idade > 60 && procedencia == 1) {
        contador++;
    }
}

printf("%d\n", contador);
return 0;
}

Exercícios relacionados