#975. [笔记]结构体I
[笔记]结构体I
No testdata at current.
No submission language available for this problem.
结构体 I
类型具有多样性,世事万物不太可能只用几个基础类型就进行描述。若是相对复杂对的数据,可以使用结构体(或类 class)创建一种新的类型,进行管理数据。
结构体,又名结构布局,是编程方式从面向过程编程到面向对象编程的一个关键知识点。C++ 中的结构体,是后续进阶结构类的 "阉割" 版。
创建一个类型
/*
创建一个名为 Student 的类型,该类型包含成员:
int age;// 整数,年龄
double score; // 浮点,分数
string name; // 字符串,名字
char favorite[20]; // 字符串,喜好
bool gender; // 布尔,性别,女:false,男:true
*/
struct Student {
int age;
double score;
string name;
char favorite[20];
bool gender;
};
定义一个存储结构
上述代码便创建了一个 Student 类型,该类型可以类似其它基础类型一样去定义变量,数组。
/*
完整写法应当 struct Student 表示结构布局类型,但 C++ 中将其简化,可直接使用 Student 名称作为类型。
*/
/*
定义一个 Student 类型的变量,名称为 a
变量 a 中包含成员:
a.age
a.score
a.name
a.favorite
a.gender
内部成员的引用,用 . 引用(点引用)
*/
Student a;
/*
定义一个 Student 类型,共 4 个元素的数组,名称为 b。
相当于定义了 4 个学生,分别是:
b[0]
b[1]
b[2]
b[3]
第 i 个学生,是 b[i],其包含的成员为:
b[i].age
b[i].score
b[i].name
b[i].favorite
b[i].gender
*/
Student b[4];
结构体存储结构的初始化
初始化的内容顺序,与创建,定义时有关,要一一对应。
/*
Student 内部成员定义顺序为:age, score, name, favorite, gender
*/
Student a = {11, 95.5, "Lily", "睡觉", false};
printf("年龄:%d\n", a.age);
printf("成绩:%.2lf\n", a.score);
printf("姓名: %s\n", a.name.c_str());
printf("喜好:%s\n", a.favorite);
printf("性别:%s\n", a.gender ? "男" : "女");
Student b[3] = {
{11, 95.5, "Lily", "睡觉", false}, // b[0]
{15, 90.5, "Luly", "吃饭", false}, // b[1]
{10, 85.5, "Kyle", "打豆豆", true} // b[2]
}; // 第一个大括号是数组
针对存储结构的输入与输出
由于结构体是自定义的,因此不具备直接输入的办法(除非做输入重载,属于语法高阶内容,这里不谈),只有老老实实地引用成员,对成员进行操作。
Student a;
string gender;
cin >> a.age >> a.score >> a.name >> a.favorite >> gender;
if (gender == "男") {
a.gender = true;
} else {
a.gender = false;
}
// 用 cout 也可以,这里主要是格式化输出,printf 相对方便
printf("年龄:%d\n", a.age);
printf("成绩:%.2lf\n", a.score);
printf("姓名: %s\n", a.name.c_str());
printf("喜好:%s\n", a.favorite);
printf("性别:%s\n", a.gender ? "男" : "女");
Related
In following homework: