计算学生平均成绩,并输出课程总平均成绩和最高分的学生信息。

从键盘输入5个学生数据(包括学号、姓名、3门课的成绩),计算并输出课程总平均成绩和最高分的学生信息。

1.输出的课程总平均成绩是3门课程的总平均成绩,输出的学生信息包括学号、姓名、3门课的成绩和平均分数。浮点型的数据输出保留1位小数。
2.程序中的数据输入、平均分计算、最高分查找都利用函数实现。计算结果的输出在main函数中实现。

如输入( 包括提示):
input scores of student 1:
NO.:1
name:zhang
score 1:70
score 2:80
score 3:90
input scores of student 2:
NO.:2
name:wang
score 1:90
score 2:98
score 3:97
input scores of student 3:
NO.:3
name:li
score 1:98
score 2:90
score 3:87
input scores of student 4:
NO.:4
name:zhao
score 1:99
score 2:98
score 3:97
input scores of student 5:
NO.:5
name:hu
score 1:76
score 2:77
score 3:78
输出:
功课的平均成绩分别为:88.3
最高分的同学信息是:
No.: 4, name: zhao, score:99.0, 98.0, 97.0, average: 98.0

一个实现,如果功课的平均成绩那里要输出5个学生的平均成绩,可以用一个for循环从学生成绩结构数组s的avg字段读取,供参考:

 #include <stdio.h>
 
struct stu{
    int id;
    char name[10];
    float chinese;
    float math;
    float english;
    float avg;
}; 
 
//获取5个学生信息到学生成绩结构数组s中 
void input(struct stu * s){
    
    int i=0;
    
    while(i<5){
        printf("input scores of student %d:\n",i+1);
        
        printf("NO.:");
        scanf("%d",&s[i].id);
        
        while(getchar()!='\n') //清除输入的换行符,以便让下面的名字字符串获取成功 
            continue;
        
        printf("name:");
        scanf("%s",s[i].name);
        
        printf("score 1:");
        scanf("%f",&s[i].chinese);
        printf("score 2:");
        scanf("%f",&s[i].math);
        printf("score 3:");
        scanf("%f",&s[i].english);
        
        i++;                        
    }
    
}
 
 //计算学生的总平均成绩 
float  calculateAvg(struct stu *s){
    
    int i=0;
    int j;
    float avg=0;
    while(i<5){        
                
            s[i].avg=(float)(s[i].chinese+s[i].english+s[i].math)/3; //每个学生的平均成绩存入学生成绩结构数据s的平均分字段avg中 
            avg+=s[i].avg; //累加每个学生的平均分 
            i++;
    }
    
    avg/=5;  //除以学生的人数得出成绩的总平均分 
     
    return avg;
} 


int findMax(struct stu * s){  //寻找最高分的下标 
    int i;
    float maxScore=0;
    float maxindex=0;
    float temp;
    
    for(i=0;i<5;i++){
        temp=(float)(s[i].chinese+s[i].english+s[i].math);
        if(temp>maxScore){
            maxScore=temp;
            maxindex=i;
        }             
    } 

    return maxindex;
}
 
int main(void){
    
    
    struct stu s[5];
    input(s);
    printf("功课的平均分成绩分别为:%.1f\n",calculateAvg(s));
    printf("最高分的同学信息是:\n");
    int index = findMax(s);
    printf("NO.:%d, name:%s, score:%.1f, %.1f, %.1f, average:%.1f"
    ,index+1,s[index].name,s[index].chinese,s[index].math,s[index].english,s[index].avg);
    
  
    return 0;
    
} 

img