꧁༺ཌ༈时光、淡了回忆༈ད༻꧂ 2022-05-24 15:07 采纳率: 60%
浏览 474
已结题

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

从键盘输入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

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-25 10:58
    关注

    一个实现,如果功课的平均成绩那里要输出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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 创建了问题 5月24日

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂