您的位置:首页 > 其它

统计多个学生的多门课的成绩(结构体)

2016-04-11 22:38 435 查看
问题描述:

设有10个学生,每个学生的数据的包括学号,姓名,三门课的成绩。要求从键盘输入10个学生的数据,统计并打印

出三门课的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均成绩)。

算法分析:

求每个学生的平均成绩是要执行1.0次,所以使用for循环完成。

求分数最高的学生,就是求这10个数据中的最大者,先假设第1个事最大的,将其赋予记录最大数的变量max,然后

用max和后面的数据一 一比较,只要发现比max大的数,就将此数赋予max,并记录下当前的序号,也就是当前最大数

是第几个数,知道结束。

源代码:

#include<stdio.h>

struct student

{

    char num[4];

    char name[8];

    float score[3];

    float avr;

}stu[10];

void main()

{

    int i,j,maxi;

    float max,sum,aver;

    for(i=0;i<10;i++)   /*输入学生的数据*/

    {

        printf("请输入地%d个学生的数据:\n",i+1);

        printf("输入学号:");

        scanf("%s",stu[i].num);

        printf("输入姓名:");

        scanf("%s",stu[i].name);

        for(j=0;j<3;j++)

        {

            printf("输入第%d门课的成绩:",j+1);

            scanf("%f",&stu[i].score[j]);

        }

    }

    aver = 0;

    max = 0;

    maxi = 0;

    for(i=0;i<10;i++)  /* 分别求10个学生的平均成绩,最高分的学生的序号 */

    {

        sum = 0;

        for(j=0;j<3;j++)

            sum +=stu[i].score[j];

        stu[i].avr = sum / 3.0;

        aver += stu[i].avr;

        if(sum > max)  /* 地i个学生的总分和当前最高分比较 */

        {

            max = sum;

            maxi = i;

        }

    }

    aver /= 10;  /* 求总平均成绩 */

    printf("总的平均成绩是:%.3f\n",aver);

    printf("最高分的学生的学号,姓名,三门课的成绩分别为:\n");

    printf("%s %s %.2f %.2f %.2f\n",stu[maxi].num,stu[maxi].name,stu[maxi].score[0],

        stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: