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]); } }