• ベストアンサー

C言語の学習法について

こんにちは。私は大学二年生で今授業でC言語を学んでいます。 内容は数値計算を行っております。(二分法とかガウス消去法とか) 授業体系としては、プログラムの作成をするというものなのですが、私はプログラムを作るのが苦手です。 なので、自己学習をしようと思うのですが、効果のある勉強法とはどういったものなのでしょうか? プログラムについては自分で手を動かした数だけ上達していくといわれているのでなにか作成しようと思っています。 そこでなのですが 数値計算でアルゴリズムが頭に浮かんでこないというのは、もともとの知識不足なのだからゲーム(じゃんけん)などのプログラムを作る参考書をやるべきだ。 数値計算という内容に慣れていないのが原因だから数値計算に特化した参考書をすすめていくべきだ。 この二つの考えがあります。どちらにするべきでしょうか? プログラムを見ればアルゴリズムが理解できるのですが、 その逆、 つまり、問題からどういったアルゴリズムを作成し、それをどうプログラムとして作るのか。ができません。 まとまりのつかない文章で申し訳ございません。どんな些細なことでもいいのでなにかありましたら是非ともアドバイスよろしくお願いします。

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

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.4

こんにちは #3補足です。 >でもC言語をやらなきゃいけないんですよね。C言語が基本だからでしょうね。  C言語を勉強するならC言語が生まれたOSであるUNIXの生まれた背景や思想ぐらいは押さえて置いた方がいいかも。 >ふと思ったのですが、基本情報処理の資格取得とかもいい勉強になるんでしょかね?  数値計算までは届かないけどコンピュータの基礎は学べると思います。

thjki6624
質問者

お礼

補足説明ありがとうございます なるほど背景ですか。 まずは基礎ですね。ありがとうございました!

その他の回答 (4)

noname#130082
noname#130082
回答No.5

私が持っているのは、佐藤次男他「よくわかる数値計算・アルゴリズムと誤差解析の実際」(日刊工業新聞社)ですが、残念ながらC言語の例題がなく、またかなり古い本です。 アマゾンなどで「数値計算 C言語」とか検索してみたらいかがでしょうか。(レビューをじっくり読んで検討しましょう。) 例題が載っている本、と書いたのは、数値計算では誤差の問題などややこしい話が沢山あるので、例題なしにいきなりプログラムを作るのには敷居が高いからです。(私も、実際に数値計算プログラムを現実に自作が必要になったことはないので、詳しく勉強してません。) C言語が基本かどうかはわからないですが(現在はソフトがあまりに複雑になっているため、オブジェクト指向のような仕組みがないと辛い)、授業でC言語ですから仕方ないですね。(Fortranの方が、言語の良し悪し以前に、数値計算の積み重ねがあるはずです。) どうせ、現在実際に使われている技術は日進月歩ですから、授業で出るプログラムを実際に使うことは少ないと思います。勉強の一部と割り切っていきましょう。

thjki6624
質問者

お礼

割り切る、ですか。 まあ確かに実際必要となってくる計算って今まで教わったものから作るってよりかはその計算をするにはどうすればいいかって考えてプログラム作っていくってイメージですもんね ありがとうございます

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.3

こんにちは >数値計算でアルゴリズムが頭に浮かんでこないというのは、もともとの知識不足なのだからゲーム(じゃんけん)などのプログラムを作る参考書をやるべきだ。  学業以外に暇があるなら入門書を片手にこちらをお奨めします。  数値計算というとアルゴリズム以外に浮動小数点数というやっかいなデータを扱わなければなりませんよね? >数値計算という内容に慣れていないのが原因だから数値計算に特化した参考書をすすめていくべきだ。  浮動小数点数の扱いを含めて時間を効率よく使おうとするならこちらでしょう。 ただ、FORTRANの数値演算ライブラリにC言語はかなわないかも知れません。  アルゴリズムは2進数計算機のハードウェアにあった方法に置換える作業です。 C言語はハードウェアに密着した言語なのでハードウェアにからめて2進数計算機は何でこんな書き方をさせるのかといった視点で見るのも面白いですよ。

thjki6624
質問者

お礼

回答ありがとうございます。 FORTRANの数値演算ライブラリってのはMATLABみたいなやつですか? でもC言語をやらなきゃいけないんですよね。C言語が基本だからでしょうね。 ハードウェアにC言語は密着しているというのは聞いたことがあります。JAVAがソフトに密着してるんですよね。 ふと思ったのですが、 基本情報処理の資格取得とかもいい勉強になるんでしょかね?

noname#130082
noname#130082
回答No.2

授業で数値計算をやるなら、C言語で数値計算をやる例題が多く載っている参考書がいいかもしれません。例題を少しずつ自分なりに変えてみるとか。 プログラミングに関しては、いきなり複雑なことをやるより、単純で小さいプログラムを作ることを繰り返して、脳みそがプログラムに慣れるようにした方が良いかと思います。

thjki6624
質問者

お礼

早速の回答ありがとうございました。 やはり慣れというものが重要なんですね。 数値計算で簡単なものですか。なにかオススメの参考書とかってありますか? 図書館で数値計算の類の参考書を眺めてみたんですがどれも結構難しくて手をつけるのが大変です。

  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

プログラムを組むというのは、決まったことしかできない人に仕事を分担させて、この手順通りに作業してください、とお願いすることです。 そういう考え方で、「これを任せたい」「でもこんな高度なことはできない」「では、作業を順番を追って分けるか」という繰り返しで、最終的にコンピュータでもできることにまで、作業をひたすら分割して手順どおりに実行させる、というものです。 頼りない新人のバイトさんに仕事を教えるつもりで、手順を紙に書いて説明するような気持ちになってみてください。

thjki6624
質問者

お礼

わかりやすい説明ですね。でも、それができなくて困ってるんです。 要はものごとを細かく分けて考えれば筋道がつくってことですか。ありがとうございました

関連するQ&A

  • ガウス・ジョルダン法のプログラムを教えてください!

    課題で出されたのですが、よくわからなくて困ってます… (1)ガウス・ジョルダン法のプログラムを作成せよ (2)ピボット操作つきのガウス・ジョルダン法のプログラムを作成せよ ガウス・ジョルダン法の計算の仕方はなんとなく理解できたのですが、プログラムにできなくて… わかる方よろしくお願いします><

  • オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムに

    オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムについて教えてください! 課題なのですが、まったくわからず困ってます>< 1 常微分方程式 dy/dx=f(x,y),y(0)=1 の数値解をオイラー法を用いて計算するプログラムを作為せよ。ただし、f(x,y)=3-6x^2-4x+2xyとする。 2 α=1,β=1,γ=1/2,σ=1/2 の場合の2次ルンゲクッタ法を考える。1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を求めるプログラムを作成せよ。また、オイラー法と2次ルンゲクッタ法の実行結果を示して、2つの近似精度を比較せよ。 3 1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を4次ルンゲクッタ法を使って求めるプログラムを作成せよ。また、オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法の実行結果を示して、3つの近似精度を比較せよ。 以上の3つです。 休んでいた自分が悪いのですが、ネットで調べてもよくわからなくて… わかる方、よろしくおねがいします…

  • Cプログラミング

    授業で次のような課題が出されたのですが、うまく結果表示が出来なくて困っています。自分が1で相手が2なのに自分の負け。と出てしまったり・・・ そのようなプログラムを書けばよいのでしょうか? お答えよろしくお願いします。 乱数を使って計算機とジャンケンをするゲームを作成せよ。グーは“0”、チョキは“1”、パーは“2”として、人間の出す手はキーボードからの数値(0か1か2)入力を、計算機の出す手は乱数(0〜2の整数)を用いることとする。その勝敗を判定し、結果を表示させるようにすること。

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • C言語を始めようと考えている者です

    某国立大理学部数学科の1回生です 4月から2回生の講義でC言語の講義があります。 以下がその内容となります 授業の到達目標 (1) 2進整数の計算、浮動小数点数の計算ができる。 (2) コンピュータが計算を行う基本的な仕組みがわかる。 (3) (2)の内容を実際にC言語で確認できる。 (4) C言語で簡単な数学の問題を解くプログラムを書くことができる。 授業スケジュール 講義  1. 計算と計算機の歴史  2. 2進整数の計算  3. 補数の考え方  4. 浮動小数点数の計算  5. 基本的なデータ型  6. プログラムの条件分岐構造  7. 中間試験  8. プログラムの繰り返し構造I  9. プログラムの繰り返し構造II 10. 配列I 11. 配列II 12. 関数 13. 素数に関する問題を解くプログラム 14. 微積分に関する問題を解くプログラム 15. 学期末試験とその解説 僕は今まで全くC言語プログラミングをしたことがありません。 他の言語も同様です。 http://www.forest.impress.co.jp/library/software/gakucgengo/ このサイトに出ている文法を学ぶことができる開発環境はダウンロードしました。 卒業後はgoogleに就職したいので今のうちからC言語は学んでおきたいのですが 先ず、何を学べばよいのかわかりません… 「アルゴリズム」や、「コンピュータの計算の仕組み」などを学ぶ必要もあると思うのですが 何から手を付ければよいのでしょうか? 考えが煮詰まってしまっています。アドバイスなどお願い致します。 因みに、現在用いているOSはwindows7です。 もしよろしければ、C言語初心者が学び始めるにあたって力強い書籍、サイトなど ありましたら教えてください。 よろしくお願い致します。

  • C言語プログラミングの問題がわかりません。

    問題 1から1000までの整数で、13を省いた数値を加算するプログラムを作成せよ。つまり 1+2+3+4+5+6+7+8+9+10+11+12+14......+998+999+1000 を計算する次のプログラムで?????の部分として適切なものを入れよ。 画像にありますのでどうか回答をお願いいたします

  • C言語の参考書について

    大学の後期の授業でC言語の参考書を買ってくるように言われました。 でもどの参考書がいいのかわからないので教えてください!! 前期の授業では ・C言語で作成したプログラムのコンパイルと実行の 流れ ・コンパイルエラーのエラーメッセージの見方 ・実行時のエラーとプログラムの修正 ・C言語のプログラムの基本形 ・printf()と定数 ・変数 ・数値型 ・文字型 ・文字列 ・printf()の書式指定 ・プログラム記述時の約束、予約語 ・算術演算子 ・代入演算子 ・インクリメント、デクリメント演算子 ・比較演算子(関係演算子) ・式が持っている値 ・論理演算子 ・条件付き代入 を勉強しました。 その範囲は、まだちゃんとに覚えてないけど授業でもらったプリントを見れば一応できます。 それで先生いわく、参考書は入門編でもいいらしいんですけど、さらに実践編も買い足さなければいけないらしいんです。 今の状態で実践編でも大丈夫ですかねぇ??

  • C言語で

    C言語の授業で課題がでたのですがわかりません。どなたかおしえていただけないでしょうか? [問題] ある商品の原価に消費税5%を加えた金額を計算するとき、 1.切り捨て 2.切り上げ 3.四捨五入 の3つの方法がある。商品の原価をfloat型の数としてscanf()で入力し、それぞれの方法で売価を計算するプログラムを作成せよ という問題です。 原価×1.05 を計算するところまではわかるのですが、どの方法でもその先から進みません。 よろしくお願いします。

  • 【初心者】c言語をもう一度勉強しようと思います。

    c言語をもう一度勉強しようと思います。 独習Cとかの本を一回通しでやって理解していないぐらいの実力です。 ポインタとか構造体とかなんとなくふんわりとした感じでしか理解していなくて プログラミングとか書けません。 文法を固めるのが先か、 何かつくれるようにするのが先かどうすれば上達しますかね? VC6.0++でウィンドープログラミングにしたりしてみたのですが、 肝心のプログラム自体の内容がほぼ無意味なプログラムなので どうすれば内容の濃いプログラムを作れるか考えてしまいます。 アルゴリズムとか数学や物理の公式を実装できればいいと思うのですが、 まず実装までおとしこめないし、 また、何につかったらいいのかもよくわかりません。

  • C言語でπを2万桁まで計算するには

    C言語でπの値を2万桁まで(2万という数字に特に意味はないですが大きい桁)をマーチンの公式を用いて計算したいのです。 マーチンの公式によるπの求め方は 16×アークタンジェント(1/5) - 4×アークタンジェント(1/239) ということは分かったのですが double型の変数を使っても扱える桁数はたかがしれているので どのようにすればアークタンジェント(1/5)などの値を C言語のプログラムで大きい桁まで求めることができるのでしょうか。 また何かうまい具合に計算できるアルゴリズムなどがありましたら 教えてください。 詳しい方いましたら、よろしくお願いします。 もしよければ参考プログラムなども 貼り付けていただけたら幸いです。