23-3.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. struct student{
  4. int stuId;
  5. char *name;
  6. int score;
  7. };
  8. void inputData(struct student *s, int size){
  9. for(int i = 0; i < size; i++){
  10. printf("请输入第%d个学生的学号、姓名、成绩:", (i + 1));
  11. printf("学生学号:");
  12. scanf("%d", &s[i].stuId);
  13. s[i].name = (char *)malloc(50 * sizeof(char));
  14. if (s[i].name == NULL)
  15. {
  16. printf("内存分配失败\n");
  17. }
  18. printf("学生姓名:");
  19. scanf("%s", s[i].name);
  20. printf("学生成绩:");
  21. scanf("%d", &s[i].score);
  22. }
  23. }
  24. void bubbleSort(struct student *s, int size){
  25. for(int i = 0;i<size;i++){
  26. for(int j = 0;j<size-i-1;j++){
  27. if(s[j].score > s[j+1].score){
  28. struct student temp = s[j];
  29. s[j] = s[j+1];
  30. s[j+1] = temp;
  31. }
  32. }
  33. }
  34. }
  35. struct student *findScore(struct student *s, int size, int score){
  36. int left = 0;
  37. int right = size - 1;
  38. int mid;
  39. while(left <= right){
  40. mid = left + (right - left) / 2;
  41. if(s[mid].score == score){
  42. return &s[mid];
  43. }else if (s[mid].score > score){
  44. right = mid - 1;
  45. }else
  46. {
  47. left = mid + 1;
  48. }
  49. }
  50. return NULL;
  51. }
  52. int main(){
  53. int size;
  54. printf("请输入学生人数:");
  55. scanf("%d",&size);
  56. struct student *s = (struct student *)malloc(sizeof(struct student)*size);
  57. inputData(s, size);
  58. bubbleSort(s, size);
  59. for(int i = 0;i<size;i++){
  60. printf("学号:%d,姓名:%s,成绩:%d\n", s[i].stuId, s[i].name, s[i].score);
  61. }
  62. printf("请输入要查找学生的成绩:");
  63. int score;
  64. scanf("%d",&score);
  65. struct student *p = findScore(s, size, score);
  66. if(p == NULL){
  67. printf("未找到此成绩的学生\n");
  68. }else{
  69. printf("学号:%d,姓名:%s,成绩:%d\n",p->stuId,p->name,p->score);
  70. }
  71. for (int i = 0; i < size; i++)
  72. {
  73. free[s[i].name];
  74. }
  75. free(s);
  76. return 0;
  77. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。