プログラミング実習I 教科書の正誤表†
明らかな誤植だけでなく、初学者には混乱の元になる無駄な記述を以下に指摘します。
変数名や関数名の命名規則に、C言語では「すべて小文字、単語は_をはさんで連結する」というスネークケースが用いられることが多いですが、「単語の先頭を大文字にして隙間なくつなげる」というキャメルケースの用いられている部分がところどころに見られます。変数名は以下のように読み替えるのがよいでしょう。
- p.71 リスト3.4
- 『Large』→『large』
『Small』→『small』
- p.257 リスト7.8
- 『Tokyo』→『tokyo』(固有名詞の表記を優先して先頭大文字にするという考え方もある)
- p.332からp.336にかけて多数
- 『FileName』→『filename』
- p.65 図3.1
- 浮動小数点の内部表現には、「符号部」を含める必要がありますが、図では抜けています。
- p.66 coffee break 内3行目
- 『<limit.h>で定義』→『<limits.h>で定義』
- p.66 coffee break 内
- 「最小値」という単語が、文脈によって2通りの意味に用いられていることに注意。「doubleの最小値」には0より大きいという前提がついているのに対して、「intの最小値」にはその前提がありません。なお、前提なしの「doubleの最小値」は -DBL_MAX です。
- p.75 下から4行目
- 『全体で15桁、小数点以下3桁』→『全体で少なくとも15桁、小数点以下がちょうど3桁』
- p.102 13行目(箇条書きの次の行)
- 『手順1および4に』→『手順2および4に』
- p.145 <<プログラムの形式>> 4.7
- フローチャートの下から戻る矢印の先が、「初期化」のマスの上に入っていますが、上ではなく下に入るべき。
- p.169 リスト5.6の直前の段落からリスト5.7まで
- 『また、関数の定義では、その多くを省略することができます...』→関数の定義では、C言語の旧規格との互換性のために、省略できるキーワードがいくつかありますが、省略するメリットはありませんのできちんと記述するようにしましょう。
- p.207 下から2行目
- 『4つの変数』→『5つの変数』
- p.208 図6.5
- name配列の[8]の箱が余分。
- p.238 下から1行目
- 『int a[3][2] = {1,2,3,4,5,6}; と定義することもできます。』→『int a[3][2] = {1,2,3,4,5,6}; という記述はエラーにはなりませんが、「初期化子の周りに中括弧がありません」といった警告が出ることがあります。』
- p.251 リスト7.2 のタイトル
- 『配列を文字に格納する』→『配列 に 文字 を 格納する』
- p.251 リスト7.3 の直前の段落から p.252 リスト7.4まで
- 『ところで、リスト7.2には...少しトリッキーに感じられるかもしれませんが...』→削除(トリッキーですので、真似しないでください。)
- p.277 5行目
- 『5.5.4項で学んだ通用範囲(通用範囲)』→『5.5項で学んだ通用範囲(スコープ)』
- p.297 最初の段落からの4つの段落
- 『次に構造体タグの省略について...警告を出すコンパイラも存在します。』→構造体タグを省略してもメリットはありませんので、通常は省略しないでください。
- p.300 リスト9.1
- 構造体がmain関数内で宣言されていますが(しかも変数定義を同時に行なっていますが)、こうすると構造体の通用範囲がmain関数に限定されてしまい、他の関数で用いることができません。通常は複数の関数で扱えるように、関数の外側(プロトタイプ宣言の直前)に記述します。そして変数定義は分離して記述することになります。
10章†
- p.345 リスト10.7
- プログラムの中程で「if( (fp=fopen()) == NULL)」とNULLとの比較が記述してあるのに、もう少し下では「while(fgets(string, STRING_SIZE, FP))」とNULLとの比較が省略されていて、一貫性に欠けます。このページの2行目には「fgets関数はNULLを返します」との記述があるので、「while(fgets(string, STRING_SIZE, FP) != NULL)」と明示的に書くのがよいでしょう。