版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章结构体信息工程学院主讲人:XXX内容提要41结构体类型的定义12构体类型的定义423结构体数组424252448.1结构体类型的定义结构体是一种比较复杂但却非常灵活的构造数据类型。允许用户自已指定若干个成员,这种成员可以是不同的数据类型。我们把数据类型不同,且有一定联系的多个数据用一定的语法组织起来,以struct为关键字,为其取一个名字,构造出一种新的数据类型,被称为结构体类型。结构体类型定义形式:struct结构体类型名{类型说明符1成员1;类型说明符2成员2;.....类型说明符n成员n;};8.1结构体类型的定义例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];};说明如下:(1)struct为类型说明的关键字,是结构体类型定义的标识符。(2)结构体类型名由用户定义,它与struct一起形成特定的结构体类型,在以后的结构体变量定义中可以被使用。(3)花括号内是该结构体各个成员,由它们共同组成结构体。(4)注意:不要忽略整个结构体类型定义结束的分员,花括号后面的分号不能省略。(5)结构体中的成员本身也可以是结构体,这称为结构体的嵌套。而且内嵌结构体成员的名字可以和外层成员名字相同。8.1结构体类型的定义【例8.1】结构体类型的嵌套。程序如下:structbirthday{ intyear; intmonth; intday;};structstudent{ charname[15]; structbirthdaydate; charsex; floatscore; charaddr[30];};;}结构体类型的嵌套本例中,structstudent结构体中又嵌套了stuctbirthday结构体,如图8-1所示:8.2结构体变量8.2.1结构体变量的定义定义结构体变量有以三种方法。1.先定义结构体类型,再定义结构体变量一般形式为:struct结构体类型名{类型说明符成员名;};struct结构体类型名结构体变量名表列;8.2结构体变量8.2.1结构体变量的定义定义结构体变量有以三种方法。1.先定义结构体类型,再定义结构体变量一般形式为:struct结构体类型名{类型说明符成员名;};struct结构体类型名结构体变量名表列;8.2结构体变量8.2.1结构体变量的定义2.在定义结构体类型的同时定义结构体变量一般形式为:struct结构体类型名{类型说明符成员名;}结构体变量名表列;例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}student1,student2;它的效果与第一种方法相同,形式比较紧凑,即同时定义了两个structstudent类型的变量student1和student2。8.2结构体变量8.2.1结构体变量的定义3.无名定义,缺省了结构体类型名,直接定义结构体类型变量一般形式为:struct{类型说明符成员名;}结构体变量名表列;例如:struct{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}student1,student2;8.2结构体变量8.2.2结构体变量的引用结构体变量在定义之后,可以引用这个结构体变量,但应遵循以下规则:(1)一个结构体变量不能作为一个整体进行输入输出。例如,已定义student1和student2为结构体变量,它们已有值。不能这样引用:printf(“%d,%s,%c,%d,%f,%s\n”,student1);结构体变量中的各个成员只能分别进行输入和输出。引用结构体变量中成员的方法为:结构体变量名.成员名8.2结构体变量8.2.2结构体变量的引用结构体变量在定义之后,可以引用这个结构体变量,但应遵循以下规则:(2)如果成员本身又属于一个结构体类型,则需要用到多个成员运算符,一级一级地找到最低一级的成员。只能对某一级的成员进行赋值或存取以及运算。例如,对上面定义的嵌套结构体变量student1,可以这样访问成员:student1.numstudent1.birthday.month(3)结构体变量的成员可以进行各种运算(像普通变量一样)。例如:student2.score=student1.score;sum=student1.score+student2.score;//sum是定义过的非结构体变量student1.age++;++student1.age;由于“.”运算符的优先级最高,因此student1.age++是对student1.age进行自加运算,而不是先对age进行自加运算。8.2结构体变量8.2.2结构体变量的引用结构体变量在定义之后,可以引用这个结构体变量,但应遵循以下规则:(4)可以引用结构体变量的地址,也可以引用结构体成员的地址。例如:scanf(“%d”,&student1.num);(输入student1.num的值)printf(“%o”,&student1);(输出student1的首地址)但不能用以下语句整体读入结构体变量,例如:scanf(“%d,%s,%c,%d,%f,%s”,&student1);结构体变量的地址主要用作函数参数,传递结构体变量的地址。8.2结构体变量#include<stdio.h>voidmain(){structstudent{longintnum;charname[20]; charsex; charaddr[20];}a={100101,“LiLin”,‘M’,“123BeiJingRoad”};//对结构体变量a赋值printf(“NO.:%ld\nname:%s\nsex:%c\naddress:%s\n”,a.num,,a.sex,a.addr);}运行结果:8.2.3结构体变量的初始化无参函数举例8.3结构体数组8.3.1定义结构体数组定义结构体数组和定义结构体变量的方法相仿,只要说明其为数组就可以了。例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];};structstudentstu[4];以上定义了一个数组stu,数组有4个元素,均为structstudent类型变量。8.3结构体数组8.3.2结构体数组初始化同其它类型的数组一样,结构体数组也可以初始化。例如:structstudent{intnum;charname[15]charsex;intage;floatscore;charaddr[30];}stu[4]={{100101,“LiLin”,‘M’,19,86.5,“123BeiJingRoad”},{100102,“ZhangFun”,‘M’,20,88,“130ShangHaiRoad”},{100103,“WangMing”,‘M’,18,86.5,“102GuangZhouRoad”},{100104,“ZhangGang”,‘F’,21,95,“113GuangZhouRoad”}};8.3结构体数组【例8.3】统计候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出每各人得票结果。程序如下:#include<stdio.h>#include<string.h>structperson{charname[20];intcount;}leader[3]={{"Li",0},{"Zhang",0},{"Fun",0}};voidmain(){inti,j;charleader_name[20];for(i=1;i<=10;i++){scanf("%s",leader_name);for(j=0;j<3;j++)if(strcmp(leader_name,leader[j].name)==0)leader[j].count++;}printf("\n");for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}运行结果:8.3.2结构体数组应用举例本章小结本章主
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年监理工程师质量控制真题模拟试卷(含答案)
- 2026年临床执业医师儿科学模拟试题带答案
- 2026年煤矿救护员考试题库及答案
- 2026年农机安全监理员试卷(带答案)
- 2026年普法知识考核通关模拟卷附完整答案(考点梳理)
- 摩根士丹利-绘制欧洲杠铃式投资格局 Mapping Europe's Barbell 3Q 2026
- 2026年校招:震雄铜业集团面试题及答案
- 2026年校招:中国国际航空真题及答案
- 2026年校招:中国交建面试题及答案
- 2026年校招:中国联合航空心理测试题及答案
- 2025年北京市中小学生航天知识竞赛题库及答案
- 土方开挖及基坑支护专项施工方案
- 管廊施工应急预案方案
- 2026年山东烟台市高三二模高考数学试卷试题(含答案)
- 2026年黑龙江哈三中高三一模英语试题含答案
- 2026年中国宠物行业白皮书 消费版
- 低空空域资源合理配置与运行效率优化策略研究
- 2026年人工智能训练师(二级)实操技能综合试题及解析
- 尺神经松解术课件
- 储能方面培训
- 显微手足外科科普
评论
0/150
提交评论