某班有最多不超过 30 人(具体人数由键盘输入)参加某门课程的期末考试。
(1) 录入每个学生的学号、姓名和各科考试成绩
(2) 计算每门课程的总分和平均分
(3) 按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5 个类别, 对每门课程分别统计每个类别的人数以及所占的百分比
(4) 输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分
#include<stdio.h>
#define N 30
void input(int n);
void countavg(int n);
void analyse(int n);
void output(int n);
struct student{
char id[10];
char name[10];
float classes[3];
float count[3];
float avg[3];
} st[N];
int main(){
int n,m;
printf("请输入参加考试的学生人数(n<30):\n");
scanf("%d",&n);
printf("\n");
do{
if(n>30){
printf("你输入的人数太多了!");
break;
}
printf("学生成绩管理:\n");
printf("1、输入记录\n");
printf("2、计算每门成绩的总分和平均分\n");
printf("3、每门课程的统计分析\n");
printf("4、列表记录\n");
printf("0、退出系统\n");
printf("--------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&m);
switch(m){
case 1:
input(n);
break;
case 2:
countavg(n);
break;
case 3:
analyse(n);
break;
case 4:
output(n);
break;
case 0:
break;
default:
printf("输入错误!\n");
break;
}
}while(m!=0);
}
void input(int n){//输入记录
for(int i=0;i<n;i++){
printf("请输入学生id:");
scanf("%s",&st[i].id);
printf("请输入学生名字:");
scanf("%s",&st[i].name);
printf("请输入学生语文成绩:");
scanf("%f",&st[i].classes[0]);
printf("请输入学生数学成绩:");
scanf("%f",&st[i].classes[1]);
printf("请输入学生英语成绩:");
scanf("%f",&st[i].classes[2]);
}
}
void countavg(int n){//计算每门成绩的总分和平均分
for(int i=0;i<n;i++){
st[N].count[0]+=st[i].classes[0];
st[N].count[1]+=st[i].classes[1];
st[N].count[2]+=st[i].classes[2];
}
st[N].avg[0]=st[N].count[0]/n;
st[N].avg[1]=st[N].count[1]/n;
st[N].avg[2]=st[N].count[2]/n;
printf("语文成绩的总分为sum=%.2f 平均分avg=%.2f\n",st[N].count[0],st[N].avg[0]);
printf("数学成绩的总分为sum=%.2f 平均分avg=%.2f\n",st[N].count[1],st[N].avg[1]);
printf("英语成绩的总分为sum=%.2f 平均分avg=%.2f\n",st[N].count[2],st[N].avg[2]);
}
void analyse(int n){
float cj[3][5]={0};
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
if(st[i].classes[j]>=90){
cj[j][0]+=1;
}else if(st[i].classes[j]>=80){
cj[j][1]+=1;
}else if(st[i].classes[j]>=70){
cj[j][2]+=1;
}else if(st[i].classes[j]>=60){
cj[j][3]+=1;
}else{
cj[j][4]+=1;
}
}
}
for(int j=0;j<3;j++){
switch(j){
case 0:
printf("语文成绩的系统分析:\n");
printf(" 类别 个数 所占百分比 \n");
break;
case 1:
printf("数学成绩的系统分析:\n");
printf(" 类别 个数 所占百分比 \n");
break;
case 2:
printf("英语成绩的系统分析:\n");
printf(" 类别 个数 所占百分比 \n");
break;
}
for(int k=0;k<5;k++){
switch(k){
case 0:
printf("优秀(90-100) %.0f %.2f%%\n",cj[j][k],(cj[j][k]/n)*100);
break;
case 1:
printf("良好(80-89) %.0f %.2f%%\n",cj[j][k],(cj[j][k]/n)*100);
break;
case 2:
printf("中等(70-79) %.0f %.2f%%\n",cj[j][k],(cj[j][k]/n)*100);
break;
case 3:
printf("及格(60-69) %.0f %.2f%%\n",cj[j][k],(cj[j][k]/n)*100);
break;
case 4:
printf("不及格(0-59) %.0f %.2f%%\n",cj[j][k],(cj[j][k]/n)*100);
break;
}
}
}
}
void output(int n){//列表记录
for(int i=0;i<n;i++){
printf("id:%s 名字:%s 语文成绩:%.2f 数学成绩:%.2f 英语成绩:%.2f",st[i].id,st[i].name,st[i].classes[0],st[i].classes[1],st[i].classes[2]);
printf("\n");
}
}