情報系音ゲーマーの手記

Splatoon2とかDDRとか

【プログラミング超初心者向け】C言語の入門みたいな話 前編

はじめに

今回の内容は、大学でプログラミングに初めて触れるような"プログラミング超初心者向け"となっています。すでに予備知識のある方は特に得られるものはないと思います。

大学に入学したての頃は、死ぬほどプログラミングが苦手でした。その経験をもとに、初めて触れたときの感覚を思い出しながら書いていきます。

また、記憶を頼りにしながら書いてるので、たまに間違ってる部分があるかもしれません。もし、そういうのを発見されたら、コメントでお教えしていただけると助かります。


C言語でのプログラミングの前に

プログラミングに用いる構文の前に、重要なワードを3つ紹介しておきます。それは、「2進数」と「0オリジン」と「コンパイル」というものです。

2進数

普段、わたしたちの身の回りに存在する数字のほとんどが"10進数"です。
"2進数"はコンピュータ内部で利用されており、情報系の生徒であれば嫌でも耳にする言葉です。

簡単に言ってしまえば、0と1のみを用いて数字を表現する方法が2進法で、それによって表される数字のことを2進数といいます。
詳しくはこちらがわかりやすかったので参考にしてみてください。(リンク先を読むのがめんどくさければすっとばしてもらってもOKです。)
2進数、16進数と10進数 - CyberLibrarian

また、次の図に示す値はよくでてくるので頭の片すみに入れておくことを推奨します。上が10進数(decimal)での表示、下が2進数(binary)での表示となります。
f:id:eiki1253:20170413014339p:plain

0オリジン

2進数は、人によっては聞いたことあるかもしれませんが、こちらのワードを聞いたことがある人は比較的少ないのではないでしょうか。
簡単に言うと、1から数え始めるのではなく、0から数え始めるということです。
イメージを↓の図に示します。
f:id:eiki1253:20170413015157p:plain

プログラムを書く際は、0オリジンが基本なんだなと覚えておいていただければ結構です。

コンパイル

英語で書くとcompile、意味は"編集する"とか"機械語に翻訳する"などがあります。今回はもちろん後者の意味で用います。
プログラミング言語(C言語javaPython...)は、あくまで人が理解しやすいように設計された言語であり、そのままではコンピュータが処理を行うことができません。そこでプログラミング言語をコンピュータが理解できるように翻訳する必要があります。
さすがに人の手で変換するのはキツいので、コンパイラと呼ばれるものを使ってプログラムをコンパイル--つまり機械語に翻訳--してあげます。

また、プログラムの構文に間違いがあればコンパイルエラーとなり、正しく実行ができません。ここで必要になるのが、プログラムの間違いを見つける作業、いわゆるデバッグです。かなり細かいミスなどでもプログラムは動かないですが、自分の書いたプログラムは間違いが見つけづらいので、少し探してバグが見つからなければ、ほかの人に助けを求めてみるのが吉です。


C言語のプログラムを書くにあたって

どんなC言語のプログラムを書くときも、大体必要になる枠組みがあります。それがinclude文とmain関数です。

include文

どの参考書のどんな簡単なプログラムでも、一番初めに次の1文が書かれてることがほとんどです。

#include <stdio.h>

よく、プログラムを書くための「おまじない」と説明されることがあるのですが、その正体はstandard input/output のヘッダファイルです。
standard input/outputなので、標準入力(キーボード使って文字を入力したりすること)や、標準出力(文字をパソコンの画面に表示すること)をするためのファイルを読み込んでるということになります。
これがないと後述のprintf文(画面上に文字を表示する文)が使えなくなってしまうので、画面上に何も表示できなくなります。

他にも文字を扱うのに特化したstring.hや、数学に特化したmath.hなとがありますが、今回は別に必要ないので触れません。興味がある方は調べてみるといいかもしれません。

main関数

C言語でプログラムを動かす際にかならず1つだけ必要になる関数がこのmain関数となります。
また、main関数以外の関数(後述)を使いたくても、main関数を経由しなければいけないので、言ってみれば関数の親玉みたいな存在です。

基本的な枠組みは次のようになります。

int main(){
 /* なんらかの処理 */
 return 0;
}

上のプログラムを読んで初心者の方は「そもそも関数ってなんだよ」とか「intって何だよ」とか「return 0;って何だよ」とか思ったことだと思います。

では、これらの3つについて解説を少し挟みます。(説明の関係上順番が前後しています。)

int型

簡単に言っちゃえば「この数字は整数です!!」っていう宣言です。例えば次のような文があったとします。

int x;

この文では、xは整数だということを示しています。

ここで注意していただきたいのは、われわれは賢いのですが、コンピュータはアホなので、intで宣言された変数(今回はx)は、"絶対に整数しか扱えない"ということです。

例えば次のようにしたとします。

int x;
x=0.9;

この場合、コンパイルはできるのですが、コンピュータ内部では小数点以下が切り捨てられてx=0として扱われてしまいます。(四捨五入なんていうめんどくさい処理は行われないので注意です。)

「じゃあ小数扱うにはどないせぇっちゅうねん」という方、double型やfloat型とかありますが、今回の説明範囲を超えてしまうので割愛です。自分で検索してみてください。わかりやすいサイトがたくさんあります。

関数

関数というと、数学の授業で習ったf(x)=x^2のようなものを想像すると思います。
実は大体あってます。結構似てます。

試しに上記の式をプログラムにしてみます。(main関数以外の関数にあたります)

int f(int x){
 int kotae;
 kotae=x*x;
 return kotae;
}

プログラムの解説をしていきます。
まず1行目から、"int f(int x)"。たぶん「なんでintが2つもあるんや???」ってなると思います。
一番初めのintは、「答え(正式名称:返り値)が整数になるよ!!」ということを示しており、2番目のカッコの中にあるintは、f(x)=x^2でいうところの「代入する数(正式名称:引数)が整数だよ!!」ということを示しています。
また、fは関数の名前、xは引数の名前です。名前は好きなように変えられます。

2行目、"int kotae;"、これは前の章で書いた通り、「kotaeには整数が入るよ!!」ということを示しています。

3行目、kotaeに計算結果を入れます。イメージ図を置いておきます。
f:id:eiki1253:20170414175247p:plain

そして4行目ですが、次の節で解説になります。

return文

さきほどのプログラムでは"return kotae;"となっていました。
returnという単語から、勘のいい方はもう気づいてるかと思います。

2つ出てきたint型のうちの1つ目、「答え(正式名称:返り値)が整数になるよ!!」の返り値が"kotae"となるのです。

実はさっきの関数、以下の通り、もっと短く書くことができます。

int f(int x){
 return x*x;
}

返り値に直接計算をぶち込む形です。どっちかというと、こっちのほうが分かりやすいかもしれない(?)


main関数は"int main()"という部分だけで「mainという名前関数は、返り値がint型(整数)であり、引数は無し」、ということがわかります。


まとめ

長くなってきたので今回の記事で解説してきたものを組み合わせて、2乗を計算させるプログラムを作って、うまく実行できているか確認します。
また、プログラム中に出てくる /* 文章 */ みたいなものは、コメントアウトといいます。
これは、コンパイラに「これで囲われている部分は無視してOK」ということを伝えるものなので、プログラム自体に影響は与えません。

結果の画面に表示するためにprintf関数を用いています。今回の記事では説明していませんが、これがないと結果の確認ができないので、やむを得ず使用しました。ご了承ください。

#include <stdio.h>

int f(int x){ /* main関数以外の関数 */
	int kotae;
	kotae=x*x;
	return kotae;
}

int main(){ /* main関数 */
	int ans;
	ans=f(3); /* f(3)=3*3 の結果、9をansに入れる */
	printf("%d\n",ans); /* 結果を画面に出す */
	return 0;
}

プログラムの実行はオンラインの実行環境(つまり、自分はプログラムを書くだけよい)である"codepad"様で行わせていただきました。
codepad

結果
f:id:eiki1253:20170414183726p:plain
しっかり結果(output)が9になっていることから、処理は成功しているようです。

以上で今回の記事は終了になります。ありがとうございました。



以下、おまけの参考書コーナーです。




おまけ:参考書

私が初心者のときに利用していたのは「かんたんC言語

かんたんC言語 (プログラミングの教科書)

かんたんC言語 (プログラミングの教科書)

友人が利用していたのはで覚えているのは「猫C(通称)」と「苦C(通称)」

苦しんで覚えるC言語

苦しんで覚えるC言語

紹介はしておきましたが、いろいろな参考書があるので、実際に書店に行って自分の学び方に合うものを購入するのがいいと思います。

それでは、また次回。