首页 理论教育C++结构体:成员、初始化和计算学生平均分数和不及格人数

C++结构体:成员、初始化和计算学生平均分数和不及格人数

【摘要】:结构体中所包含的数据项称为结构体的成员,有时也将这些成员称为数据域,简称为域。省略前者表示声明了一个无名结构体类型和定义了具有该类型的变量,省略后者表示仅仅声明了一个结构体类型。两者唯一不同之处是结构体中的成员默认是公有的,结构体的继承默认也是公有的,而类的继承默认是私有的,类的成员默认也是私有的。编写一个程序,设计一个学生结构体数组并初始化,计算学生的平均分数和不及格的人数。

在实际应用中,通常会有多种不同类型的数据,共同表示一个实体。例如,表示一个学生的学籍信息,可以包括学生的学号、姓名、性别、入学分数等相关的数据项,这些数据项的组合表示一个学生的相关情况,组成一个有机的整体。如果用独立的简单数据项分别表示它们,就不能体现数据的整体性,也不便于整体操作;由于这些数据项的类型不同,所以也不能用数组来表示。对应这种由多种不同类型的数据组成的数据实体,C++语言可以用结构体数据类型来描述。结构体中所包含的数据项称为结构体的成员,有时也将这些成员称为数据域,简称为域。

结构体类型和结构体变量的声明格式如下:

其中,“结构体名”和“结构体变量名”都可以省略。省略前者表示声明了一个无名结构体类型和定义了具有该类型的变量,省略后者表示仅仅声明了一个结构体类型。例如,声明一个具有姓名和年龄的结构体类型Person的语句如下:

上面只是声明了一个名字为Person的结构体类型,但没有定义具有该结构体类型的变量,可以像使用系统预定义数据类型一样定义结构体类型变量:

以上两个语句可以合在一起:

C++中对C的结构体有了扩展。结构体变量可以和类一样使用,结构体除了可以包含数据成员外,还可以包含成员函数;成员也可以加上public、private和protected的访问控制;结构体之间也可以继承。两者唯一不同之处是结构体中的成员默认是公有的,结构体的继承默认也是公有的,而类的继承默认是私有的,类的成员默认也是私有的。C++中结构体扩展部分的使用与类使用相似,由于后面会详细讨论类的设计和使用方法,所以在这里不过多介绍结构体的扩展部分。

【例1.20】编写一个程序,设计一个学生结构体数组(共有5个元素,每个学生包括学号、姓名、性别和分数)并初始化,计算学生的平均分数和不及格的人数。(www.chuimin.cn)

解:在程序中定义了一个结构体数组s,共5个元素,并作了初始化赋值。在main函数中用for语句逐个累加各元素的score成员值存于sum之中,如score的值小于60(不及格)即计数器num加1,循环完毕后计算平均分,并输出全班总分、平均分及不及格人数。程序如下:

程序执行结果如下:

总分:345.0

平均分:69.0

不及格人数:2