C语言中的结构体数组

struct Birthday{
    int year;
    int month;
    int day;
};
//声明结构体类型
//typedef:定义新类型,为类型取别名
//typedef 原有类型,新类型
typedef struct Student{
    char *name;
    int age;
    int code;
    double score[3];
    //嵌套
    struct Birthday birthday;
} Student;
void printStudent(struct Student student);
void printStudents(struct Student *student,int length );
void soreStudents(Student *student,int length);
int main(int argc,const char * argv[]){
    //定义结构体数组
    struct Student students[5] ={
        {"student1",21,1,{80,99,90},{1993, 10, 3}},
        {"student2",20,2,{80,99,90},{1993, 10, 3}},
        {"student3",23,3,{80,99,90},{1993, 10, 3}},
        {"student4",21,4,{80,99,90},{1993, 10, 3}},
        {"student5",26,5,{80,99,90},{1993, 10, 3}}};
    printStudents(students,5);
    printf("-------------------------------");
    soreStudents(students, 5);
    printStudents(students,5);
    return 0;
}
//打印出单个学生的信息
void printStudent(struct Student student){
    printf("<Student : %p> name =%s age =%d code = %d score = {%.2f,%.2f,%.2f} birthday = %d.%d.%d\n",
           &student,
           student.name,
           student.age,
           student.code,
           student.score[0],
           student.score[1],
           student.score[2],
           student.birthday.year,
           student.birthday.month,
           student.birthday.day);
    //符号写错毁一生啊,里面逗号打成分号了啊。。。
}
//打印出所有学生的信息
void printStudents(struct Student *student,int length ){
    if (student == NULL && length == 0) {
        return;
    }
    for (int i = 0; i < length; i++) {
        printStudent(student[i]);
    }
}
//数组的排序(根据学生的年龄)
void soreStudents(Student *student,int length){
    if (student == NULL || length == 0) {
        return;
    }
    for (int i =0; i < length; i++) {
        for (int j = i; j<length; j++) {
            if (student[i].age>student[j].age) {
                Student temp = student[i];
                student[i] = student[j];
                student[j] = temp;
            }
        }
    }
}

运行结果:

<Student : 0x7fff5fbff6b0> name =student1 age =21 code = 1 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student2 age =20 code = 2 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student3 age =23 code = 3 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student4 age =21 code = 4 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student5 age =26 code = 5 score = {80.00,99.00,90.00} birthday = 1993.10.3

-------------------------------<Student : 0x7fff5fbff6b0> name =student2 age =20 code = 2 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student1 age =21 code = 1 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student4 age =21 code = 4 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student3 age =23 code = 3 score = {80.00,99.00,90.00} birthday = 1993.10.3

<Student : 0x7fff5fbff6b0> name =student5 age =26 code = 5 score = {80.00,99.00,90.00} birthday = 1993.10.3

Program ended with exit code: 0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值