復習:構造体の配列
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 62/63。
チャレンジ
簡単構造体の配列を使用して製品在庫システムを管理するC言語プログラムを作成してください。プログラムは以下の要件を満たす必要があります:
- 以下のメンバを持つ
Productという名前のstructを定義します:- サイズ30の文字配列
name - float型の
price - int型の
stock
- サイズ30の文字配列
- 以下の
findMostExpensiveという名前の関数を作成します:struct Productの配列と、整数sizeをパラメータとして受け取ります- 最も価格が高い製品のインデックスを表す整数を返します
- ループを使用してすべての製品を反復処理し、それらの価格を比較します
- 最大価格を持つ最初に見つかった製品のインデックスを返します
- 以下の
calculateTotalValueという名前の関数を作成します:struct Productの配列と、整数sizeをパラメータとして受け取ります- 在庫の総額を表すfloat型の値を返します
- 各製品の(価格 × 在庫数)を合計して総額を計算します
- 以下の
findLowStockという名前の関数を作成します:struct Productの配列、整数size、および整数thresholdをパラメータとして受け取ります- 在庫がしきい値(threshold)を下回っている製品の数を表す整数を返します
- ループを使用して、在庫がしきい値未満である製品をカウントします
- 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;
}