#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
int id;
int height;
int weight;
} Body;
int cmp_height_asc(const void *a, const void *b) {
const Body *A = a;
const Body *B = b;
return (A->height - B->height);
}
int main(void) {
Body data[] = {
{1, 165, 60},
{2, 170, 68},
{3, 160, 50},
{4, 180, 75},
{5, 175, 80}
};
const size_t n = sizeof(data) / sizeof(data[0]);
qsort(data
, n
, sizeof(Body
), cmp_height_asc
); printf("id\theight[cm]\tweight[kg]\n"); for (size_t i = 0; i < n; ++i) {
printf("%d\t%d\t\t%d\n", data
[i
].
id, data
[i
].
height, data
[i
].
weight); }
const int k = 3;
if (n < (size_t)k) {
return 1;
}
double sum = 0.0;
for (size_t i = n - k; i < n; ++i) {
sum += data[i].height;
}
double ave = sum / k;
double sqsum = 0.0;
for (size_t i = n - k; i < n; ++i) {
double diff = data[i].height - ave;
sqsum += diff * diff;
}
double variance = sqsum / k;
double std
= sqrt(variance
);
printf("\n上位 %d 名の身長の平均 ave = %.1f cm\n", k
, ave
); printf("上位 %d 名の身長の標準偏差 std = %.1f cm\n", k
, std
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IGlkOwogICAgaW50IGhlaWdodDsgCiAgICBpbnQgd2VpZ2h0OyAKfSBCb2R5OwppbnQgY21wX2hlaWdodF9hc2MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgewogICAgY29uc3QgQm9keSAqQSA9IGE7CiAgICBjb25zdCBCb2R5ICpCID0gYjsKICAgIHJldHVybiAoQS0+aGVpZ2h0IC0gQi0+aGVpZ2h0KTsKfQppbnQgbWFpbih2b2lkKSB7CiAgICBCb2R5IGRhdGFbXSA9IHsKICAgICAgICB7MSwgMTY1LCA2MH0sCiAgICAgICAgezIsIDE3MCwgNjh9LAogICAgICAgIHszLCAxNjAsIDUwfSwKICAgICAgICB7NCwgMTgwLCA3NX0sCiAgICAgICAgezUsIDE3NSwgODB9CiAgICB9OwogICAgY29uc3Qgc2l6ZV90IG4gPSBzaXplb2YoZGF0YSkgLyBzaXplb2YoZGF0YVswXSk7CiAgICBxc29ydChkYXRhLCBuLCBzaXplb2YoQm9keSksIGNtcF9oZWlnaHRfYXNjKTsKICAgIHByaW50ZigiaWRcdGhlaWdodFtjbV1cdHdlaWdodFtrZ11cbiIpOwogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBwcmludGYoIiVkXHQlZFx0XHQlZFxuIiwgZGF0YVtpXS5pZCwgZGF0YVtpXS5oZWlnaHQsIGRhdGFbaV0ud2VpZ2h0KTsKICAgIH0KICAgIGNvbnN0IGludCBrID0gMzsKICAgIGlmIChuIDwgKHNpemVfdClrKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICLjg4fjg7zjgr/mlbDjgYzotrPjgorjgb7jgZvjgpPjgIJcbiIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgZG91YmxlIHN1bSA9IDAuMDsKICAgIGZvciAoc2l6ZV90IGkgPSBuIC0gazsgaSA8IG47ICsraSkgewogICAgICAgIHN1bSArPSBkYXRhW2ldLmhlaWdodDsKICAgIH0KICAgIGRvdWJsZSBhdmUgPSBzdW0gLyBrOwogICAgZG91YmxlIHNxc3VtID0gMC4wOwogICAgZm9yIChzaXplX3QgaSA9IG4gLSBrOyBpIDwgbjsgKytpKSB7CiAgICAgICAgZG91YmxlIGRpZmYgPSBkYXRhW2ldLmhlaWdodCAtIGF2ZTsKICAgICAgICBzcXN1bSArPSBkaWZmICogZGlmZjsKICAgIH0KICAgIGRvdWJsZSB2YXJpYW5jZSA9IHNxc3VtIC8gazsgCiAgICBkb3VibGUgc3RkID0gc3FydCh2YXJpYW5jZSk7CgogICAgcHJpbnRmKCJcbuS4iuS9jSAlZCDlkI3jga7ouqvplbfjga7lubPlnYcgYXZlID0gJS4xZiBjbVxuIiwgaywgYXZlKTsKICAgIHByaW50Zigi5LiK5L2NICVkIOWQjeOBrui6q+mVt+OBruaomea6luWBj+W3riBzdGQgPSAlLjFmIGNtXG4iLCBrLCBzdGQpOwoKICAgIHJldHVybiAwOwp9