C语言自定义数据类型(二)使用结构体数组
创始人
2025-05-31 21:44:22
0

一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据)。如果有 10 个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。

目录

一、定义结构体数组

1.1举例说明

1.2定义

二、结构体数组的应用举例


一、定义结构体数组

1.1举例说明

下面举一个简单的例子来说明怎样定义和引用结构体数组。

举例:有 3 个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

解题思路:显然,需要设一个结构体数组,数组中包含 3 个元素,每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型)。输入被选人的姓名,然后与数组元素中的 “ 姓名 ” 成员比较,如果相同,就给这个元素中的 “ 得票数 ” 成员的值加 1。最后输出所有元素的信息。

#include
#include
struct Person		//声明结构体类型
{char name[20];int count;
};int main()
{struct Person leader[3] = { "zhang",0,"wang",0,"liu",0 };	//初始化结构体变量char leader_name[20];for (int i = 0; i < 10; i++){scanf_s("%s", leader_name, 20);		//输入所选候选人姓名for (int j = 0; j < 3; j++){if (strcmp(leader_name, leader[j].name) == 0)leader[j].count++;}}printf("结果是:\n");for (int j = 0; j < 3; j++){printf("%5s:%d\n", leader[j].name, leader[j].count);}return 0;
}

运行结果:

程序分析:

定义一个全局的结构体数组 leader,它有 3 个元素,每一个元素包含两个成员 name(姓名)和 count(票数)。在定义数组时使之初始化,将 " Li " 赋给 leader[0].name,0 赋给 leader[0].count," Zhang "赋给 leader[1].name,0 赋给 leader[1].count," Sun " 赋给 leader[2].name,0 赋给 leader[2].count。这样,3 位候选人的票数全部先置零。

在主函数中定义字符数组 leader_name,用它存放被选人的姓名。在每次循环中输入一个被选人姓名,然后把它与结构体数组中 3 个候选人姓名相比,看它和哪一个候选人的名字相同。注意leader_name 是和 leader 数组第 j 个元素的 name 成员相比。若 j 为某一值时,输入的姓名与 leader[j].name 相等,就执行 “ leader[j].count++”,由于成员运算符 “.” 优先于自增运算符 “++”,因此它相当于(leader[j].count)++,使 leader[j] 成员 count 的值加 1。在输入和统计结束之后,将 3 人的名字和得票数输出。

1.2定义

(1)定义结构体数组一般形式是

struct 结构体名
{

        成员表列

} 数组名[数组长度];

先声明一个结构体类型(如 struct Person),然后再用此类型定义结构体数组:

结构体类型 数组名[数组长度];

如:

struct Person leader[3];        //leader是结构体数组名

(2)对结构体数组初始化的形式是在定义数组的后面加上:

= {初值表列};

如:

struct Person leader[3] = {"zhang", 0, "wang", 0, "liu", 0};

二、结构体数组的应用举例

举例:有 n 个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。

解题思路:用结构体数组存放 n 个学生信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩)。

#include
struct Student		//声明结构体类型
{int num;char name[20];float score;
};int main()
{const int n = 5;		//定义常变量struct Student stu[n] = { 1001,"wang",88,1002,"li",85,1003,"liu",98,1004,"zhao",95,1005,"wu",87 };for (int i = 0; i < n - 1; i++)		//选择排序{int k = i;for (int j = i + 1; j < n; j++){if (stu[j].score > stu[k].score)k = j;}if (k != i)		//stu[k]和stu[i]互换{Student temp;temp = stu[i];stu[i] = stu[k];stu[k] = temp;}}printf("排序为:\n");for (int i = 0; i < n; i++){printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);}
}

运行结果: 

程序分析:

(1)程序中第 11 行定义了常变量 n,在程序运行期间它的值不能改变。如果学生数改为 30 人,只须把第 11 行改为即可。

也可以不用常变量,而用符号常量,可以取消第 11 行,同时在第 2 行前加一行:

# define N 5

(2)在定义结构体数组时进行初始化,为清晰起见,将每个学生的信息用一对花括号包起来,这样做,阅读和检查比较方便,尤其当数据量多时,这样是有好处的。

(3)在执行第 1 次外循环时i的值为0,经过比较找出 5 个成绩中最高成绩所在的元素的序号为 k,然后将 stu[k] 与 stu[i] 对换(对换时借助临时变量temp)。执行第 2 次外循环时i的值为 1,参加比较的只有 4 个成绩了,然后将这 4 个成绩中最高的所在的元素与 stu[1] 对换。其余类推。注意临时变量 temp 也应定义为 struct Student 类型,只有同类型的结构体变量才能互相赋值。程序 21 行是将 stu[k] 元素中所有成员和 stu[i] 元素中所有成员整体互换(而不必人为地指定一个一个成员地互换)。从这点也可以看到使用结构体类型的好处。

相关内容

热门资讯

王凤英入职小鹏3年终获股权,此... 5月7日消息,小鹏汽车披露的监管及年报信息显示,公司总裁王凤英已正式进入股东名册,入职小鹏3年后股权...
五块钱红酒卖断货,便宜红酒为何... 最近一段时间,中国的酒类消费市场可以说是显得格外奇怪,一方面,各种高端酒特别是白酒的消费量出现了明显...
财联社C50风向指数调查:4月... 财联社5月8日讯(记者 夏淑媛)新一期财联社“C50风向指数”结果显示,市场机构对4月新增人民币贷款...
央视硬刚国际足联拒掏20亿,背... 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 央视这次太刚了,离世界杯开幕还有1个月,死活...
新CEO上任直接放大招!Air... 快科技5月8日消息,苹果即将上任的CEO John Ternus对未来一系列新产品充满信心,称这些设...
“特朗普拟邀英伟达、波音等CE... 据路透社当地时间5月7日报道,特朗普政府正邀请英伟达、苹果、埃克森美孚、波音等大公司首席执行官,于下...
世界杯,还能看到直播吗? 2026年美加墨世界杯距离开幕,仅剩一个多月时间。多方信息显示,中央广播电视总台(以下简称“央视”)...
机构警告AI芯片热潮风险,超威... 5月7日,据央视财经,隔夜超威半导体公司(AMD)股价飙升近19%,带动AI芯片热潮持续升温。AMD...
银行员工转走储户1800万最新... 银行员工转走储户1800万最新进展:2名储户已收到银行全部款项
原创 中... 1994年,安徽省的经济格局曾发生过一次戏剧性的转折。在那一年,一座名为安庆的城市,其国内生产总值(...
昆都仑区:政策“蓄力”消费焕新 “一台5000多元的空调,叠加‘国补’和商场的以旧换新活动,能优惠1000元左右,旧机还能免费上门拆...
乐悦置业竞得佛山顺德乐从镇一商... 观点网讯:5月6日,佛山市顺德区乐从镇一商业地块成功出让,由广东省乐悦置业有限公司竞得,乐从南区·邻...
原创 亦... 《爱情没有神话》这部剧,一开始的命运颇为多舛,经历了几次撤档的波折后,终于在观众面前亮相,但其首播的...
美联储34年最大分歧叠加油价飙... 美联储按预期维持利率不变,但内部出现34年来最严重分歧,叠加布油创2022年6月以来新高,美债遭抛售...
支付宝消费券回收后,资金是否支... 摘要: 支付宝消费券回收变现后,资金能否直接转入信用卡?本文解答到账方式的相关规则,帮助用户了解资金...
中医介绍5个化痰穴位!收藏这篇... 很多人忽略了“痰”的危害,觉得咳几下就没事,殊不知,肺里的痰长期堆积,只会一步步加重身体负担。 中医...
黄金平台“杰我睿”涉嫌经济犯罪... 红星资本局5月7日消息,深圳水贝知名金店“杰我睿”兑付困难事件有了新进展。日前,深圳市公安局罗湖分局...
多地出台购房新政促楼市升温 记... 今年的“五一”假期,伴随着多个城市楼市新政密集落地,在叠加市场信心持续修复的作用下,房地产市场热度持...
谁是五一“吸金王”?这5座城市... 来源:市场资讯 (来源:21城市观) 哪座城市成为“五一”假期的大赢家? 图源:摄图网 作者|赵晓...
“低招低裁”格局稳固劳动力市场... 智通财经APP获悉,美国上周初请失业金人数在经历前一周回落至近几十年来最低水平后出现小幅反弹,表明尽...