结构体定义与用途:
结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。在过去,面向对象编程的应用尚未普及之前,程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识,即可创建该类型的多个变量,就像可以为同一个类创建多个对象一样。
虽然今天结构体较少使用,但知道它们是什么,以及如何使用它们仍然很重要,这并不仅仅是因为可以在较老的程序中遇到它们,还因为在某些情况下,类的实例无法使用,这时必须使用结构体。
结构体定义和使用
语法:struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:
- struct 结构体名 变量名
- struct 结构体名 变量名 = { 成员1值 , 成员2值...}
- 定义结构体时顺便创建变量
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 struct stu 5 { 6 string name; 7 int age; 8 int score; 9 }stu3; //定义结构体时顺便创建变量 10 int main() 11 { 12 //struct 结构体名 变量名 13 struct stu stu1; 14 stu1.name = "二狗"; 15 stu1.age = 18; 16 stu1.score = 100; 17 cout << "name :" << stu1.name << " ,age :" << stu1.age << " ,score : " << stu1.score << endl; 18 //struct 结构体名 变量名 = { 成员1值 , 成员2值...} 19 struct stu stu2 = { "三蛋",16,90 }; 20 cout << "name :" << stu2.name << " ,age :" << stu2.age << " ,score : " << stu2.score << endl; 21 //定义结构体时顺便创建变量 22 stu3.name = "4狗"; 23 stu3.age = 98; 24 stu3.score = 150; 25 cout << "name :" << stu3.name << " ,age :" << stu3.age << " ,score : " << stu3.score << endl; 26 return 0; 27 }

案例 1
案例描述:
学校正在做毕业设计项目,每个名师带领5个学生,总共有3个名师,需要如下
设计学生和老师的结构,其在老师的结构中,有老师姓名和一个现放5名学生的人数为成员
学生的录取有姓氏、考试分数,创建人数组放3名老师,通过率数给每个老师及所带的学生赋值
最后打印出老师数据以及老师所带的学生数据。
1 struct Student 2 { 3 string name; 4 int score; 5 }; 6 struct Teacher 7 { 8 string name; 9 Student sArray[5]; 10 }; 11 12 void allocateSpace(Teacher tArray[] , int len) 13 { 14 string tName = "教师"; 15 string sName = "学生"; 16 string nameSeed = "ABCDE"; 17 for (int i = 0; i < len; i++) 18 { 19 tArray[i].name = tName + nameSeed[i]; 20 21 for (int j = 0; j < 5; j++) 22 { 23 tArray[i].sArray[j].name = sName + nameSeed[j]; 24 tArray[i].sArray[j].score = rand() % 61 + 40; 25 } 26 } 27 } 28 29 void printTeachers(Teacher tArray[], int len) 30 { 31 for (int i = 0; i < len; i++) 32 { 33 cout << tArray[i].name << endl; 34 for (int j = 0; j < 5; j++) 35 { 36 cout << "\t姓名:" << tArray[i].sArray[j].name << " 分数:" << tArray[i].sArray[j].score << endl; 37 } 38 } 39 } 40 41 int main() { 42 43 srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime> 44 45 Teacher tArray[3]; //老师数组 46 47 int len = sizeof(tArray) / sizeof(Teacher); 48 49 allocateSpace(tArray, len); //创建数据 50 51 printTeachers(tArray, len); //打印数据 52 53 system("pause"); 54 55 return 0; 56 }
案例 2
案例描述:
设计一个英雄的结构,包括成员姓名,年长,性别;创建结构数字组,数字组中存放5名英雄。
通过冒泡排序的算法,将数字组中的英雄按照年度方向进行升级排序,最终打印排序后的结果。
五名英雄信息如下:
1 {"刘备",23,"男"}, 2 {"关羽",22,"男"}, 3 {"张飞",20,"男"}, 4 {"赵云",21,"男"}, 5 {"貂蝉",19,"女"},
1 //英雄结构体 2 struct hero 3 { 4 string name; 5 int age; 6 string sex; 7 }; 8 //冒泡排序 9 void bubbleSort(hero arr[] , int len) 10 { 11 for (int i = 0; i < len - 1; i++)//每次都确定了一个位置的终值,所以要减1 12 { 13 for (int j = 0; j < len - 1 - i; j++)//每次都确定了一个位置的终值,所以要减,已经确定了i个位置的终值所以还要减i 14 { 15 if (arr[j].age > arr[j + 1].age) 16 { 17 hero temp = arr[j]; 18 arr[j] = arr[j + 1]; 19 arr[j + 1] = temp; 20 } 21 } 22 } 23 } 24 //打印数组 25 void printHeros(hero arr[], int len) 26 { 27 for (int i = 0; i < len; i++) 28 { 29 cout << "姓名: " << arr[i].name << " 性别: " << arr[i].sex << " 年龄: " << arr[i].age << endl; 30 } 31 } 32 33 int main() { 34 35 struct hero arr[5] = 36 { 37 {"刘备",23,"男"}, 38 {"关羽",22,"男"}, 39 {"张飞",20,"男"}, 40 {"赵云",21,"男"}, 41 {"貂蝉",19,"女"}, 42 }; 43 44 int len = sizeof(arr) / sizeof(hero); //获取数组元素个数 45 46 bubbleSort(arr, len); //排序 47 48 printHeros(arr, len); //打印 49 50 system("pause"); 51 52 return 0; 53 }
浙公网安备 33010602011771号