某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
提示:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生
的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。
(1)用函数编程实现计算每个学生的总分;
(2)用函数编程实现按总分由高到低对学生成绩排序,注意:排序时,一维数组sum
元素的变化应连同二维数组score和一维数组num和aver一起变化;
(3)用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找
不到时返回-1值。
使用C语言统计学生成绩
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2021-11-26 18:10关注
代码如下:
#include <stdio.h> //计算总分 void total(int score[][3],int n,int sum[]) { int i,j; for (i=0;i<n;i++) { sum[i] = 0; for(j=0;j<3;j++) sum[i] += score[i][j]; } } //计算平均分 void averger(int sum[],int n,float avg[]) { int i; for(i=0;i<n;i++) avg[i] = 1.0 * sum[i]/3; } //按总分排序 void sort(int sum[],int n,int score[][3],float avg[],int num[]) { int i,j; int t,k; float f; for (i=0;i<n-1;i++) { for (j=0;j<n-1-i;j++) { if (sum[j] < sum[j+1]) { t = sum[j]; sum[j] = sum[j+1]; sum[j+1]=t; //交换平均分 f=avg[j]; avg[j+1]=avg[j+1]; avg[j+1]=f; //交换score for(k=0;k<3;k++) { t = score[j][k]; score[j][k]= score[j+1][k]; score[j+1][k] = t; } //交换学号 t = num[j]; num[j]=num[j+1]; num[j+1]=t; } } } } //排名,并保存名次 void pm(int sum[],int pm[],int n) { int i = 0; int mc = 1; pm[0] = 1; for (i=1;i<n;i++) { if(sum[i]== sum[i-1]) pm[i] = mc; else { mc++; pm[i] = mc; } } } //打印名次表 void printmc(int num[],int n,int pm[]) { int i; printf("学号 排名\n"); for (i=0;i<n;i++) { printf("%-2d %d\n",num[i],pm[i]); } } //查找k int findstu(int num[],int score[][3],int n,int sum[],int mc[],int k) { int i=0; for (i=0;i<n;i++) { if(num[i] == k) { printf("学号:%d\n",num[i]); printf("成绩:%d %d %d\n",score[i][0],score[i][1],score[i][2]); printf("总成绩:%d\n",sum[i]); printf("名次:%d\n",mc[i]); break; } } if(i==n) { printf("未找到该学号学员\n"); return -1; } return 0; } int main() { int score[30][3],sum[30],num[30],mc[30]; float avg[30]; int n,k,i,j; printf("请输入学员人数:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入学员%d的数学、英语和物理成绩:",i+1); num[i] = i+1; for(j=0;j<3;j++) scanf("%d",&score[i][j]); } //计算总成绩 total(score,n,sum); //计算平均成绩 averger(sum,n,avg); //根据总成绩排序 sort(sum,n,score,avg,num); //排名 pm(sum,mc,n); //打印排名 printmc(num,n,mc); //查找某个学号学员的信息 printf("请输入要查找的学员学号:"); scanf("%d",&k); findstu(num,score,n,sum,mc,k); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 4无用
悬赏问题
- ¥15 echarts动画效果失效的问题。官网下载的例子。
- ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加