fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. typedef struct {
  5. int id;
  6. int height;
  7. int weight;
  8. } Body;
  9. int cmp_height_asc(const void *a, const void *b) {
  10. const Body *A = a;
  11. const Body *B = b;
  12. return (A->height - B->height);
  13. }
  14. int main(void) {
  15. Body data[] = {
  16. {1, 165, 60},
  17. {2, 170, 68},
  18. {3, 160, 50},
  19. {4, 180, 75},
  20. {5, 175, 80}
  21. };
  22. const size_t n = sizeof(data) / sizeof(data[0]);
  23. qsort(data, n, sizeof(Body), cmp_height_asc);
  24. printf("id\theight[cm]\tweight[kg]\n");
  25. for (size_t i = 0; i < n; ++i) {
  26. printf("%d\t%d\t\t%d\n", data[i].id, data[i].height, data[i].weight);
  27. }
  28. const int k = 3;
  29. if (n < (size_t)k) {
  30. fprintf(stderr, "データ数が足りません。\n");
  31. return 1;
  32. }
  33. double sum = 0.0;
  34. for (size_t i = n - k; i < n; ++i) {
  35. sum += data[i].height;
  36. }
  37. double ave = sum / k;
  38. double sqsum = 0.0;
  39. for (size_t i = n - k; i < n; ++i) {
  40. double diff = data[i].height - ave;
  41. sqsum += diff * diff;
  42. }
  43. double variance = sqsum / k;
  44. double std = sqrt(variance);
  45.  
  46. printf("\n上位 %d 名の身長の平均 ave = %.1f cm\n", k, ave);
  47. printf("上位 %d 名の身長の標準偏差 std = %.1f cm\n", k, std);
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
id	height[cm]	weight[kg]
3	160		50
1	165		60
2	170		68
5	175		80
4	180		75

上位 3 名の身長の平均 ave = 175.0 cm
上位 3 名の身長の標準偏差 std = 4.1 cm