![C语言课件-结构体与共用体_第1页](http://file4.renrendoc.com/view/d8afe31cb8f10df8e3e01878d4b2aef6/d8afe31cb8f10df8e3e01878d4b2aef61.gif)
![C语言课件-结构体与共用体_第2页](http://file4.renrendoc.com/view/d8afe31cb8f10df8e3e01878d4b2aef6/d8afe31cb8f10df8e3e01878d4b2aef62.gif)
![C语言课件-结构体与共用体_第3页](http://file4.renrendoc.com/view/d8afe31cb8f10df8e3e01878d4b2aef6/d8afe31cb8f10df8e3e01878d4b2aef63.gif)
![C语言课件-结构体与共用体_第4页](http://file4.renrendoc.com/view/d8afe31cb8f10df8e3e01878d4b2aef6/d8afe31cb8f10df8e3e01878d4b2aef64.gif)
![C语言课件-结构体与共用体_第5页](http://file4.renrendoc.com/view/d8afe31cb8f10df8e3e01878d4b2aef6/d8afe31cb8f10df8e3e01878d4b2aef65.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ch9结构体与共用体结构体共用体类型定义typedefNextChapter书目自动检索系统学生信息管理系统结构体登录号:书名:作者名:分类号:出版单位:出版时间:价格:书目卡片学号:姓名:年龄:性别:住址:电话:平均分:学生信息逻辑上相关数据类型不同结构体是一种构造数据类型用途:把逻辑相关且数据类型不同的数据组合成一个整体
用户自定义数据类型便于组织复杂数据提高可读性,便于维护结构体类型的定义struct
[结构体名]{
类型标识符成员名;类型标识符成员名;
…………….};成员类型可以是基本型或构造型struct是关键字,不能省略合法标识符可缺省:无名结构体结构体类型定义描述结构的组织形式struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};namenumgenderagescoreaddr2字节2字节20字节1字节4字节30字节……..定义了一种新的数据类型描述了结构的组织形式没有定义任何变量不分配内存结构体类型的作用域结构体类型的定义struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};structstudent
stu1,stu2;#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];char
gender;intage;floatscore;charaddr[30];};STUDENT
stu1,stu2;为结构体变量分配存储空间大小:sizeof(struct
student)结构体变量的定义先定义结构体类型,再定义结构体变量结构体变量的定义定义结构体类型同时定义结构体变量struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;结构体变量的定义直接定义结构体变量struct
{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;用无名结构体类型直接定义变量,只能一次结构体变量的定义说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;
变量:可以结构体类型可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyearstructstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear结构体变量的引用引用规则结构体变量不能整体引用,只能引用其变量成员成员(分量)运算符优先级:1结合性:从左向右引用方式:结构体变量名.成员名structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;
stu1.age++;可以将一个结构体变量赋值给另一个结构体变量stu2=stu1;()printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()结构体嵌套时逐级引用structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;struct
student{intnum;charname[20];chargender;intage;charaddr[30];};structstudent
stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};结构体变量的初始化struct
student{intnum;charname[20];chargender;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};struct{intnum;charname[20];chargender;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};结构体数组的定义struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[2];struct
student{intnum;charname[20];charsex;intage;}stu[2];struct{intnum;charname[20];chargender;intage;}stu[2];numnamegenderagenumnamegenderagestu[0]stu[1]结构体数组结构体数组初始化struct{intnum;charname[20];charsex;intage;}stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};
顺序初始化:struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};struct
student{intnum;charname[20];charsex;intage;}stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};
分行初始化:struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};全部初始化时维数可省结构体数组结构体数组引用结构体数组引用方式:结构体数组名[下标].成员名struct
student{intnum;charname[20];charsex;intage;}stu[3];stu[1].age++;strcpy(stu[0].name,"ZhaoDa");例统计后选人选票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++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000structcandidate{charname[20];intcount;}leader[3]={"Li",0,"Zhang",0,"Wang",0};指向结构体变量的指针定义形式:struct
结构体名
*结构体指针名;例struct
student*p;存放结构体变量的起始地址numnamesexagestupstruct
student{intnum;charname[20];charsex;intage;}stu;struct
student
*p=&stu;结构体与指针p指向结构体变量的指针使用结构体指针变量引用成员形式结构体指针名->成员名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右intn;int*p=&n;*p=10;n=10struct
student
stu1;struct
student
*p=&stu1;stu1.num=101;
struct
student{longintnum;charname[20];charsex;floatscore;}stu,*p;p=&stu;stu.num=89101;strcpy(stu.name,"LiLin");p->sex='M';p->score=89.5;(*p).nump->namestu.sex结构体与指针(*结构体指针名).成员名(*p).num=101指向结构体数组的指针structstudent{intnum;charname[20];chargender;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};voidmain(){struct
student
*p;for(;;)
printf("%d%s%c%d\n",p->num,p->name,p->gender,p->age);}pnumnamegenderagestu[0]stu[1]stu[2]p结构体与指针p=stup<stu+3p++stu+3pstu用指向结构体的指针作函数参数用结构体变量的成员作参数----值传递用结构体变量作参数----多值传递,效率低用指向结构体变量或数组的指针作参数----地址传递结构体与指针struct
data{inta,b,c;};voidmain(){voidfunc(structdata);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
parm){printf("%d%d%d\n",parm.a,parm.b,parm.c);
parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("%d%d%d\n",parm.a,parm.b,parm.c);}arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:30(main)18590例用结构体变量作函数参数例用结构体变量作函数参数struct
data{inta,b,c;};voidmain(){voidfunc(structdata);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
parm){printf("%d%d%d\n",parm.a,parm.b,parm.c);
parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("%d%d%d\n",parm.a,parm.b,parm.c);}arga:27b:3c:30(main)多值传递struct
data{inta,b,c;};voidmain(){voidfunc(structdata*);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(&arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
*parm){printf("%d%d%d\n",parm->a,parm->b,parm->c);
parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("%d%d%d\n",parm->a,parm->b,parm->c);}arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parm****18590例用结构体指针变量作函数参数struct
data{inta,b,c;};voidmain(){voidfunc(structdata*);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(&arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
*parm){printf("%d%d%d\n",parm->a,parm->b,parm->c);
parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("%d%d%d\n",parm->a,parm->b,parm->c);}arga:18b:5c:90(main)地址传递例用结构体指针变量作函数参数成绩处理定义一个结构体类型,从键盘输入20个学生的学号,姓名和数学、英语、计算机成绩,要求:(1)计算并输出每一个学生三门课的平均成绩。(2)计算并输出每门课程的平均成绩。(3)查找并输出平均成绩最高的学生的记录。(4)按平均成绩从高到低输出学生的成绩单(学号、姓名和数学、英语、计算机成绩和平均成绩)struct
student{longnum;charname[20];floatscore[M];floataverage;};#defineN4#defineM3voidmain(){inti,j;structstudents[N];for(i=0;i<N;i++){scanf("%ld%s",&s[i].num,s[i].name);for(j=0;j<M;j++) scanf("%f",&s[i].score[j]);}calstuave(s);calcourseave(s);find(s);sort(s);output(s);}voidcalstuave(structstudents[]){inti,j;for(i=0;i<N;i++){s[i].average=0;for(j=0;j<M;j++)s[i].average+=s[i].score[j];s[i].average/=M;}}voidcalcourseave(structstudent*s){floatave[M];inti,j;for(j=0;j<M;j++){ave[j]=0;for(i=0;i<N;i++)
ave[j]+=s[i].score[j];
ave[j]/=N;}printf("MathAverage:%.2f\nEnglishAverage:%.2f\nComputerAverage:%.2f\n",ave[0],ave[1],ave[2]);}voidfind(structstudent*s){inti,max=0;for(i=1;i<N;i++){ if(s[i].average>s[max].average)
max=i;}puts("Thehighestaveragestudentis:\n");printf("%ld%s%.2f%.2f%.2f%.2f\n",s[max].num,s[max].name,s[max].score[0],s[max].score[1],s[max].score[2],s[max].average);}voidsort(structstudent*s){inti,j,k;structstudentt;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(s[j].average>s[k].average)
k=j;if(i!=k){ t=s[i];s[i]=s[k];s[k]=t;}}}voidsort(structstudent*s){inti,j;structstudentt;for(i=0;i<N-1;i++){for(j=0;j<N-i-1;j++)if(s[j].average<s[j+1].average){t=s[j];s[j]=s[j+1];s[j+1]=t;}}}功能:用自定义名字为已有数据类型命名类型定义形式:typedef
type
name;例typedef
int
INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例
typedef
float
REAL;类型定义后,与已有类型一样使用例INTEGERa,b,c;
REALf1,f2;
inta,b,c;floatf1,f2;说明:typedef
没有创造新数据类型typedef
是定义类型,不是定义变量typedef
与define
不同
define
typedef预编译时处理编译时处理简单字符置换
为已有类型命名
typedef类型定义typedef定义类型步骤按定义变量方法先写出定义体如inti;将变量名换成新类型名如int
INTEGER;最前面加typedef
如
typedef
int
INTEGER;
用新类型名定义变量如INTEGERi,j;
例定义含有100个整型元素的一维数组类型
inta[100];
int
ARRAY[100];
typedef
int
ARRAY[100];
ARRAYa,b,c;typedef类型定义inta[100],b[100],c[100];typedef定义类型步骤按定义变量方法先写出定义体如inti;将变量名换成新类型名如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国玻璃倒角机行业市场发展现状及投资方向研究报告
- 内蒙古骨质瓷器项目可行性研究报告模板范文
- 知识产权在人才培养中的运用
- 三角形的面积拓展 (教案)2024-2025学年数学五年级上册
- 2025年稻草人产品行业深度研究分析报告
- 2025年彩钢复合聚苯夹芯板项目投资可行性研究分析报告
- 中国血糖仪行业市场调研及未来发展趋势预测报告
- 构建多层次、多功能的社区健康服务体系
- 产30万吨电池新材料前驱体及其配套项目资金申请报告
- 2024中国木材和竹材的采运市场前景及投资研究报告
- 肛周脓肿完整版课件
- 公司(工厂)厂牌管理规定
- 《移动互联网应用开发》课程标准
- 初一语文下册:阅读理解知识点整理
- 定点医疗机构接入验收申请表
- 脓毒血症指南
- 四年级下册口算练习-减法简便计算
- 【企业杜邦分析国内外文献综述6000字】
- 腹部按压技巧肠镜检查辅助技巧
- 安徽华纳化学工业有限公司年产1000吨均苯四甲酸二酐、300吨润滑油助剂项目环境影响报告书
- 中国农村居民储蓄行为研究共3篇
评论
0/150
提交评论