fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 無名構造体+typedefでBody型を定義
  5. typedef struct {
  6. int id;
  7. double height;
  8. double weight;
  9. } Body;
  10.  
  11. int main(void) {
  12. // 構造体配列dataの初期化
  13. Body data[] = {
  14. {1, 165, 60},
  15. {2, 170, 68},
  16. {3, 160, 50},
  17. {4, 180, 75},
  18. {5, 175, 80}
  19. };
  20. int n = sizeof(data) / sizeof(data[0]);
  21.  
  22. // 身長の昇順にソート(単純なバブルソート)
  23. for (int i = 0; i < n - 1; i++) {
  24. for (int j = 0; j < n - i - 1; j++) {
  25. if (data[j].height > data[j + 1].height) {
  26. Body temp = data[j];
  27. data[j] = data[j + 1];
  28. data[j + 1] = temp;
  29. }
  30. }
  31. }
  32.  
  33. // ソート後の結果表示
  34. printf("身長の低い順:\n");
  35. for (int i = 0; i < n; i++) {
  36. printf("ID:%d Height:%.0f Weight:%.0f\n", data[i].id, data[i].height, data[i].weight);
  37. }
  38.  
  39. // 上位3名の身長の平均と標準偏差を計算
  40. double ave = 0.0, std = 0.0;
  41. for (int i = n - 3; i < n; i++) {
  42. ave += data[i].height;
  43. }
  44. ave /= 3.0;
  45.  
  46. for (int i = n - 3; i < n; i++) {
  47. std += pow(data[i].height - ave, 2);
  48. }
  49. std = sqrt(std / 3.0);
  50.  
  51. printf("\n上位3名の平均身長: %.1f cm\n", ave);
  52. printf("上位3名の身長の標準偏差: %.1f cm\n", std);
  53.  
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
身長の低い順:
ID:3  Height:160  Weight:50
ID:1  Height:165  Weight:60
ID:2  Height:170  Weight:68
ID:5  Height:175  Weight:80
ID:4  Height:180  Weight:75

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