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

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

img


img

有15个结构体变量,内含学生学号、姓名、生日、籍贯和C语言成绩,如表所示。
要求用函数实现以下三个功能:
1.输出C语言成绩最高的学生的信息;
2.输出区内学生和区外学生C语言成绩的平均值、方差;
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;
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632