
はじめてのC言語 | 第24回
はじめに
このシリーズでは、C言語の基本文法から始めて、配列、文字列、ポインタ、構造体、ファイル入出力、動的メモリ確保までを順番に学びました。
最後には、入力、配列、関数、構造体、ファイル入出力を組み合わせた総合演習を行い、実践編ではそのプログラムをさらに改良しました。
この記事では、シリーズ全体で学んだ内容を振り返ります。
このまとめの目的は次の4点です。
- 各回で学んだ内容を整理する
- C言語の基本要素がどのようにつながるかを確認する
- 総合演習で到達した内容を振り返る
- 次に学ぶとよい内容を整理する
このシリーズで学んだこと
このシリーズでは、C言語の基礎を次の流れで学びました。
- C言語とは何か
- はじめてのCプログラム
- 変数と整数
- 四則演算
- 条件分岐
- 繰り返し処理
- 関数
- 配列
- 文字と文字列
- 入力
- ポインタ
- 構造体
- ファイル入出力
- 複数ファイル構成
- 動的メモリ確保
- 総合演習
それぞれは別々の文法に見えますが、実際のプログラムでは組み合わせて使います。
第1回から第4回まで
最初の回では、C言語の基本的な位置づけと、プログラムを書く流れを学びました。
扱った主な内容は次のとおりです。
- C言語はコンパイルして実行する言語である
main関数から処理が始まるprintfで画面に出力できるint型の変数に整数を保存できる+-*/%で計算できる
ここでは、C言語のプログラムを作成し、clang でコンパイルし、ターミナルから実行する基本の流れを確認しました。
第5回から第7回まで
次に、条件分岐と繰り返し処理を学びました。
扱った主な内容は次のとおりです。
ifで条件によって処理を分けるelseやelse ifで複数の条件を扱うforで回数が決まっている繰り返しを書くwhileで条件が成り立つ間だけ繰り返す
条件分岐と繰り返しは、プログラムの流れを制御するための基本です。
配列の処理や入力処理でも、これらを何度も使います。
第8回から第10回まで
この範囲では、関数、配列、文字列を学びました。
扱った主な内容は次のとおりです。
- 関数を定義して呼び出す
- 引数で値を渡す
- 戻り値で結果を返す
- 配列で同じ型の値をまとめる
char配列で文字列を扱う- 文字列の終わりには
'\0'が必要である
関数は、処理を分けて整理するために使います。
配列は、複数の値をまとめて扱うために使います。
文字列は、char 配列として扱うため、配列の理解とつながっています。
第11回から第13回まで
この範囲では、入力、ポインタ、配列とポインタの関係を学びました。
扱った主な内容は次のとおりです。
scanfで入力を受け取る&変数名で変数のアドレスを渡す- ポインタはアドレスを扱う仕組みである
*pでポインタが指す先の値を扱う- 配列名は多くの場合、先頭要素のアドレスとして使われる
array[i]と*(array + i)は同じ要素を表す
ここはC言語で特に重要な範囲です。scanf、配列、文字列、関数引数を正しく理解するには、ポインタの考え方が必要になります。
第14回から第16回まで
この範囲では、文字列処理、関数と配列の受け渡し、構造体を学びました。
扱った主な内容は次のとおりです。
strlenで文字列の長さを調べるstrcpyで文字列をコピーするstrcmpで文字列を比較する- 配列を関数に渡すときは要素数も渡す
- 構造体で複数の値を1つにまとめる
- 構造体配列で複数件のデータを扱う
ここでは、単純な値だけでなく、複数の値をまとめて扱う方法を学びました。
構造体を使うと、名前と点数のように関連する値を1つのデータとして扱えます。
第17回から第19回まで
この範囲では、ファイル入出力、複数ファイル構成、動的メモリ確保を学びました。
扱った主な内容は次のとおりです。
fopenでファイルを開くfprintfでファイルに書き込むfgetsやfscanfでファイルから読み込むfcloseでファイルを閉じる.cファイルと.hファイルに分けて管理するmallocで実行中にメモリを確保するfreeで確保したメモリを解放する
この範囲では、プログラムを少し実用的にするための要素を扱いました。
データをファイルに保存したり、プログラムを複数ファイルに分けたり、必要なサイズのメモリを実行時に確保したりできるようになりました。
第20回と実践編で行ったこと
第20回では、ここまでの内容を組み合わせた総合演習を行いました。
作成したプログラムでは、次の処理を行いました。
- 学生の名前と点数を入力する
- 構造体配列に保存する
- 一覧を表示する
- 合計点と平均点を計算する
- 結果をファイルに保存する
実践編では、この総合演習をさらに改良しました。
- 実践編1 :
scanfのエラー処理を丁寧にする - 実践編2 : 総合演習を複数ファイルに分割する
- 実践編3 : 人数を動的メモリ確保で可変にする
これにより、固定人数の単純なプログラムから、入力人数に応じて処理できる構成へ発展させました。
重要な考え方
このシリーズで特に重要な考え方は次のとおりです。
- 変数は値を保存するために使う
- 条件分岐と繰り返しで処理の流れを作る
- 関数で処理を分ける
- 配列で複数の値をまとめる
- 文字列は
char配列として扱う - ポインタはメモリ上の場所を扱う
- 構造体で関連する値をまとめる
- ファイル入出力でデータを保存する
- ヘッダファイルで宣言を共有する
- 動的メモリ確保では、確保、確認、使用、解放の流れを守る
これらを組み合わせることで、小さな実用プログラムを書けるようになります。
C言語で特に注意すること
C言語では、プログラマが自分で注意しなければならない点があります。
特に重要なのは次の点です。
- 配列の範囲外にアクセスしない
- 文字列の終端
'\0'を意識する scanfの戻り値を確認する- ファイルを開けたか確認する
mallocの戻り値を確認するmallocしたメモリはfreeするfreeしたあとのメモリを使わない
これらを守ることで、意図しない動作や異常終了を減らせます。
次に学ぶとよいこと
このシリーズの内容を理解したあとに学ぶとよい内容は次のとおりです。
constの使い方- 構造体ポインタと
-> typedefによる型名の整理enumによる定数の表現makeやMakefileによるビルド管理gdbやlldbによるデバッグvalgrindや AddressSanitizer によるメモリエラー検出- 標準ライブラリ関数のより詳しい使い方
特に、複数ファイル構成を扱うようになったら、Makefile を学ぶとコンパイル作業を管理しやすくなります。
復習するときの順番
復習する場合は、次の順番で確認すると理解しやすくなります。
- 1. 変数、演算、条件分岐、繰り返し
- 2. 関数
- 3. 配列
- 4. 文字列
- 5. ポインタ
- 6. 構造体
- 7. ファイル入出力
- 8. 複数ファイル構成
- 9. 動的メモリ確保
- 10. 総合演習
特に、配列、文字列、ポインタはつながりが強いため、まとめて復習すると理解しやすくなります。
まとめ
このシリーズでは、C言語の基本文法から始めて、複数の要素を組み合わせた小さな実用プログラムまで作りました。
最初は printf で文字を表示するところから始まり、最後には構造体配列を動的に確保し、入力、計算、表示、ファイル保存まで行うプログラムに発展しました。
C言語では、メモリ、配列、ポインタ、ファイルといった要素を自分で意識して扱う必要があります。
その分、プログラムがどのようにデータを扱っているかを具体的に理解しやすい言語でもあります。
ここまでの内容を理解できていれば、C言語の入門として必要な土台はできています。
次は、小さなプログラムを自分で設計し、必要に応じて関数分割、ファイル分割、エラー処理を加えていく練習に進むとよいです。
もう一度、はじめからゆっくりと
ここまで読み進めてきた今、もう一度最初の回に戻ってみてください。
はじめは少し難しく感じた内容も、
きっと違った景色に見えてくるはずです。
C言語は、一度で理解するものではなく、
何度か行き来しながら、少しずつ深まっていく言語です。
最初の一歩に戻ることは、後退ではありません。
それは、理解を確かなものにするための大切な一歩です。
👉 もう一度、第1回から読み直してみましょう。


