写出程序并给每一步注释,越详细越好,最好能举个具体的例子,不要用指针
某班期末考试科目为数学,英语,和物理,有最多不超过30人参加考试。考试后要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
C语言二维数组+函数+for语句
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- CSDN专家-sinJack 2022-10-21 15:31关注
#include <stdio.h> #include <stdlib.h> #define MAX_LEN 9 /* 字符串最大长度 */ #define STU_NUM 30 /* 最多的学生人数 */ /* 定义一个录入成绩的方法,参数为学号数组、三门成绩数组、录入学生人数 */ void ReadScore(long num[],int score[][3],int n) { int i,k; for(i=0;i<n;i++) {printf("输入第%d个学生学号以及数学、英语、物理成绩:\n",i+1); scanf("%ld",&num[i]); getchar();//清除缓存 for(k=0;k<3;k++) { scanf("%d",&score[i][k]);//输入当前第i名学生的第k门成绩 getchar(); } } } /* 定义一个计算学生总成绩、平均成绩的方法,参数为 总成绩数组、平均成绩数组、各科成绩二维数组、录入学生人数 */ void Student(int Studentsum[STU_NUM],float Studentaver[STU_NUM],int score[][3],int n) { int i,k,s; for(i=0;i<n;i++) //遍历每一个学生 { s=0; for(k=0;k<3;k++) //遍历每门成绩(一共三门) { s+=score[i][k];//统计求当前学生i的总成绩 } Studentsum[i]=s; Studentaver[i]=(float)s/3;// 统计求当前学生i的平均成绩 } } int main() { //定义学生人数变量、成绩二维数组、学生总成绩数组 int n,score[STU_NUM][3],Studentsum[STU_NUM]; //定义学号、学号数组 long no,num[STU_NUM]; //定义平均分数组 float Studentaver[STU_NUM]; printf("请输入学生人数:"); scanf("%d",&n); //调用方法录入成绩 ReadScore(num,score,n); //调用方法计算总成绩、平均成绩 Student(Studentsum,Studentaver,score,n); printf("学号\t总分\t平均分\n"); for(int t=0;t<n;t++) { printf("%ld\t%4d\t%4.1f\n",num[t],Studentsum[t],Studentaver[t]); } //按照总成绩进行排名 for(int i=0;i<n-1;i++){ for(int j=0;j<n-1-i;j++){ if(Studentsum[j]<Studentsum[j+1]){ //交换学号 long temp=num[j]; num[j]=num[j+1]; num[j+1]=temp; //交换总成绩 int temp1=Studentsum[j]; Studentsum[j]=Studentsum[j+1]; Studentsum[j+1]=temp1; //交换平均成绩 int temp2=Studentaver[j]; Studentaver[j]=Studentaver[j+1]; Studentaver[j+1]=temp2; //交换各科成绩 int temp3[]={0}; temp3[0]=score[j][0]; temp3[1]=score[j][1]; temp3[2]=score[j][2]; score[j][0]=score[j+1][0]; score[j][1]=score[j+1][1]; score[j][2]=score[j+1][2]; score[j+1][0]=score[j][0]; score[j+1][1]=score[j][1]; score[j+1][2]=score[j][2]; } } } printf("\n名次 学号 数学成绩 英语成绩 物理成绩 总分 平均分\n"); for(int i=0;i<n;i++) { printf("%d\t%ld\t",i+1,num[i]); for(int k=0;k<3;k++) { printf("%6d\t",score[i][k]); } printf("%6d\t%5.1f\n",Studentsum[i],Studentaver[i]); } printf("请输入待查询学号:"); scanf("%ld",&no); bool flag=true; for(int i=0;i<n;i++){ if(no==num[i]){ flag=false; printf("名次:%d,学号:%ld,数学成绩:%d,英语成绩:%d,物理成绩:%d\n",i+1,no,score[i][0],score[i][1],score[i][2]); break; } } if(flag) printf("当前学号不存在!"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 宇视监控服务器无法登录
- ¥15 PADS Logic 原理图
- ¥15 PADS Logic 图标
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥15 DruidDataSource一直closing
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据