Revisão: Array de Structs
Parte da seção Logic & Flow do Journey de C da Coddy — lição 62 de 63.
Desafio
FácilCrie um programa em C que gerencie um sistema de inventário de produtos usando um array de structs. Seu programa deve:
- Definir uma
structchamadaProductcom os seguintes membros:- Um array de caracteres
namecom tamanho 30 - Um float
price - Um inteiro
stock
- Um array de caracteres
- Escrever uma função chamada
findMostExpensiveque:- Recebe um array de
struct Producte um inteirosizecomo parâmetros - Retorna um inteiro representando o índice do produto com o preço mais alto
- Usa um loop para iterar por todos os produtos e comparar seus preços
- Retorna o índice do primeiro produto encontrado com o preço máximo
- Recebe um array de
- Escrever uma função chamada
calculateTotalValueque:- Recebe um array de
struct Producte um inteirosizecomo parâmetros - Retorna um float representando o valor total do inventário
- Calcula o valor total somando (preço × estoque) para cada produto
- Recebe um array de
- Escrever uma função chamada
findLowStockque:- Recebe um array de
struct Product, um inteirosizee um inteirothresholdcomo parâmetros - Retorna um inteiro representando a contagem de produtos com estoque abaixo do limite (threshold)
- Usa um loop para contar os produtos onde o estoque é menor que o valor do limite
- Recebe um array de
- Na função principal (main):
- Criar um array de 3
struct Productchamadoinventory - Ler a entrada para cada produto nesta ordem: nome, preço, estoque
- Preencher o array com os dados de entrada
- Imprimir as informações de cada produto neste formato exato:
Product [index]: [name] - Price: [price], Stock: [stock] - Chamar a função
findMostExpensivee imprimir o resultado neste formato exato:Most expensive product: [name] - Chamar a função
calculateTotalValuee imprimir o resultado com exatamente 2 casas decimais neste formato exato:Total inventory value: [total_value] - Ler um inteiro representando o limite de estoque baixo (threshold)
- Chamar a função
findLowStockcom o limite e imprimir o resultado neste formato exato:Products with low stock: [count] - Verificar se o produto mais caro tem estoque maior que 10:
- Se sim: imprimir
Most expensive product is well stocked - Se não: imprimir
Most expensive product needs restocking
- Se sim: imprimir
- Criar um array de 3
Este desafio testa sua habilidade de trabalhar com arrays de structs, implementar funções que processam arrays de structs e realizar vários cálculos e comparações em dados estruturados. Você praticará a indexação de arrays com structs, o design de funções para processamento de dados e a combinação de múltiplas operações para analisar informações de inventário.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
// TODO: Defina a struct Product aqui
// TODO: Implemente a função findMostExpensive aqui
// TODO: Implemente a função calculateTotalValue aqui
// TODO: Implemente a função findLowStock aqui
int main() {
// Cria um array de 3 produtos
struct Product inventory[3];
// Lê a entrada para cada produto
for (int i = 0; i < 3; i++) {
scanf("%s", inventory[i].name);
scanf("%f", &inventory[i].price);
scanf("%d", &inventory[i].stock);
}
// TODO: Imprime as informações de cada produto
// TODO: Encontra e imprime o produto mais caro
// TODO: Calcula e imprime o valor total do inventário
// Lê o limite de estoque baixo
int threshold;
scanf("%d", &threshold);
// TODO: Encontra e imprime produtos com estoque baixo
// TODO: Verifica se o produto mais caro está com bom estoque
return 0;
}Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos8Structs e Ponteiros
Ponteiros para StructsO Operador Seta (->)Passagem de Structs por ValorPassagem de Ponteiros para StructsAlocação Dinâmica de StructsRecapitulação: Modificando Struct - Ptr11Desafios de Revisão Final
Revisão: Concatenação Dinâmica de StringsRevisão: Array de StructsRevisão: Contador de Frequência de Palavras3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato