見出し画像

プログラミング学習の記録 #001(C)

もう10月も終わりだというのに、卒業研究のテーマが決まらず、若干の焦りを感じている。色々と調べてはいるものの、正直、何をすべきかがわからないだけでなく、何をしたいかすらもわからなくなりつつある。ただ、どのようなテーマになろうとも、計算機を用いた数値計算を行うことにはなるので、とりあえず、C言語を用いたプログラミングを学習していこうと思った。しっかりと学習が続くように、noteで進捗報告をしたいと思う。また、プログラミングをしたい(あるいは、する必要がある)けど、(見えている範囲の)周りの人々のレベルが高すぎて劣等感や焦燥感を覚えている、という人がいれば、ぜひとも読んでもらいたい。そして、レベルの低い人もいるということを知ってもらえると幸いである。

プログラミング経験

さて、このnoteを書いている僕は、現在、理学部で宇宙物理学を学んでいる学部4回生である。以下に、プログラミング経験について記載しておく。学部2回生の頃に、(学部1回生向けの)全学共通科目「情報基礎演習」を履修して単位を取得した。この科目では、
[1] Microsoft OfficeのWordとExcel
[2] LaTex
[3] C言語
を学習するのだが、単位取得をするだけなら、[1],[2]に取り組み、極めて少しだけ[3]に取り組めば十分であったため、C言語が身につくことはなかった。その後、学部3回生前期には、理学部科目「物理科学課題演習C1」という科目でC言語を学習した。しかし、図書館にある教科書を読んでも全然理解できず、結局、テキストに掲載されていたNewton法はさみうち法をほとんどそのまま使って、楕円運動する彗星の軌道らしきものを求めただけであった。確か他の学生は、ブラックホールやら超新星爆発やらを計算していたような気がする。学部3回生後期には、理学部科目「物理科学課題演習C3」という科目を履修して、R言語とAWK言語を扱ったが、こちらも全然理解できず、年度末にレポート未完のまま脱落した。そして、4回生後期に至る。現在のプログラミング関連の知識としては、どのプログラミング言語であっても、基本的には、プログラムコードを書いて、それをTerminalで実行するという流れになる、ということを知っている程度である。

これからの学習について

上述の通り、C言語の学習をはじめていくつもりであるが、プログラムコードを書く知識も技術も初学者と同程度なので、一から学んでいこうと思う。これからの学習は、理学部図書室で借りてきた服部裕司(2009)の『C&Fortranによる数値計算プログラミング入門 改訂版』という教科書を用いて進めていくつもりである。わからなくなったら、別の教科書に移るかもしれない。ちなみに、この教科書を選んだ理由は、タイトルがわかりやすかったこととA5版で持ち運びやすかったということだけである。

コンピュータとプログラミング

教科書の第1章では、プログラムコードを書くというよりも、そもそも計算機やプログラミング言語とは何かということについて記載されていた。引用の引用になるが、

コンピュータ科学とは、処方せん(アルゴリズム)とその実行の仕方を学ぶ学問である。

(Alan W. Biermann「やさしいコンピュータ科学」より)

とあったので、この言葉を大事にしていこうと思う。あと、計算機内部で用いられる「機械語」と人間が書く「高級プログラミング言語」という考え方を学んだ。なるほど、人間が高級プログラミング言語を用いて書いた文章を「コンパイラ」という翻訳家が機械語の文章に翻訳することで、計算機が動くということらしい。もう一つだけ引用して、この項目を終える。

コンピュータを扱うセンス、コンピュータ向きの性格というものもあるようである。しかし、コンピュータが苦手だと思う人も決して悲観することはない。少し考え方を変えてみることで、最低限のことはできるようになるはずである。

服部裕司(2009)『C&Fortranによる数値計算プログラミング入門 改訂版』より

printf

よく見る「Hello, World.」を出力する。ファイル名を「1026-1.c」として、教科書に記載されているコードを丸写しして、

#include <stdio.h>

main()
{
    printf("Hello, World.\n");
}

というコードを書いた。Terminalで、これをコンパイルして実行すると、

% cc 1026-1.c
1026-1.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
% ./a.out    
Hello, World.

と表示された。「warning」とあるが、これは、関数の戻り値を書いていないことが原因らしい。しかし、よくわからないし、このままでも「Hello, World.」が出力できたので、とりあえず、このままにしておく。もし、詳しい人がいれば、コメントで教えてほしい。練習問題として、「自分の名前を画面表示してみよう。」という問題があったので、これに挑戦してみる。自分の名前ではなく、推しメンの小池美波さんの名前を入れて、

#include <stdio.h>

main()
{
    printf("Koike Minami.\n");
}

というコードを書いた。ファイル名を「1026-2.c」とし、Terminalで、これをコンパイルして実行すると、

% cc 1026-2.c
1026-2.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
% ./a.out    
Koike Minami.

と表示された。成功である。さらに、printfを複数回使えば、複数行の表示ができるだろうと思って、以下のようなコードを書いた。

#include <stdio.h>

main()
{
    printf("Wow...\n");
    printf("Tell me what you wanna do\n");
    printf("Give me something to believe in\n");
    printf("Wow...\n");
    printf("Tell me if you're down to stay for the never ending game\n");
}

これを実行すると、

% cc 1026-3.c
1026-3.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
% ./a.out
Wow...
Tell me what you wanna do
Give me something to believe in
Wow...
Tell me if you're down to stay for the never ending game
% 

と表示された。推測は、正しかったらしい。ちなみに、この文章は、櫻坂46の楽曲「恋が絶滅する日」の歌詞である。

-----

動け!タイムライン

この記事が参加している募集

動物園か水族館にいきたいですね。