某班期末考试科目为数学(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 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
- ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
- ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
- ¥15 信息管理系统的查找和排序
- ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
- ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
- ¥15 PB中矩阵文本型数据的总计问题。
- ¥15 MATLAB卫星二体模型仿真
- ¥15 怎么让数码管亮的同时让led执行流水灯代码
- ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串