C++强化 | 13 结构体入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++强化 | 13 结构体入门相关的知识,希望对你有一定的参考价值。
戳一戳!和我一起走进信息学的世界
导读
C++是大多数学生入门信息学、参加信息学竞赛必备的编程语言。掌握C++,能够有助于孩子未来工作发展,也能提升孩子的综合能力,如抗挫折能力、逻辑分析能力等。
本篇文章中,让我们一起了解一下结构体吧!
往期回顾
【NOIP竞赛/CSP认证】
▶ 赛前必看!信息学名师带你复习NOIP竞赛初赛及CSP认证初赛
【信息学精华帖】
▶ 信息学提高班知识体系详解与家长常见问题解答!让孩子赢在提高班学习的起跑线!
【C++提高班教程】
▶ C++强化 | 02 继续前行,三大结构终极介绍
▶ C++强化 | 09 一篇文章带你探索函数的奥秘
【C++基础班教程】
▶ C++总结 | 11 开关语句switch-case
▶ C++总结 | 14 break与continue
▶ C++总结 | 15 while与do-while
1 说在前面的话
我们怎么去定义学生呢?比如学生有如下属性:
姓名
性别
年龄
身高
体重
我们之前会这样定义:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
int main()
string name;
bool sex;
int age;
float height,width;
return 0;
今天我们会讲什么新的内容呢,我们如何用今天的新内容来定义学生呢?让我们一起走进今天的课程吧!
2 结构体初步
如果我们想定义两个学生的这些属性,怎么办呢?
1 之前的定义方式
按照我们之前的定义方式:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
int main()
string name1,name2;
bool sex1,sex2;
int age1,age2;
float height1,height2,width1,width2;
return 0;
从代码整体来看我们定义了大量的变量,这些变量各不相同,没办法像数组一样,统一定义。所以就要用到一个新的知识——结构体。
2 结构体
我们日常生活中,不管是人也好,还是物品也好,基本都有很多的属性,这些属性构成了这一个整体,这个整体是一个完整的结构。所以我们是否可以利用这个思想,来定义一个完整的结构,这个结构中包含所有的这些属性呢?
这是可行的,C++中提供了结构体的功能,例如,我们想定义上面的同学,可以按照如下方式定义:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
;
int main()
return 0;
3 练一练
1、定义一个桌子的结构体,包括如下属性:
高度
重量
颜色
价格
写完后,可以点击空白处查看代码哦:
(点击空白处查看代码)
▼
#include<iostream>
using namespace std;
struct Desk
float height,width;
string color;
int price;
;
int main()
return 0;
2、定义一个自己喜欢的小动物,有如下属性:
类别:例如猫,狗,熊,熊猫,狗熊;
昵称:例如豆豆,贝贝等;
年龄:例如2岁;
体重:例如8公斤;
……
写完后,可以点击空白处查看代码哦:
(点击空白处查看代码)
▼
#include<iostream>
using namespace std;
struct Animal
string category,name;
int age;
float weight;
;
int main()
return 0;
我想大家通过这两个练习,应该能对结构体有更深刻的认识了,现在我们可以来总结一下结构体的定义了。
结构体的定义方式如下:
struct [结构体名]
属性类型1 属性名1;
属性类型2 属性名2;
……
属性类型n 属性名n;
;
注意,一般结构体名首字母大写。
3 结构体变量
我们学会定义结构体了,那我们如何使用结构体来定义变量呢?结构体变量又有哪些操作呢?
1 结构体变量定义
我们定义了结构体,就可以利用结构体来定义变量了。简单来理解,我们可以把结构体当做是一个数据类型。我们可以有两种方式来定义结构体变量:
定义结构体时,定义结构体变量;
定义结构体后,定义结构体变量。
对于第一种情况,我们可以定义结构体如下:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
return 0;
对于第二种方式,我们可以定义结构体如下:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
Student stu3,stu4;
return 0;
2 结构体变量赋值
当我们学会如何定义结构体变量的时候,我们就可以对结构体变量进行赋值了。
最简单的赋值,和给数组的赋初值是一样的,用大括号将所有的赋值内容扩住,不同的变量赋值,用逗号隔开:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
Student stu3,stu4;
stu1 = "小明", 1, 13, 1.65, 80;
return 0;
上面这种方式会给所有而数据统一赋值,如果我们想对某个单独的属性进行赋值,我们可以用"."来获取结构体变量的具体属性,例如:
stu1.age
上面的用法可以获取stu1的age属性,我们可以把上面的当做一个变量名,来进行赋值:
stu1.age = 13;
现在我们对stu2的所有属性进行赋值,我们可以有多种赋值方式:
输入赋值;
用其他结构体变量的属性赋值;
用常量值赋值;
用其他变量赋值;
代码如下:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
Student stu3,stu4;
float w = 70;
stu1 = "小明", 1, 13, 1.65, 80;
cin>>stu2.name; //输入赋值
stu2.age = stu1.age; //用其他结构体变量的属性赋值
stu2.sex = 0; //用常量值赋值;
stu2.height = 1.61;
stu2.width = w; //用其他变量赋值
return 0;
3 结构体变量操作
结构体变量的操作和普通变量的操作是一致的,普通变量可以有的操作,结构体变量也都有,我们这里举几个例子:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
Student stu3,stu4;
stu3 = "小红", 0, 13, 1.65, 80;
stu3.age++;
stu3.height += 0.2;
stu3.width -= 1;
return 0;
其他的操作,我们在后续课程中,不断深入讲解。
4 结构体变量输出
前面我们将结构体变量和普通变量的操作是一致的,输出方式也是一样的。
要注意的是,我们不能直接输出结构体变量。只能每次输出结构体变量的某个属性:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1, stu2;
int main()
Student stu3,stu4;
stu3 = "小红", 0, 13, 1.65, 80;
stu3.age++;
stu3.height += 0.2;
stu3.width -= 1;
cout<<"姓名:"<<stu3.name<<endl;
if(stu3.sex) cout<<"性别:男"<<endl;
else cout<<"性别:女"<<endl;
cout<<"年龄:"<<stu3.age<<endl;
cout<<"身高:"<<stu3.height<<endl;
cout<<"体重:"<<stu3.width<<endl;
return 0;
4 应用案例
讲完了上面的理论知识,我们一起来看一些非常重要的应用吧!
1 结构体数组变量
我们可以用结构体定义结构体变量,也可以使用结构体定义结构体数组变量。
和结构体定义普通结构体变量一致,有如下两种方式:
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1[10];
int main()
Student stu2[10];
return 0;
定义好之后,我们就可以针对结构体数组变量做相关的操作了,为了方便演示,我们定义一个长度为5的结构体数组变量。
/*姓名、性别、年龄、身高、体重*/
#include<iostream>
using namespace std;
struct Student
string name;
bool sex;
int age;
float height,width;
stu1[5];
int main()
cout<<"请输入5名学生的信息,包括姓名,性别,年龄,身高、体重:"<<endl;
for(int i = 0;i<5;i++)
cin>>stu1[i].name; //输入索引为i的同学的姓名
cin>>stu1[i].sex;
cin>>stu1[i].age;
cin>>stu1[i].height;
cin>>stu1[i].width;
for(int i = 0;i<5;i++)
cout<<"第"<<i+1<<"名同学姓名是:"<<stu1[i].name<<endl;
if(stu1[i].sex) cout<<"性别:男"<<endl;
else cout<<"性别:女"<<endl;
cout<<"年龄:"<<stu1[i].age<<endl;
cout<<"身高:"<<stu1[i].height<<endl;
cout<<"体重:"<<stu1[i].width<<endl;
return 0;
/*
小明 1 13 1.65 98
小华 1 13 1.67 100
小红 0 12 1.55 65
小荷 0 13 1.57 72
小刚 1 12 1.75 110
*/
2 学生成绩统计
某班级有5名同学,有三个属性:
学号
姓名
成绩
要统计班级同学的平均成绩和最高成绩,输出平均成绩和最高成绩的同学(每名同学成绩各不相同)。
我们可以每次判读成绩的时候,记录最高成绩的序号,根据序号去获取学生的学号,姓名和成绩。代码如下:
#include<iostream>
using namespace std;
struct Student
string name;
int num; //学号
float score;
stu[5];
int main()
cout<<"请输入5名学生的信息,包括学号,姓名,成绩:"<<endl;
int n;
float maxSc = 0,sumScore = 0;
for(int i = 0;i<5;i++)
cin>>stu[i].num;
cin>>stu[i].name;
cin>>stu[i].score;
for(int i = 0;i<5;i++)
sumScore += stu[i].score;
if(stu[i].score>maxSc)
maxSc = stu[i].score;
n = i;
cout<<"这个班级的平均成绩是:"<<sumScore/5<<endl;
cout<<"最高成绩的同学是:"<<stu[n].name<<endl;
cout<<"最高成绩的学号为:"<<stu[n].num<<endl;
cout<<"最高成绩为:"<<stu[n].score<<endl;
return 0;
/*
100 小明 98
101 小华 100
102 小红 65
103 小荷 72
104 小刚 53
*/
5 习题
学完了结构体的基本知识,要多练习才能掌握呀!
1 学生成绩排序
题目
某班级有5名同学,有三个属性:
学号
姓名
成绩
对班级同学按照成绩从高到低进行排序。
2 判断合格名单
题目
某班级有5名同学,有三个属性:
学号
姓名
成绩(满分100分)
60分以上为合格,请输出合格同学的学号及姓名。
AI与区块链技术
长按二维码关注
以上是关于C++强化 | 13 结构体入门的主要内容,如果未能解决你的问题,请参考以下文章