【C++教程】结构体数组的定义和使用方法

零 C语言教程评论85字数 2537阅读8分27秒阅读模式

所需工具:

C++

聪明的大脑文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

勤劳的双手文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

 文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

注意:本站只提供教程,不提供任何成品+工具+软件链接,仅限用于学习和研究,请勿商业用途。文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

 文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

介绍

一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

很明显不可能,这时就要使用数组。结构体中也有数组,称为结构体数组。它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。或者说同前面介绍的普通数组的定义是一模一样的,如:文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

[php]
struct STUDENT stu[10];
[/php]文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。文章源自灵鲨社区-https://www.0s52.com/bcjc/cyyjc/9728.html

结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用 for 循 环一个一个地使用结构体数组中的元素。

下面编写一个程序,编程要求:从键盘输入 5 个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。

[php]
# include <stdio.h>
# include <string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]); //函数声明, 该函数的功能是输出学号最大的学生信息
int main(void)
{
int i;
struct STU stu[5];
for (i=0; i<5; ++i)
{
printf("请输入第%d个学生的信息:", i+1);
scanf ("%s%d %c%s", stu[i].name, &stu[i].age, &stu[i].sex, stu[i].num);/*%c前面要加空格, 不然输入时会将空格赋给%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax = stu[0];
int j;
for (j=1; j<5; ++j)
{
if (strcmp(stumax.num, stu[j].num) < 0) //strcmp函数的使用
{
stumax = stu[j];
}
}
printf("学生姓名:%s 学生年龄:%d 学生性别:%c 学生学号:%s\n", stumax.name, stumax.age, stumax.sex, stumax.num);
}
[/php]

输出结果是:

请输入第1个学生的信息:小红 22 F Z1207031

请输入第2个学生的信息:小明 21 M Z1207035

请输入第3个学生的信息:小七 23 F Z1207022

请输入第4个学生的信息:小欣 20 F Z1207015

请输入第5个学生的信息:小天 19 M Z1207024

学生姓名:小明 学生年龄:21 学生性别:M 学生学号:Z1207035

结构体数组定义时初始化

结构体数组的初始化与前面讲的数值型数组的初始化是一模一样的,数值型数组初始化的方法和需要注意的问题在结构体数组的初始化中同样适用,因为不管是数值型数组还是结构体数组都是数组。下面就将前面的一个程序修改一下。

[php]
# include <stdio.h>
# include <string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]); //函数声明
int main(void)
{
struct STU stu[5] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}, {"小欣", 20, 'F', "Z1207015"}, {"小天", 19, 'M', "Z1207024"}};
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax = stu[0];
int j;
for (j=1; j<5; ++j)
{
if (strcmp(stumax.num, stu[j].num) < 0)
{
stumax = stu[j];
}
}
printf("学生姓名:%s 学生年龄:%d 学生性别:%c 学生学号:%s\n", stumax.name, stumax.age, stumax.sex, stumax.num);
}
[/php]

输出结果是:

学生姓名:小明 学生年龄:21 学生性别:M 学生学号:Z1207035

注意,字符要用单引号括起来,字符串要用双引号括起来。

补充

C语言结构体数组示例演示

【示例】计算全班学生的总成绩、平均成绩和以及 140 分以下的人数。

[php]
#include <stdio.h>
struct{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
}class[] = {
{"Li ping", 5, 18, 'C', 145.0},
{"Zhang ping", 4, 19, 'A', 130.5},
{"He fang", 1, 18, 'A', 148.5},
{"Cheng ling", 2, 17, 'F', 139.0},
{"Wang ming", 3, 17, 'B', 144.5}
};
int main(){
int i, num_140 = 0;
float sum = 0;
for(i=0; i<5; i++){
sum += class[i].score;
if(class[i].score < 140) num_140++;
}
printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
return 0;
}
[/php]

运行结果:

sum=707.50

average=141.50

num_140=2

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/cyyjc/9728.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论