わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Cプログラミングの問題集

学科内で,プログラミング技能向上に関する教員提案型の自主演習に携わっています.ただいまその準備中です.その中でも重要な問題は,「Cプログラミングを学び直したい」という学生に対して,どんな課題をやってもらうか,です.
今朝,はてなの中を見ていると,興味深い質問がありました.

そして,途中に『ソースコードではないのですが、C言語の基礎を覚えるのに便利な問題集がここにあります。』として,PDFファイルのリンクがありました.ダウンロードしてみました.

章のはじめにサンプルコード,重要なことは箱囲みで解説していて,演習問題がたくさんあります.
ざっと見て,よろしくない箇所を挙げておくと,「入出力に関する表現*2」「NULとNILの混乱*3」があります.
プログラミング課題で興味深かったのは,ex094.c (4,9抜きの数字を小さいものから100個求める)です*4.「4と9のない付番方式numbering system」は,日本のホテルや駐車場でよく見かけるので,実用性がありますね.
とはいえ,最近,Cの入門書を読むとき,気にしているのは「章立て」すなわち大まかにどんな順序で学んでいくかです.ここに列挙してみます.

  • 第1章 簡単なC言語のプログラミング
  • 第2章 文字の入出力
  • 第2章 文字列と文字型配列
  • 第4章 関数の宣言と呼び出し1
  • 第5章 関数の宣言と呼び出し2
  • 第6章 配列とポインタ
  • 第7章 ポインタの応用
  • 第8章 配列とポインタ2
  • 第9章 ファイル入出力
  • 第10章 構造体

中盤は,「関数→配列・ポインタ」の順番で理解していく,ということですね.私の科目では「配列→ポインタ→関数」の順番にしています.

*1:1の回答者に対する質問者のコメントは,ずれている? 回答は,Googleに親しんでおけという意味ではないかと.

*2:p.11の『getchar関数は標準入力(通常はキーボード)から1文字入力する関数である』とありますが,『入力する』のは関数ではなく,プログラムの外のユーザなどです.参考

*3:p.24のex095.cのl.30は「s[i] = NUL;」の単純ミスと思われます.しかし,p.9の表で,00は「Nil」とあるのも気になります.

*4:ファイル名が「ex94.c」だったらさらによかったのですが.