|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|
|