• ベストアンサー

C言語の書籍

C言語の書籍について質問させて頂きます。 OSWinXPSP3でコンパイラはVisualC++2008Express Editionを使ってます。 今持っている本は初級用でポインタの事は簡単な説明しかありません。 中級にステップアップ出来るような書籍を1冊買おうと思うのですが サンプルコードなどの説明がなるべくわかりやすく詳しく書かれていて ポインタについてもっと詳しく書かれているようなお勧めの書籍はないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • annyG
  • ベストアンサー率25% (10/39)
回答No.4

質問者様のレベルが正確に分からないですが、 今C言語を学ぶなら、C99に対応している参考書がいいです。 倉薫のC言語2はC99にも対応していますし、内容もかなりいい印象があります。 http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E6%94%B9%E8%A8%82%E7%89%882-%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E5%AD%A6%E3%81%B6C%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF-CD-ROM%E4%BB%98-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%80%89/dp/4798118079/ref=sr_1_12?ie=UTF8&s=books&qid=1237341325&sr=8-12 やたら分かり易いのですが、扱っている内容はけっこう高度で、ときどきハッとするようなことが書かれていたりします。 林晴比古のC言語シニア編も以前は勧めていたのですが、今とはなっては内容が少々古く、C99に対応していないのが残念です。 http://www.amazon.co.jp/%E6%96%B0%E3%83%BBC%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80-%E3%82%B7%E3%83%8B%E3%82%A2%E7%B7%A8-C%E8%A8%80%E8%AA%9E%E5%AE%9F%E7%94%A8%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%9E%97-%E6%99%B4%E6%AF%94%E5%8F%A4/dp/4797325623/ref=sr_1_3?ie=UTF8&s=books&qid=1237341583&sr=1-3 あと、個人的にはプログラミングの基礎は書籍で勉強するべきだと思っています。 分かり易いと評判だった某サイトの管理人が書籍を出したときに、全く鳴かず飛ばずでしたが、やはり素人が暇つぶしのボランティアで書いているものと、プロのテクニカルライターが自分の生活のために書いているものではレベルが違います。

phenom
質問者

補足

回答ありがとうございます。 C99対応が良いのですね。(C99について今は分かりませんが調べてみます) 倉薫のC言語2も候補にしたいと思います。

その他の回答 (5)

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.6

 他の方々から私よりも良い回答が既に寄せられているのでちょっとアレなのですが、質問されたのに返事を出さないでいるのもどうかと思いましたので、一応回答しておきます。 >興味はあるんですが、サンプルコードなどはあるんでしょうか?  前橋さんのサイト(http://kmaebashi.com/)の『「C言語 ポインタ完全制覇」のページ』にサンプルソースが置いてあるので、参考になさってください。

phenom
質問者

お礼

皆さんありがとうございました。 また質問したときはよろしくお願いします。 以下のコードを実行してみました。 変数名が適当なのとくじ引きで決めたことお許しください。 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct { char namae[32]; } name; int main() { int best, kekka; name ok[4] = { "zwi", "oldman50", "annyG", "ttschool" }; /*int i; for ( i = 0; i < 4; i++ ) { printf("ちゃんと代入されてるかな?:%s\n", ok[i].namae); }*/ srand(time(NULL)); kekka = rand() % 4; printf("良回答は%sさん\n", ok[kekka].namae); best = kekka; while ( kekka == best ) { kekka = rand() % 4; if ( kekka != best ) { printf("次点は%sさん\n", ok[kekka].namae); } } getchar(); return 0; } 実行結果 良回答はannyGさん 次点はoldman50さん になりました。

phenom
質問者

補足

回答ありがとうございます。 サンプルはサイトのほうにあるんですね。 >他の方々から私よりも良い回答が既に寄せられているのでちょっとアレなのですが、 oldman50さんの回答も参考になってます! あまり候補が多くなると決めるまでにかなり迷いそうなので、 このあたりで一度締め切ろうと思いますが、良回答は誰につければいいか 迷いますね・・・。 皆さん良回答だったのでみんなにあげたいですが、無理なので くじびきしたいと思います。(Cのプログラムで乱数使ってみます) うまく出来なかったらサイコロ振ります・・・。

  • ttschool
  • ベストアンサー率28% (18/64)
回答No.5

ポインタも含め、メモリがよく分かる本です。 「 Cプログラミング専門課程 」 すごく良い本です。 ポインタ・メモリ周りについて、詳しく書かれている本といわれれば、これが最高峰だと思います(初心者・中級者向なら)。また、ITproの良書としても、紹介されています。 ( http://itpro.nikkeibp.co.jp/article/COLUMN/20060131/228240/?ST=skillup ) また、すべてに説明にサンプルコードがあります。また、すべて実行できます。 ところで、分野は、組み込みですか? 組み込みなら、組み込み向けのオススメがあります。

phenom
質問者

補足

回答ありがとうございます。 「 Cプログラミング専門課程 」 古めの書籍みたいですが、評判は良いみたいですね。 候補に入れたいと思います。 *ちなみに組み込みではないです。 ご親切にありがとうございます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>なぜ書籍かと言うとPCから離れていても本なら勉強出来るという理由からです。(僕のPCはノートじゃないので) 最終的には自分なりのコードを書いて実行しない事にはプログラムは身に付かないと私は思うんですよ。なので机上での勉強はほどほどに実践あるのみです。本だけだと分かった気になるだけで実際には分っていないことが多いですし。 でも、パソコンのないところでも勉強したいと言う心がけはとても良いですよ。 さて本ですが、紹介したサイトに載ってますのでチェックしてみてください。 http://www5c.biglobe.ne.jp/~ecb/c/c00.html http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html

phenom
質問者

補足

回答ありがとうございます。 読むだけでなく、実際にコードも書いてみようと思います。 紹介してくれたサイトも参考に良い書籍を探してみます。

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.2

 多くの方が薦める書籍として、 前橋和哉「C言語ポインタ完全制覇」(技術評論社) というのがあります。  この本には、ポインタに関するかなり詳細な解説がいろいろと記載されているので、ご参考になるのではないかと思います。  以下にその一部(p177)を引用します。 「 *p++; という表現は,pをインクリメントするのかpの指す先のもの(*p)をインクリメントするのかがわかりにくいのですが、これを、  *と++の優先順位は同じだ.だが,結合規則が右から左なので,pと++が先に結合する.よって,インクリメントされるのは,*pではなくpだ と説明している本をよく見かけます.なにしろ,他ならぬK&Rが,そういう説明をしていますーーが,この説明は,いささか不適切です.  規格では,BNF(Backus-Naur Form)と呼ばれる記法により構文規則を定義しており,演算子の優先順位も構文規則の中に含まれます.  BNFについては,本書の範囲を超えるのでここでは説明しませんが,これを見ると,後置の++は,前置の++や*よりも優先順位が高く,()や[]と同じ順位になっています.  つまり,*p++における演算子の優先順位は,  後置の++は*より優先順位が高い.よって,インクリメントされるのは,*pではなくてpだ という説明のほうが,文法的には正しいことになります.」

phenom
質問者

補足

回答ありがとうございます。 >前橋和哉「C言語ポインタ完全制覇」(技術評論社) 良さそうですね。 過去の質問でもあったのを覚えています。 興味はあるんですが、サンプルコードなどはあるんでしょうか? 同じ質問スレにあった柴田望洋さんの、「たのしいC」という本も 気になっているのでこちらも候補に入れています。 後、下に書こうと思って忘れてたんですが、書籍の理由として PCのディスプレイが1つしかないので、サイトだとアクティブなウインドウを 切り替えながらやらなければならないので不便ってのもあります。 他にお勧めがあるって方の意見もお待ちしてます

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

入門を終えたなら別に書籍で無くても構わないと思うんですよ。 なのでサイトを紹介します。 http://www.nurs.or.jp/~sug/soft/tora/index.htm http://www.grapecity.com/japan/powernews/column.asp http://homepage3.nifty.com/mmgames/c_guide/ http://www.geocities.jp/ky_webid/c/index.html http://www5c.biglobe.ne.jp/~ecb/c/c00.html それと習うより慣れろって事でサンプルプログラムを色々改造する事をお勧めします。 そして、データ構造とアルゴリズムこれが大事です。 http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html http://www.codereading.com/algo_and_ds/ http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258279/?ST=develop http://www.db.is.kyushu-u.ac.jp/adp/algo/ http://www.geocities.jp/ky_webid/algorithm/index.html

phenom
質問者

補足

回答ありがとうございます。 なぜ書籍かと言うとPCから離れていても本なら勉強出来るという理由からです。(僕のPCはノートじゃないので) ですが、せっかくなので紹介して頂いたサイトは参考にさせて頂きます!

関連するQ&A

専門家に質問してみよう