C言語の学習2 (初心者)

# 本記事について
ドットインストールでC言語を学習し始めた初心者がアウトプットの為に書いている記事です。間違いがあればご指摘いただけると助かります。

# 条件分岐
C言語も他の言語と同様に条件によって処理を変更することができます。

## if文
書き方はJavascriptと似ています。

```sample.c

#include <stdio.h>

/*
大なりイコール
>=
小なりイコール
<=
大なり
>
小なり
<
イコール
==
ノットイコール (≠)
!=
*/


int main(void){

  int score = 80;
  
  if (score >= 60) {
/*scoreが60以上なら"OK!"と表示される*/
      printf("OK!\n");
  } else if (score >= 50) {
/*scoreが50以上(かつ60未満)なら"so so..."と表示される*/
      printf("so so...\n");
  } else {
/*scoreが50未満￥なら"NG!"と表示される*/
      printf("NG!\n");
  }
 return 0;
}

```

## Switch文
条件分岐の候補があらかじめ決まっている場合、スッキリとかける方法です。

```sample.c
#include <stdio.h>

int main(void){

  int rank = 2;
  
  switch (rank) {
/*rankが1の場合*/
      case 1:
          printf("Gold!\n");
/*breakまでしっかり書く*/
          break;
/*rankが2の場合*/
      case 2:
          printf("Silver!\n");
          break;
/*rankが3の場合*/
      case 3:
          printf("Bronze!\n");
          break;
/*rankがどれでもない場合*/
      default:
          printf("No Medal\n");
          break;
  } 
 return 0;
}


```

# ループ処理
条件を満たすまで繰り返し行なわれる処理です。


## while文とdo..while文
括弧の中に繰り返し処理を行なう条件式(継続条件式)を書き、鉤括弧の中に処理の内容を書きます。

```sample.c
#include <stdio.h>
 

int main(void){

  int m = 0;
  
  while (m < 10) {
      printf("m: %d\n", m);
      m++;
  }
  
 return 0;
}
```

while文とdo..while文にあまり違いはありませんが、while文の場合、条件式が真でない場合は一度も実行されません。一方でdo..while文は条件式が後付けなので、条件式が真出なくても鉤括弧内の処理が一度だけ行なわれます。

```sample.c
#include <stdio.h>
 
int main(void){

  int m = 20;
/*mが20と10より大きいので実行されない*/
  while (m < 10) {
      printf("m: %d\n", m);
      m++;
  }

  int n = 20;
/*nが20と10より大きいが、最初の一回だけ処理が行なわれる*/
  do {
      printf("n: %d\n", n);
      n++;
  } while (n < 10);
  
  return 0;
}

  

```

## for文
for文も繰り返し処理をするための構文です。while文と出来ることは同じですが書き方が違います。括弧の中に変数の初期値、条件式、変化式を全て書きます。

```sample.c

int main(void){

  int m;
  for (m = 0; m < 10; m++) {
      printf("m: %d\n", m);
  }

/* while文で書くとこのようになります
  int m = 0;
  while (m < 10) {
      printf("m: %d\n", m);
      m++;
  }
  */
  
  return 0;
}

```

ループ処理では"continue"句や"break"句によって制御を追加することができます。

```sample.c

/*
continue: 一回スキップ
break: ループを抜ける
*/


int main(void){

  int m;
  for (m = 0; m < 10; m++) {
      /*mが3の時、処理がスキップされる*/
      if (m == 3) {
          continue;
      }
      /*mが8の時、処理が終了する*/
      if (m == 8) {
          break;
      }
      printf("m: %d\n", m);
  }
  
  return 0;
}

```

#　関数
関数とは複数の処理をまとめたようなもので、引数として値を渡すことで、その値を処理して返り値として返してくれます。

```sample.c

#include <stdio.h>
 


/*関数の定義*/
float getMax(float a, float b) {
    if (a >= b) {
        return a;
    } else {
        return b;
    }
}

/*　関数の定義方法
返り値の型　関数名(引数, ...) {
    処理;
    return 返り値;
}
*/

int main(void){
    float result;
/*関数の呼び出して、結果を変数に代入*/
    result = getMax(2.3, 5.2);
    printf("%f\n", result);

    return 0;
}

```

引数及び返り値がない関数は以下のように書きます。今まで書いていた"int main(void){}"も関数です。

```sample.c

#include <stdio.h>
 


/*関数の定義*/
float getMax(float a, float b) {
    if (a >= b) {
        return a;
    } else {
        return b;
    }
}
/*返り値がない関数はvoid型、引数がない時は()の中にvoidと記載*/
void sayHi(void) {
    printf("hi!\n");
}

/*実はこれも関数*/
int main(void){
    float result;
    result = getMax(2.3, 5.2);
    printf("%f\n", result);

    sayHi();

    return 0;
}

```

関数の定義している部分が、関数の呼び出しよりも後に書かれていてもエラーが発生します。

```sample.c

#include <stdio.h>
 
void sayHi(void) {
    printf("hi!\n");
}

int main(void){
    float result;
/*この時点ではまだgetMax関数は存在していない扱いなのでエラーが出る*/
    result = getMax(2.3, 5.2);
    printf("%f\n", result);
    sayHi();

    return 0;
}

/*関数の定義*/
float getMax(float a, float b) {
    if (a >= b) {
        return a;
    } else {
        return b;
    }
}

```

このようなエラーを避ける方法として"プロトタイプ宣言"というものが存在します。"プロトタイプ宣言とは"関数のデータ型や引数といったインターフェース情報を事前に書いておくことです(処理の内容以外全て)。事前に宣言しておくことでエラーが出なくなります。"プロトタイプ宣言"のメリットとしては、「main関数を上部に記載できて見やすくなる」や「コンパイル時にコンパイラーがエラーを通知してくれる」といった物があります。

```sample.c

#include <stdio.h>

/*プロトタイプ宣言*/
float getMax(float a, float b);
void sayHi(void);

int main(void){
    float result;
    result = getMax(2.3, 5.2);
    printf("%f\n", result);
    sayHi();

    return 0;
}

/*関数の定義*/
float getMax(float a, float b) {
    if (a >= b) {
        return a;
    } else {
        return b;
    }
}

void sayHi(void) {
    printf("hi!\n");
}

```

# 感想
これまで学習してきた言語と共通の部分があるので理解できたが、C言語の学習を通してIT用語を曖昧に理解していることも同時にわかった。改めて用語の確認も行なっていきたい。