结构体的两个案例
案例一
要求
三位老师每个老师嵌套三个学生的结构体
老师的结构体要求
- 姓名:Teacher+"A、B、c"
学生的结构体要求
- 姓名:student_+“A、B、C、D、E”
- 随机的考试成绩
头文件
#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]告诉我