不会解第二三题,自己用书本做出了第一题
有15个结构体变量,内含学生学号、姓名、生日、籍贯和C语言成绩,如表所示。
要求用函数实现以下三个功能:
1.输出C语言成绩最高的学生的信息;
2.输出区内学生和区外学生C语言成绩的平均值、方差;
3.按照生日先后顺序输出全部学生的信息;
不会解第二三题,自己用书本做出了第一题
有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;
}