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 :
b) Calcule quantas mulheres são da capital;

Passo 1

O enunciado pede: “Calcule quantas mulheres são da capital.”
Informações dadas para cada motorista (uma linha de dados por motorista, presumivelmente):
  • Ano de nascimento (um número inteiro).
  • Sexo, com valores possíveis \text{M} (Masculino) ou \text{F} (Feminino). Vou representar esse campo em texto como 'M' ou 'F'.
  • Procedência, com códigos \;0 = Capital, \;1 = Interior, \;2 = Outro estado.
O que precisa ser retornado: o número total de motoristas cujo sexo é 'F' e cuja procedência é \;0 (Capital).
Observação: o enunciado não especificou formato exacto de entrada (quantas linhas, se há um n inicial, se termina em EOF). Vou assumir a forma mais comum para exercícios: primeiro vem um inteiro \;n indicando a quantidade de motoristas, seguido de \;n registros, cada um com os três campos acima, em qualquer separação por espaços/linhas. Não vou pedir mais informação; essa suposição é razoável e simples para a prova.

Passo 2

Escolha do método (alto nível):
Ler um inteiro \;n (número de motoristas). Inicializar um contador em zero. Repetir \;n vezes: ler os três campos do registro; verificar se o campo sexo é 'F' (aceitando maiúscula/minúscula) e se o campo procedência é \;0. Se ambas condições forem verdadeiras, incrementar o contador. Ao final, imprimir o valor do contador.
Por que esse método: é direto, usa apenas um laço simples e condições — operações básicas de programação em C que funcionam bem em provas e são eficientes (tempo linear em \;n).

Passo 3

Estrutura dos dados de entrada e detalhes práticos:
  • Primeiro valor: inteiro \;n (quantidade de registros a seguir). Se \;n \le 0, o programa deve responder zero.
  • Para cada um dos \;n registros, vamos ler, nessa ordem: ano de nascimento (int), sexo (char) e procedência (int). Exemplo de linha de entrada válida:
    1990 F 0
  • Ao ler o sexo com scanf use o formato " %c" (com espaço antes de %c) para consumir possíveis espaços ou quebras de linha anteriores. Para aceitar tanto 'f' quanto 'F' convertendo para maiúscula, é útil a função toupper() da biblioteca <ctype.h>.
  • Validação mínima: assumimos que o usuário fornece \;n valores e que os códigos de procedência são \;0,\;1 ou \;2. Se quiser, dá para checar e ignorar valores inválidos, mas para a prova geralmente não precisa.

Passo 4

Conceitos C usados (explicação didática, passo a passo):
  • Variáveis:
    • int n — guarda a quantidade de registros a ler.
    • int ano — guarda o ano de nascimento lido (não usado no cálculo, mas parte do registro).
    • char sexo — guarda o caractere lido que indica o sexo.
    • int procedencia — guarda o código de procedência.
    • int contador — acumulador que conta quantas mulheres da capital já foram encontradas; iniciar com 0.
  • Leitura de entrada:
    • scanf("%d", &n); lê o inteiro \;n.
    • Dentro do laço, scanf("%d %c %d", &ano, &sexo, &procedencia); tenta ler os três campos. Porém, para evitar que um ‘\n’ anterior atrapalhe a leitura do %c, use scanf("%d %c %d", &ano, &sexo, &procedencia); mas garantindo antes que há um espaço no formato ou usar " %c" para o %c: scanf("%d %c %d", &ano, &sexo, &procedencia); com o espaço antes de %c (espaço consome whitespace).
  • Comparação de caracteres:
    • Depois de ler sexo, transforme para maiúscula: sexo = toupper((unsigned char) sexo); — assim sexo == 'F' detecta tanto 'f' quanto 'F'.
  • Estrutura de repetição:
    • for (int i = 0; i < n; ++i) { ... } é a forma básica de repetir \;n vezes.
  • Condicional:
    • if (sexo == 'F' && procedencia == 0) contador++; — condição composta com && (e lógico).
  • Saída:
    • printf("%d\n", contador); imprime o resultado (apenas o número), que é o que a questão requisita.
Exemplo simples manual para testar mentalmente:
  • Entrada:
    n=4 e registros:
    1985 F 0
    1992 m 0
    1978 F 1
    2000 f 0
  • O programa vai contar 2 (primeiro e quarto registros têm sexo feminino e procedência 0).

Passo 5

Cuidados e pequenas variações que podem ocorrer na prova:
  • Se a prova pedir para ler até EOF em vez de ler um n inicial, o mesmo algoritmo funciona trocando o for por um while (scanf("%d %c %d", &ano, &sexo, &procedencia) == 3) { ... }. Aqui eu optei por usar o padrão com \;n por ser o mais comum em exercícios didáticos.
  • Se quiser ignorar entradas com procedência inválida, adicionar if (procedencia < 0 || procedencia > 2) continue;. Mas normalmente não é necessário.
  • Sempre inicializar contador = 0; antes do laço — esquecer isso é erro clássico.

Passo 6

Resumo do algoritmo em pseudocódigo (bem mastigado, para escrever rápido na prova):
  • Ler \;n.
  • contador := 0
  • Para i de 1 até n:
    • Ler ano, sexo, procedencia.
    • Converter sexo para maiúscula.
    • Se sexo == 'F' e procedencia == 0 então contador := contador + 1.
  • Imprimir contador.

Resposta

#include <stdio.h>
#include <ctype.h>

int main(void) {
    int n;
    if (scanf("%d", &n) != 1) return 0; /* lê quantidade de registros */
    int contador = 0;
    for (int i = 0; i < n; ++i) {
        int ano;
        char sexo;
        int procedencia;
        /* Note o espaço antes de %c para consumir whitespace residual */
        if (scanf("%d %c %d", &ano, &sexo, &procedencia) != 3) {
            /* entrada incompleta; aborta ou quebra */
            break;
        }
        sexo = toupper((unsigned char) sexo);
        if (sexo == 'F' && procedencia == 0) {
            contador++;
        }
    }
    printf("%d\n", contador);
    return 0;
}

Exercícios relacionados