设计一个结构体Student,然后设计自定义函数完成为学生结构体变量赋值,输出学生信息,按照出生日期排序,根据学号查找1个学生。学生信息存储在一个结构体数组中。
注意:由于vs2022不支持变长数组,所以若需要改变学生存储数量可直接对#difine后的N进行修改。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define N 3 //存放学生的数量可以直接通过修改N来解决
typedef struct Date//设计一个日期的结构体
{
int year;
int month;
int day;
}DATE;
typedef struct Student//设计一个学生结构体
{
int sNo;//学号
char sName[15];//名字
DATE bir;//调用日期结构体
float grade[4];//存放三科成绩
}STUDENT;
void input(int num, STUDENT a[])//输入数据的函数
{
int i = 0, j = 0;
for (i = 0; i < num; i++)
{
printf("请输入学号\n");
scanf("%d", &a[i].sNo);
printf("请输入姓名\n");
scanf("%s", &a[i].sName);
printf("请输入出生日期\n");
scanf("%d %d %d", &a[i].bir.year, &a[i].bir.month, &a[i].bir.day);
float count = 0;
printf("请输入三科成绩\n");
for (j = 0; j < 3; j++)
{
scanf("%f", &a[i].grade[j]);
count = count + a[i].grade[j];
}
a[i].grade[3] = (float)(count / 3.0);
}
}
void output(int num, STUDENT a[])//输出数据的函数
{
int i = 0, j = 0;
for (i = 0; i < num; i++)//输出共有N名学生的所有数据
{
printf("学号是%d,名字是%s,出生日期为%d年%d月%d日\n", a[i].sNo, a[i].sName, a[i].bir.year, a[i].bir.month, a[i].bir.day);
printf("三科成绩是\n");
for (j = 0; j < 3; j++)
{
printf("%10f", a[i].grade[j]);
}
printf("平均成绩是%f\n", a[i].grade[3]);
printf("\n");
}
}
void selectSort(int num, STUDENT a[])//对学生进行排序(利用学生出生日期排序)
{
STUDENT temp;
int i = 0, j = 0;
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (a[i].bir.year > a[j].bir.year)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
if (a[i].bir.year = a[j].bir.year)
{
if (a[i].bir.month > a[j].bir.month)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
if (a[i].bir.month = a[j].bir.month)
{
if (a[i].bir.day > a[j].bir.day)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
}
printf("重新排序的结果为");
for (i = 0; i < num; i++)
printf("%s\n", a[i].sName);
}
void asearch(int num, STUDENT a[], int d)//利用学号查找学生
{
int i = 0, b = 0;
for (i = 0; i < num; i++)
if (a[i].sNo == d)
{
printf("找到了该学生,此学生是第%d位\n", i + 1);
b = 1;
break;
}
if (b == 0)
printf("没有找到该学生\n");
}
int main()
{
int d;
STUDENT arr[N];
input(N, arr);
output(N, arr);
selectSort(N, arr);
printf("请输入要查找学生的学号\n");
scanf("%d", &d);
asearch(N, arr, d);
return 0;
}