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;
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
anos.
Informações que o enunciado fornece por motorista (cada registro):
- Ano de nascimento:
. - Sexo:
(caractere ‘M’ ou ‘F’). - Procedência:
com códigos = Capital, = Interior, = Outro estado.
O que precisamos produzir:
- Um programa em C que leia os registros e imprima o total de motoristas cuja procedência é
(Interior) e cuja idade é estritamente maior que .
Passo 2
Escolha do método e formato de entrada:
- Vamos escrever um programa simples em C que:
- Leia primeiro dois inteiros: o número de registros
e o ano de levantamento (o ano em que os dados foram coletados). Pedimos o ano para evitar assumir um ano fixo. - Em seguida leia
registros, cada um contendo: (inteiro), (caractere) e (inteiro). - Para cada registro calcularemos a idade como
. Se e , incrementamos um contador. - No final, imprimimos o contador.
- Leia primeiro dois inteiros: o número de registros
Por que pedir
?
- O enunciado diz “último ano” mas não fala qual é o número do ano. Pedir o
torna o programa reutilizável e evita suposições erradas.
Formato de entrada sugerido (linha a linha, exemplo):
- Primeira linha: dois inteiros
e . - Em seguida
linhas, cada linha com: .
Exemplo de entrada: -
\n -
\n -
\n -
\n -
\n -
Passo 3
Variáveis em C e seus papéis (aula rápida):
-
: número de registros a ler. Tipo inteiro porque conta registros. -
: ano em que os dados foram coletados. -
: ano de nascimento do motorista (para cada registro). -
: ‘M’ ou ‘F’ — usamos porque é um único caractere. -
: código da procedência ( ). -
: calculada como . -
: acumulador que guarda quantos motoristas do interior têm .
Por que esses tipos?
- Anos e contadores são números inteiros, então usamos
. - Sexo é um único caractere, então
é mais prático.
Passo 4
Lógica detalhada (pseudocódigo explicadinho):
- Ler
e . - Inicializar
. - Repetir
de até :
a. Ler, , .
b. Calcular.
c. See então . - Imprimir
.
Observações importantes:
- Use a condição estrita
(idade maior que ), não . - Ao ler
com scanf use um espaço antes do 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
(data de nascimento depois do ), 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
, , 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:
. - Registro 1:
, . Então . Como e procedência é , contamos. - Registro 2:
, . . Não conta. - Registro 3:
, . . Conta. - Resultado:
.
Passo 7
Dicas para a prova:
- Escreva primeiro o esqueleto: declaração de variáveis, leitura de
e , loop for, condição e impressão. - Não esqueça do detalhe do espaço antes de
para ler o . - Teste mentalmente com um pequeno exemplo para garantir
e estão sendo avaliados corretamente. - Se precisar, inclua uma verificação simples para ignorar registros com
(erro de entrada).
Passo 8
Programa em C completo (pronto para compilar e usar). O programa lê
e
e depois
registros; no final imprime o número de motoristas do interior com idade maior que
.
Resposta
#include <stdio.h>
int main(void) {
int n, ano_levant;
if (scanf("%d %d", &n, &ano_levant) != 2) {
return 1;
}
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;
}