質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

12回答

778閲覧

C言語の学習方法 書籍を読むのが良いか実際にコードをかくのが良いか

aoba_

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2019/08/18 14:58

編集2019/08/19 05:51

今年の4月から大学でC言語を学び始めたものです。

夏休みに入ったため自分で学習を進めてみようと思い、ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードをうつして理解しながら勉強する、という方法をとっています。
(既にリズムゲームなどがつくれる友人から、「目的がないと挫折するから、ソースコードが公開されてるゲームのコードをいじりながらやるといいよ」という助言を受けたため)

しかし、ネットで個々の関数の意味を理解できても、ゲームの中でそれがどうさようしているのかぼんやりとしか理解できませんでした。
授業で教わったのは関数あたりまでだったため、ポインタ以降の知識はネットで調べて理解しています。

そこで質問です。
この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。もしはやすぎたのであれば、どの程度書籍で知識を増やしてからのほうがいいのか教えていたできたいです。ほかに良い学習方法があれば、それも是非教えていただきたいです。よろしくお願いします。

※追記
書籍名:新・明解C言語 入門編
ソースコード:https://saeki-ce.xsrv.jp/C_src/amidakuji01.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nullbot

2019/08/19 04:20

本の名前とソースコードのURL貼ってください。
aoba_

2019/08/19 05:52

質問に追記しました。専門書と記載してしまいましたが、正しくは入門書です。申し訳ありません。
guest

回答12

0

書籍を読むのが良いか実際にコードをかくのが良いか

両方。学んで習うから学習です。

学ぶとは考えること。
習うとは真似をすること。

孔子サマは 学ぶ と 思う を対比なさってますな。

投稿2019/08/20 09:56

編集2019/08/20 11:45
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/20 13:30

回答ありがとうございます。自分で考えたうえで、すでにあるものをっ参考にしつつ頑張ろうと思います。
guest

0

この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。

専門書の半分であれば、十分だとと思います。

入門書であれば、全部理解してからです(もちろん、全部暗記はしなくて良いですが)。

投稿2019/08/18 15:06

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/18 15:12

専門書と記載してしまいましたが、私が読んでいるのは入門書にあたる物でした。すべて読み切って理解しようと思います。回答ありがとうございました。
otn

2019/08/18 15:58

「全部理解してから」と書きましたが、読んでも理解できなかったところは、付箋を付けるなどした上で次に進んでもよいかと思います。入門書を読むのに何日も掛ける必要は無いです。 いずれにせよ、入門書を最後まで読まずにプログラムを読み書きするのは、アルファベットを全部覚えていないうちに英文読解や英作文をしようとするような物です。不可能では無いが効率が悪い。
aoba_

2019/08/19 03:08

そうだったのですね。効率の悪さは自分でも感じていたので、きちんと読み進めます。
guest

0

直接的な回答は既に複数あるため重複するんで避けますが、このサイトで学習方法というキーワードで検索するだけでも山のように回答があるんで、参考にされると良いでしょう。(言語問わず参考になる回答が多数あると思います)

対象をこのサイト以外に広げると、更に多くの意見が出てきます。
どれが正解、というわけではないですが、多様な意見を読んで取捨選択されると良いんじゃないでしょうか。

実際のプログラミングでも「どうしたらいいんだろう?」と思ったら、まずやるべきことは「調査」です。
ググる力がない人は、いつまで経っても成長しません。

投稿2019/08/18 22:58

編集2019/08/18 23:04
gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/19 05:17

なるほど。確かに情報収集を怠っていたかもしれません。ここでいただいた意見と合わせて調査結果も参考にしようと思います。ありがとうございました。
pepperleaf

2019/08/19 14:56

> ググる力がない人は、 何でもかんでもググるのは、どうかとも思いますが、、何が最適かは人それぞれと思いますで、調べるのは必須ですね。
gentaro

2019/08/19 21:59

適切なキーワードの選定や結果を吟味できる事まで含めて「ググる力」と考えて貰えれば。 現代のプログラマでグーグル先生(別にBingでも良いけど)と仲良くできない人はほぼ例外なく使えない人材だと思います。(経験上)
aoba_

2019/08/20 13:44

なるほど。「ググる」に「調べる行為そのもの」以外の意味も包含しているばあいがあるのですね。新しい知識です。ありがとうございます。
guest

0

友人の助言に関して言えば

目的がないと挫折するから、 ←わかる
ソースコードが公開されてるゲームのコードをいじりながらやるといい ←ハードル高いかも

という感じかなぁ.
人の書いたコードを読む&変えるってのは,自分で書くのに比べて倍くらいは難しい行為なので,「挫折」を心配する行動としては微妙感みたいな.
言語の文法以外の要素に慣れていない段階で踏み込むのは個人的にお勧めしないです.

まずは,自身が知っている事柄だけで何かオリジナルの物を作ることから始めてはどうでしょう.
キーボードからの何かしらの入力と画面への何かしらの出力,それとifあたりがあれば,「対話的な何か」をとりあえずは作れますよね.
最初に出来上がる物の内容はあまり興味深いものではないだろうけども,とりあえずそのコードは全て自分が知っていて理解できる要素だけで構成されているハズ.
→そこから少しずつ発展させていく.すなわち,{未知,新規,試行的…}な要素を少しずつ取り込んでいく(=段階的に学ぶ).

投稿2019/08/19 01:19

fana

総合スコア11656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2019/08/19 01:27

まとめ: ・自分が知っている(ポインタだの関数だの分岐だの配列だのいう)要素を組み合わせて実際に意味のある動作を組み立てる練習をする,という段階が必要なのではないだろうか. ・人のコードを読むのはある程度上記ができるようになってから. ・本は毎日寝る前に読む感じで.
aoba_

2019/08/19 03:13

とても具体的な回答ありがとうございます。人の書いたコードを読んで変えるのは今の段階では難しいのですね。もう少し簡単なコードから始めてみます。入門書も早速今日から読もうと思います。
guest

0

ベストアンサー

まず、プログラミングに正解なんてありません。
例えばC言語で"Hello World"と表示するだけでも、

// main関数内だとして printf( "Hello World" );

が一般的ですが、考えようによっては、

// main関数内だとして char str1[] = "Hello"; char str2[] = "World"; printf("%s %s", str1, str2 );

とか、

// main関数内だとして char str[] = "Hello World"; int i; for( i = 0; i < strlen(str); i++ ){ printf("%c", str[i] ); }

とかみたいにもできる。

なので、写経はあまり好きじゃないです。

写経に慣れてしまうと、答えがないと不安になる。不安になるから、答えクレクレ君になる。

という風に悪循環になります。

よって写経は好ましくないなぁと。

実際に、自分の力で何か作ってみてください。

もちろん、初期段階からすべて。です。

私はこれで学びました。(独学)

例えば、ランチャーソフト。(ソフトを起動するソフトみたいな)

少なくとも

■ 外部ファイルを起動すること ■ どのファイルを起動するかを入力させること (オプショナルな場合もあるが)

は必須ですね。

これを実際に組む...みたいに。

そういう風に、構想段階から自分でやる。他人のコードだけを読んでも、構想はできません。

ほとんどpepperleafさんのやり方に同じですね。

入門書の最初の部分だけやってあとは辞書代わり。っていう感じ。

参考: ロジック


[追記0]

一応、一通り入門書を読んで、「どういう概念があるか」を学び、
実際に何か作る。その時、入門書やリファレンスは辞書代わりにする。

余裕があれば「データ構造とアルゴリズム」を学ぶ。

あとはPaizaとかのような競技プログラミングっていうやつをやってみるとか。

とにかく、自分で考え、自分で作ることが大事かも。

投稿2019/08/20 03:39

編集2019/08/20 03:43
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/20 13:35

正解がないと不安になるというのは少々自分に当てはまっている気がするのではやめに改善します。とても具体的でこれから何をやるべきか目途がたってきました。回答ありがとうございました。
guest

0

処理の流れをつかむため、フローチャートを書いてみましょう。

別に正しいフローチャートに固執する必要はありませんし、
複雑なものを作る必要もありません。

四角とひし形と矢印だけでOKです。

投稿2019/08/19 23:36

chun

総合スコア324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/20 13:36

フローチャートという考えはなかったのでとても参考になりました。回答ありがとうございました。
guest

0

あまり参考にならないかも知れませんが、
自分の場合、使えてる言語は、参考書は半分くらいしか読めてなくって、後は辞書代わり。(最近は、ネットで検索)
で、最後まで読んだ(目を通した)本は使えてない(使う機会が無い)という状況。
何か作りたい(仕事でも趣味でも)という目的がある場合、覚えて使えるという感じです。

ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードを

個人的には、好きな書き方ではないですね。インデントとか、空白の入れ方とか。 こういう時、自分的には、(手作業で)インデントとか空白とか、書式を書き換えながら、コードを追うことが多いです。はっきり言って、効率悪いかも知れませんが、内容の理解が早い気がしてます。

参考までに。

投稿2019/08/19 15:11

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/20 13:39

参考書に固執しすぎるのはよくないのですね。参考書からは考え方を学ぶ程度とどめどんどん自分でコードをかいていこうと思います。回答ありがとうございました。
guest

0

たとえ話をしましょう。

  1. 右手で握りこぶしを作ってください。
    1. の状態から、右手を、じゃんけんのパーの形に開いてください。

これ、2. をやるのって簡単ですよね。「手を開く」って意識しただけで、たぶん勝手に手が動きます。
でも……この「手を開く」動作の中に、どれだけの細かな動作が詰まっていると思いますか?
少なく見積もっても、

  1. 親指の付け根を開く
  2. 親指の第1関節と第2関節を伸ばす
  3. 親指が人差し指の可動域から離れたところで、親指以外の四本の指の第1関節から第3関節までを伸ばす
  4. 各指を適当な角度に開く)

となってきますが、ここにさらに細かな動作も含まれてきます。(例えば 3. で四本の指を協調動作させているはずです。意識しなければ指を順に動かすようなことはしないでしょう?)
この「細かな動作」を全て書き記すのが、プログラムです。コンピュータはプログラムとして記載された通りのことしかできません。記載されていないことはしないし、できないのです。
そしてプログラミングとは、やりたいことを事細かく書き記すことに他なりません。

ソースがあるならば、そのソースを段階を踏んででもいいから読み解いて、「プログラマは何をしたくてこんなコードを書いたのか」を読み取りましょう。それができれば、逆に「何をしたいなら、どんなことをすればいいのか」が分かるようになり、結果的にどんなコードを書けばいいのか分かるようになっていきます。

余談:握りこぶしですが、乳児の場合は親指が他の四指に被せられる(親指が握りこまれる)ようになります。どこかのタイミングで親指が外に出るのですが、不思議なものですね

投稿2019/08/18 23:59

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/19 05:46

分かりやすい例えをありがとうございます。コードが行っていることのイメージがよりつかみやすくなりました。参考にさせていただきます。ありがとうございました。
guest

0

... ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードをうつして理解しながら勉強する ...

コードを写して動作させてからが勉強の開始点になります。

  1. debagger の使い方をまなび、ステップ実行させて動作を追ってみる。
  2. 機能を変えずに、コードを書き換えてみる。(変数名、関数名をわかりやすいものにするとか、プロブラムの後続そのものを変更するとか)
  3. 機能変更をしてみる。

投稿2019/08/23 22:18

編集2019/08/24 03:30
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。もしはやすぎたのであれば、どの程度書籍で知識を増やしてからのほうがいいのか教えていたできたいです。

入門書は一通り読み終えてからにした方が良いと思います。

また、他人の書いたコードを読むのは大変な作業なので、すべてを理解しようとせず、あくまで参考にする程度に考えておいた方が良いと思います。

ほかに良い学習方法があれば、それも是非教えていただきたいです。よろしくお願いします。

ご友人の言われている「目的がないと挫折するから」というのは、確かにそうだと思いますので、まず目標を決めて、できるだけ手を動かしながら学習することをおすすめします。

手を動かしながら学ぶ入門書(実践入門書)というのがありますので、そういうので学習してみるのはいかがでしょうか。

投稿2019/08/19 05:33

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/19 06:39

なにかしら新しい書籍を購入しようと思っていたので、実践入門書も候補に入れようと思います。回答ありがとうございました。
guest

0

何のプログラムを書くかを考えるのが最も難しいと思います。
何のプログラムを書くか考えプログラムを完成させましょう。
目標が難しすぎたら完成しないので自分のレベルに合ったものがいいです。

ソースコードが公開されているソースを見ると未知のものに出会います。
未知のものがそのときは分からなくても専門書やネットなどで日々調べているといつかわかるときが来ます。

何のプログラムを書くかを考え、公開されているソースを読み、未知のものを専門書などで調べ、プログラムを書きまくりましょう。
これらは並行して行いましょう。
プログラムは英語が主戦場ですので英語の学習も必要になるでしょう。

いつまでも無限に学習しましょう。
そのようにして難しいプログラムを完成させられたらあなたはすごい人です。
たいていの人は途中で挫折します。

投稿2019/08/18 15:49

querykuma

総合スコア777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/19 05:14

やはり自分でコードを考えるのが重要なのですね。おっしゃる通り最初は苦戦すると思いますが辛抱強く頑張ろうと思います。回答ありがとうございました。
guest

0

デバッグ環境を整えて、実際にコードを書きまくりましょう

投稿2019/08/18 15:01

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoba_

2019/08/18 15:09

回答ありがとうございます。それは、たとえ細部が理解できなくても、人が書いたコードであっても(自分で考えたものでなくても)、数をかいたほうが良いという事でしょうか?また「デバック環境を整える」とは具体的に何をすればよいですか?
y_waiwai

2019/08/18 15:13

VisualStudioとかEclipseをインストールすれば、コードを書けば文法エラーはその場で指摘してくれ、実行させれば任意の行で実行を止め変数の内容を参照できるようになります こういう環境を用意しておけば、アテずっぽでコードを書かなくても済むようになり、他人のコードでも理解が容易になります
aoba_

2019/08/18 15:23

なるほど。そういった意味であれば、デバック環境は整っていると思います。前半の質問に対する意見もうかがいたいです。
y_waiwai

2019/08/18 22:21

ならあとはC言語の理解というより、コードの理解力の問題です。 Cの知識は不要です。コードの各行がどういう動作をするのかを追いかけていきましょう。 重要なのは発生するエラーやワーニングをスルーせず、どういう意味を持つのか、どう解消させる必要があるのかを理解しましょう。 これは、専門書をいくらやっても身につくもんではないので、がんばってください。
Zuishin

2019/08/18 23:28

C の知識は要るでしょう。
y_waiwai

2019/08/18 23:39

専門書は半分で十分。 目的はコードを書けるようになることなんだから、それ以上の知識は不要ですな
Zuishin

2019/08/18 23:44

専門書というのは入門書のことだそうです。 入門書くらいは全部読んでほしいですね。
y_waiwai

2019/08/18 23:57

ああ、他回答のコメントまでは読んでませんでしたね。 それはごもっとも。 Cは特に、こうあるべき、とかこう書かなければ、という知識を変につけてしまうと身動き取れなくなってしまいますわな
Zuishin

2019/08/19 00:56

> Cは特に、こうあるべき、とかこう書かなければ、という知識を変につけてしまうと身動き取れなくなってしまいますわな そんなことはないと思いますが。「こうあるべき」という知識は、自由度の高い C 言語だと特に必要なことだと思います。「変に」というところによるんですかね。
aoba_

2019/08/19 03:04

様々な意見をありがとうございます。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問