Jaiihnmyb.C 发表于 2021-5-13 18:16:11

C语言中做成绩管理系统时进行排序的时候只有学号和成绩排序了,名字没有,怎么办?

C语言中做成绩管理系统时进行排序的时候只有学号和成绩排序了,名字没有,怎么办?代码是在CSDN上找的
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STU_NUM 100
//定义一个结构体
struct student
{
    char name;
    long xh;
    float score;
}stu;

int g_n = 0;//菜单
int menu()
{
    int a;
    printf("*--------------------------------------------*\n");
    printf("*----------欢迎使用学生成绩管理系统----------*\n");
    printf("*--------------------------------------------*\n");
    printf("*         1.录入学生的信息               *\n");
    printf("*         2.计算课程总分和平均分         *\n");
    printf("*         3.输出学生信息                   *\n");
    printf("*         4.成绩排序                     *\n");
    printf("*         5.按学号查询                     *\n");
    printf("*         6.关闭程序                     *\n");
    printf("*--------------------------------------------*\n");
    printf("请输入你的选择(1-6):\n");
    scanf("%d",&a);
    return a;
}//函数功能:录入学生的信息
void srscore()
{
    int i;
    int n;
    printf("请输入学生数:\n");
    scanf("%d", &g_n);
    for(i=0; i<g_n; i++)
    {
       printf("请依次输入该学生姓名、学号、成绩:\n");
       scanf("%s%ld%f",stu.name, &stu.xh, &stu.score);
    }
}
//函数功能:计算课程的总分和平均分
void allaver()
{
    printf("\n 正在执行计算...\n");
    int i;
    float sum = 0.0f;
    float aver = 0.0f;
    for(i=0; i<g_n; i++)
    {
      sum=sum+stu.score;
    }
    aver=(double)sum/g_n;
    printf("课程总分=%f,平均分=%f\n",sum,aver);
}
//函数功能:成绩排序
void px()
{
    printf("\n 正在执行排序...\n");
    int i,j,k,h;
    float t;

    for(i=0;i<g_n;i++)
    {
      k=i;
      for(j=j+1;j<g_n;j++)
      {
            if(stu.score>stu.score)
            k=j;
      }
      if(i!=k)
      {

            t=stu.score;
            h=stu.xh;

            stu.score=stu.score;
            stu.xh=stu.xh;

            stu.score=t;
            stu.xh=h;
      }
    }
    for(i=0;i<g_n;i++)
      printf("姓名:%s\t学号:%ld\t成绩:%f\n",stu.name,stu.xh,stu.score);

}
//函数功能:输入学号查询成绩
void xhcx()
{
    printf("\n 正在执行查找...\n");
    int high=g_n-1;
    int low=0;
    int mid,pos,i,x;
    int c=0;
    int find=0;
    printf("请输入学号查询成绩:\n");
    scanf("%ld",&x);
    while(find==0 && low<=high)//使用while循环
    {
      mid=(high+low)/2;
      if(x>stu.xh)
            low=mid+1;
      else if(x<stu.xh)
            high=mid-1;
      else
      {
            pos=mid;
            find=1;
      }
    }
    for(i=0;i<g_n;i++)
    {
      if(stu.xh>stu.xh)
      c++;
    }
    printf("姓名:%s\t学号:%ld\t成绩:%f排名:%d\n",stu.name,stu.xh,stu.score,c+1);
}
void list()//输出学生信息
{
    int i,n;
    for(i=0;i<g_n;i++)
    {
      printf("姓名:%s\t学号:%ld\t成绩:%f\n",stu.name,stu.xh,stu.score);
    }
}
int main()
{
    int choice = 0;
    while(1)
    {
      choice = menu();
      switch(choice)
      {
            case 1: srscore();break;
            case 2:allaver();break;
            case 3:list();break;
            case 4:px();break;
            case 5:xhcx();break;
                        case 6:
                        return 0;
                        default:printf("输入错误!\n");break;
      }
    }
    return 0;
}

贪睡的苏简 发表于 2021-5-13 18:46:21

你得弄成求助帖,然后别人才有动力来帮你解答,尽量加点注释

孤世星辰 发表于 2021-5-14 10:36:38

因为你的px()函数里面的 j 没有定义
void px()
{
    printf("\n 正在执行排序...\n");
    int i,j,k,h;
    float t;

    for(i=0;i<g_n;i++)
    {
      k=i;
      for(j=k+1;j<g_n;j++)                 //for(j=j+1;j<g_n;j++)
      {
            if(stu.score>stu.score)
            k=j;
      }
      if(i!=k)
      {

            t=stu.score;
            h=stu.xh;

            stu.score=stu.score;
            stu.xh=stu.xh;

            stu.score=t;
            stu.xh=h;
      }
    }
    for(i=0;i<g_n;i++)
      printf("姓名:%s\t学号:%ld\t成绩:%f\n",stu.name,stu.xh,stu.score);

}

Jaiihnmyb.C 发表于 2021-5-15 00:40:01

孤世星辰 发表于 2021-5-14 10:36
因为你的px()函数里面的 j 没有定义

定义过了呀,这样看代码没啥问题,但是运行的时候,进行成绩排序,姓名和学号与成绩对不上了

Jaiihnmyb.C 发表于 2021-5-15 00:44:07

贪睡的苏简 发表于 2021-5-13 18:46
你得弄成求助帖,然后别人才有动力来帮你解答,尽量加点注释

好的好的

孤世星辰 发表于 2021-5-15 10:21:53

Jaiihnmyb.C 发表于 2021-5-15 00:40
定义过了呀,这样看代码没啥问题,但是运行的时候,进行成绩排序,姓名和学号与成绩对不上了

我把代码改成这样运行成功了啊,你的不行么,你把错误信息发一下
页: [1]
查看完整版本: C语言中做成绩管理系统时进行排序的时候只有学号和成绩排序了,名字没有,怎么办?