C言語でのソースコードの例をあげる。
#include <stdio.h> ←標準関数の設定 void sum(int x,int y); ←関数の宣言 int x; ←変数の宣言 ↓以下、関数の定義 int main(){ int y; * 省略 * return 0; } void sum(int x,int y){ * 省略 * }
標準関数とは、元々用意されている関数のことで、それを利用する際に読み込むために設定される。様々な標準関数が存在しているが、一般的に使われるのはprintfと言った関数が設定されているstdio.hであり、学校などでも"おまじない"として覚えろ、といわれることが多い。
関数の宣言とは、コンパイルする際にコンパイラがどのようにコンパイルするのか、を示すために記述するものである。ただし、main関数は宣言はしない。予め設定されているためである。
変数の宣言とは、全ての領域で使用することが可能な変数を設定することができます。また、変数には文字列から数字など様々なデータを格納することができる部屋のようなものを持っており、それぞれ個別にアドレスと呼ばれる住所のようなものが割り当てられている。ここでは変数の型を定義し、変数名を与えることによって役割を持つ、と覚えるだけでいい。
次に、標準関数で使うことができる関数について紹介していく。
stdio.hは入出力機能をメインとしており、ファイルの入出力から文字の入出力をすることができる。最も使われる関数のみここで紹介する。
他の関数については別途、使用する際に紹介する。
scanf("%d",&変数); 上記の一文はキーボードからデータを入力する機能で、数字や文字を入力する 関数である。 %dはint型の関数をの入力が可能となっている。"&変数"は入力した値を格納し たい変数名を入力する。int型とは、小数点を考えない整数のデータのことである。 アドレス参照型を表す&は必須なので、&は省略しないこと。 ※アドレスとは プログラムの関数や変数には、それぞれアドレスと言うものが存在しています。 アドレスとは、1バイトごとに管理されている部屋のようなものを指す。 printf("文字列",変数1,変数2・・・); 文字の表示を行う関数。改行については\nで行うことが出来る。 変数については省略可能。
ここまで紹介してきた内容で、ようやくここでひとつの形あるソースコードを作成することが可能となる。まず、下記のサンプルコードを入力し、実際にコンパイルして表示することができるかを試す。ただし、サンプルコードは一部記入していない部分があるため、各自で何が記述されていないかを考え、記入を行う。
#include * 標準関数の設定 * int main(){ * 文字の表示 * return 0; }
出力結果 Hello!
解答:ls1_11.c
どうしてもコンパイルエラーが起きる!と言う場合、どこかで全角スペースキーが入力されていないか、文法にミス(最も多くあるのが"かぎかっこ"のつけ忘れ、セミコロン(;)の入力忘れ、領域外に認識できない文字コードが入力されている、などが挙げられる)がないか、を解答と合わせて比較していけばいい。
コンパイルエラーとは、バグによってソースコードを実行ファイルに変換できないことを意味する。
変数や関数には型が存在しているため、それについて述べる。型についてはここまで記述したプログラムにあるintとvoidと言った文字列のことであるが、それが型である。これにはそれぞれ役割が与えられている。
int 主に整数を取り扱っている。小数点以下は四捨五入されることなく切り捨てられる。 例) int x = 5; これは整数x=5の変数を宣言した、という意味である。 また、printfやscanfで取り扱う場合は%dを扱う。 例) printf("%d \n",x); これは変数xの数字を表示させることができる一文である。 %dとは、int型のデータを参照することができるもので、今回の場合はxを参照 している。 もし、データ参照にxとyと二つある場合は%dを二つ使うことによって参照すること ができる。 double 小数点を含む数値を取り扱っている。printfで表記する場合は%fで記入する。 ※ただし、scanfでdouble型を入力する場合は%lfで記入する。 float 小数点を含む数値を取り扱っている。doubleとの違いはメモリサイズが違う点である。 floatは単精度、doubleは倍精度となっている。 そのため、実数値の演算を行う場合はdoubleを利用したほうがいい。 void 空を表す、主に関数の定義の際に使用される。C言語の中でも特殊な型で、データを 持たないことを表している。
最後に、演算について。
演算とは早い話が算数の計算式のようなものであり、様々なものが存在している。この項目では今後使っていくことが多い演算子について紹介する。
int x; int y; x = 5; *代入演算子、変数xに定数5を代入する役割 y = x; *代入演算子、変数xに変数xを代入する役割 y = 3; *代入演算子 y = x + y; *算術演算子、+は加算の役割を持つ。 x = x - y; *算術演算子、-は減算の役割を持つ。 y = x * y; *算術演算子、*は乗算の役割を持つ。 x = x / y; *算術演算子、/は除算の役割を持つ。 y = x % y; *算術演算子、%は余りを求める役割を持つ。 ※注意点として、同じ型での代入が好ましい。 理由として、メモリサイズが違うためである(違うと支障が出る恐れがある) また、int型にdouble型の変数あるいは定数を代入した場合、 警告メッセージが表示されるが小数点以下を切り捨てた値が代入される。
関数についての紹介を行う。関数は
型 関数名(型 引数); * 関数の宣言 型 関数名(型 引数){ * 関数の定義 * ここにアルゴリズムなど * }
と定義される。先ほど使ったls1_11.cのmain関数は
int型で、引数はvoidの関数
と定義されていることがわかる。引数とは関数などに値を与え、代わりの変数に代入する役割を持っている。また、関数には特徴がいくつかあり、
・関数にもアドレスがある
・関数内で宣言した変数はその関数内でしか利用できない
・void型以外の型で宣言している場合、return関数を使う必要がある
と言う点がある。void型以外はデータを返す必要があるのでreturnで値を返す。またmain関数については先ほども紹介したが関数の宣言を必要としないため、宣言をする必要はない。
ここまでで入出力と演算と関数について述べてきた。ここで応用問題を出題する。今から出題する問題を以下の条件を踏まえた上でソースコードを組む。
int型の値x、y、zの合計値 double型の値a、b、cの平均値 を求めるプログラミングを作りなさい。 ただし、scanfでデータの入力は行うこと。 宣言する変数はmain関数にx,y,z,a,b,cの6つ。 合計値を計算するvoid型のsum関数を宣言、定義を行う。 平均値を計算するdouble型のave関数を宣言、定義を行う。 main関数に全て書き込む、ということはしないこと。 またプログラムの流れを理解できているかの問題である。 ・sum関数では文字の出力を行い ・ave関数では行わない 上記の条件は必ず満たしていること。
ヒント) *標準関数の宣言 *関数の宣言(2つ) int main(){ *int型x,y,zの宣言 *double型a,b,cの宣言 printf("x:"); scanf(設定); printf("y:"); scanf(設定); printf("z:"); scanf(設定); printf("a:"); scanf(設定); printf("b:"); scanf(設定); printf("c:"); scanf(設定); *関数sumの呼び出し *関数aveの呼び出し、および出力 return 0; } void sum(引数3つ){ int value_sum; *合計値の計算 *出力 } double ave(){ double value_ave; *平均値の計算 }
出力結果 x:1 y:2 z:3 a:1.4 b:1.5 c:1.6 sum:6 ave:1.50000....
解答:ls1_12.c
どうしてもコンパイルエラーが起きる!と言う場合、どこかで全角スペースキーが入力されていないか、文法にミス(最も多くあるのが"かぎかっこ"のつけ忘れ、セミコロン(;)の入力忘れ、領域外に認識できない文字コードが入力されている、などが挙げられる)がないか、を解答と合わせて比較していけばいい。