C++基础入门---8.结构体【P64~P71】

news/2024/12/5 8:31:09/

C++基础入门---8.结构体【P64~P71】

  • 8. 结构体
    • 8.1 结构体的定义和使用
    • 8.2 结构体数组
    • 8.3 结构体指针
    • 8.4 结构体嵌套结构体
    • 8.5 结构体作函数参数
    • 8.6 结构体中const使用场景
    • 8.7 结构体案例1
    • 8.8 结构体案例2

8. 结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

8.1 结构体的定义和使用

在这里插入图片描述
注:
1、定义结构体时的关键字是struct,不可以省略;
2、创建结构体变量时,关键字 struct 可以省略;
3、结构体变量利用操作符 “.” 访问成员。

#include<iostream>
#include<string>
using namespace std;struct student
{string name;int age;int score;
}s3;int main()
{//通过学生类型创建具体学生struct student s1;s1.age = 16;s1.name = "张三";s1.score = 60;cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;struct student s2 = { "李四",78,50 };cout << "姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;s3.name = "王五";s3.age = 20;s3.score = 60;cout << "姓名:" << s3.name << " 年龄:" << s3.age << " 分数:" << s3.score << endl;system("pause");return 0;
}

8.2 结构体数组

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;//1、定义结构体
struct student 
{string name;int age;int score;
};int main()
{//2、创建结构体数组struct student stuArray[3]{{"张三",18,80},{"李四", 28, 90},{"王五", 38, 99}};//3、给结构体数组中的元素赋值stuArray[2].name = "赵六";stuArray[2].age = 19;stuArray[2].score = 85;//4、遍历结构体数组for (int i = 0; i < 3; i++){cout << "姓名:" <<stuArray[i].name << "年龄:" <<stuArray[i].age << "分数:" <<stuArray[i].score << endl;}system("pause");return 0;
}

8.3 结构体指针

作用:利用指针访问结构体中的成员。

  • 利用操作符 -> 可以通过结构体指针访问结构体属性。
# include<iostream>
# include<string>using namespace std;//创建结构体变量
struct student 
{string name;int age;int score;};int main()
{//创建学生结构体变量struct student s = { "张三",48,80 };//通过指针指向结构体变量struct student *p = &s;//通过指针访问结构体变量中的数据cout << "姓名:" << p->name << "年龄:" << p->age << "成绩:" << p->score << endl;system("pause");return 0;}

8.4 结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体。
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体。

# include<iostream>
# include<string>using namespace std;//定义结构体
struct student
{string name;int age;int score;
};struct teacher
{int id;string name;int age;struct student stu;
};int main()
{//创建老师结构体变量teacher t;t.id = 10000;t.name = "老王";t.age = 50;t.stu.age = 18;t.stu.name="小李";t.stu.score = 90;cout << "老师姓名: " << t.name << "老师id: " << t.id<< "老师年龄:" << t.age << "学生年龄:" << t.stu.age<< "学生姓名:" << t.stu.name<< "学生成绩:" << t.stu.score << endl;system("pause");return 0;}

8.5 结构体作函数参数

在这里插入图片描述

# include<iostream>
# include<string>using namespace std;//定义结构体
struct student
{string name;int age;int score;
};
//1、值传递
void printstudent(struct student s)
{cout << "姓名:" << s.name << "年龄:" << s.age << "分数:" << s.score << endl;
}//2、地址传递
void printstudent2(struct student *p)
{cout << "姓名:" << p->name << "年龄:" << p->age << "分数:" << p->score << endl;
}int main()
{//创建老师结构体变量struct student s;s.name = "张三";s.age = 20;s.score = 60;printstudent(s);printstudent2(&s);system("pause");return 0;}

8.6 结构体中const使用场景

# include<iostream>
# include<string>using namespace std;//定义结构体
struct student
{string name;int age;int score;
};
//将函数中的形参改为指针,可以节省内存空间,而且不会赋值新的副本出来
void printstudent( const struct student *s)
{cout << "姓名:" << s->name << "年龄:" << s->age << "分数:" << s->score << endl;
}int main()
{//创建结构体变量struct student s;s.name = "张三";s.age = 20;s.score = 60;printstudent(&s);system("pause");return 0;
}

8.7 结构体案例1

在这里插入图片描述

# include<iostream>
# include<string>
# include<ctime>using namespace std;//定义结构体
struct student
{string name;int score;
};struct teacher
{string name;struct student sArray[5];};void allocateSpace(struct teacher tArray[] ,int len)
{string nameseed = "ABCDE";for (int i = 0; i < len; i++){tArray[i].name = "Teacher_";tArray[i].name += nameseed[i];for (int j = 0; j < 5; j++){tArray[i].sArray[j].name = "Student_";tArray[i].sArray[j].name += nameseed[j];int random = rand() % 61 + 40;//产生40~100之间的随机数tArray[i].sArray[j].score = random;}}
}void printInfo(struct teacher tArray[], int len)
{for (int i = 0; i < len; i++){cout << "老师姓名:" << tArray[i].name << endl;for (int j = 0; j < 5; j++){cout << "\t学生姓名: " << tArray[i].sArray[j].name;cout << "	考试分数:" << tArray[i].sArray[j].score << endl;}}
}int main()
{//随机数种子srand((unsigned int)time(NULL));//1、创建3名老师的数组struct teacher tArray[3];//2、通过函数给3名老师的信息赋值,并给老师带的学生信息赋值int len = sizeof(tArray) / sizeof(tArray[0]);allocateSpace(tArray, len);//3、打印所有老师及所带学生的信息printInfo(tArray,len);system("pause");return 0;
}

8.8 结构体案例2

在这里插入图片描述

# include<iostream>
# include<string>using namespace std;//1、定义英雄结构体
struct hero
{string name;int age;string sex;
};void bubbleSort(struct hero array[], int len)
{for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - i - 1; j++){if (array[j].age > array[j + 1].age){string temp = array[j + 1].name;array[j + 1].name = array[j].name;array[j].name = temp;}}}
}void printhero(struct hero array[], int len)
{for (int i = 0; i < len; i++){cout << "英雄姓名:" << array[i].name<< "  英雄年龄:" << array[i].age<< "  英雄性别:" << array[i].sex << endl;}
}int main()
{//2、创建英雄结构体数组存放5名英雄struct hero array[5]{{"刘备",23,"男"},{"关羽",22,"男"},{"张飞",20,"男"},{"赵云",21,"男"},{"貂蝉",19,"女"},};int len = sizeof(array) / sizeof(array[0]);/*for (int i = 0; i < len; i++){cout << "英雄姓名:" << array[i].name<< "  英雄年龄:" << array[i].age<< "  英雄性别:" << array[i].sex << endl;}*///3、对数组进行排序,按照年龄进行升序排序bubbleSort(array, len);//4、将排序结果打印输出printhero(array, len);system("pause");return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/639752.html

相关文章

面试宝典P71 例题9详解

本人在看这章的该习题时&#xff0c;也曾被搞糊涂过&#xff0c;其实刚开始还是不要看它的解释更好&#xff0c;多加一些打印语句&#xff0c;自然就知道各个变量的地址和对应的值了。 原题如下&#xff1a; struct S { int i; int* p; }; S s; int* p &s.i; p[0] 4; p…

JS笔记_P71数组字面量

P71数组字面量 创建一个数组使用字面量来创建数组使用构造函数创建数组数组中的元素可以是任意的数据类型1、可以是对象2、可以是一个函数3、数组中也可以放数组&#xff0c;称为二维数组 文章声明&#xff1a; 学习地址1&#xff1a;谷粒学院学习地址2&#xff1a;BILIBILI尚硅…

18.4.1 考试解题报告 P71

题目&#xff1a;https://files.cnblogs.com/files/lovewhy/problem.pdf 偷偷摘来dalao题面。 P71竞赛时间&#xff1a;???? 年?? 月?? 日??:??-??:?? 题目名称智乃 麻耶惠 名称 kahuucino zyougamayanacumegu 输入 kahuucino.in zyougamaya.innacumegu.in …

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏 1.概述 在首页header部分现在还有一个左侧的导航栏没有开发&#xff0c;下面就来完成这个导航栏。 2.首页header头部左侧导航栏 2.1.左侧导航栏需求 2.2.创建左侧导航栏结构 左侧的导航栏实际上是全部商品分类的…

SpringBoot笔记【P8-P71】

P8 核心配置文件 1. application.properties 2. 启动后控制台显示 3. 访问网址 P9 核心配置文件yml P10 核心配置文件同时存在 以application.properties为准 P13 多环境下配置文件properties P14 多环境下配置文件yml P15 获取自定义配置 P16 将自定义配置映射到对象 P18 a…

P71:子类继承了什么

** P71&#xff08;子类继承了什么&#xff09;&#xff1a; ** 本节视频 父类中是 private 的成员变量在子类中不可用 解决这个问题两个方案&#xff1a; 将 private 改为 protected &#xff0c;protected 代表同一个包内的其他类可以访问、子类可以访问先在父类做一个构造…

P71-枚举与选择排序

print() """ 注&#xff1a; 老师有口误&#xff0c;课内讲的是冒泡排序 但是是选择排序 标题没有错str() int() len() list() sorted() print() input() enumerate() : 函数用于讲一个可遍历的数据对象(如列表、元祖或字符串)组合为一个索引序列""&q…

thinkpad p71笔记本如何u盘装系统?

thinkpad p71笔记本如何u盘装系统?thinkpad p71系列是一款非常出色的便携式笔记本&#xff0c;办公性能也特别强劲&#xff0c;运行各大游戏也十分给力。大家拥有这款笔记本之后&#xff0c;想要了解thinkpad p71笔记本用u盘装系统并不难&#xff0c;接下来我们一起来看看详细…