魔法のCプログラミング演習書 入門から実践まで

魔法のCプログラミング演習書 - 入門から実践まで -

これ一冊解けばCプログラミングの入門から実践までひととおり習得できる「魔法」の演習書。

ジャンル
発行年月日
2017/01/06
判型
B5
ページ数
204ページ
ISBN
978-4-339-02866-9
  • 内容紹介
  • まえがき
  • 目次
  • 著者紹介

これ一冊解けばCプログラミングの入門から実践までひととおり習得できる「魔法」の演習書。最近の高級言語とは違いなにかとテクニックを必要とするC言語について,幅広いテーマやアルゴリズムを基に,その秘訣を伝授する。

本書は,これ一冊解けば,プログラミング入門から実践的なプログラミングまでひととおり習得できる、魔法の演習書を目指して書きました。

本書は,まず教える立場から,徹底的に楽できることを目標としています。「はい」と一冊渡して,あとはWeb上にプログラミング情報はあふれているのだから自ら調べながら勉強を進めてほしい,願わくは本当に実用的なプログラムが書けるようになってほしい,という願望を実現できるように編集してあります。そのため,問題を解く上で検索すべき用語をキーワードのように枠で囲って,どういうところに興味をもち関心を広げていくべきか示してあります。どんどん調べて,プログラミングの深淵に迫ってもらいたいと思います。学ぶ者の立場からすると,丁寧に体系だって教えてくれる教科書がほしいなと思うかもしれません。しかし,そのような教科書では,プログラミングの本質を身に付けるのは難しいです。プログラミングは,習った知識を活用する能力だけでは不十分で,未知の問題にアプローチする「問題解決能力」が必要だからです。ちょっと難しい問題にも挑戦することで,問題解決の姿勢を身に付けてください。本演習書は,理解して進めれば,Webで検索しても,友達に聞いても構いません。立ち止まらずに,問題を解決し,前に進むことが大切です。本書の執筆にあたり,つぎのような点に配慮しながら,演習問題を集めてみました。

・基礎から実践力まで,無理なくステップアップできる
・(問題数を厳選し)一題一題,新しい知見が得られる内容
・プログラミングへの興味が高まるように幅広いテーマ

本書の問題は,著者の勤務校である横浜国立大学の「プログラミング入門」や「プログラミング演習」で出題してきた過去問をベースに出題しております。解説は,学生たちが間違いやすかった点を踏まえながら,講義の語り口で解説してみました。コーディングスタイルは,著者のオープンソース開発の経験を生かし,読みやすくバグの少ないコードを書く習慣が身に付くように心掛けました。また,先に解説を読んでもあまり実害がないように,中盤以降はできるだけソースコード全文の掲載は避けてあります。

もしソースコード全文を参考にしたい場合は,著者のGitHubレポジトリを探してください。この一冊を仕上げて,プログラミングの楽しさを学んでもらいたいと思います。

本書の執筆にあたっては多くの方にお世話になりました。その中でも,特に菅谷みどり氏,そして学生目線で草稿を読んでくれた千田忠賢氏,大川貴一氏に感謝します。またコロナ社には企画段階からたいへんにお世話になりました。本書で利用しているソフトウェアや技術的な内容は日ごろの研究活動のたまものです。研究室のメンバーに感謝します。最後に,こうして本を書いていられるのも妻雅子の協力があってこそです。ありがとう。

2016年12月 倉光 君郎

1. 最初の一歩
1.1 Hello,world
1.2 表示と書式
1.3 変数と代入
1.4 演算子
1.5 算術ライブラリ
1.6 関数定義
1.7 抽象化
1.8 条件分岐
1.9 多値分岐
1.10 ループ
1.11 ループと再帰
 (コラム)C99とコーディングスタイル
1.12 デバッグ
1.13 アサーション
1.14 まとめ

2. ウォーミングアップ
2.1 最大公約数
2.2 再利用
2.3 インクルードファイル
2.4 精度と誤差
2.5 2の補数表現
2.6 モンテカルロ法
2.7 数当てゲーム
2.8 立方根
2.9 ゴール指向で考える
2.10 科学的手法
2.11 採用試験

3. 配列
3.1 循環する数列
3.2 統計関数
3.3 バブルソート
3.4 順列
3.5 サイコロ
3.6 シーザー暗号
3.7 エラトステネスのふるい
3.8 ハノイの塔
3.9 ライフゲーム
3.10 メモ化
3.11 FizzBuzz問題

4. ポインタ
4.1 メモリとアドレス
4.2 参照渡し
4.3 voidポインタ
4.4 ポインタと配列
4.5 ヒープ
4.6 メモリ領域
4.7 可変長配列
4.8 構造体
4.9 ライブラリとポインタ
4.10 ポインタによる連結リスト
4.11 メモリリーク
4.12 スタックオーバーフロー
4.13 セグメンテーション違反の原因
4.14 関数ポインタ
4.15 まとめ

5. Cを超える
5.1 マクロと言語拡張
5.2 不変性
5.3 脆弱性
5.4 文字列の連結
5.5 共用体とキャスト
5.6 部分型
5.7 型検査
5.8 オブジェクト指向への道
5.9 ガベージコレクション
5.10 例外処理
5.11 まとめ

6. システムプログラミング
6.1 コマンド引数
6.2 コマンド実行
6.3 ファイル読込み
6.4 CSVファイルの出力
6.5 実行時のエラー処理
6.6 カラフルなプログラム
6.7 クロスプラットフォーム
6.8 オープンソースライブラリ
6.9 まとめ

7. データ構造とアルゴリズム
7.1 キュー
7.2 スタック
7.3 分割統治法
7.4 帰着
7.5 グラフの探索
7.6 動的計画法
 (コラム)競技プログラミング
7.7 まとめ

8. 仕上げの問題
8.1 ベンチマーク
8.2 アルゴリズムの選択
8.3 ワードカウント
8.4 仕様変更
8.5 10パズル
8.6 完全情報ゲーム
8.7 オセロAIの対戦
8.8 制限付きの正規表現
8.9 自由課題
 (コラム)よいコードとよいソフトウェア

索引

倉光 君郎(クラミツ キミオ)

新社会人向け書籍・新入生向け書籍