fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define NUMBER 5 /* 学生の人数 */
  5.  
  6. typedef struct {
  7. char name[20]; /* 名前 */
  8. int height; /* 身長 */
  9. float weight; /* 体重 */
  10. long schols; /* 奨学金 */
  11. } student;
  12.  
  13. /*--- xおよびyが指す学生を交換 ---*/
  14. void swap(student *x, student *y)
  15. {
  16. student temp = *x;
  17. *x = *y;
  18. *y = temp;
  19. }
  20.  
  21. /*--- 配列dataの先頭n個の要素を名前の昇順にソート ---*/
  22. void sort(student data[], int n)
  23. {
  24. int k = n - 1;
  25. while (k >= 0) {
  26. int i, j;
  27. for (i = 1, j = -1; i <= k; i++)
  28. /* if (data[i - 1].height > data[i].height) { */
  29. if (strcmp(data[i - 1].name , data[i].name)>0) {
  30. j = i - 1;
  31. swap(&data[i], &data[j]);
  32. }
  33. k = j;
  34. }
  35. }
  36.  
  37. int main(void)
  38. {
  39. int i;
  40. student std[] = {
  41. { "Sato", 178, 61.0, 80000}, /* 佐藤宏史君 */
  42. { "Sanaka", 175, 60.5, 70000}, /* 佐中俊哉君 */
  43. { "Takao", 173, 80.0, 0}, /* 高尾健司君 */
  44. { "Mike", 165, 72.0, 70000}, /* 平木Mike君 */
  45. { "Masaki", 179, 77.5, 70000}, /* 真崎宏孝君 */
  46. };
  47.  
  48. sort(std, NUMBER);
  49.  
  50. puts("5人の学生を名前の昇順にソート");
  51. puts("-----------------------------");
  52. for (i = 0; i < NUMBER; i++)
  53. printf("%-8s %6d%6.1f%7ld\n",
  54. std[i].name, std[i].height, std[i].weight, std[i].schols);
  55. puts("-----------------------------");
  56.  
  57. return (0);
  58. }
Success #stdin #stdout 0.01s 1720KB
stdin
Standard input is empty
stdout
5人の学生を名前の昇順にソート
-----------------------------
Masaki      179  77.5  70000
Mike        165  72.0  70000
Sanaka      175  60.5  70000
Sato        178  61.0  80000
Takao       173  80.0      0
-----------------------------