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