结构体的两个案例

案例一

要求

三位老师每个老师嵌套三个学生的结构体

老师的结构体要求

学生的结构体要求

头文件

#include <iostream>
#include <string.h>
#include<ctime>           //获取系统时间
using namespace std;

定义学生和老师的结构体

// 学生结构体定义
struct student
{
    // 姓名
    string s_name;

    // 成绩
    int test;
};


// 老师的结构体定义
struct teacher
{
    // 姓名
    string t_name;

    // 学生数组
    struct student sdrr[5];        //学生结构体嵌套进老师结构体里
};

定义一个给老师和学生赋值的函数

// 定义一个给老师和学生赋值的函数
void td(struct teacher tArr[], int len)
{
    string nameT = "ABCDE";
    // 给老师开始赋值
    for (int i = 0; i < len; i++)
    {
        tArr[i].t_name = "Teacher_";
        tArr[i].t_name += nameT[i];

        // 老师的学生
        for (int j = 0; j < 5; j++)
        {
            tArr[i].sdrr[j].s_name = "student_";
            tArr[i].sdrr[j].s_name += nameT[j];
            
            int ran = rand()%61+40;          //随即100~40 = 随即同学的分数
            tArr[i].sdrr[j].test = ran;
        }
    }
}

自定义和打印函数

// 自定义打印函数
void print(struct teacher tArr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << "老师的姓名: " << tArr[i].t_name << endl;
        for (int j = 0; j < 5; j++)
        {
            cout << "学生姓名:  " << tArr[i].sdrr[j].s_name
                 << "分数: " << tArr[i].sdrr[j].test << endl;
        }
    }
}

回到main函数中

int main(void)
{
    //随机数种子
    srand((unsigned int)time(NULL));

​    // 创建三名老师的数组struct teacher tArr[3];

​    // 通过函数给3名老师的信息赋值,并给老师带的学生信息赋值int len = sizeof(tArr) / sizeof(tArr[0]); // 计算长度td(tArr, len);

​    // 打印所

有老师及代的学生的信息
    print( tArr, len);

​    cin.get();     //按任意建继续return 0;
}

全部加起来

#include <iostream>
#include <string.h>
#include<ctime>           //获取系统时间
using namespace std;

// 学生结构体定义
struct student
{
    // 姓名
    string s_name;

    // 成绩
    int test;
};

// 老师的结构体定义
struct teacher
{
    // 姓名
    string t_name;

    // 学生数组
    struct student sdrr[5];
};

// 定义一个给老师和学生赋值的函数
void td(struct teacher tArr[], int len)
{
    string nameT = "ABCDE";
    // 给老师开始赋值
    for (int i = 0; i < len; i++)
    {
        tArr[i].t_name = "Teacher_";
        tArr[i].t_name += nameT[i];

        // 老师的学生
        for (int j = 0; j < 5; j++)
        {
            tArr[i].sdrr[j].s_name = "student_";
            tArr[i].sdrr[j].s_name += nameT[j];
            
            int ran = rand()%61+40;
            tArr[i].sdrr[j].test = ran;
        }
    }
}

// 自定义打印函数
void print(struct teacher tArr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << "老师的姓名: " << tArr[i].t_name << endl;
        for (int j = 0; j < 5; j++)
        {
            cout << "学生姓名:  " << tArr[i].sdrr[j].s_name
                 << "分数: " << tArr[i].sdrr[j].test << endl;
        }
    }
}

int main(void)
{
    //随机数种子
    srand((unsigned int)time(NULL));

    // 创建三名老师的数组
    struct teacher tArr[3];

    // 通过函数给3名老师的信息赋值,并给老师带的学生信息赋值
    int len = sizeof(tArr) / sizeof(tArr[0]); // 计算长度
    td(tArr, len);

    // 打印所有老师及代的学生的信息
    print( tArr, len);

    cin.get();
    return 0;
}

运行结果

老师的姓名: Teacher_A
学生姓名:  student_A分数: 98
学生姓名:  student_B分数: 89
学生姓名:  student_C分数: 89
学生姓名:  student_D分数: 61
学生姓名:  student_E分数: 44
老师的姓名: Teacher_B
学生姓名:  student_A分数: 50
学生姓名:  student_B分数: 56
学生姓名:  student_C分数: 71
学生姓名:  student_D分数: 64
学生姓名:  student_E分数: 58
老师的姓名: Teacher_C
学生姓名:  student_A分数: 45
学生姓名:  student_B分数: 89
学生姓名:  student_C分数: 84
学生姓名:  student_D分数: 74
学生姓名:  student_E分数: 40

案例二

要求

给下面不同年龄不同排序的英雄用冒泡排序排序

            {"刘备", 23, ""},
            {"张飞", 20, ""},
            {"赵云", 21, ""},
            {"貂蝉", 19, ""},
            {"关羽", 22, ""},

开始写代码

头文件

#include <iostream>
#include <string>
using namespace std;

定义英雄结构体

struct ying
{
    string name; // 姓名
    int age;     // 年龄
    string man;  // 性别
};

在main函数中录入5位英雄的数据

 // 录入5位英雄的数据并计算长度
    struct ying xiong[5] =
        {
            {"刘备", 23, ""},
            {"张飞", 20, ""},
            {"赵云", 21, ""},
            {"貂蝉", 19, ""},
            {"关羽", 22, ""},
        };
        int len = sizeof(xiong) / sizeof(xiong[0]);  //方便后期更改

进行阶段性测试(必要)

    cout << "***************阶段性测试(必要)******************" << endl;
    cout<<"排序前"<<endl;
    for (int i = 0; i < len; i++)
    {
        cout << "姓名: " << xiong[i].name << endl
             << " 年龄: " << xiong[i].age << endl
             << " 性别: " << xiong[i].man << endl;
    }
    cout << "**********************************************" << endl<<endl << endl;

测试后我们开始根据年龄排序

自定义一个排序的函数

void paopao(struct ying xiong[], int len) // 冒泡排序
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
        {
            // 如果j元素的年龄大于j+1就交换
            if (xiong[j].age > xiong[j + 1].age)
            {
                struct ying temp = xiong[j];
                xiong[j] = xiong[j + 1];
                xiong[j + 1] = temp;
            }
        }
    }
}

并在main函数中加入

  paopao(xiong, len);

随后就是输出了可以直接cout输出也可以像我一样自定义一个输出函数(单纯好玩)

    ....               // 省略掉了
v
     // 打印排序后的
void printxiong(struct ying xiong[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout<<"排序后"<<endl;
        cout << "姓名: " << xiong[i].name << endl
             << " 年龄: " << xiong[i].age << endl
             << " 性别: " << xiong[i].man << endl;
    }
}


   .....           //省略掉了
    int main(void){
        ……             //省略掉了
    printxiong(xiong, len);
    ……                    //省略掉了

最后我们得到了

// 5个英雄不同年龄大小,用冒泡排序把他们通过年龄大小排序

#include <iostream>
#include <string>
using namespace std;

// 定义英雄结构体
struct ying
{
    string name; // 姓名
    int age;     // 年龄
    string man;  // 性别
};

void paopao(struct ying xiong[], int len) // 冒泡排序
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
        {
            // 如果j元素的年龄大于j+1就交换
            if (xiong[j].age > xiong[j + 1].age)
            {
                struct ying temp = xiong[j];
                xiong[j] = xiong[j + 1];
                xiong[j + 1] = temp;
            }
        }
    }
}

// 打印排序后的
void printxiong(struct ying xiong[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout<<"排序后"<<endl;
        cout << "姓名: " << xiong[i].name << endl
             << " 年龄: " << xiong[i].age << endl
             << " 性别: " << xiong[i].man << endl;
    }
}

int main(void)
{
    // 录入5位英雄的数据
    struct ying xiong[5] =
        {
            {"刘备", 23, ""},
            {"张飞", 20, ""},
            {"赵云", 21, ""},
            {"貂蝉", 19, ""},
            {"关羽", 22, ""},
        };

    int len = sizeof(xiong) / sizeof(xiong[0]);
    cout << "***************阶段性测试(必要)******************" << endl;
    cout<<"排序前"<<endl;
    for (int i = 0; i < len; i++)
    {
        cout << "姓名: " << xiong[i].name << endl
             << " 年龄: " << xiong[i].age << endl
             << " 性别: " << xiong[i].man << endl;
    }
    cout << "**********************************************" << endl<< endl << endl;

    // 进行排序
    paopao(xiong, len);

    // 打印排序后的结果
    printxiong(xiong, len);

    return 0;
}

输出结果

***************阶段性测试(必要)******************
排序前
姓名: 刘备
 年龄: 23
 性别: 男
姓名: 张飞
 年龄: 20
 性别: 男
姓名: 赵云
 年龄: 21
 性别: 男
姓名: 貂蝉
 年龄: 19
 性别: 男
姓名: 关羽
 年龄: 22
 性别: 男
**********************************************


排序后
姓名: 貂蝉
 年龄: 19
 性别: 男
排序后
姓名: 张飞
 年龄: 20
 性别: 男
排序后
姓名: 赵云
 年龄: 21
 性别: 男
排序后
姓名: 关羽
 年龄: 22
 性别: 男
排序后
姓名: 刘备
 年龄: 23
 性别: 男

最后

我把我的所有cpp源码放进了[我的github](https://github.com/ababll5/blog_cpp)里共大家学习参考
有问题请通过我的邮箱[email protected]告诉我