结构体应用

来源:互联网 发布:如何当网络作家 编辑:程序博客网 时间:2024/06/14 22:33
1, 结构体是一种自定义的数据类型,也是用来存储多个数据的大容器不过结构体要比数组灵活,它可以存储不同类型的数据
2, 结构体的定义
    struct + 结构体名字 {大括号中填写结构体成员,多个结构体成员之间通过分号间隔}
     如下:
    struct student {
        // 结构体成员
        char name[20];//存储姓名
        char sex;   // 存储性别


        int number; //存储学号
        int score;  // 存储分数
    };// 分号是结构体定义结束的标志,必不可少

     
3, typedef 类型重定义,即给已有的类型重新起一个名字,新的名字和原类型具有同样的功能;
     
    typedef 第一种格式, 先定义结构体类型,然后再typedef
     如:typedef int  integer;
     给结构体类型 struct student 重新定义一个名字Stu
     typedef struct student Stu;
     
    typedef 第二种格式, 定义结构体的同时,typedef (这种格式比较常用)
    typedef struct point1 {
        float abscissa; //存储横坐标
        float ordinate; //存储纵坐标
    }Poi1;
     其中Poi1此后可以作为一个数据结构类型应用
     如: Poi1 p1 = {};就是定义了一个结构体类型变量p1
4, 结构体变量访问结构体成员的方式,通过结构体变量.结构体成员,
     如: printf("number = %d\n",stu.number);
5, 结构体数组:
     // 定义一个学生结构体变量
    Stu person[4] = {{"Frank",'f',22,10086,87},{"Duck",'f',28,10087,93},{"Xiaoming",'f',27,10088,93},{"Phone",'f',25,10089,75}};
    // 运用结构体数组对学生按成绩排序:
    for (int i = 0; i < 4; i ++) {
        if (person[i].score > scoreMax.score) {
            scoreMax = person[i];
        }
        if (person[i].age < ageMin.age) {
            ageMin = person[i];
        }
    }


6, 结构体内存分配原则
     以结构体成员所规定的存储空间最大的空间大小为单位来进行分配,是
     最大空间的最小整数倍
7, 结构体可以嵌套, 即在一个结构体中的结构体成员是另一个结构体类型的变量
     如:先定义一个日期的结构体Date
    typedef struct  birthday
    {
        int year;
        int month;
        int day;
    }Birth;

     则:结构体嵌套, 在一个结构体中的结构体成员是另一个结构体类型的变量
    typedef struct stu {
        char name[20];   //存储学生姓名
        char sex;       //存储学生性别
        int age;        // 存储学生年龄
        int score;     //存储学生分数
        Birth birth;   //出生日期
    }Stu;
     
     8,练习:
1), 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
    int days(date dat)
    {
        int a[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
        int day = 0;
        BOOL isTrue ; // 用于判断该年是否为闰年
        // 判断该年是否为闰年
        if (dat.year % 400 == 0 || (dat.year % 4 == 0 && dat.year % 100 != 0)) {
            isTrue = 1;  // 如果该年是闰年,令isTrue 为 1
        } else {
            isTrue = 0;
        }
        day += a[dat.month - 1] + dat.day;
        day += isTrue && dat.month >= 3 ? 1 : 0;
        return day;
    }
2), 有5名学生保存在结构体数组中,编程按学生的姓名降序排序
    
    void sortName(Stu a[],int n)
    {
        for (int i = 0; i < n - 1; i ++) {
            for (int j = 0; j < n - 1 -i ; j ++) {
                if (strcmp(a[j].name, a[j + 1].name ) < 0)  {
                    Stu temp = a[j]; //temp 为中间变量,用于交换两个结构体元素
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        
    }

0 0
原创粉丝点击