




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章结构体徐秋红办公地点:西配楼310室办公电话:010-62336516E-mail:主要内容为什么引入结构体类型如何定义一个结构体类型如何声明结构体变量在语句中如何访问结构体变量结构体数组结构体指针1.为什么引入结构体结构体是除数组以外的又一个构造类型为什么引入结构体的概念例如:学生的成绩单这些表格中每行数据的特点是什么?一行中的所有数据在含义上具有相关性但是一行数据中所有数据的类型不完全相同序号班级学号姓名课堂练习1课堂练习2课堂练习31资环13-1130224125李丹101082资环13-2130224226张朦云910103环志威810104环芳宇101010序号班级学号姓名课堂练习1课堂练习2课堂练习3(整型)(字符串)(字符串)(字符串)(实型)(实型)(实型)什么是结构体例如:体检表姓名性别出生日期身高体重年月日王利男19948201.8181.5(字符串)(字符)(整型)(整型)(整型)(实型)(实型)存储成组数据的组织结构——结构体具有内在联系的一组数据称为一个记录什么是结构体结构体是一个新的构造类型是由编程者根据自己的需求而设计的一种数据结构形式(或称为由编程者自己设计的数据类型)——结构体类型通过分析和整理要处理的数据内容,归纳需要哪些数据项,并指出每个数据项的数据类型
——定义结构体类型结构体类型——需要先定义后使用2.结构体类型如何定义
struct结构体类型名{
成员描述/*记录中的字段*/};structdate{intyear;intmonth;intday;};structcoordinate{doublex;doubley;};定义日期型的结构体类型定义平面坐标型的结构体类型3.声明结构体变量——声明记录4.访问(引用)结构体变量
(1)可以通过使用结构体变量名来引用整个记录
(2)引用记录中的某个成员字段
使用记录名后面加点“.”,再加成员名的方式
例如:设置a0为原点坐标structcoordinatea0,a1,a2;structdatebirthday;a1xy最高优先级的运算符5.初始化记录(结构体变量)例如:初始化记录National_Day初始化记录a0是原点坐标6.举例通过执行程序,输出今天、昨天、明天的日期求任意两点(如:a1,a2)间的距离.a2(x,y)yx.a1(x,y)6.举例通过执行程序,输出今天、昨天、明天的日期求任意两点(如:a1,a2)间的距离#include<stdio.h>structdate{intyear;intmonth;intday;};intmain(void){structdatetoday={2014,6,6},yesterday,tomorrow;yesterday=tomorrow=today;yesterday.day=today.day-1;tomorrow.day=today.day+1; puts("\nOutput:\n\n");printf("yesterday:%d-%d-%d\n",yesterday.year,yesterday.month,yesterday.day);printf("tomorrow:%d-%d-%d\n\n",tomorrow.year,tomorrow.month,tomorrow.day);system("Pause");return0;}7.结构体类型的指针(记录的指针)指向记录的指针比记录本身小的多,而且比记录本身更容易操作structcoordinate{doublex;doubley;};structcoordinatea1,a2,*pa=&a1,*pb=&a2;a1:a1.x
a1.ya1:pa->xpa->ya1xya1xypa8.为已有的数据类型建立别名关键字typedef语法形式
typedef类型名的旧名类型名的新名;typedefstructcoordinatecoord;coorda1,a2,*pa,*pb;9.结构体类型的数组与普通类型的数组一样区别是数组的元素是记录(即结构体变量)structcoordinate{doublex;doubley;};typedefstructcoordinatecoord;描述三角形的三个顶点coorda1,a2,a3;可以用数组coorda[3];结构体变量的应用——举例例如:structach/*定义学生结构体类型*/{charname[20];/*学生姓名*/charsex;/*性别*/intnum;/*学号*/floatscore[3];/*三门课程的考试成绩*/};structachstu1={"Jonh",'M',310,75,96,83},stu2={"Lili",'F',217,92,87,80};姓名性别学号英语高数体育JohnM310759683LiliF217928780(stu1.score[0]+stu1.score[1]+stu1.score[2])/3inti;floatavg_2,sum=0.0;for(i=0;i<3;i++)
sum=sum+stu2.score[i];
avg_2=sum/3;例1:求每一位学生的平均成绩avg_1=应用结构体类型的数组structach/*定义学生结构体类型*/{
charname[20];/*学生姓名*/
charsex;/*性别*/intnum;/*编号*/floatscore[3];/*三门课程的考试成绩*/}stu1,stu2;structach{
charname[20];
charsex;intnum;floatscore[3];}stu[2]
;stu[2]={{"John",'M',310,75,96,83},{"Lili",'F',217,92,87,80}};printf("\n%s,%f",);stu[0].name,stu[0].score[2]如果要输出第一位学生的名字和其最后一科的成绩?如何初始化数组?结构体变量的应用——举例namesexheightweightsightcommentleftright例2:下面是一张学生体检表:FrankM
1.78
67.51.00.9青霉素过敏MaryF
1.61
恐高症structsight_table{floatleft;floatright;};structcase_table{charname[20];charsex;floatheight;floatweight;
structsight_tablesight;charcomment[30];}health[2];结构体类型的嵌套声明结构体变量的应用——举例对嵌套的结构体变量成员的引用:strcpy(health[0].name,"Frank");health[0].sex
='M';health[0].sight.left
=
1.0;health[0].sight.right
=
0.9;printf("%.2f,%.2f\n",health[0].sight.left,
health[0].sight.right);
health[0]:是结构体数组health的第1个元素Frank结构体变量的应用——举例例3:根据下面体检表中的数据,建立一个数组health,要求输出评定结果(comment)为“good”的学生信息,并分别统计和输出男女生的平均身高及体重。namesexheightweightsightcommentleftrightLihongF1.60541.01.2goodJiangwenM1.78700.81.0HanyuM1.72710.50.4YangyunF1.65651.21.2YujanhaiM1.8076.51.01.2goodZhangbingM1.73#include<stdio.h>#include<string.h>structsight_table{floatleft;floatright;};structcase_table{charname[20];charsex;floatheight;floatweight;
structsight_tablesight;charcomment[10];};intmain(void){
structcase_tablehealth[6]={\{"Lihong",'F',1.60,54,1.0,1.2,"good"},\
{"Jiangwen",'M',1.78,70,0.8,1.0},\{"Hanyu",'M',1.72,71,0.5,0.4},\{"Yangyun",'F',1.65,65,1.2,1.2},\{"Yujanhai",'M',1.80,76.5,1.0,1.2,"good"},\{"Zhangbing",'M',1.73,66.5,0.5,0.3}\
};
/*初始化结构体数组health*/floatgirl_h,girl_w,boy_h,boy_w;intn,girl_cont,boy_cont;system("cls");/*清屏*/girl_h=boy_h=girl_w=boy_w=0.0;girl_cont=boy_cont=0;for(n=0;n<6;n++){
if(health[n].sex=='F'){girl_h+=health[n].height;/*累计女生总身高*/ girl_w+=health[n].weight;/*累计女生总体重*/
girl_cont++;/*统计女生人数*/} else {boy_h+=health[n].height;
/*累计男生总身高*/boy_w+=health[n].weight;/*累计男生总体重*/boy_cont++;/*统计男生人数*/}}printf("\tgirl:height=%.2f,weight=%.2f\n",girl_h/girl_cont,girl_w/girl_cont);printf("\tboy:height=%.2f,weight=%.2f\n",boy_h/boy_cont,boy_w/boy_cont);for(n=0;n<6;n++)/*查找评定结果为“good”的学生*/if(strcmp(health[n]ment,"good")==0) {printf("%s%c%s",health[n].name,health[n].sex,health[n]ment); printf("\t%.2f%.2f",health[n].height,health[n].weight); printf("\t%.2f%.2f",health[n].sight.left,health[n].sight.right);printf("\n"); }return0;}Jiegou.c程序执行结果如下:girl:height=1.63,weight=59.50boy:height=1.76,weight=71.00LihongFgood1.6054.001.001.20YujanhaiMgood1.8076.501.001.20结构体变量的应用——举例例4设计函数sort()
完成将运动员信息按成绩从大到小排序设计函数prt()
输出指定的运动员信息运动员编号国籍成绩50023美国59360103中国60980109法国49670110俄罗斯58740301加拿大508#include<stdio.h>#defineM5structplay{charnumber[6];charcountry[20];shortscore;};voidsort(structplay*,int);voidprt(structplay*);intmain(void){structplayswim[M]={{"50023","美国",593},{"60103","中国",609},\{"80109","法国",496},{"70110","俄罗斯",587},\{"40301","加拿大",508}},*p1;intk;p1=swim;/*p1指向结构体变量swim数组*/for(k=0;k<M;k++,p1++)
prt(p1);
/*打印一个运动员的信息*/printf("-------------\n\n");
sort(swim,M);
/*进行排序处理*/
p1=swim;/*p1重新指向结构体变量swim数组*/for(k=0;k<M;k++,p1++)
prt(p1);
/*打印一个运动员的信息*/printf("-------------\n\n");
getch();return0;}voidprt(structplay*p){printf("%s%s",p->number,p->country);printf("\t%d\n",p->score);return;}voidsort(structplay*x,intn){inti,j;structplay*max,*p,temp;
for(i=0;i<n-1;i++){max=x+i;p=x+i+1;
for(j=i+1;j<n;j++,p++)if(max->score<p->score)max=p;temp=*max,*max=*(x+i),*(x+i)=temp;}return;}选择排序法小结为什么要引用结构体类型,其特点是什么?如何定义结构体类型?如何声明结构体变量?
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年硅胶片材项目投资可行性研究分析报告
- 全包合同范本
- 2024年安徽六安农商银行社会招聘考试真题
- 2025-2030年中国箱车配件行业深度研究分析报告
- 2025年度学校安全文化建设责任协议
- 2025年度智慧社区物业保安劳务管理合同样本
- 2025年度个人购房借款合同(含物业管理费及装修贷款)
- 科技人才培育与科研诚信建设的联动机制研究
- 2025年度房屋买卖合同撤销条件下的法律援助与合同解除服务协议
- 2025年电动葫芦的电动小车项目投资可行性研究分析报告
- 2024年俄罗斯高空作业平台车行业应用与市场潜力评估
- 【中考真题】2024年河南省普通高中招生考试历史试卷(含答案)
- 2024版年度经济法基础完整全套课件
- JT-T-445-2021汽车底盘测功机
- 体育科学:田径考试考试题(三)
- 2024年4月自考03200预防医学(二)试题
- 《研学旅行市场营销》课件-模块八 研学旅行促销策略
- 糖尿病孕妇护理:案例分析
- 《过华清宫绝句(其一)》-【中职专用】高一语文(高教版2023基础模块下册)
- (2024年)新版药品管理法培训课件
- 2022年4月自考00808商法试题及答案含解析
评论
0/150
提交评论