カテゴリー
C言語

関数について知ろう

この章では関数について説明します。
関数とは入力したデータ(引数)に基づいて、決められた処理を行い、戻り値という結果を返す機能を持っています。
関数の仕組みはエクセルの関数の仕組みと意味は同じです。111 この章以前の関数は「組み込み関数」と言いまして、C言語によって始めから用意されている関数です。
例えばprintf関数は文字列を出力する関数ですが、C言語でそのような働きを作ってくれています。
組み込み関数の他にC言語では自分で好き勝手に1を作ることができます。
これを「ユーザー定義関数」と言いますが、この関数の作成方法をこの章で説明していきます。
例えば消費税額を自動で計算する関数を自分で作りたいとします。その場合、商品のお金を関数に渡すと関数は商品金額に消費税額を掛けた処理をして、その金額を返すという関数を作ることになります。
関数の構文は以下の通りですが、これを「関数の定義」と呼びます。1 〇引数とは関数が利用するデータのことを言います。
〇関数の中の引数は左端から第1引数,第2引数と順番に数えていきます。
また1個以上の引数を記述する場合はカンマで区切ってください。引数がない場合には1を入れます。
〇returnを記述するときは1という形で書きます。
またreturnは省略できます。returnの詳細は後ほど説明します。
main関数も関数の一種ですが、他にも色々な関数を作ることができます。
main関数は特別で他にどんな関数を作っても一番初めに実行される関数です。
次に関数の実行方法について説明します。
関数はmain関数を除いて関数を定義しただけでは何も動きません。
関数を実行させるためには関数を呼び出す必要があります。
そして、呼び出すことによって関数の中身が実行されます。1 では1番簡単な例から、見てみましょう。1 初めに、プログラムの流れから見てみます。
① main関数とhello関数がありますが、初めに実行されるのはmain関数です。
main関数の中では上から順にプログラムは流れていきます。
ですので、初めに1が実行されます。
②次にhello();を実行します。
関数名に「()」を付け、hello関数を呼び出しています。
hello関数内では1を実行して「こんにちは」を出力します。

③hello関数を実行し終えたのならばmain関数に戻ってきて、プログラムを終了します。1
では関数の構文を詳しく説明します。
初めに「戻り値の型」について説明します。11 関数とは入力したデータ(引数)に基づいて決められた処理を行い、戻り値という実行結果を返す機能を持っていますと説明しましたが、その戻り値の型を関数名の左側に書きます。
戻すための値がない場合には1と書きます。1次に引数について説明します。11 void hello(void)の2つ目のvoidは引数が無いと言う意味です。
つまり、関数の呼び出し元から渡されてくる引数が無いということです。
この例の場合は1の箇所でhello関数を呼び出していますが、引数がカラです。

次は関数名について説明します。
関数名には「hello」と名前が付いていますが、名前の付け方にもルールがあります。
1つ目は1文字目は数字で始めることはできません。
つまり、3nという名前はつけることはできません。
1文字目は
「アンダースコア(_)」
「aからz」
「AからZ」のどれかで書きます。
2つ目は2文字目からは
「アンダースコア(_)」
「aからz」
「AからZ」
「数字」が使えます。
3つ目は31文字まで名前を付けることが出来ます
4つ目は予約語を使うことができません。
5つ目は基本的には小文字で書いてください。

次は関数についての注意点について説明します。
関数の定義は関数の呼び出しよりも前に定義しなければいけません。
つまり、先ほどの例で説明すると1はmain関数の中にあるので、main関数よりhello関数を後ろに書いてはいけないということです。
以下の書き方はエラーです。1
次は引数のある関数についての説明をします。11 プログラムの流れをみてみましょう。
①初めに実行されるのはmain関数です。
「int a=2,b=3;」で変数の宣言と初期化を行っています。
次に1を実行します。

②次に「tashizan(a,b);」の箇所でtashizan関数を呼び出します。
初めの例では1のようにカッコの中の引数はカラでしたが、この例ではtashizan関数に渡す値をa,bという引数で設定しています。
この呼び出し側のカッコの中の引数を実引数と言います。

③次にtashizan関数を実行します。
この関数の中の引数を仮引数と言います。
tashizan関数が呼び出されたのならば1のaの部分がtashizan関数の1の部分にセットされ、1のbの部分がtashizan関数の1の部分にそれぞれセットされます。
つまり、2が1に入り、3が1に入ります。
その後に関数内部のプログラムが実行されます。1 tashizan関数を実行し終えたのならばmain関数に戻ってきて,1でプログラムを終了します。
1111しかし、実引数と仮引数の型が違う場合には型変換の規則に従って自動的に変換されます。
型変換の規則については説明済みですが転載します。11
次は戻り値のある例を見てみましょう。1111111 tashizan関数の中で足し算の計算がされて、変数zにその結果を代入しています。11 このようにreturnは関数の呼び出し元に戻り値を返す役割があります。
では、どのような時に戻り値を返すのか?
それは呼びだし側であるmain関数内でその値を活用したい場合に戻り値を返します。1 この例の場合はreturnで返されるzはint型なのでtashizan関数の戻り値の型もintにしてください。1

カテゴリー
C言語

記号定数について知ろう

この章では記号定数について説明します。
記号定数とは変数のように値を変更することができない値のことを言います
下記のようにdefine構文を使えば、特定の値を記号定数として定義できます。1 では例をみてみましょう。1 この例ではfor文の条件式の中で記号定数を使用しています。
この例の記号定数名はRですが、これは3を意味しています。
つまり、プログラムの中にRと言う文字があるならば3と置き換えますと言う意味です。
以下の3つのfor文の中の条件式に3という箇所がありますが、変更が生じた場合にこれをすべて変更するのは面倒です。
そこでこの3という数値を記号定数にすることで変更が生じた場合にも記号定数の値だけを変更すればいいので変更が楽になります。111

カテゴリー
C言語

計算プログラムを作ろう

この章では足し算の練習プログラムを作成します。
問題を5問解いて、正解数をカウントします。 111 111
次は初めのfor文の中を説明します。1 =>rand関数は乱数を返します(関数については「関数について知ろう」でします。)。
計算をするのに毎回違う数を使いたいのでrand関数を使います。
具体的には0から32767までの数字の中でランダムな数を返します(詳しくは「switch文で占いを判定しよう」で説明します)。
範囲を限定したい場合には例えば1と書きますと1から6までの中でランダムな数を返すようになります。
この例であれば1から50までのランダムな数を返します(詳しくは「switch文で占いを判定しよう」で説明します)。1
rand関数を使うためには文頭で1と書かなくてはいけませんので注意してください。
では次の箇所の説明をします。1 => number1とnumber2の足し算の文を表示します。
つまり、以下の赤枠の箇所です。1 1 =>答えをinput変数に代入します。
answer[i]=input;
=> scanfで入力した値が入っているinputを配列であるanswerに入れます。
for文で5回繰り返しているので、その都度入力した値が配列に入ります。1 result[i]=number1+number2;
=> number1とnumber2の結果(つまり正解値)をresult配列に代入します。
for文で5回繰り返しているので、その都度正解値が配列に入ります。1
次の箇所の説明をします。1 =>ここでは配列answerに入っている答えと配列resultに入っている答えを比べて、正解ならば変数rightanwerに1を足します。
for文で5回繰り返しているので、その都度答え合わせをして、正解ならば変数rightanwerに1を足します。
結果は以下の通りです。1
実はこの計算プログラムは何回実行しても同じ計算式しか表示されません。
毎回違う計算式を表示させたいのならば、以下の赤枠の記述を付け加えます。
詳しくは「switch文で占いを判定しよう」で説明します。11

カテゴリー
C言語

whileとifとcontinueを組み合わせて使おう

この章ではwhileの中でcontinueを使う方法について説明します。
では例をみてみましょう。11 入力した値が1であるならばgoukeiに入力値が足されないでwhile文の先頭に戻ります。
for文の中で使うcontinueと使い方は一緒ですが、この例の場合にはcontinueが実行されても、iの値が加算されないので、また同じループを繰り返します。
1を入力しなければ4回でループは終わります。
結果は以下の通りです。1

カテゴリー
C言語

forとifとcontinueを組み合わせて使おう

この章ではcontinueの使い方について説明します。
continueは現在進行している周回を抜けたとしても、ループ自体は続けたい場合に使います。
主にfor文やwhile文などでよく使われます。
では例をみてみましょう。11 実行結果は以下の通りです。
1つのリンゴ2つのリンゴ3つのリンゴ5つのリンゴ 
if(i==g)の条件がTRUEの場合、下の行にある1を実行することなくforの先頭に戻ります。
例の場合はgが4なので「4つのリンゴ」と言う文を出力しません。
例ではiとgがイコールになったら、forの先頭に戻って条件判定をしてループを続けるかどうか決めますが、この例では先頭に戻ってもiは5ですのでTRUEとなり「5つのリンゴ」を出力します。
breakと違いループ自体を止めることはしません。1

カテゴリー
C言語

whileとifとbreakを組み合わせて使おう

for文の中でbreakを使ってきましたが、この章ではwhile文の中でのbreakの使い方について説明します。
breakの使い方はfor文と同じです。
では例をみてみましょう。11 上の例はwhile文の中にif文が入っている構造です。1111111

カテゴリー
C言語

forとifとbreakを組み合わせて使おう

この章ではfor文の中でのbreakの使い方について説明します。
switch文の中でbreakを使用しましたが、これは一連の流れを強制的に中止したい時やブロックを抜けたい時に使いました
このbreakはfor文の中でも使用することが出来ますので、例を見てみましょう。1 1例のようにfor文にif文を入れることもできます。
このif文の意味はbreakを使用しているので「もし、iが4になったらfor文を抜けますよ」と言う意味です。
ですので、「4つのリンゴ」「5つのリンゴ」を出力することなくループを終了します。
breakはこのように一連の流れ(ループ)を強制的に中止したい時に使用します。
次の例はforの入れ子の中でbreakを使用しています。11 この例では上から2つ目のforの中でbreakを使っていますが、forの中でbreakを使った場合、breakで抜けることができるのはbreakのあるfor文(例の場合は上から2つ目)だけです。
つまり例の場合は上から2つ目のfor文の中のif文の条件部分が3を超えたら、(上から2つ目の)for文をbreakするのですが、breakした後はまた一番前の1に戻ってループを繰り返します。11
次の例をみてみましょう。11 先ほどの例のように入れ子の中のfor文でbreakを使用した場合、抜けることが出来るのは内側のfor文だけですが、一気に外側のブロック(一番前のfor)を抜けたい場合の方法について説明します。
ある条件になったら繰り返しを止めたいと思う箇所に1と記述してください。
次に抜けたい箇所に1と言う形式で記述すると、そこまで実行位置を移すことができます。ラベル名は変数名と同じ規則で自由に付けることが出来ます。
この例では1 の箇所で「i*j」の結果が3より大きければが1実行されて、1のある場所まで実行位置を移すので二重ループそのものを抜けます。1 1for文以外でもgotoは使うことができます。
以下の例ではif文の中でgotoを使用しています。111111

カテゴリー
C言語

for文で九九を作ろう

この章では2次元配列とfor文の入れ子で以下の九九表を作成します。1 では例をみてみましょう。11111 つまり、以下の作業を行っています。1111 ここでは9回の繰り返しを行いますが、初めの1回転目だけを説明します。11111111111111

カテゴリー
C言語

for文を入れ子にしよう

この章ではfor文の応用でfor文の入れ子について説明します。
つまりfor文の中にfor文が入っている形式です。
では例をみてみましょう。11
for文のネストは複雑なので順を追って説明します。11 ここがTRUEなので1 が3回実行されて
1掛ける1=1
1掛ける2=2
1掛ける3=3
が出力されます。
つまり、外側のfor文が1周するごとに内側のfor文は3周します。111 上の3番でiは2になりましたが、まだTRUEですので、1 が3回実行されて      
2掛ける1=2
2掛ける2=4
2掛ける3=6
が出力されます。
11上の5番でiは3になりましたが、まだTRUEですので、1 が3回実行されて 
3掛ける1=3
3掛ける2=6
3掛ける3=9
が出力されます。
11まとめますと、この例では外側のfor文が1周するごとに中のfor文は3周しています。
これがfor文の入れ子です。1

カテゴリー
C言語

for文について知ろう

この章ではfor文について説明します。
while文は何回も同じ処理をする時に必要でしたが、for文もwhile文と同じ働きがあります。1 forが最初に実行される時には初期値式から始まります。
初期値式とは条件式を判定するときの初めの変数です。
初期値式は下の例で言えば1です。
次に初期値式を元に条件式を判定してTRUEであるならば、処理文が実行されることになります。
条件式は下の例で言えば1です。
処理文が実行された後に増減式において、初期値を足したり引いたりする行為を行います。
増減式は下の例で言えば1です。
プログラムの内容によっては減算子の1という記述もできます。
では例をみてみましょう。111111 111次の例をみてみましょう。
この例は2つfor文がありますが、上のfor文で配列にデータを入れて、下のfor文でそのデータを取り出しています。111 この例は最初のforでtashizan配列にループでデータを入れて、次のforで配列の要素を出力しています。111 次の例ではfor文で文字列を出力する方法について説明します。11 「char s[100]=”cats”;」のように配列に文字列を入力する時には文字列の最後に1が自動で付きますので、これを利用して配列の要素が1ではない限り配列の要素を出力します。
1があったら、ループを終了します。