输入10个学生5门课的成绩,分别用函数实现下列功能:
①计算每个学生的平均分;
②计算每门课的平均分;
③找出所有50个分数中最高的分数所对应的学生和课程;
④计算平均分方差:
其中,xi为某一学生的平均分。
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 100
#define X 10
#define Y 5
void input(char lesson[Y][MAX],float score[X][Y]){
int i,j;
for(i=0;i<X;i++){
printf("请输入第%d个同学的成绩:\n",i+1);
for(j=0;j<Y;j++){
printf("%s:",lesson[j]);
scanf("%f",&score[i][j]);
while(!(score[i][j]<=100&&score[i][j]>=0)){
printf("输入的值不符合规范,请再次输入:");
scanf("%f",&score[i][j]);
}
}
}
}
void print(char lesson[Y][MAX],float score[X][Y]){
int i,j;
printf("-----------------------------------成绩输出---------------------------------\n学号 ");
for(j=0;j<Y;j++){
printf("%s\t ",lesson[j]);
}
printf("\n");
for(i=0;i<X;i++){
printf("%2d ",i+1);
for(j=0;j<Y;j++){
printf("%3.1f\t ",score[i][j]);
}
printf("\n");
}
}
void average(char lesson[Y][MAX],float score[X][Y]){
int i,j;
printf("-----------------------------------平均成绩---------------------------------\n");
for(j=0;j<Y;j++){
printf("%s\t ",lesson[j]);
}
printf("\n");
for(i=0;i<Y;i++){
float temp=0;
for(j=0;j<X;j++){
temp+=score[j][i];
}
printf("%3.1f\t ",temp/10.0);
}
}
void MAX_S(char lesson[Y][MAX],float score[X][Y]){
int i,j;
printf("\n-----------------------------科目最高成绩及获得者-------------------------------\n");
printf("\n");
for(i=0;i<Y;i++){//Y 5 X 10
printf("%s\t",lesson[i]);
float max_score=score[0][i];
for(j=0;j<X;j++){
if(max_score<score[j][i]){
max_score=score[j][i];
}
}
for(j=0;j<X;j++){
if(max_score==score[j][i]){
printf("[学号:%d 分数:%3.1f]\t",j+1,score[j][i]);
}
}
printf("\n");
}
}
void FC(float score[X][Y]){
int i,j;
float temp=0,aver=0,aver_double=0;
float av[10];
for(i=0;i<X;i++){
temp=0;
for(j=0;j<Y;j++){
temp+=score[i][j];
}
av[i]=temp/Y;
}
for(i=0;i<X;i++){
aver_double+=pow(av[i],2);
aver+=av[i];
}
float fangcha=aver_double/X-pow(aver/X,2);
printf("方差是:%f",fangcha);
}
int main(){
char lesson[Y][MAX]={{"CHINESE"},{"MATH"},{"ENGLISH"},{"PHYSIC"},{"HISTORY"}};
float score[MAX][MAX];
input(lesson,score);
print(lesson,score);
average(lesson,score);
MAX_S(lesson,score);
FC(score);
return 0;
}