プログラミング言語 C言語 -初級(後編)-

プログラミング


はじめに

前編では、基本的な変数・定数の使い方と、print関数について学びました。
前編での知識が前提となるため、まだ見ていない方はぜひチェックしてみてください😌

C言語 -初級(後編)-

では、後編を見ていきましょう😀
ここからは、より本格的な制御構文について書いていきます。

演算子

前編で紹介していた、+や-といった演算記号のことを、演算子と呼びます。
演算子にも様々な種類があるので、見てみましょう。

演算子の種類記号
算術演算子+, -, *, /, %
比較演算子>, >=, <, <=, ==, !=
代入演算子=, +=, -=, *=, /=, %=
インクリメント、デクリメント演算子++, –-
条件演算子|, &, !, ||, &&
シフト演算子<<, >>

条件分岐

プログラムは単純な流れ作業だけではありません。
ユーザからの入力や、システムの状態によって挙動を変える必要があります。
ある条件によって処理を変えることができる手法を、2つを紹介します。

if文

if (条件式)
{
}

条件式が成立した場合、{ }内の処理を実行します。
条件式が成立しない場合、{ }は実行しません。

if (条件式1 && 条件式2) //両方が真の場合のみ成立
if (条件式1 || 条件式2) //片方でも真なら成立

条件式は、条件演算子によって複数並べることができます。
 

if (条件式) {
} else {
}

else文を付けることができます。
条件式が成立した場合、if文内の処理を実行します。
条件式が成立しない場合、else文内の処理を実行します。

if (条件式1) {
} else if (条件式2) {
} else {
}

else文にも条件式を付けることができます。この場合、条件式は上から順番にチェックされます。
条件式1が成立する場合、if文内の処理を実行します。
条件式1が成立せず、条件式2が成立する場合、else if文内の処理を実行します。
条件式1と条件式2のどちらも成立しない場合、else文内の処理を実行します。
else if文は複数段作ることができます。

#include <stdio.h>

int main(void)
{
 int a = 10;

 if (a < 5) {
  printf(“aは5未満\n”);
 } else if (a >= 10) {
  printf(“aは10以上\n”);
 } else {
  printf(“aは5未満ない、かつ10以上でない\n”);
 }

 return 0;
}

結果は「aは10以上」が出力されますね。

switch文

switch(式) {
 case 値1:
  break;
 case 値2:
  break;
 default:
  break;
}

式は、if文とは違い、演算子を指定する必要はありません。
式が持つ値により、どの値の処理を実行するかが決まります。どれにも該当しない場合、default内の処理を実行します。
各値の処理にbreakがありますが、これが無いと直後の処理も実行してしまうため、書くようにしましょう。(続けて処理したい場合は敢えて書かない)

#include <stdio.h>

int main(void)
{
 int a = 10;

 switch(a) {
  case 5:
   printf(“aは5\n”);
   break;
  case 10:
   printf(“aは10\n”);
   break;
  default:
   printf(“aはどのcaseにも該当しない\n”);
   break;
 }

 return 0;
}

結果は「aは10」が出力されますね。

繰り返し文

条件が成立する間、処理を繰り返す方法があります。

for文

for (初期化; 継続条件; 変化式)
{
}

主に、繰り返し回数が決まっている場合に使用します。
初期化は、for文の最初の1回だけ実行します。
継続条件が成立する限り、{ }内の処理を繰り返し実行します。
変化式は、主に繰り返し回数として、継続条件のために使用します。

#include <stdio.h>

int main(void)
{
 for(int i=0; i<5; i++)
 {
  printf(“i = %d\n”, i);
 }

 return 0;
}

変数iを0〜4まで繰り返し、そのときの変数iの値を出力します。
++はインクリメント演算子で、整数型なら1ずつ増加します。
実行結果は以下のようになります。

i = 0
i = 1
i = 2
i = 3
i = 4

while文

while(条件式)
{
}

主に、繰り返し条件が決まっている場合に使用します。

#include <stdio.h>

int main(void)
{
 int i = 1;

 while(i<10)
 {
  printf(“i = %d\n”, i);
  i = i*2;
 }

 return 0;
}

変数iは1から始まり、iを2倍した値をiに代入します。
iが10以上の値になったら繰り返し終了です。
結果は以下のようになります。

i = 1
i = 2
i = 4
i = 8

配列

型 変数名[要素数];

同名の変数を、要素数に指定した数だけ作るイメージです。
使用するときは、変数名に[ ]で要素番号を指定します。
要素番号は整数で指定するため、繰り返し文との相性が良いです。

#include <stdio.h>

int main(void)
{
 int array[5] = {10,20,30,40,50}; //[0]を10、[1]を20、[2]を30、[3]を40、[4]を50で初期化

 for(int i=0; i<5; i++)
 {
  printf(“array[%d] = %d\n”, i, array[i]); //array[0]〜[4]の値を順番に表示
 }

 return 0;
}

配列arrayを要素数5で作成しました。この場合、要素番号0〜4の5つが作成されます。
上記サンプルコードでは、array[0]〜[4]を{10,20,30,40,50}で初期化していますが、この初期化は宣言時のみ可能です。
実行結果は以下の通りです。

array[0] = 10
array[1] = 20
array[2] = 30
array[3] = 40
array[4] = 50


以下のように、char型の配列は、文字列を表現するためによく使用されます。

char str[] = “hello”;
printf(“str = %s\n”, str); //helloを画面出力

関数

今までprintf関数を使用していましたが、関数は自分で定義することができます。

戻り値の型 関数名 (引数)
{
}

引数を入力情報として、{ }内で演算を行い、戻り値で返します。
引数は複数指定できます。

#include <stdio.h>

int sumvalue(int n1, int n2); //プロトタイプ宣言

int sumvalue(int n1, int n2)
{
 int ret;
 ret = n1 + n2; //引数1に引数2を加算
 return ret;
}

int main(void)
{
 int sv1;
 int sv2;
 sv1 = sumvalue(1, 2); //1と2をsumvalueで演算した結果をsv1へ代入
 sv2 = sumvalue(50, 60); //50と60をsumvalueで演算した結果をsv2へ代入
 printf(“sv1 = %d\n”, sv1);
 printf(“sv2 = %d\n”, sv2);
 return 0;
}

第1引数と第2引数を加算した結果を返す、関数sumvalueを作成しました。
sumvalueの戻り値は、main関数の変数sv1とsv2で受け取ります。
実行結果はこうなります。

sv1 = 3
sv2 = 110

ファイル分割

開発の規模が大きくなってくると、1つのファイルに何万行ものソースコードが書かれることになります。
そんなときは、何らかの単位でファイルを分割したほうが管理しやすくなります。
多くの場合は、機能ごとにファイル分割します。
先ほどのsumvalueの例を、ファイル分割してみます。

function.h

int sumvalue(int n1, int n2); //プロトタイプ宣言


function.c

int sumvalue(int n1, int n2)
{
 int ret;
 ret = n1 + n2;
 return ret;
}


sample1.c

#include <stdio.h>
#include “function.h”

int main(void)
{
 int sv1;
 int sv2;
 sv1 = sumvalue(1, 2); //1と2をsumvalueで演算した結果をsv1へ代入
 sv2 = sumvalue(50, 60); //50と60をsumvalueで演算した結果をsv2へ代入
 printf(“sv1 = %d\n”, sv1);
 printf(“sv2 = %d\n”, sv2);

 return 0;
}

sumvalue関数の部分を、functionというファイルに分割しました。
プロトタイプ宣言はヘッダーファイル(.h)に、処理はソースファイル(.c)に入れます。
main関数はsample1.cに残っていますが、この状態だとmain関数からsumvalue関数が何者か判別できなくなるため、function.hをインクルードすることで、sumvalue関数の関数名、戻り値、引数の情報を教えてあげます。


加えて、インストールした拡張機能Code Runnerの設定を変更します。
今のままではVScodeが複数ファイルに対応しておらず、ビルドエラーになってしまうからです。

インストールした拡張機能Code Runnerを右クリックし、設定(赤丸部分)をクリックします。


settings.jsonで編集(赤丸部分)をクリックします。


C言語の設定の行で、$fileName(赤線部分)を、「*.c」に変更します。


上記設定後にCode Runnerで実行すると、結果は以下のようになります。

sv1 = 3
sv2 = 110

さいごに

初級編はこれで終了です。
どれもC言語で必要な機能であり、どのプログラミング言語でも似たような構文になっているので、扱えるようになればいろいろと応用が効きます👍

それでは次回、中級編でお会いしましょう😌
ありがとうございました。

コメント

タイトルとURLをコピーしました