【C语言习题】2016_5_2学生成绩排名
程序员文章站
2022-07-15 16:27:34
...
题目
分析
- 学生信息包括姓名、学号、成绩,用结构体存储
- 成绩分为数学、语文、物理、化学、英语五门成绩,用数组处理
- 30名学生,用结构体数组存储
定义结构体:
struct stu{
char name[30];
int num;
float score[5];
float all;
}a[N];
- 总分在前十名,选择排序法
对数组a[]做简单选择排序,N为数组长度
for(i=0;i<N-1;i++) //选择排序,由大到小排列
{
k = i;
for(j=i+1;j<N;j++)
if(a[j]>a[k])
k=j;
if(k!=i){
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
- 处理特别关注学生(低于80分)和并列排名学生
代码
#include <stdio.h>
#define N 30
struct stu{
char name[30];
int num;
float score[5];
float all;
}a[N];
int main() {
int i,j,k;
struct stu temp;
printf("学号,输入姓名,数学成绩,语文成绩,物理成绩,化学成绩,英语成绩:\n");
for(i=0;i<N;i++) //输入学生信息
scanf("%d%s%f%f%f%f%f",&a[i].num,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2],&a[i].score[3],&a[i].score[4]);
for(i=0;i<N;i++) //计算总分
a[i].all = a[i].score[0]+a[i].score[1]+a[i].score[2]+a[i].score[3]+a[i].score[4];
for(i=0;i<N-1;i++) //选择排序,由大到小排列
{
k = i;
for(j=i+1;j<N;j++)
if(a[j].all>a[k].all)
k=j;
if(k!=i){
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
int m = 10; //处理并列排名的情况
if(a[9].all == a[10].all)
m = 11;
for(i = 0;i<m;i++) { //输出前10名
if(i == 10)
printf("第%d名:",i);
else
printf("第%d名:",i+1);
printf("%6d%8s %6.2f,", a[i].num,a[i].name, a[i].all);
for(j=0;j<5;j++)
if(a[i].score[j]<80) //找出低于80分的功课
switch (j){
case 0:printf("数学低于80分;");
break;
case 1:printf("语文低于80分;");
break;
case 2:printf("物理低于80分;");
break;
case 3:printf("化学低于80分;");
break;
case 4:printf("英语低于80分;");
break;
default:;
}
printf("\n");
}
return 0;
}
结果示例
由于30组数据太多,在此我只用了5组数据,选出前三名学生。这里也体现出定义数组用#define N 30
来表示数组长度的好处。
并列第三情况:
推荐阅读
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
C语言--学生成绩管理系统
-
C++学习(四十)(C语言部分)之 学生管理系统设计
-
C语言实现学生信息管理系统(文件版)
-
C语言版学生信息管理系统
-
《C语言入门经典》习题7.1【原创】
-
C语言程序设计——选择分支结构程序设计——实现分段函数(习题4.5)
-
C语言程序设计——选择分支结构程序设计——将员工以年龄分配职务(习题4.4)
-
C语言程序设计——选择分支结构程序设计——判断从键盘输入的整数的正负性和奇偶性(习题4.3)
-
leetcode中剑指offer的习题 C++语言实现(2)