- 締切済み
プログラミング(C言語)の勉強について
情報系の大学1年生です。現在C言語のプログラミングの授業を受けています。 前期C言語の基礎を勉強したのですがいまだによくわかりません。 と、いいますのは、基礎の基礎のプログラムの書き方はわかりますが、難しくなると自分で書けないということです。 授業の課題が自力でできないので、友達のを写させてもらい(ほんとはいけないことはわかっています)、とりあえず提出し、あとでそのプログラムを理解する、というやり方で前期はなんとか乗り越えました。 現在、授業はアルゴリズムに入り、ますます授業についていけなくなり、情けない話ですが友達の書いたプログラムすら理解できないという状況です。 しかし、このままではまずいという思いと、もっと自分で思ったようにC言語を使えるようになりたいという思いから、今質問させていただいています。 C言語の入門書(柴田芒洋・明解 C言語入門編)を読んでいてもパソコンの知識が乏しいため、メモリや処理系など、何がどうなっているかわかりません。 ・C言語を理解するためにはある程度のパソコンの知識は必要ですよね? ・こんな私にも理解できるようなわかりやすい書籍はありますか? 今の自分の能力から考えて、授業の課題を一人でできるとは思いません。もちろん自分で書く努力はしていますが、コンパイルの時点で大量のエラー、実行してもきちんと結果がでません。エラーが出ればまだ修正できますが、実行しても結果がでない場合、自分でミスを見つけられません。 ・友達のプログラムを見せてもらって、後で理解するという勉強法には問題があると思っています。しかし、抜け出すにはどうしたらいいのでしょうか? ・本で勉強しても自分で書いてみなければ身につかないと思っているのですが、何からやればいいんでしょうか?ちなみにプログラムを書く環境はあります。 まとまりのない質問で恐縮ですが、ご指導よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- F K(@ShikiKenta)
- ベストアンサー率30% (4/13)
趣味で、C言語とC++言語を使ってゲームプログラミングをしています。 言語に関わらず、プログラミングで必要な能力は、フロー(流れ)を考えることです。 出したい結果に向かうために、どういう処理をどういう順序でするのか。 数学や物理と同じです。 難しくなると解けないのは、知識が無いからではなく、しっかりフローを考えないからです。 プロのように技巧的で美しいコードを書く必要なんて無いんですから、一つずつ日本語で考えて、C言語に翻訳してください。 たとえば、非再帰型クイックソートのアルゴリズムは一見複雑で難解ですが、時間をかけて一つずつ図を描いてみれば理解でします。 大学や専門学校の課題程度のC言語に、難しいコンピューターの知識なんか要りません。 最低限、2進数と16進数、メモリ管理が出来ればいいです。 友人のノートを見せてもらうのは仕方ないですが、その後に友人のプログラムを完璧に理解して、それを見ずに自分だけで書けるようにしなければ無意味です。 僕がC言語学習に利用した本は、『独習C』くらいです。 その後はひたすらコードを書きまくりました。 分からない関数はそのつどネットで検索して記憶。 1年くらいで書きたいと思うコードは大抵書けるようになりました。 まずは今のやり方を改めることからです。 頑張ってください。
- a_kwn
- ベストアンサー率34% (8/23)
ここにも、学校で出された課題をまる投げする学生が絶えない中、非常に偉いんだけど…。 プログラムって、「小説を書く」とか「マンガを描く」とかとちょっと似たようなところがあって、残念ながら訓練したらすべての人が、 「ある程度複雑なプログラムを自力で書けるようになる」 訳ではないとまず、断言しておきます。 将来、プログラマを生業にしないのなら、現状の「友達作戦」が一番効率が良いと思います。 問題は、プログラマを職業に目指している場合だけど、一番良いのは、 「自分の作りたいと思ったプログラムを作る!」 プログラムが上達する人は、勝手に課題を見つけてプログラムに没頭できます。 (小説家やマンガ家を志望する人は、そうするでしょ?) そうでなければ、現実的な回答としては、学校の課題を学校の指定された教科書を用いて 「自力で解けるところまで戻って、(友達の答案を見ないで)ちゃんと自力で解く」 これしかないんじゃないでしょうか? 逆に、どうして、他の教材や課題に手を出す余力があるんでしょう? あと、ちゃんと「プログラムが組める」ようになるには、それ相当の時間が必要です。 (参考書がどうのとか言う前に、プログラムに取り組む時間が圧倒的に足りていない気がします) 徹夜を繰り返すぐらい没頭する時間が必要だということを忘れないでください。
お礼
回答ありがとうございます。 今のところ、プログラマーを生業にするつもりはありません。しかし、試験や来年度のことを考えると、自分で書けるようになりたいという思いがあります。また、実力は伴っていませんが、プログラミングに興味も持っています。 友達がすらすらプログラムを書けるのは、高校からやってきたからだそうです。確かに私は取り組む時間が絶対的に少ないと思っています。もっと勉強時間を増やしていきたいです。
- shorinji36
- ベストアンサー率17% (406/2382)
現在、電子情報系の大学3年です。 C言語をマスターするためには参考書は1、2冊では足りません。 まず、明解C言語入門編はあなたには難しすぎます。 技術評論社の3ステップでしっかり学ぶC言語入門 朝井淳・著をやってみてください。
お礼
回答ありがとうございます。 おすすめしていただいた本や自分のレベルに合った書籍を書店で探してみます。
- zwi
- ベストアンサー率56% (730/1282)
あともう一つ良いのがありました。 まずC言語のプログラムを読んで自分なりに日本語で動作を書き出します。 つぎに、元のプログラムを見ずに自分で書いた日本語の動作を元にプログラムを作ります。 作れなかったら文法の理解度なのか、自分の書いた日本語の動作が悪いのか分析して出来るまでやり直します。 これを繰り返して段々と難しいものに挑戦していきましょう。
お礼
> まずC言語のプログラムを読んで自分なりに日本語で動作を書き出します。 > つぎに、元のプログラムを見ずに自分で書いた日本語の動作を元にプログラムを作ります。 とても参考になります。 この方法なら授業の課題からでもできそうです。 ありがとうございます。
- zwi
- ベストアンサー率56% (730/1282)
コンピュータの知識を得るのに情報処理試験関係の勉強をするのはどうでしょうか? あと、プログラムのサンプルコードを変更する事で身に付くこともあります。 基本的なところだとforをwhileに変えてみるとか、ifをswitchにするとか、無理やり関数化してみるとか色々変えてみるというのが手です。 それと根本的な問題としてプログラムの流れが理解できていないという問題がある人がいますので、 printf( "(1)\n" ); printf( "(2)\n" ); と自分でプログラムに埋め込んで思った順番に番号が表示されるか確認してはどうでしょうか?これは、printfデバッグ法といってプロでも確認に使う手法の簡単なワザです。 応用として、 printf( "(1) x=%d\n", x ); とやって、(1)の地点通過時に変数がどの値になっているかを確認するのも有効な手です。これも自分の動作イメージと実際のプログラムの動作を一致させてやる為ですね。 最後に、じゃんけんプログラムとか三目並べとか簡単なゲームっぽいものを作ってみるのも勉強になりますよ。
お礼
回答ありがとうございます。 情報処理試験などの機会を利用して、勉強していきたいと思います。
お礼
回答ありがとうございます。 おっしゃる通り、私はプログラムを書く前にフローを作っていませんでした。 最初は日本語で、ちゃんとフローを考えたいと思います。