鱼C论坛

 找回密码
 立即注册
查看: 2747|回复: 5

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

[复制链接]
发表于 2021-5-13 18:16:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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[i].name, &stu[i].xh, &stu[i].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[i].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[j].score>stu[k].score)
            k=j;
        }
        if(i!=k)
        {

            t=stu[k].score;
            h=stu[k].xh;

            stu[k].score=stu[i].score;
            stu[k].xh=stu[i].xh;

            stu[i].score=t;
            stu[i].xh=h;
        }
    }
    for(i=0;i<g_n;i++)
        printf("姓名:%s\t学号:%ld\t成绩:%f\n",stu[i].name,stu[i].xh,stu[i].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[mid].xh)
            low=mid+1;
        else if(x<stu[mid].xh)
            high=mid-1;
        else
        {
            pos=mid;
            find=1;
        }
    }
    for(i=0;i<g_n;i++)
    {
        if(stu[i].xh>stu[pos].xh)
        c++;
    }
    printf("姓名:%s\t学号:%ld\t成绩:%f排名:%d\n",stu[pos].name,stu[pos].xh,stu[pos].score,c+1);
}
void list()//输出学生信息
{
    int i,n;
    for(i=0;i<g_n;i++)
    {
        printf("姓名:%s\t学号:%ld\t成绩:%f\n",stu[i].name,stu[i].xh,stu[i].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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-13 18:46:21 | 显示全部楼层
你得弄成求助帖,然后别人才有动力来帮你解答,尽量加点注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j].score>stu[k].score)
            k=j;
        }
        if(i!=k)
        {

            t=stu[k].score;
            h=stu[k].xh;

            stu[k].score=stu[i].score;
            stu[k].xh=stu[i].xh;

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-5-15 00:40:01 | 显示全部楼层
孤世星辰 发表于 2021-5-14 10:36
因为你的px()函数里面的 j 没有定义

定义过了呀,这样看代码没啥问题,但是运行的时候,进行成绩排序,姓名和学号与成绩对不上了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-15 00:44:07 | 显示全部楼层
贪睡的苏简 发表于 2021-5-13 18:46
你得弄成求助帖,然后别人才有动力来帮你解答,尽量加点注释

好的好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我把代码改成这样运行成功了啊,你的不行么,你把错误信息发一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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