鱼C论坛

 找回密码
 立即注册
查看: 1645|回复: 1

[已解决]程序设计

[复制链接]
发表于 2022-6-1 14:14:20 | 显示全部楼层 |阅读模式
20鱼币
怎么设计一个学生成绩管理系统
要求能输入20个学生姓名,学号,某门课程的学习成绩。
将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。
用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)
用二分法检索某个学生的成绩(输入学号,显示成绩)
最佳答案
2022-6-1 14:14:21
  1. typedef struct  STUDENT
  2. {
  3.         char name[32];
  4.         int id;
  5.         float lesson;
  6. }stdt,*pst;
  7. void stsort(pst st,int n)
  8. {
  9.         int *id=(int*)malloc(sizeof(int)*n);
  10.         for (int i = 0; i < n; i++)
  11.         {
  12.                 id[i]=i;
  13.         }
  14.         for(int i=0;i<n-1;i++)
  15.         {
  16.                 for(int j=n-1;j>i;j--)
  17.                 {
  18.                         if(st[id[j]].lesson<st[id[j-1]].lesson)
  19.                         {
  20.                                 int tmp=id[j];
  21.                                 id[j]=id[j-1];
  22.                                 id[j-1]=tmp;
  23.                         }
  24.                 }
  25.                 printf("%s:%f\n",st[id[i]].name,st[id[i]].lesson);
  26.         }
  27.         printf("%s:%f\n",st[id[n-1]].name,st[id[n-1]].lesson);
  28.         free(id);
  29. }
  30. void orderfind(pst st,int n,char *name)
  31. {
  32.         for(;n>=0;n--)
  33.         {
  34.                 int j=0;
  35.                 while(name[j]&&(name[j]==st[n].name[j++]));
  36.                 if('\0'==name[j]&&'\0'==st[n].name[j])
  37.                 {
  38.                         printf("%f\n",st[n].lesson);
  39.                         break;
  40.                 }
  41.         }
  42.         if(-1==n)printf("no body\n");
  43. }
  44. int halffind(pst st,int id,int l,int r)
  45. {
  46.         /*if(st[(l+r)/2].id==id)return (l+r)/2;
  47.         if(l>=r)return -1;
  48.         int ret =-1;
  49.         if((ret=ishalffind(st,id,0,r/2)>-1))return ret;
  50.         if((ret=ishalffind(st,id,r/2+1,r)>-1))return ret;

  51.         return ret;*/

  52.         if (l>r)
  53.         {
  54.                 return -1;
  55.         }
  56.         int half=(l+r)/2;
  57.         if(id==st[half].id)return half;
  58.         if(id>st[half].id)return halffind(st,id,half+1,r);
  59.         if (id<st[half].id)return halffind(st,id,0,half);
  60.        

  61. }

  62. int insertstt(pst st,int *n)
  63. {
  64.         if(*n>=20)return 0;
  65.         scanf("%s%d%f",st[*n].name,&st[*n].id,&st[*n].lesson);
  66.         for (int i = *n; i>0; i--)
  67.         {
  68.                 if (st[i-1].id>st[i].id)
  69.                 {
  70.                         stdt tmp=st[i];
  71.                         st[i]=st[i-1];
  72.                         st[i-1]=tmp;
  73.                 }
  74.                 else
  75.                         break;
  76.         }
  77.         (*n)++;
  78.         return 1;
  79. }
  80. int main()
  81. {
  82.         stdt st[20]={0};
  83.         int n=0,id=0;
  84.         for (int i = 0; i < 20; i++)
  85.         {
  86.                 if (0==insertstt(st,&n))break;
  87.         }
  88.         stsort(st,20);
  89.         char nm[32]={0};
  90.         scanf("%s",nm);
  91.         orderfind(st,20,nm);
  92.         scanf("%d",&id);
  93.         int ret=halffind(st,id,0,20-1);
  94.         if(ret>=0)printf("%f",st[ret].lesson);
  95.         else
  96.                 ("no body\n");
  97.         return 0;
  98. }
复制代码
  1. aaa 102 1
  2. bbb 111 2
  3. ccc 342 3
  4. ddd 210 4
  5. eee 423 5
  6. fff 649 6
  7. ggg 666 7
  8. hhh 555 8
  9. iii 612 9
  10. jjj 456 11
  11. kkk 234 10
  12. lll 98 12
  13. mmm 674 13
  14. nnn 416 14
  15. ooo 222 15
  16. ppp 555 16
  17. qqq 999 17
  18. rrr 877 18
  19. sss 681 19
  20. ttt 539 20
  21. aaa:1.000000
  22. bbb:2.000000
  23. ccc:3.000000
  24. ddd:4.000000
  25. eee:5.000000
  26. fff:6.000000
  27. ggg:7.000000
  28. hhh:8.000000
  29. iii:9.000000
  30. kkk:10.000000
  31. jjj:11.000000
  32. lll:12.000000
  33. mmm:13.000000
  34. nnn:14.000000
  35. ooo:15.000000
  36. ppp:16.000000
  37. qqq:17.000000
  38. rrr:18.000000
  39. sss:19.000000
  40. ttt:20.000000
  41. ttt
  42. 20.000000
  43. 555
  44. 8.000000
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-1 14:14:21 | 显示全部楼层    本楼为最佳答案   
  1. typedef struct  STUDENT
  2. {
  3.         char name[32];
  4.         int id;
  5.         float lesson;
  6. }stdt,*pst;
  7. void stsort(pst st,int n)
  8. {
  9.         int *id=(int*)malloc(sizeof(int)*n);
  10.         for (int i = 0; i < n; i++)
  11.         {
  12.                 id[i]=i;
  13.         }
  14.         for(int i=0;i<n-1;i++)
  15.         {
  16.                 for(int j=n-1;j>i;j--)
  17.                 {
  18.                         if(st[id[j]].lesson<st[id[j-1]].lesson)
  19.                         {
  20.                                 int tmp=id[j];
  21.                                 id[j]=id[j-1];
  22.                                 id[j-1]=tmp;
  23.                         }
  24.                 }
  25.                 printf("%s:%f\n",st[id[i]].name,st[id[i]].lesson);
  26.         }
  27.         printf("%s:%f\n",st[id[n-1]].name,st[id[n-1]].lesson);
  28.         free(id);
  29. }
  30. void orderfind(pst st,int n,char *name)
  31. {
  32.         for(;n>=0;n--)
  33.         {
  34.                 int j=0;
  35.                 while(name[j]&&(name[j]==st[n].name[j++]));
  36.                 if('\0'==name[j]&&'\0'==st[n].name[j])
  37.                 {
  38.                         printf("%f\n",st[n].lesson);
  39.                         break;
  40.                 }
  41.         }
  42.         if(-1==n)printf("no body\n");
  43. }
  44. int halffind(pst st,int id,int l,int r)
  45. {
  46.         /*if(st[(l+r)/2].id==id)return (l+r)/2;
  47.         if(l>=r)return -1;
  48.         int ret =-1;
  49.         if((ret=ishalffind(st,id,0,r/2)>-1))return ret;
  50.         if((ret=ishalffind(st,id,r/2+1,r)>-1))return ret;

  51.         return ret;*/

  52.         if (l>r)
  53.         {
  54.                 return -1;
  55.         }
  56.         int half=(l+r)/2;
  57.         if(id==st[half].id)return half;
  58.         if(id>st[half].id)return halffind(st,id,half+1,r);
  59.         if (id<st[half].id)return halffind(st,id,0,half);
  60.        

  61. }

  62. int insertstt(pst st,int *n)
  63. {
  64.         if(*n>=20)return 0;
  65.         scanf("%s%d%f",st[*n].name,&st[*n].id,&st[*n].lesson);
  66.         for (int i = *n; i>0; i--)
  67.         {
  68.                 if (st[i-1].id>st[i].id)
  69.                 {
  70.                         stdt tmp=st[i];
  71.                         st[i]=st[i-1];
  72.                         st[i-1]=tmp;
  73.                 }
  74.                 else
  75.                         break;
  76.         }
  77.         (*n)++;
  78.         return 1;
  79. }
  80. int main()
  81. {
  82.         stdt st[20]={0};
  83.         int n=0,id=0;
  84.         for (int i = 0; i < 20; i++)
  85.         {
  86.                 if (0==insertstt(st,&n))break;
  87.         }
  88.         stsort(st,20);
  89.         char nm[32]={0};
  90.         scanf("%s",nm);
  91.         orderfind(st,20,nm);
  92.         scanf("%d",&id);
  93.         int ret=halffind(st,id,0,20-1);
  94.         if(ret>=0)printf("%f",st[ret].lesson);
  95.         else
  96.                 ("no body\n");
  97.         return 0;
  98. }
复制代码
  1. aaa 102 1
  2. bbb 111 2
  3. ccc 342 3
  4. ddd 210 4
  5. eee 423 5
  6. fff 649 6
  7. ggg 666 7
  8. hhh 555 8
  9. iii 612 9
  10. jjj 456 11
  11. kkk 234 10
  12. lll 98 12
  13. mmm 674 13
  14. nnn 416 14
  15. ooo 222 15
  16. ppp 555 16
  17. qqq 999 17
  18. rrr 877 18
  19. sss 681 19
  20. ttt 539 20
  21. aaa:1.000000
  22. bbb:2.000000
  23. ccc:3.000000
  24. ddd:4.000000
  25. eee:5.000000
  26. fff:6.000000
  27. ggg:7.000000
  28. hhh:8.000000
  29. iii:9.000000
  30. kkk:10.000000
  31. jjj:11.000000
  32. lll:12.000000
  33. mmm:13.000000
  34. nnn:14.000000
  35. ooo:15.000000
  36. ppp:16.000000
  37. qqq:17.000000
  38. rrr:18.000000
  39. sss:19.000000
  40. ttt:20.000000
  41. ttt
  42. 20.000000
  43. 555
  44. 8.000000
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表