Menu
CoddyTech

まとめ:動的配列

CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 37/63。

challenge icon

チャレンジ

簡単

ユーザー入力に基づいて動的配列を作成し、データを処理して、適切なメモリ管理を示すCプログラムを書きましょう。プログラムでは、次の処理を行います。

  1. 格納する要素数を表す整数 n をユーザーから読み取る
  2. malloc() と sizeof() を使って、n 個の整数を格納する配列のメモリを動的に確保する
  3. メモリ確保に成功したか確認する。失敗した場合は Memory allocation failed! を出力してプログラムを終了する
  4. 確保に成功した場合は、Array of size [n] created successfully! を出力する
  5. ユーザーから n 個の整数値を読み取り、確保した配列に格納する
  6. すべての要素の合計を計算して、次の形式で出力する: Sum: [value]
  7. 最小値を見つけて、次の形式で出力する: Minimum: [value]
  8. 平均より大きい要素の数を数えて、次の形式で出力する: Elements above average: [count]
  9. 使用したメモリの合計をバイト単位で、次の形式で出力する: Memory used: [bytes] bytes
  10. free() を使ってメモリを解放する
  11. 適切に後処理できたことを確認するため、Memory successfully freed! を出力する

malloc() と free() を使うには、<stdlib.h> ヘッダーをインクルードしてください。この課題では、メモリの確保から使用、適切な後処理まで、動的メモリ管理についての理解を総合的に確認します。

たとえば、入力が次のとおりの場合:

5
12 8 15 3 20

出力は次のようになります:

Array of size 5 created successfully!
Sum: 58
Minimum: 3
Elements above average: 3
Memory used: 20 bytes
Memory successfully freed!

この総合課題では、確保した配列に対して意味のあるデータ処理を行いながら、動的メモリ管理のライフサイクル全体を示します。

自分で試してみよう

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 要素数を読み取る
    int n;
    scanf("%d", &n);
    
    // TODO: 以下にコードを書く
    // 1. malloc() を使って n 個の整数を格納するメモリを確保する
    // 2. メモリの確保に成功したか確認する
    // 3. n 個の整数を配列に読み込む
    // 4. 合計を計算し、最小値を求め、平均値を超える要素の数を数える
    // 5. 結果を出力し、メモリを解放する
    
    return 0;
}

論理と制御フローのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ