任务描述

成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1) 计算每个学生的总分和平均分;
(2) 按总分成绩由高到低排出成绩的名次;
(3) 输出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4) 任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
提示:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。

测试说明

测试数据:

20183001 98 99 97
20183002 89 85 90
20183003 77 67 88
20183004 88 82 95
20183005 56 76 80
20183006 66 65 74
20183007 99 99 91
20183008 56 63 60
20183009 45 56 63
20183010 90 88 87

输入学生信息的格式为:

按总分排名,按名次输出名次表,输出内容为:

任意输入一个学号,查找并输出该学生信息,输出内容为:

找不到时输出为:

注:找不到时格式字符串为:

1.Please enter searching number:20183006

2.position: NO | MT EN PH SUM AVER

3.8 20183006 | 66 65 74 205 68

printf("position: %8s\t|%6s%6s%6s%7s%8s\n"," NO ","MT","EN","PH","SUM","AVER"); 
#include  <stdio.h>
#define STU 30
#define COURSE 3
void Input(long num[], int score[][COURSE], int n);
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[]);
void Sort(long num[], int score[][COURSE], int n, int sum[], float aver[]);
void Print(long num[], int score[][COURSE], int n, int sum[], float aver[]);
int Search(long num[], int n, long x);int main(void)
{  int n, score[STU][COURSE],sum[STU],pos;  long num[STU],x;  float aver[STU];  printf("Please enter the total number of the students(n<=30):");  scanf("%d", &n);                    //输入参加考试的学生人数  printf("Enter No. and score as: MT  EN  PH\n");  Input(num, score, n);                //输入学生成绩GetSumAver(score, n, sum, aver);    //计算总分和平均分  printf("Before sort:\n");  Print(num, score, n, sum, aver);  Sort(num, score, n, sum, aver);        //排名次  printf("After sort:\n");  Print(num, score, n, sum, aver);printf("Please enter searching number:\n");scanf("%ld", &x);//以长整型的格式输入待查找学生的学号pos = Search(num, n, x); //名次查询if(pos != -1){printf("position:   %8s\t|%6s%6s%6s%7s%8s\n","  NO    ","MT","EN","PH","SUM","AVER"); printf("%8d    %4ld\t|%6d%6d%6d%7d%8.0f\n",pos+1, num[pos], score[pos][0], score[pos][1], score[pos][2], sum[pos], aver[pos]);}else{printf("Not found!\n");}return 0;
}  // 函数功能:输入某班学生期末考试三门课程成绩
void Input(long num[], int score[][COURSE], int n)
{  int  i, j;  for (i=0; i<n; i++)  {  scanf("%ld", &num[i]);  for (j=0; j<COURSE; j++)  {  scanf("%d", &score[i][j]);  }  }
}// 函数功能:计算每个学生的总分和平均分,结果存入对应的sum数组和aver数组
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])
{int i, j;for(i=0; i<n; i++){sum[i] = 0;for(j=0; j<COURSE; j++){sum[i] = sum[i] + score[i][j];}aver[i] = (float)sum[i] / COURSE;}
}// 函数功能:按总分成绩由高到低排出成绩的名次。注意,对应的学号、成绩、总分和平均分都需要保持一致
void Sort(long num[], int score[][COURSE], int n, int sum[], float aver[])
{int i, j, k, m;int temp1;long temp2;float temp3;for(i=0; i<n-1; i++){k = i;for(j=i+1; j<n; j++){if(sum[j] > sum[k]){k =j;}}if(k != i){temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;temp2 = num[k]; num[k] = num[i]; num[i] = temp2;temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;for(m=0; m<COURSE; m++){temp1 = score[k][m];score[k][m] = score[i][m];score[i][m] = temp1;}}}
}// 函数功能:输出名次表,表格内包括学生编号、各科分数、总分和平均分
void Print(long num[], int score[][COURSE], int n,  int sum[], float aver[])
{  int  i, j;printf("%8s\t|%6s%6s%6s%7s%8s\n","  NO    ","MT","EN","PH","SUM","AVER");  printf("---------------------------------------------------\n");for (i=0; i<n; i++)  {  printf("%ld\t|", num[i]);  for (j=0; j<COURSE; j++)  {  printf("%6d", score[i][j]);  }  printf("%7d%8.0f\n", sum[i], aver[i]);  }
}//函数功能:在学号数组中顺序查找学生学号
//              找到时,返回学生学号在学号数组中的小标位置,否则返回值-1
int Search(long num[], int n, long x)
{int i;for(i=0; i<n; i++){if(num[i] == x){return i;}}return -1;
}

C语言-学生学号成绩读入程序(输出了学生总分、平均分、名次以及学生信息的查询)相关推荐

  1. 请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大的顺序输出学生信息。

    请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大的顺序输出学生信息. 代码如下: dic = {} number = int(input("请输入学生的人 ...

  2. 基于java的学生考试成绩分析程序

    一.系统分析 本次试验需要编写一个学生考试成绩分析程序,至少具有这些功能:基本数据输入,能够建立并且输入班级.学生.课程和成绩单的信息,指定特定的班级和课程后,能够输出该班的所有学生的成绩,通过这个方 ...

  3. html 用户输入成绩,程序输出相应的成绩等级

    html 用户输入成绩,程序输出相应的成绩等级 详细代码 <! DOCTYPE html> <html> <head lang="en"> &l ...

  4. java 优解分班_java设计一个按班级的分组排序,班级 姓名 学号 成绩 ,再输出每个班90分以上的人数,占比多少。...

    展开全部 一.先编排考场 1.首先要做的就是先安排各个班级的每个学生所在的考场,尽量让同一考e69da5e6ba9062616964757a686964616f31333366303762场不能有同班 ...

  5. c语言学生成绩查询课设报告,C语言课设报告(学生考试成绩查询程序)【荐】.doc...

    C语言课设报告(学生考试成绩查询程序)[荐].doc 学生考试成绩查询程序 学号:******** 姓名:***** 完成日期:****年月 通过键盘输入学生的考试信息,包括:学号.姓名.课程名称.学 ...

  6. 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)

    目录 数据库实验(学生信息表) 实验一 实验二 实验三 实验四 数据库实验(学生信息表) 实验一 创建数据库以及学生信息表.课程信息表.选课表 create Table student (Sno ch ...

  7. mysql经典问题四表查询(教师,学生,成绩,课程表)

    建立数据库 1.建立一个数据库 create database work; 2.进入数据库work use work; 3.数据库默认编码可能不支持中文,可以在这里设置下 set names gbk; ...

  8. (教师,学生,成绩,课程表)关联表查询

    建立数据库 1.建立一个数据库  create database work; 2.进入数据库work  use work; 3.数据库默认编码可能不支持中文,可以在这里设置下  set names g ...

  9. php 分数大于80 小于90优,“ 90 分改成 80 分”学生期末成绩须“正态分布”?不必搞一刀切...

    在学校教学管理要求和教师自主教学的平衡上," 正态分布 " 可以作为一个原则性要求,但不能作为刚性要求. 全文 1366 字,阅读约需 2 分钟 文 / 熊丙奇(教育学者) 编辑 ...

最新文章

  1. python3 shell 正则表达式 攫取复杂字符串特定子串
  2. python异常处理的语法格式_Python异常处理
  3. 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
  4. 前端开发 html常用标签 0229
  5. pta-3、输入输出-格式化输出字符串 (10 分)
  6. 《中国人工智能学会通讯》——11.64 基于成对约束的属性特征选择
  7. Java求一个数的质因数
  8. javafx 时间输入框
  9. VC知识库BLOG-技术,非技术......
  10. w7系统计算机更改用户名,win7系统用户名不能修改的解决方法
  11. 论文阅读--异常检测中实时大数据处理的研究挑战
  12. android缓存清理代码,安卓缓存清除和计算
  13. C# 001 Windows7 WiFi共享大师 共享精灵 自制无广告精简版本
  14. 终于来了!新版本M4压不住枪了?刺激战场雪地地图最强灵敏度
  15. 养生怪杰:魏伟的养生之道
  16. cocos creator Android 接入Google登陆sdk
  17. bupt信通院上机第一学期实验四(30-37) 指针
  18. 如何往码云里上传项目文件?
  19. 电机控制用到的公式换算总结
  20. 带孩子们做环球旅行的读后感_在家带孩子无聊,宝妈想找事做,做什么工作合适?...

热门文章

  1. shell学习之查找当前目录下文件以及文件夹大小-'du'命令和'df'命令
  2. android开发 之 Canvas绘制文字,图片
  3. Win7(Win10)+Ubuntu18.04(16.04)双系统安装心得
  4. 【Linux】_Engineer_用户和组,ACL,磁盘分区,权限,进程管理,防火墙策略
  5. 计算机一级底纹颜色怎么设置,word2016文字字形和颜色设置及文字底纹效果方法...
  6. OSG笔记一:在Win7、VS2010下配置OSG3.4
  7. Xshell配色美化
  8. ROS TF 常用接口函数
  9. ssm报错:No qualifying bean of type ‘com.hr.service.LoginService‘ available
  10. @Before有啥用