如何对数组中的元素进行排序

问题遇到的现象和发生背景

我是大一的新生,刚学c几个月,学校教的都很浅,但现在直接要求做一个简易学生成绩管理系统的程序,于是我连着好几天敲代码硬着头皮把这程序做了一部分出来。现在就差对成绩高低进行排序的功能了,但确实是不会做了

问题相关代码,请勿粘贴截图

img

img

img

运行结果及报错内容
我的解答思路和尝试过的方法

尝试过网上说的冒泡法,但是我套用不进来这个程序,我想到将数组中的数据按照大小来转移到新的数组,然后将新数组中的元素陈列出来,达到把成绩以排序的方式陈列,但执行后却从0开始到100全部输出了。

我想要达到的结果

能够将学生信息按照成绩排序,并按照格式“学号 姓名 成绩”输出。

代码贴上来,帮你看一下,图片的代码看不全

#include<stdio.h>
int id_number[60];
int i_grade[60];
char i_name[3][20];
void main( )
{
int a;
int i=0;
int id;
int f;
int s;
int t;
printf("------简易学生成绩管理系统----- \n");
printf("请选择您要操作的序号(0-7): \n 1.添加学生信息 \n 2.显示学生信息 \n 3.查询学生信息 \n 4.修改学生信息 \n 5.删除学生信息 \n 6.统计学生信息 \n 7.对学生信息排序 \n 0.退出系统 \n");
scanf("%d",&a);
while(a!=0)
{
if(a==1)
{
input_info(i);
i=i+1;
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==2)
{
output_info();
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==3)
{
printf("请输入您要查询的学号:");
scanf("%d",&id);
search_info(id);
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==4)
{
printf("请输入您要修改的学生的学号:");
scanf("%d",&f);
change_info(f);
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==5)
{
printf("请输入您要删除的学生信息所对应的学生学号:");
scanf("%d",&s);
delete_info(s);
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==6)
{
printf("请输入您要进行统计操作的序号(1-5): \n 1.统计已录入学生个数 \n 2.求所有学生的平均成绩 \n 3.统计成绩达到及格(60分)的学生个数 \n 4.统计成绩达到优秀(90分)的学生个数 \n 5.返回 \n");
scanf("%d",&t);
while(t<5)
{
if(t==1)
{
statistics_info();
break;
}
if(t==2)
{
average_info();
break;
}
if(t==3)
{
pass_info();
break;
}
if(t==4)
{
excellent_info();
break;
}
if(t==5)
{
break;
}
}
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==7)
{
sort_info();
printf("请选择您要操作的序号(0-8): \n");
scanf("%d",&a);
}
if(a==0)
{
break;
}
}
}
void input_info(int j) //添加学生信息
{

printf("请输入学生学号(1-60):");
scanf("%d",&id_number[j]);
printf("请输入学生姓名:");
scanf("%s",&i_name[j]);
printf("请输入成绩(0-100):");
scanf("%d",&i_grade[j]);

}

void output_info() //显示全部学生信息
{
printf("学号 姓名 成绩 \n");
for(int m=0;m<60;m++)
{
if(id_number[m]!=0)
{
printf(" %d %s %d \n",id_number[m],i_name[m],i_grade[m]);
}
}
}

void search_info(int search_id) //查询信息
{
for(int n=0;n<60;n++)
{
if(search_id==id_number[n])
{
printf("姓名: %s \n",i_name[n]);
printf("他所对应的成绩为:%d \n",i_grade[n]);
}
}
}

void change_info(int change_id) //更改成绩
{
for(int c=0;c<60;c++)
{
if(change_id==id_number[c])
{
int ch;
printf("请输入要更改的成绩:");
scanf("%d",&ch);
i_grade[c]=ch;
printf("您已将成绩更改为: %d \n",i_grade[c]);
}
}
}

void delete_info(int delete_id) //删除信息
{
for(int d=0;d<60;d++)
{
if(delete_id==id_number[d])
{
printf("您删除的信息为: \n %d %s %d \n",id_number[d],i_name[d],i_grade[d]);
id_number[d]=0;
i_name[d][0] = '\0' ;
i_grade[d]=0;
break;
}
}
}

void statistics_info() //学生总数
{
int tot=0;
int to;
for(to=0;to<60;to++)
{
if(id_number[to]!=0)
{
tot=tot+1;
}
}
printf("已录入的学生数为: %d \n",tot);
}

void average_info() //平均成绩
{
int av=0;
int num;
int numb=0;
for(num=0;num<60;num++)
{
if(id_number[num]!=0)
{
numb=numb+1;
av=av+i_grade[num];
}
}
printf("所有已录入学生平均成绩为: %d \n",av/numb);
}

void pass_info() //及格人数
{
int p;
int pa=0;
for(p=0;p<60;p++)
{
if(i_grade[p]>=60)
{
pa=pa+1;
}
}
printf("及格的学生数为: %d \n",pa);
}

void excellent_info() //优秀人数
{
int e;
int ex=0;
for(e=0;e<60;e++)
{
if(i_grade[e]>=90)
{
ex=ex+1;
}
}
printf("成绩优异的学生数为: %d \n",ex);
}

void sort_info() //按成绩排序
{
int x,y,temp;

for(x=0;x<59;x++)
{
    for(y=0;y<59-x;y++)
    {
        if(i_grade[y]>i_grade[y+1])
        {
            temp=i_grade[y];
            i_grade[y]=i_grade[y+1];
            i_grade[y+1]=temp;
        }
    }
}

for(x=0;x<60;x++)
{
    if(i_grade[x]!=0)
    {
      printf("%d \n",i_grade[x]);
    }
}

}


#include<stdio.h>
int id_number[60];
int i_grade[60];
char i_name[3][20];

void input_info(int j) //添加学生信息
{
    printf("请输入学生学号(1-60):");
    scanf("%d", &id_number[j]);
    printf("请输入学生姓名:");
    scanf("%s", &i_name[j]);
    printf("请输入成绩(0-100):");
    scanf("%d", &i_grade[j]);
}

void output_info() //显示全部学生信息
{
    printf("学号 姓名 成绩 \n");
    for (int m = 0; m < 60; m++)
    {
        if (id_number[m] != 0)
        {
            printf(" %d %s %d \n", id_number[m], i_name[m], i_grade[m]);
        }
    }
}

void search_info(int search_id) //查询信息
{
    for (int n = 0; n < 60; n++)
    {
        if (search_id == id_number[n])
        {
            printf("姓名: %s \n", i_name[n]);
            printf("他所对应的成绩为:%d \n", i_grade[n]);
        }
    }
}

void change_info(int change_id) //更改成绩
{
    for (int c = 0; c < 60; c++)
    {
        if (change_id == id_number[c])
        {
            int ch;
            printf("请输入要更改的成绩:");
            scanf("%d", &ch);
            i_grade[c] = ch;
            printf("您已将成绩更改为: %d \n", i_grade[c]);
        }
    }
}

void delete_info(int delete_id) //删除信息
{
    for (int d = 0; d < 60; d++)
    {
        if (delete_id == id_number[d])
        {
            printf("您删除的信息为: \n %d %s %d \n", id_number[d], i_name[d], i_grade[d]);
            id_number[d] = 0;
            i_name[d][0] = '\0';
            i_grade[d] = 0;
            break;
        }
    }
}

void statistics_info() //学生总数
{
    int tot = 0;
    int to;
    for (to = 0; to < 60; to++)
    {
        if (id_number[to] != 0)
        {
            tot = tot + 1;
        }
    }
    printf("已录入的学生数为: %d \n", tot);
}

void average_info() //平均成绩
{
    int av = 0;
    int num;
    int numb = 0;
    for (num = 0; num < 60; num++)
    {
        if (id_number[num] != 0)
        {
            numb = numb + 1;
            av = av + i_grade[num];
        }
    }
    printf("所有已录入学生平均成绩为: %d \n", av / numb);
}

void pass_info() //及格人数
{
    int p;
    int pa = 0;
    for (p = 0; p < 60; p++)
    {
        if (i_grade[p] >= 60)
        {
            pa = pa + 1;
        }
    }
    printf("及格的学生数为: %d \n", pa);
}

void excellent_info() //优秀人数
{
    int e;
    int ex = 0;
    for (e = 0; e < 60; e++)
    {
        if (i_grade[e] >= 90)
        {
            ex = ex + 1;
        }
    }
    printf("成绩优异的学生数为: %d \n", ex);
}

void sort_info() //按成绩排序
{
    int x, y, temp;

    for (x = 0; x < 59; x++)
    {
        for (y = 0; y < 59 - x; y++)
        {
            if (i_grade[y] > i_grade[y + 1])
            {
                temp = i_grade[y];
                i_grade[y] = i_grade[y + 1];
                i_grade[y + 1] = temp;
            }
        }
    }

    for (x = 0; x < 60; x++)
    {
        if (i_grade[x] != 0)
        {
            printf("%d \n", i_grade[x]);
        }
    }
}
void main()
{
    int a;
    int i = 0;
    int id;
    int f;
    int s;
    int t;
    printf("------简易学生成绩管理系统----- \n");
    printf("请选择您要操作的序号(0-7): \n 1.添加学生信息 \n 2.显示学生信息 \n 3.查询学生信息 \n 4.修改学生信息 \n 5.删除学生信息 \n 6.统计学生信息 \n 7.对学生信息排序 \n 0.退出系统 \n");
    scanf("%d", &a);
    while (a != 0)
    {
        if (a == 1)
        {
            input_info(i);
            i = i + 1;
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 2)
        {
            output_info();
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 3)
        {
            printf("请输入您要查询的学号:");
            scanf("%d", &id);
            search_info(id);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 4)
        {
            printf("请输入您要修改的学生的学号:");
            scanf("%d", &f);
            change_info(f);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 5)
        {
            printf("请输入您要删除的学生信息所对应的学生学号:");
            scanf("%d", &s);
            delete_info(s);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 6)
        {
            printf("请输入您要进行统计操作的序号(1-5): \n 1.统计已录入学生个数 \n 2.求所有学生的平均成绩 \n 3.统计成绩达到及格(60分)的学生个数 \n 4.统计成绩达到优秀(90分)的学生个数 \n 5.返回 \n");
            scanf("%d", &t);
            while (t < 5)
            {
                if (t == 1)
                {
                    statistics_info();
                    break;
                }
                if (t == 2)
                {
                    average_info();
                    break;
                }
                if (t == 3)
                {
                    pass_info();
                    break;
                }
                if (t == 4)
                {
                    excellent_info();
                    break;
                }
                if (t == 5)
                {
                    break;
                }
            }
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 7)
        {
            sort_info();
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d", &a);
        }
        if (a == 0)
        {
            break;
        }
    }
}

刚刚才看到

img

#include<stdio.h>
int id_number[60];
int i_grade[60];
char i_name[3][20];

void input_info(int j) //添加学生信息
{
    printf("请输入学生学号(1-60):");
    scanf("%d",&id_number[j]);
    printf("请输入学生姓名:");
    scanf("%s",&i_name[j]);
    printf("请输入成绩(0-100):");
    scanf("%d",&i_grade[j]);
}

void output_info() //显示全部学生信息
{
    printf("学号 姓名 成绩 \n");
    for(int m=0; m<60; m++)
    {
        if(id_number[m]!=0)
        {
            printf(" %d %s %d \n",id_number[m],i_name[m],i_grade[m]);
        }
    }
}

void search_info(int search_id) //查询信息
{
    for(int n=0; n<60; n++)
    {
        if(search_id==id_number[n])
        {
            printf("姓名: %s \n",i_name[n]);
            printf("他所对应的成绩为:%d \n",i_grade[n]);
        }
    }
}

void change_info(int change_id) //更改成绩
{
    for(int c=0; c<60; c++)
    {
        if(change_id==id_number[c])
        {
            int ch;
            printf("请输入要更改的成绩:");
            scanf("%d",&ch);
            i_grade[c]=ch;
            printf("您已将成绩更改为: %d \n",i_grade[c]);
        }
    }
}

void delete_info(int delete_id) //删除信息
{
    for(int d=0; d<60; d++)
    {
        if(delete_id==id_number[d])
        {
            printf("您删除的信息为: \n %d %s %d \n",id_number[d],i_name[d],i_grade[d]);
            id_number[d]=0;
            i_name[d][0] = '\0' ;
            i_grade[d]=0;
            break;
        }
    }
}

void statistics_info() //学生总数
{
    int tot=0;
    int to;
    for(to=0; to<60; to++)
    {
        if(id_number[to]!=0)
        {
            tot=tot+1;
        }
    }
    printf("已录入的学生数为: %d \n",tot);
}

void average_info() //平均成绩
{
    int av=0;
    int num;
    int numb=0;
    for(num=0; num<60; num++)
    {
        if(id_number[num]!=0)
        {
            numb=numb+1;
            av=av+i_grade[num];
        }
    }
    printf("所有已录入学生平均成绩为: %d \n",av/numb);
}

void pass_info() //及格人数
{
    int p;
    int pa=0;
    for(p=0; p<60; p++)
    {
        if(i_grade[p]>=60)
        {
            pa=pa+1;
        }
    }
    printf("及格的学生数为: %d \n",pa);
}

void excellent_info() //优秀人数
{
    int e;
    int ex=0;
    for(e=0; e<60; e++)
    {
        if(i_grade[e]>=90)
        {
            ex=ex+1;
        }
    }
    printf("成绩优异的学生数为: %d \n",ex);
}

void sort_info(int t[],int n) //按成绩排序
{
    int x,y,temp;

    for(x=0; x<n-1; x++)
    {
        for(y=0; y<n-x-1; y++)
        {
            if(i_grade[y]>i_grade[y+1])
            {
                temp=i_grade[y];
                i_grade[y]=i_grade[y+1];
                i_grade[y+1]=temp;
            }
        }
    }

    /**/for(x=0; x<n; x++)
    {
        if(i_grade[x]!=0)
        {
            printf("%d  ",i_grade[x]);
        }
    }
    printf("\n");
}
int main( )
{
    int a;
    int i=0;
    int id;
    int f;
    int s;
    int t;
    printf("------简易学生成绩管理系统----- \n");
    printf("请选择您要操作的序号(0-7): \n 1.添加学生信息 \n 2.显示学生信息 \n 3.查询学生信息 \n 4.修改学生信息 \n 5.删除学生信息 \n 6.统计学生信息 \n 7.对学生信息排序 \n 0.退出系统 \n");
    scanf("%d",&a);
    while(a!=0)
    {
        if(a==1)
        {
            input_info(i);
            i=i+1;
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==2)
        {
            output_info();
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==3)
        {
            printf("请输入您要查询的学号:");
            scanf("%d",&id);
            search_info(id);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==4)
        {
            printf("请输入您要修改的学生的学号:");
            scanf("%d",&f);
            change_info(f);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==5)
        {
            printf("请输入您要删除的学生信息所对应的学生学号:");
            scanf("%d",&s);
            delete_info(s);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==6)
        {
            printf("请输入您要进行统计操作的序号(1-5): \n 1.统计已录入学生个数 \n 2.求所有学生的平均成绩 \n 3.统计成绩达到及格(60分)的学生个数 \n 4.统计成绩达到优秀(90分)的学生个数 \n 5.返回 \n");
            scanf("%d",&t);
            while(t<5)
            {
                if(t==1)
                {
                    statistics_info();
                    break;
                }
                if(t==2)
                {
                    average_info();
                    break;
                }
                if(t==3)
                {
                    pass_info();
                    break;
                }
                if(t==4)
                {
                    excellent_info();
                    break;
                }
                if(t==5)
                {
                    break;
                }
            }
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==7)
        {
            sort_info(i_grade,60);
            printf("请选择您要操作的序号(0-8): \n");
            scanf("%d",&a);
        }
        if(a==0)
        {
            break;
        }
    }
    return 0;
}