某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
(7)输出每个学生的学号、考试成绩。
#include"stdio.h"
//打印菜单;
void menu(){
printf("Management for Students' scores\n");
printf("1.Input record\n");
printf("2.Caculate total and average score of course\n");
printf("3.Sort in descending order by score\n");
printf("4.Sort in ascending order by number\n");
printf("5.Search by number\n");
printf("6.Statistic analysis\n");
printf("7.List record\n");
printf("0.Exit\n");
printf("Please Input your choice:\n");
}
//总分;
float Total(float arr[],int num){
int i;
float sum=0;
for(i=0;i<num;i++){
sum+=arr[i];
}
return sum;
}
//平均分
float Ave(float arr[],int num){
int i;
float sum=0;
for(i=0;i<num;i++){
sum+=arr[i];
}
return (float)sum/num;
}
//按成绩打印;
void RankByGrade(float arr[],long id[],int num){
for(int i=0;i<num-1;i++){
for(int j=0;j<num-1-i;j++){
if(arr[j]<arr[j+1]){
float t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
long t2=id[j];
id[j]=id[j+1];
id[j+1]=t2;
}
}
}
printf("Sort in descending order by score:\n");
for(int i=0;i<num;i++){
printf("%ld\t%.0f\n",id[i],arr[i]);
}
}
//按学号打印;
void RankById(float arr[],long id[],int num){
for(int i=0;i<num-1;i++){
for(int j=0;j<num-1-i;j++){
if(id[j]>id[j+1]){
float t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
long t2=id[j];
id[j]=id[j+1];
id[j+1]=t2;
}
}
}
printf("Sort in ascending order by number:\n");
for(int i=0;i<num;i++){
printf("%ld\t%.0f\n",id[i],arr[i]);
}
}
//按照学号查找;
void Search(float arr[],long id[],int num,long searchid){
int flag=0,i;
for(i=0;i<num;i++){
if(searchid==id[i]){
flag=1;
break;
}
}
if(flag==0){
printf("Not found!\n");
}else{
printf("%ld\t%.0f\n",id[i],arr[i]);
}
}
//成绩分析;
void Analysis(float arr[],int num){
int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;
for(int i=0;i<num;i++){
if(arr[i]<=59){
count1++;
}else if(arr[i]>=60.0&&arr[i]<=69.0){
count2++;
}else if(arr[i]>=70.0&&arr[i]<=79.0){
count3++;
}else if(arr[i]>=80.0&&arr[i]<=89.0){
count4++;
}else if(arr[i]>=90.0&&arr[i]<=99.0){
count5++;
}else if(arr[i]==100.0){
count6++;
}
}
printf("<60\t%d\t%.2f%%\n",count1,count1*100.0/num);
printf("%d-%d\t%d\t%.2f%%\n",60,69,count2,count2*100.0/num);
printf("%d-%d\t%d\t%.2f%%\n",70,79,count3,count3*100.0/num);
printf("%d-%d\t%d\t%.2f%%\n",80,89,count4,count4*100.0/num);
printf("%d-%d\t%d\t%.2f%%\n",90,99,count5,count5*100.0/num);
printf("%d\t%d\t%.2f%%\n",100,count6,count6*100.0/num);
}
//展示
void Show(float arr[],long id[],int num){
for(int i = 0;i<num;i++){
printf("%ld\t%.0f\n",id[i],arr[i]);
}
}
int main(){
int num;
printf("Input student number(n<30):\n");
scanf("%d",&num);
float arr[num];//成绩
int input;//选择
float sum,ave;//总分和平均分
long id[num];//学号
long searchid;
do{
menu();
scanf("%d",&input);
switch(input){
case 1:
printf("Input student's ID, name and score:\n");
for(int i=0;i<num;i++){
scanf("%ld%f",&id[i],&arr[i]);
}
break;
case 2:
sum=Total(arr,num);
ave=Ave(arr,num);
printf("sum=%.0f,aver=%.2f\n",sum,ave);
break;
case 3:
RankByGrade(arr,id,num);
break;
case 4:
RankById(arr,id,num);
break;
case 5:
printf("Input the number you want to search:\n");
scanf("%ld",&searchid);
Search(arr,id,num,searchid);
break;
case 6:
Analysis(arr,num);
break;
case 7:
Show(arr,id,num);
break;
case 0:
break;
default:
printf("Input error!\n");
break;
}
}while(input);
printf("End of program!");
}