内容纲要
案例1如图
#include <iostream>
#include "string"
#include <ctime>
using namespace std;
/*
学校正在做毕设项目,每名老师带5 个学生,共有3 名老师,需求如下,
设计学生和老师的结构体,其中老师的结构体中,有老师姓名和一个存放5 名学生的数组作为成员
学生的成员有姓名,考试分数,创建数组存放3名老师,通过函数给每个老师所带的学生赋值
最终打印出老师数据以及老师所带学生数据。
*/
struct student
{
string sName;
int score;
};
struct teacher
{
string tName;
struct student student[5];
};
void InitArr(teacher teacher[], int length) { //这里的teacher * teacher 等价于 teacher teacher[]
string stuName = "ABCDE";
string teaName = "123";
for (size_t i = 0; i < length; i++)
{
teacher[i].tName = "Teacher_"; //给老师命名。
teacher[i].tName += teaName[i];
for (size_t j = 0; j < 5; j++)
{
teacher[i].student[j].sName = "Student_"; //给学生赋初值。
teacher[i].student[j].sName += stuName[j]; //学生初值后面添加字母以示区别。
//teacher[i].student[j].score = 60; //学生分数赋值。
//给学生赋随机值
int random = rand() % 101; //rand() % 60 取值范围为0~59
teacher[i].student[j].score = random;
}
}
}
void printInfo(struct teacher* teacher, int teacherNum)
{
for (size_t i = 0; i < teacherNum; i++)
{
cout << "教师的姓名:" << teacher[i].tName << endl;
for (size_t j = 0; j < 5; j++)
{
cout << "\t学生的姓名:" << teacher[i].student[j].sName
<< " 学生的分数:" << teacher[i].student[j].score << endl;
}
}
}
void main() {
srand((unsigned int)time(NULL));
struct teacher teacher[3];
int teacherNum = sizeof(teacher) / sizeof(teacher[0]);
InitArr(teacher, teacherNum);
printInfo(teacher, teacherNum);
}
案例2如图
#include <iostream>
#include "string"
using namespace std;
/*
案例描述:
设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5 名英雄。
通过冒泡排序法,将数组中的英雄按照年龄进行升序排列,最终打印排序后的结果。
*/
struct hero
{
string name;
int age;
string sex;
};
void bubble(struct hero heros[],int arrLength)
{
//cout << heros[4].name << endl;
struct hero tempHero;
//冒泡排序
for (size_t i = 0; i < arrLength - 1; i++)
{
for (size_t j = 0; j < arrLength - i - 1; j++)
{
if (heros[j].age > heros[j +1].age)
{
//交换位置
tempHero = heros[j];
heros[j] = heros[j + 1];
heros[j + 1] = tempHero;
}
}
}
}
void printHero(struct hero heros[],int length)
{
for (size_t i = 0; i < length; i++)
{
cout << "姓名:" << heros[i].name << "\t年龄:" << heros[i].age
<< "\t性别:" << heros[i].sex << endl;
}
}
void mainx() {
struct hero heros[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"貂蝉",19,"女"}
};
bubble(heros,5);
printHero(heros, 5);
system("pause");
}
总结:
- 在做案例1的时候,我发现一个小bug。那就是在程序退出的时候会抛出异常。但是新建一个解决方案用一摸一样的代码,程序退出就没问题。(有异常的程序同样的代码多占用几KB 内存)
- 关于数组冒泡排序的问题。总感觉和java 的不一样。但是说不上来。(大概是引用类型值拷贝的问题,还是地址指向的问题)
- 对于结构体数组,参数可以是指针,也可以是数组。我测试过,传入
struct teacher * teacher
或者struct teacher teacher[]
没发现有什么特殊的。甚至->
访问符都不能加,只能用.