2201_75656015 2022-12-15 17:50 采纳率: 100%
浏览 120
已结题

用结构体分别输入n个学生信息,包括,学号,姓名,区域,C语言成绩,计算区域外和区域内的平均值和方差

不会解第二三题,自己用书本做出了第一题

img


img

有15个结构体变量,内含学生学号、姓名、生日、籍贯和C语言成绩,如表所示。
要求用函数实现以下三个功能:
1.输出C语言成绩最高的学生的信息;
2.输出区内学生和区外学生C语言成绩的平均值、方差;
3.按照生日先后顺序输出全部学生的信息;

  • 写回答

3条回答 默认 最新

  • 关注

    方差先求平均值,然后用所有的值减去平均值求平方和/N

    代码:

    
    #include<stdio.h>
    #include<stdlib.h>
    #define N 4
    struct Date
    {
        int year;
        int month;
        int day;
    };
    struct Student
    {
        long long num;
        char name[20];
        int qu;
        struct Date birthday;
        int score;
    };
    void input(struct Student stu[])
    {
        int i;
        printf("请输入各学生的信息:学号、姓名、区域、生日、C语言成绩:\n");
        for (i = 0; i < N; i++)
        {
            scanf("%lld %s %d %d %d %d %d", &stu[i].num, stu[i].name, &stu[i].qu, &stu[i].birthday.year, &stu[i].birthday.month, &stu[i].birthday.day, &stu[i].score);
        }
    }
    //输出最高成绩
    void maxScore(struct Student stu[])
    {
        int index = 0;
        int i = 0;
        for (i = 1; i < N; i++)
        {
            if (stu[i].score > stu[index].score)
                index = i;
        }
        printf("成绩最高的学生信息为:\n");
        printf("%lld %s %d %d%02d%02d %d\n", stu[index].num, stu[index].name, stu[index].qu, stu[index].birthday.year, stu[index].birthday.month, stu[index].birthday.day, stu[index].score);
    }
    //求平均值和方差
    void ave(struct Student stu[])
    {
        float ave1 = 0, ave2 = 0;//区内和区外学生的平均分
        int i;
        int n1 = 0, n2 = 0;
        float s1 = 0, s2 = 0; //方差
        for (i = 0; i < N; i++)
        {
            if (stu[i].qu == 0) //区内
            {
                ave1 += stu[i].score;
                n1++;
            }
            else
            {
                ave2 += stu[i].score; //区外
                n2++;
            }
        }
        //平均值
        ave1 /= n1;
        ave2 /= n2;
        //方差
        for (i = 0; i < N; i++)
        {
            if (stu[i].qu == 0) //区内
            {
                s1 += (stu[i].score - ave1) * (stu[i].score - ave1);
            }
            else
            {
                s2 += (stu[i].score - ave2) * (stu[i].score - ave2); //区外
            }
        }
        s1 /= n1;
        s2 /= n2;
        printf("区内学生平均分:%.2f,方差:%.2f\n", ave1, s1);
        printf("区外学生平均分:%.2f,方差:%.2f\n", ave2, s2);
    }
    //比较日期
    int cmp(struct Date d1, struct Date d2)
    {
        if (d1.year < d2.year)
            return -1;
        else if (d1.year > d2.year)
            return 1;
        else
        {
            if (d1.month < d2.month)
                return -1;
            else if (d1.month > d2.month)
                return 1;
            else
            {
                if (d1.day < d2.day)
                    return -1;
                else if (d1.day > d2.day)
                    return 1;
                else
                    return 0;
            }
        }
    }
    
    //按生日排序
    void sortByBirtyday(struct Student stu[])
    {
        int i, j;
        struct Student t;
        for (i = 0; i < N - 1; i++)
        {
            for (j = 0; j < N - 1 - i; j++)
            {
                if (cmp(stu[j].birthday, stu[j + 1].birthday) > 0) //按生日从小到大排序
                {
                    t = stu[j];
                    stu[j] = stu[j + 1];
                    stu[j + 1] = t;
                }
            }
        }
        //输出
        printf("按生日先后排序:\n");
        for (i = 0; i < N; i++)
            printf("%lld %s %d %d%02d%02d %d\n", stu[i].num, stu[i].name, stu[i].qu, stu[i].birthday.year, stu[i].birthday.month, stu[i].birthday.day, stu[i].score);
    }
    int main()
    {
        struct Student stu[N];
        input(stu);
        maxScore(stu); //(1)
        ave(stu);//(2)
        sortByBirtyday(stu);//(3)
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)