【簡単プログラム講座】C言語の基本の基本を学ぼう!【第1回】
さて、今回はたまには役に立つ記事を書いて行こうと思いまして。
プログラムって何? って人でも分かる講座を開こう!
んで、今回は第一回ってことでC言語の基本を学んでいきましょう。
といっても、僕はC言語以外あんまりなんですけど・・・やっぱり仕事で使うもの以外はそんなに学ばないってか学べないっすなぁ。あとはPythonとかその程度ですわ。
僕的にはJAVAとかRubyあたりをやっていきたいのだけれど、最初がC言語でオブジェクト指向じゃないものから入ったから若干、最近のオブジェクト指向の言語にとっつけない感がある。
・・・ということは置いといて! C言語はまあC++やC#、D言語なんかに影響を与えている言語ですのでやっぱり覚えておいて損はないと思いますよ。基本的な構文というか文字の並べ方ってのは結局どの言語もそんなに変わりませんしね。
では、開講!
目次
1.C言語とは何か?
当たり前のことかもしれませんがとても大事なことです。Cは、高級プログラミング言語です。つまり、人が簡単に読み書きでき、抽象度が高い言語のことですな。
一方で、より機械語に近い言語を低級言語と言います。
Cは高級言語の代表格なのです。ですから、学ぶとしたら結構簡単。
処理も複雑に書こうと思えば書けますし、簡単に書こうと思えばそうも書けます。処理全体を見るとそんな感じのことができますが、一つ一つをバラして見ていけばやっていることはカナーリ単純。
単純ではあるのですが、問題なのは標準ライブラリ関数。
関数ってのは、「これを使えばこういう処理ができますよ」ってのをまとめた機能みたいなもんです。要はボタンです。押せば(呼び出せば)、処理された結果が返ってくるってものです。
引数とかあるけれど・・・まあ、それはまたおいおい。
んで、まあ、この関数は作れるのですが、一方で、C言語内で標準的に搭載されている関数があるんですよ。それが標準ライブラリ関数。
これがまた豊富も豊富。なので、使い方が微妙に分からなかったり、難しかったり、下手をすれば不具合を起こしたりするものがたくさんあるのです。
使わなきゃまともなプログラムは作れない。けれど、なまじ中身が分からないだけに、しっかりどういう処理結果が返ってくるかを把握しておかなければいけません。
・・・いえ、難しいんじゃない。
使いたいものを使いたい時に知って、使えばいいだけです。そんな感じで十分。
さて、以下ではプログラムを動かす環境は一旦置いといて、簡単なところについて書いていきます。プログラムを動かすのは以下に書くことをちょっと覚えてからで十分。
2.基本的なやれること
じゃ、基本的なやれることを解説していこう。
メモリとか煩雑な話は抜きにして、初めてプログラムを作る場合に素で書ける(関数以外でできる)の処理について説明していきます。
大きく分けて関数以外に書けるものは以下の処理。
・計算
・条件判定(YES or NO)
・繰り返し
・・・以上!
これだけ? と思われそうですが、本当にこれだけなのです。
これだけで複雑な処理とかを行っているのです。
いや、もちろん、数値を出し入れ(取得、格納)したり、文章を保持したり、文字を取り出したりってこともできますが、そこら辺はいいでしょう。それは処理以前の問題で基本も基本なので、何回か書いていれば勝手に慣れる。
さて、じゃあ、上の三つの処理についてちょっと書こう。
・計算
これは簡単。四則演算プラスちょっとです。これの書き方。
足す、引く、かける、割る の順で + - * / です。これを覚えよう。基本中も基本で覚えるまでもないとか思ってしまいますが、仕事でも結構使います演算。
と言っても、足す引くはそのままです。注意すべきはかけるの記号*アスタリスクですな。それと、割るは/で表すと余りは出せません。余りは虚空の彼方に消えます。商だけが結果として返ってきます。(数値の型によっては小数点以下で返ってきますが・・・)
んで、プログラム特有のが以下
%
これはね、かなり使います。これは割った「余り」のみ返ってきます。これね、たとえば何の倍数か調べたり、一定の周期で処理したい時なんかに使えます。重要です。
んで、まあ、これだけ覚えれば基本は大丈夫。
2進数でのビット演算とかビットシフトなんてのもありますが、その辺はハードウェア的な部分かデータベース読み込み、データ構築なんかする時に改めて学べばいいでしょうな。この辺、なかなか面倒ですけど個人でやる分にはあまり使いませんし。
・条件判定(YES or NO)
条件判定は if~else 文ってので行います。基本はね。
~~~~~~~~~~~~~~~~~~~~~~~~~
if(A == 1){
puts("A = 1 !");
}else{
puts("A is Not 1 !");
}
~~~~~~~~~~~~~~~~~~~~~~~~~
たとえば上記のような文。これだとAが1だった時に A=1 ! ってのが表示されます。そうじゃなかったら A is Not 1 ! って表示されます。簡単ですね。
if() つまり()内の式が もしYESだったら{}で囲まれたことをする ってわけです。else がそうじゃなかったらってわけですな。
あとputsってのは関数です。表示する("")の中に書いたやつを表示するだけのね。
さて、ここで気になるのは条件判定で使っている
==
この記号。これは 等しいかどうか を判定します。以下に他の判定式を記載。
!= (等しくないかどうか 等しくなければYES)
> (大なり 左が大きければYES)
< (小なり 左が小さければYES)
>= (大なりイコール 左が大きいか等しければYES)
<= (小なりイコール 左が小さいか等しければYES)
まあ、こんなもんだけ覚えればいいかな。ちょっと特殊なものとして!とかあとは複数条件用の&&や||なんてのもありますが、この辺は代用が効くのでおいおい。
・繰り返し
これはちっとばかし上手く使おうとするとやっかい。
基本はwhile文とfor文を使います。まずはwhile文から
~~~~~~~~~~~~~~~~~~~~~~~~~
A = 0;
while(A < 100){
A = A + 1;
}
~~~~~~~~~~~~~~~~~~~~~~~~~
こうすると、Aが100を超えた時点で繰り返しが止まります。それまでの間はずっと、AにA+1を入れ続けます。つまり、while()の()内の式がYESであり続ける限り、{}内を繰り返すわけです。
A という変数(箱)に数字を入れる場合、A = 1 と書きます。左の名前の箱に右の数値(計算結果)を入れるイメージですな。
んで、 A=A+1 はAに入れた数字に対してA+1を代入していくのです。こういう変数の上書きができるところ、プログラムの特徴ですので覚えていきましょう。
さて、次にfor文
~~~~~~~~~~~~~~~~~~~~~~~~~
for(A = 0; A < 100; A = A + 1) {
}
~~~~~~~~~~~~~~~~~~~~~~~~~
はい、これでさっきのwhile文と全く同じ動きができます。短い!
for(初期値; 条件判定; 毎回行う処理) って感じで書きます。
初期値は最初の値をここで決めるのです。条件判定はwhile文と一緒でYESの間だけ{}内を繰り返し行います。んで、毎回行う処理は、繰り返しが行われるたびに行われるものです。
これ、たとえば for(A = 0; A < 10; A = A + 1) なんて風に簡単に特定回数の繰り返しを行えるのがポイントです。while文はどちらかというと繰り返し処理をして、何回になるか分からないけれど、条件に合った番が来たら繰り返しを止めるって時に使う感じですね。
まあ、以上です。
計算 + - * / %
条件判定 if()~else == != > < >= <=
繰り返し while() for(;;)
これだけ覚えておけば、基本的なとこは問題ありません。簡単簡単。
3.まずはとにかくプログラムを見てみよう!
さて、僕は口や文章で説明されるより、実物を見てそこから覚えていくのが好きなタイプです。演繹法より帰納法が好きなのです。
なので、御託は抜きにしてさあ、プログラム ドーン!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h>
int main(void){
int a;
puts("3X人乗りの車");
for(a = 1; a < 100; a++){
if(a%3 == 0){
printf("悪いなのび太、この車は%d人乗りなんだ\n", a);
}
}
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~
はい、以上です。
一応、計算と条件判定、そして繰り返し処理を意識して作成。動かしてはいませんが、動かすと恐らく以下のような動作になるでしょう。
~~~~~~~~~~~~~~~~~~~~~~~~~
3X人乗りの車
悪いなのび太、この車は3人乗りなんだ
悪いなのび太、この車は6人乗りなんだ
~省略~
悪いなのび太、この車は99人乗りなんだ
~~~~~~~~~~~~~~~~~~~~~~~~~
とまあ、こんな感じで3の倍数の時だけのび太を煽るスネオが出てきます。
今回、新しい物が次々と出てきましたが、まず
#include <stdio.h>
これはまあ、魔法みたいなもんで毎回書いといてください。stdio.hという標準ライブラリを利用して関数を使いますよーってことです。これがないと標準ライブラリ関数が使えません。
次に
int main(void){}
これは{}で囲まれた中の処理を行いますよってこと。main関数と言います。起動したときにまず一番最初にこの中の処理が行われるのです。これは必須。
return 0;
これはここで0って数値を返して関数を終了しますよってこと。まあ、これはルールみたいなもんで、正常に終了したら0を返しますって感じmain関数の最後に書いとくと良いでしょう。
・・・いや、ちゃんと解説しようと思ったらもちろん、しっかりできますよ? ちゃんとそれぞれ意味とかありますから。けれど、初心者の方にはこの辺はまあ魔法みたいなもんで、とりあえず書いといてくださいって話です。
4.詳しい解説
さて、じゃあ、さっきのものの中身だけ見ていこう。
~~~~~~~~~~~~~~~~~~~~~~~~~
int a;
puts("3X人乗りの車");
for(a = 1; a < 100; a++){
if(a%3 == 0){
printf("悪いなのび太、この車は%d人乗りなんだ\n", a);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~
解説したところを意識して使ったので、あらかた分かるかと思います。
まず
int a;
これは変数宣言と言います。つまり、数値とかを入れる箱を用意するのです。これをしないと数値のままでは保持して扱えないのでこれをします。
ここでは int型の a という変数を用意しています。int ってのは「整数をしまう箱だよ」って示していると思ってもらえれば今は十分です。
次
puts("3X人乗りの車");
これは上でも書きましたが、文章を表示するだけの機能です。
お次
for(a = 1; a < 100; a++){
これはまさに解説した通り。1から99まで繰り返します。
とはいえ、あれえ? a++ とはあ????
これは a = a + 1 を表しているのです。++でその変数に1を足すって意味なのです。
1ずつ進める処理がなにかと多いですから、簡単に表記できるようにこうしたものがあるのです。覚えておきましょう。
んで、
if(a%3 == 0){
これももう解説した通り。a%3でaを3で割った余りを表現します。んで、これが0だったらつまり、aが3の倍数ってことなのでYESとなるのです。
最後
printf("悪いなのび太、この車は%d人乗りなんだ\n", a);
これは・・・関数です。仕方ないよ、関数使わないと表現できないんだもん。
printf("")も("")内に書いた文章を表示するだけです。・・・だけなのですが、puts関数と違って、変数の中の数値なんかも表示してくれるわけです。
printfの文章の中に%dという文字を置いて、""の後ろに, aと入れておくとaの変数の中身を%dのところに表示してくれるわけです。
printf("%d %d",変数1, 変数2);
って感じで表示できるのです。複数入れた場合、左から順に,で区切った順に表示してくれます。便利ですね~。
%dだと10進数で表示してくれますが、他にも%cだと文字、%sだと文章、%xだと16進数なんて風に表示してくれます。この辺はまた別の機会にしましょう。
ま、以上です。
5.まとめ
・計算
・条件判定
・繰り返し
基本的にできるのはこれだけ!
これを組み合わせて、あとは関数覚えて上手く使おうって話。
ね、簡単でしょ?
・・・まあ、これが組み合わさりすぎると煩雑なんだけど。