読者です 読者をやめる 読者になる 読者になる

とりあえずnull

プログラミングの勉強日記

配列を使った最大値の求め方

RubyばっかりやっているとC言語の配列の扱いがすごく厄介に感じますが、慣れだと思ってとりあえずは書いてみる。今回はconst修飾子を使うシーンがあったのでそこも勉強してみた。

考え方と流れ:

  • 準備として配列を用意し、要素に値を入力していく作業をする。
  • 次に最大値を求める処理を書く。今回は参考書に従ってmaxof関数を作り、main関数と処理を分離。
  • maxof関数内では配列の最初の要素をmaxとして仮定し、順々にmaxとその他の配列の値を比較し、現maxより大きければmaxを入れ替えるという処理を全要素の検証が終わるまで繰り返す。

コード

#include <stdio.h>

int maxof(const int a[], int n){
  int i;
  int max = a[0];

  for(i = 1; i < n; i++){
    if(a[i] > max) max = a[i];
  }
  return max;
}

int main(void){
  int i;
  int x[7];
  int nx = sizeof(x) / sizeof(x[0]);

  printf("%d個の整数を入力してください。\n", nx);
  for(i = 0; i < nx; i++){
    printf("x[%d]:", i);
    scanf("%d", &x[i]);
  }

  printf("最大値は%dです。\n", maxof(x, nx));
  return 0;
}

出力結果

$ ./sample
7個の整数を入力してください。
x[0]:10
x[1]:20
x[2]:50
x[3]:97
x[4]:100
x[5]:89
x[6]:47
最大値は100です。

メモ:

  • 配列の受け渡し C言語では配列をそのまま受け取ることはできず、配列の先頭要素のポインタを渡す、という処理になる。 なので今回のmaxof関数にて引数に設定されているint型変数nように要素数を意味する変数を用意する必要がある。 また引数にconst(定数化)をつけると配列の要素に対して変更を加えることができなくなるので、変更がない場合はconstをかけておくと便利。