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

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

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

ジャンル
発行年月日
2017/01/06
判型
B5
ページ数
204ページ
ISBN
978-4-339-02866-9
魔法のCプログラミング演習書 - 入門から実践まで -
在庫あり

定価

2,860(本体2,600円+税)

カートに入れる

電子版を購入

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • 著者紹介

これ一冊解けばCプログラミングの入門から実践までひととおり習得できる「魔法」の演習書。最近の高級言語とは違い,なにかとテクニックを必要とするC言語について,幅広いテーマやアルゴリズムを基に,その秘訣を伝授します。基礎から実践力まで,無理なくステップアップできるように,一題一題,新しい知見が得られる内容を厳選し,プログラミングへの興味が高まるような幅広いテーマを題材にしました。構成は以下の通りです。

1章は,プログラミング初学者向けの基本文法を確認しながらのスタートアップです。最初のうちは,他人の書いたコードを参考にする機会も多いと思います。プログラムが動いたら満足ではなく,好奇心をもってここを変更したらどうなるだろうと試してみてください。
2章はウォーミングアップとして,配列を使わないで解ける入門的な問題を集めてみました。毎回,もう少し工夫はできないだろうかと考えながら,練習してみましょう。
3章から,データの集まりを規則的に扱うことが可能になる配列を練習します。配列を使いこなすことができれば,かなり本格的なプログラミングが自由自在にできるようになります。ポインタに進む前に,配列を徹底的に練習して使いこなせるようにしましょう。
4章では,「セグメンテーション違反」を避けるポイントを伝授しながら,ポインタの理解を深める小問題を集めてみました。
5章では,C言語をよりよく理解するため,プログラミング言語設計に関する話題を問題形式でまとめてみました。C言語を使ったパズルみたいなものですが,プログラミング上達のヒントになればと思います。
6章では,まず標準Cライブラリによるオペレーティングシステムに依存しないシステムプログラミング(コマンド引数,ファイル入出力)を練習します。後半は,オペレーティングシステムの依存性を学び,クロスプラットホーム開発のコツを練習していきます。個別の事例は,章末のオープンソースライブラリの紹介も参考にしてください。
7章では,プログラマならぜひ一度は書いてみたい基本的なデータ構造とアルゴリズムの問題を集めてみました。さらに勉強を深めたいときは,章末も参考にしてください。
8章では,本演習書の仕上げとして,プログラミングの総合力が求められる問題を選んでみました。どのように問題を分解して,プログラムを組み立てるのか?効率のよいアルゴリズムを選ぶのか?それよりも開発スピードを選ぶのか?などアプローチはいろいろあります。その結果,得られるコードも千差万別となります。

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

本書は,まず教える立場から,徹底的に楽できることを目標としています。「はい」と一冊渡して,あとは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 自由課題
 (コラム)よいコードとよいソフトウェア

索引

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

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