age65.cのヒント

qsort()用の比較関数では必ずintを 返す必要がある。試験の点での並べ換えは、得点が整数なので引き算をするだけ で良かった。「65歳人口比率」では結果が浮動小数点数になるので、 2者を引き算した結果をreturnするのでは良くない。

浮動小数点数の配列の並べ換えを行なうには以下のようにする。

#include <stdio.h>
#include <stdlib.h>             /* qsort()のために必要 */

int compare_float(const void *x, const void *y)
     /* 必ず2引数を const void* でもらう */
{
  float *a = (float*)x;         /* floatへのポインタに変換 */
  float *b = (float*)y;
  if (*a - *b > 0)
    return 1;
  else if (*a - *b < 0)
    return -1;
  else
    return 0;
}

int main()
{
  float data[] = {10.25, 20.42, 3.14, 48.0, 7.5, 2.5};
  int n = sizeof data / sizeof (float);
  int i;
  qsort(data, n, sizeof (int), compare_float);
  for (i=0; i<n; i++) {
    printf("%.2f\n", data[i]);
  }
}

目次