(2) Faça um programa que crie um registro Carro com os campos: marca, ano, distância percorrida na última viagem (em quilômetros) e consumo de combustível na última viagem (em litros). Seu programa deverá alocar uma variável do tipo Carro e ler as informações de um carro em particular. Em seguida, deve informar no dispositivo de saída padrão quantos quilômetros por litro o carro em questão realizou em sua última viagem. Assuma que o carro sempre terá consumido alguma quantidade de combustível.
Exemplo de entrada:
Digite a marca: FIAT
Digite o ano: 2008
Digite a distância: 62.5
Digite o consumo: 5.3
Exemplo de saída:
Quilômetros por litro: 11.7925
Digite o ano: 2008
Digite a distância: 62.5
Digite o consumo: 5.3
Passo 1
Então, o que pede a questão? A gente precisa criar um “registro” (em C isso é um
struct
) chamado Carro, que vai ter:- marca (texto)
- ano (inteiro)
- distância percorrida na última viagem (double)
- consumo de combustível na última viagem (double)
Depois, o programa deve:
- Alocar uma variável desse tipo Carro (usando
malloc
ou direto na pilha). - Ler cada um desses campos do teclado.
- Calcular quantos quilômetros o carro fez por litro na última viagem.
- Mostrar esse resultado na tela.
Conteúdo envolvido: struct em C, alocação dinâmica (malloc), leitura com
scanf
, divisão de números de ponto flutuante e saída formatada com printf
.Passo 2
Vamos criar o struct e alocar a variável. Em C a gente faz assim:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char marca[50];
int ano;
double distancia;
double consumo;
} Carro;
int main() {
// alocando dinamicamente um Carro
Carro *meuCarro = (Carro*) malloc(sizeof(Carro));
if (meuCarro == NULL) {
printf("Falha na alocação de memória\n");
return 1;
}
// a partir daqui a gente vai ler os dados em meuCarro->...
Explicando rapidinho:
struct
agrupa vários campos sob um único nome.malloc(sizeof(Carro))
reserva memória para um Carro.meuCarro->campo
é a sintaxe pra acessar cada campo via ponteiro.
Passo 3
Agora, vamos ler as informações que o usuário vai digitar:
printf("Digite a marca: ");
scanf("%49s", meuCarro->marca);
printf("Digite o ano: ");
scanf("%d", &meuCarro->ano);
printf("Digite a distância: ");
scanf("%lf", &meuCarro->distancia);
printf("Digite o consumo: ");
scanf("%lf", &meuCarro->consumo);
Teoria envolvida:
scanf
lê da entrada padrão e armazena na variável apontada.%s
pra string,%d
pra inteiro,%lf
pradouble
.- Colocamos
&
antes das variáveis escalares (int, double) para passar o endereço.
Passo 4
A mágica está na divisão da distância pelo consumo:
A fórmula é
Em código:
double rendimento = meuCarro->distancia / meuCarro->consumo;
Aqui tá rolando divisão de dois
double
, então o resultado também será double
.Passo 5
Por fim, exibimos o resultado formatado com 4 casas decimais (pra bater com o exemplo):
printf("Quilômetros por litro: %.4f\n", rendimento);
free(meuCarro);
return 0;
}
%.4f
diz “mostra um número de ponto flutuante com 4 casas decimais”.free
devolve a memória que alocamos.
Resposta
Quilômetros por litro: 11.7925