fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. struct DATA {
  6. char name[16];
  7. double cm;
  8. double kg;
  9. double bmi;
  10. struct DATA* next;
  11. };
  12.  
  13. struct DATA* head = NULL;
  14.  
  15. void add_data(struct DATA data)
  16. {
  17. struct DATA** pp;
  18. struct DATA* p_new;
  19.  
  20. data.bmi = data.kg / (0.0001 * data.cm * data.cm);
  21. p_new = (struct DATA*)malloc(sizeof data);
  22. *p_new = data;
  23. for (pp = &head; *pp; pp = &(*pp)->next) {
  24. if (p_new->bmi < (*pp)->bmi) {
  25. break;
  26. }
  27. }
  28. p_new->next = *pp;
  29. *pp = p_new;
  30. }
  31.  
  32. void del_data(void)
  33. {
  34. struct DATA* p;
  35. struct DATA* p_next;
  36.  
  37. for (p = head; p; p = p_next) {
  38. p_next = p->next;
  39. free(p);
  40. }
  41. }
  42.  
  43. int main()
  44. {
  45. struct DATA data;
  46. struct DATA* p;
  47.  
  48. while (1) {
  49. printf("名前 身長 体重\n");
  50. scanf("%15s %lf %lf", data.name, &data.cm, &data.kg);
  51. if (data.name[0] == '0') {
  52. break;
  53. }
  54. add_data(data);
  55. }
  56. for (p = head; p; p = p->next) {
  57. printf("BMI=%.2f 名前=%s 身長=%.1f 体重=%.1f\n",
  58. p->bmi, p->name, p->cm, p->kg);
  59. }
  60. del_data();
  61. return 0;
  62. }
  63.  
Success #stdin #stdout 0.01s 1812KB
stdin
manbo 145.3 48.7
ran 175.0 89.0
tako 156.3 66.6
ika 178.4 78.9
0 0 0
stdout
名前 身長 体重
名前 身長 体重
名前 身長 体重
名前 身長 体重
名前 身長 体重
BMI=23.07 名前=manbo 身長=145.3 体重=48.7
BMI=24.79 名前=ika 身長=178.4 体重=78.9
BMI=27.26 名前=tako 身長=156.3 体重=66.6
BMI=29.06 名前=ran 身長=175.0 体重=89.0