Menu
Coddy logo textTech

復習:構造体の配列

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 62/63。

challenge icon

チャレンジ

簡単

構造体の配列を使用して製品在庫システムを管理するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:

  1. 以下のメンバを持つ Product という名前の struct を定義します:
    • サイズ30の文字配列 name
    • float型の price
    • int型の stock
  2. 以下の findMostExpensive という名前の関数を作成します:
    • struct Product の配列と、整数 size をパラメータとして受け取ります
    • 最も価格が高い製品のインデックスを表す整数を返します
    • ループを使用してすべての製品を反復処理し、それらの価格を比較します
    • 最大価格を持つ最初に見つかった製品のインデックスを返します
  3. 以下の calculateTotalValue という名前の関数を作成します:
    • struct Product の配列と、整数 size をパラメータとして受け取ります
    • 在庫の総額を表すfloat型の値を返します
    • 各製品の(価格 × 在庫数)を合計して総額を計算します
  4. 以下の findLowStock という名前の関数を作成します:
    • struct Product の配列、整数 size、および整数 threshold をパラメータとして受け取ります
    • 在庫がしきい値(threshold)を下回っている製品の数を表す整数を返します
    • ループを使用して、在庫がしきい値未満である製品をカウントします
  5. main関数内で以下を実行します:
    • inventory という名前の3つの struct Product の配列を作成します
    • 各製品について、name、price、stockの順に入力を読み取ります
    • 入力データで配列を埋めます
    • 各製品の情報を次の形式で正確に表示します:Product [index]: [name] - Price: [price], Stock: [stock]
    • findMostExpensive 関数を呼び出し、結果を次の形式で正確に表示します:Most expensive product: [name]
    • calculateTotalValue 関数を呼び出し、結果を小数点以下2桁で次の形式で正確に表示します:Total inventory value: [total_value]
    • 低在庫のしきい値を表す整数を読み取ります
    • しきい値を指定して findLowStock 関数を呼び出し、結果を次の形式で正確に表示します:Products with low stock: [count]
    • 最も高価な製品の在庫が10より大きいかどうかを確認します:
      • はいの場合:Most expensive product is well stocked と表示します
      • いいえの場合:Most expensive product needs restocking と表示します

このチャレンジでは、構造体の配列を扱う能力、構造体配列を処理する関数の実装、および構造化されたデータに対するさまざまな計算や比較の実行能力がテストされます。構造体を用いた配列のインデックス操作、データ処理のための関数設計、および在庫情報を分析するための複数の操作の組み合わせを練習します。

自分で試してみよう

#include <stdio.h>
#include <string.h>

// TODO: ここでProduct構造体を定義します

// TODO: ここでfindMostExpensive関数を実装します

// TODO: ここでcalculateTotalValue関数を実装します

// TODO: ここでfindLowStock関数を実装します

int main() {
    // 3つの製品の配列を作成します
    struct Product inventory[3];
    
    // 各製品の入力を読み取ります
    for (int i = 0; i < 3; i++) {
        scanf("%s", inventory[i].name);
        scanf("%f", &inventory[i].price);
        scanf("%d", &inventory[i].stock);
    }
    
    // TODO: 各製品の情報を表示します
    
    // TODO: 最も高価な製品を見つけて表示します
    
    // TODO: 在庫の総額を計算して表示します
    
    // 在庫不足のしきい値を読み取ります
    int threshold;
    scanf("%d", &threshold);
    
    // TODO: 在庫が少ない製品を見つけて表示します
    
    // TODO: 最も高価な製品の在庫が十分か確認します
    
    return 0;
}

Logic & Flowのすべてのレッスン