- ベストアンサー
入門より少し進んだC言語の勉強方法
初めまして。 現在、C言語の勉強をしています。 C言語入門用の本を2~3冊読み、実際に自分で書いてみて関数やポインタ、構造体などの初歩的な事は理解しました。 また、基本情報技術者試験をC言語で受験し、合格する事が出来ました。 しかし、基本情報技術者試験に出てくるプログラミングの問題を読み、どのような動作をするのか追いかける事は出来ますが、似たようなレベルのプログラムを「自分で1から書けるか」と言われたら難しいと思います。 入門用の本を卒業し、次のステップに進みたいと思うのですが、どのように勉強すればいいのかよく分からず、止まってしまっている状態です。 ぜひ、今後におけるおすすめの勉強方法がありましたら教えてください。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 私と同じような人がいるなと思いながら読ませていただきました。 私も情報処理技術者試験に合格する前は、 関数の使い方を覚える、 ダブルポインターをつかったコードが正確にトレースできる、 ということに重点をおいて勉強していました。 今は、Cをアセンブラまでさかのぼって理解を深める。 アルゴリズムを覚える。 コードを書いてソフトをつくってみる。 ということをやっています。 何をしてるか書きますので、あなたの参考にしてください。 基本情報処理は情報科の高校生でも詰め込めば合格できる試験です。 本当の勉強はこれからだと思って頑張ってます。 1.アセンブラでCを理解する 東京では組み込み系の需要が増えていると聞いています。 情報系の学生だったらIT業界は夜遅くとても勉強している時間がないことはご存知だと思います。 勉強するなら今しかないと思ってやりました。 アセンブラをやるとCのポインタだけでなくハードやOSについての基本がわかっていないことに気づきます。 これをやったおかげでNo2さんが紹介しているサイトも非常によく理解できました。 「アセンブラ入門 CASLII」 SCC出版局 http://www.scc-kk.co.jp/scc-books/book_data/6074/6074.html いきなりアセンブラをはじめるのは不安だったので、まずこの本を読みました。 配列名と関数名はなぜ&をつけなくても先頭アドレスを表すのかわかりました。 ラベルに相当するものだとわかります。 「はじめて読む8086―16ビット・コンピュータをやさしく語る」 アスキー 「はじめて読む486―32ビットコンピュータをやさしく語る」 アスキー http://itpro.nikkeibp.co.jp/article/COLUMN/20060209/228914/ 内容は古いが読み物として読みました。 基本情報の午前対策で詰め込んだ知識がいかに理解できてないかわかりました。 「図解 やさしくわかる! MS-DOS」ナツメ社 http://www.cbook24.com/bm_detail.asp?sku=99914616 上記のCPUの本を読んでいてMS-DOSが気になり読みました。 OSの基本中の基本がわかります。 MS-DOSを理解する本は古く、書店を探しても見つかりません。 古い本がたくさんある大きい図書館で読みました。 「高級言語プログラマのためのアセンブラ入門」 ソフトバンク http://www.sbcr.jp/books/products/detail.asp?sku=4797332816 まじめに勉強で読みました。 後半のマクロは著者の趣味に走っているので読まなくていいです。 マクロをつかいすぎると他の人がわからなくなるので実際にはあまり使わないそうです。 それ以外は3回以上読みました。 「C言語 ポインタ完全制覇 技術評論社 http://gihyo.jp/book/2001/4-7741-1142-2 「エキスパート Cプログラミング」アスキー http://www.ascii.co.jp/books/books/detail/4-7561-1639-6.shtml この2冊はアセンブラの本ではありませんが、アセンブラを勉強してから読むとよく理解できます。 読み物として読みました。 2.アルゴリズムを覚える 「C言語によるアルゴリズムとデータ構造」 ソフトバンク http://www.sbcr.jp/books/products/detail.asp?sku=4797331631 基本情報に合格する前に読でいた本です。 はじめて読むならCDもありイメージをつかみやすいです。 「定本 Cプログラマのためのアルゴリズムとデータ構造」 ソフトバンク http://www.sbcr.jp/books/products/detail.asp?sku=4797304952 「C言語によるアルゴリズムとデータ構造」はB木についてのコードがないので、 この本を買って3回以上勉強しなおしました。 ソートについて時間計算量、空間計算量を比較している記事もあり上の本を凌ぐと思います。 3.コードを書く これは誰に聞いても言われることですが、何をやっていいかわかりませんよね。 私はアルゴリズムの復習も兼ねて「定本 Cプログラマのためのアルゴリズムとデータ構造」のサンプルコードを 値をボール、メモリを箱に例えてアニメーションで説明するようなソフトをつくってます。 C言語でDXライブラリを使って書いてます。 本当に自分で書いてみるとドン臭さがわかりますよ。 内容はソートについてだけ書きますと (1)タイトル画面でアルゴリズムを選びマウスでクリックする。 (2)ウインドウが現れ、ソートする数字を入力、昇順か降順かを選択。 (3)ソートする数字のついたボールが一列に並んだ箱の中に入りスタート。 (4)放物線を描いてボールの交換が始まる。(画面の下半分) ボールの動きに合わせてコードの文にマーカーがつく。(画面の上半分左側) ボールの動きに合わせて変数の値を表示する。(画面の上半分右側) (5)終了したらトレース表をプリントアウトする。 こんなのつくってます。 「14歳からはじめる C言語わくわくゲームプログラミング教室」 http://www.rutles.net/books/151.html 「14歳からはじめるリアルに動く!ゲーム物理プログラミング教室 (C言語編)」 http://www.rutles.net/books/180.html この2冊を参考にしました。 DXライブラリでソフトをつくる場合、文字や絵のデザイン、動きなどにこだわると時間がかかります。 あまり時間をかけたくないなら下記の本のコードを改造して遊ぶといいと思います。 「たのしいC 」 http://www.sbcr.jp/books/products/detail.asp?sku=479732791X
その他の回答 (4)
- crew21
- ベストアンサー率26% (58/222)
下の方々が書かれていることとは異なるけど、「こんなソフトがあったらいいな」というのを自分なりに作ってみるというのも勉強になるよ。 例えば最近流行りの「100マス計算」プログラムを作ってみるとか。仕様として、 ・タテヨコの各数値はランダムに発生させる。 ・各学年向けに、各数値は範囲を任意に設定できるようにする。(低学年なら20まで、高学年なら99までとか) ・いつも10x10だと解く方も疲れるから、任意にタテヨコを変更できるようにする。(例:5x3) ・足し算だけでなく、引き算、かけ算、わり算もできるようにする。 ・縦列、横列の各列に、当然ながら同じ数があってはいけない。 ・タテヨコの各数値はCSVファイルにはき出す。 ・回答をチェックする親も疲れるから、各回答もプログラム動作時に同時に計算してcsvファイルにはき出す。 ・それを Excelで読み込むと、Excel上に100マス計算(とその答え)が見える、というようにする。 ※答えはとりあえずコピペで他のシートとかに移動しないといけないけどね。答えが子供に見えちゃうから。 ....というようなのを作ってみるんですよ。そうすると同じプログラムの勉強でも楽しいし、 もしあなたに小さなお子さんがいるなら、100マス計算用の問題集を買わなくて済むことになる。 実はコレ、うちの子供達があんまり100マス計算がどうのこうのというので、私がそういうプログラムを作ったんですけどね。 私はプログラミング歴10年ですが、上記の条件全て満たすのを作るのに3日かかりますた。 ご参考まで。
お礼
実用性を持たせるのはすごくいいアイディアだと思います。やる気も出ますし、教科書にそってやるよりずっと勉強になりそうです。 残念ながら、私に子供はいませんが(笑) 自分なりに、「こんなアプリが欲しい」というものを考えて作ってみたいと思います。 ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
#2のzwiです。C言語の習得が目的で、具体的に作りたい目標のプログラムが無い状況でしょうか?C言語を習得して、目標としてとする仕事とか作りたい物とかありませんか? 私なら、日ごろ使っているWindowsで不便に思っている事を解消するアプリや、あったら良いなと思うアプリを作ります。 もし無かったら、誰かのプログラムの機能のマネをしてみてはどうでしょうか?ソースコードを見ずに自力で同じ機能のものをプログラミングします。 最終的な目標は高度なものでも、簡単な一部分の機能から初めて行けば技術も身につきますし、プログラムを作るという事が分かってきますよ。 C言語の習得のみでしたら、WindowsAPIは理解されていないと思いますので、MS-DOS時代のフリーソフトを参考にしてみてください。 http://www.vector.co.jp/vpack/filearea/dos/ 次の目標として、WindowsAPIも良いかも知れませんね。作っている間にプログラム力も付きそうですし。 有名な「猫でもわかるプログラミング」です。 http://www.kumei.ne.jp/c_lang/ ここの、「C言語編」と「Windows SDK編」を勉強すれば、Windowsアプリが作れるようになります。C++の技術は必要ないですよ。 それとアルゴリズムなら、こちらも参考に。 http://www1.cts.ne.jp/~clab/algorithm/algorithm.html
お礼
いまだにDOSで動作するアプリケーションしか作った経験がなく、Windowsアプリは挑戦したことがありませんでした。 確かに実用性があるアプリであれば、作成する意欲もわきそうです。 頑張ってみます!ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
まず、基本的なアルゴリズムは習得されていますででしょうか? サーチやソートやリスト構造などのアルゴリズムは必須です。 http://www.codereading.com/algo_and_ds/ 応用的なアルゴリズムとか。 http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop 後は、もう入門は終えてプログラムを本格的に組んでみてはどうでしょうか?数と量をこなすのがC言語をちゃんと習得するコツだと私は思います。 最後に、いくつかサイトを紹介します。全部理解できたら、C言語は上級レベルです。 http://www.cmagazine.jp/src/kinjite/c/index.html http://www.nurs.or.jp/~sug/soft/tora/index.htm http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html
お礼
やはりアルゴリズムが大切なようですね。 実際に組むのも非常に勉強になるとは思うのですが、具体的にどのようなプログラムを組めばいいのかわからなくて手を出せずにいたりします。 サイトの紹介もありがとうございます。 書籍とインターネットの両方を使って勉強していきたいと思います。
- asuncion
- ベストアンサー率33% (2127/6289)
文法の基本的なことが理解できたら、 アルゴリズムとデータ構造の勉強をなさってみては いかがでしょうか。 このあたりがわかっているかどうかで、洗練された コードが書けたり書けなかったりすると思います。 今後、C言語以外の言語を勉強する機会があるかもしれませんが、 アルゴリズムとデータ構造の知識は言語によらない 基礎であると思います。 たまたま今はC言語を勉強なさっていますので、 「Cによるアルゴリズムとデータ構造」というような タイトルやテーマの書籍(たくさん出ています)を お読みになるとよいかもしれません。
お礼
なるほど、アルゴリズムやデータ構造というのは考えてもいませんでした。 早速、本屋で書籍を探してみたいと思います。ありがとうございました。
お礼
素晴らしいです! 非常に勉強熱心な方なのですね。 今後、就職するにあたってあなたのような方と共に働くのかと思うと、嬉しさと不安が混ざった気持ちになります(もちろん褒めてます) 確かに、基本情報はステップの1つに過ぎないと思っています。 これからソフトウェア開発などの上位の資格を目指して勉強していくつもりです。 組み込み系の需要が増えている事は耳にしていましたが、組み込み系を学ぼうとまでは思っていませんでした。 こちらで紹介された本も参考にさせていただきますね。 ありがとうございました。