结构体定义与用途:

结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。在过去,面向对象编程的应用尚未普及之前,程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识,即可创建该类型的多个变量,就像可以为同一个类创建多个对象一样。

虽然今天结构体较少使用,但知道它们是什么,以及如何使用它们仍然很重要,这并不仅仅是因为可以在较老的程序中遇到它们,还因为在某些情况下,类的实例无法使用,这时必须使用结构体。

结构体定义和使用

语法: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 }

 

posted on 2022-07-27 17:55  在野武将  阅读(116)  评论(0)    收藏  举报