定义一个结构体类型student来表示学生的信息,学生的信息有:学生学号、姓名、性别、年龄、入学日期、成绩1、成绩2。要求入学日期使用上题所定义的结构体。 建立一个数组stu[5],输入5个人的资料,并按成绩1从小到大排序输出。(15分) 学生数据为:{ {{2020B200301},”刘滨”,”男”,18,{2020,9,20},70,85}, {{2020B200302},”阚美娟”,”女”,17,{2020,4,21},87,95, {{2020B200303},”胡大勇”,”男”,17,{2020,2,24},69,80}, {{2020B200305},”黎丽”,”女”,18,{2020,6,5},68,88}, {{2020B200309},”金鑫”,”男”,19,{2019,9,1},90,85} }
时间: 2023-12-17 20:03:59 浏览: 17
好的,以下是定义`student`结构体类型并实现输入、排序和输出的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 定义日期结构体
struct date {
int year;
int month;
int day;
};
// 定义学生信息结构体
struct student {
char id[13]; // 学生学号
char name[20]; // 姓名
char gender[6]; // 性别
int age; // 年龄
struct date admission_date; // 入学日期
float score1; // 成绩1
float score2; // 成绩2
};
// 比较函数,按成绩1从小到大排序
int cmp(const void *a, const void *b) {
struct student *p = (struct student *)a;
struct student *q = (struct student *)b;
if (p->score1 < q->score1) {
return -1;
} else if (p->score1 > q->score1) {
return 1;
} else {
return 0;
}
}
int main() {
// 定义学生数组
struct student stu[5] = {
{ "2020B200301", "刘滨", "男", 18, { 2020, 9, 20 }, 70, 85 },
{ "2020B200302", "阚美娟", "女", 17, { 2020, 4, 21 }, 87, 95 },
{ "2020B200303", "胡大勇", "男", 17, { 2020, 2, 24 }, 69, 80 },
{ "2020B200305", "黎丽", "女", 18, { 2020, 6, 5 }, 68, 88 },
{ "2020B200309", "金鑫", "男", 19, { 2019, 9, 1 }, 90, 85 }
};
// 输入学生信息
for (int i = 0; i < 5; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].gender);
printf("年龄:");
scanf("%d", &stu[i].age);
printf("入学日期(年 月 日):");
scanf("%d %d %d", &stu[i].admission_date.year, &stu[i].admission_date.month, &stu[i].admission_date.day);
printf("成绩1:");
scanf("%f", &stu[i].score1);
printf("成绩2:");
scanf("%f", &stu[i].score2);
}
// 按成绩1从小到大排序
qsort(stu, 5, sizeof(struct student), cmp);
// 输出学生信息
printf("\n按成绩1从小到大排序后的学生信息如下:\n");
printf("学号\t\t姓名\t\t性别\t年龄\t入学日期\t\t成绩1\t成绩2\n");
for (int i = 0; i < 5; i++) {
printf("%s\t%s\t%s\t%d\t%d-%d-%d\t%.1f\t%.1f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].age, stu[i].admission_date.year, stu[i].admission_date.month, stu[i].admission_date.day, stu[i].score1, stu[i].score2);
}
return 0;
}
```
在上述代码中,我们定义了一个名为`student`的结构体,包含了`id`、`name`、`gender`、`age`、`admission_date`、`score1`和`score2`七个成员。在`main()`函数中,我们首先给出了5个学生的初始信息,然后通过输入的方式获取另外5个学生的信息,并将所有10个学生的信息按成绩1从小到大排序后输出。其中,我们使用了`qsort()`函数和自定义的比较函数`cmp()`实现排序。