




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、CC+语言程序设计,教师:张金兰 TelEmail: Office:HA301,第十一章 结构体与共用体,主要内容,三个定义:结构体、结构体类型、结构体类型变量。 结构体类型变量的静态、动态初始化。 结构体类型的嵌套及其引用。 结构体的自引用的定义。 结构体类型作为函数参数。,三个定义,结构体 结构体类型 结构体类型变量,结构体定义,是一种由程序员自行定义的构造类型; 是一个或多个类型不一定相同的变量的集合。 如通讯录-姓名、电话、地址、邮政编码; 日期-年、月、日; 学生信息-学号、姓名、性别、年龄;,结构体类型,语法结构: struct 结构体名 数据类型 成员名
2、; 数据类型 成员名; 数据类型 成员名; ; 如果结构体名省略,则被称为无名结构类型。 意义: (1)划定了数据的界限; (2)确定了该结构体在内存所占空间大小。所占内存空间大小为各 成员在内存所占字节数的总和。,请写出下列程序的运行结果,main() struct student long num; char name20; char sex; int age; ; printf(%dn,sizeof(struct student); getch();,27,;,三个定义的区别,结构体-集合(用户理解) 结构体类型-类型(内存空间) 结构体类型变量-变量(编程者使用),结构体类型变量的定义
3、1,传统的方法: struct 结构体名 结构变量名;,struct student long num; char name20; char sex; int age; ; struct student stu1,stu2;,结构体类型变量的定义,特色: struct 结构类型名 类型一 成员1; 类型二 成员2; 类型三 成员3; 变量表;,struct student long num; char name20; char sex; int age; stu1,stu2;,结构体变量的类型及其静态初始化,结构体基本变量; struct student stu1=10001,”章敬”,男,2
4、3, stu2=10002,”赵四”,女,22; 结构体数组变量; struct student stu2=10001,”章敬”,男,23, 10002,”赵四”,女,22; 结构体指针变量; struct student *p=,结构体类型变量成员的访问1,结构体基本变量; struct student stu1=10001,”章敬”,男,23, stu2=10002,”赵四”,女,22; 语法格式:结构体变量名.结构成员名 stu1.num=10001; =“章敬”; stu2.sex=女; stu2.age=22;,结构体类型变量成员的访问2,结构体数组变量; stru
5、ct student stu1=10001,”章敬”,男,23, stu2=10002,”赵四”,女,22; 语法格式:结构体数组元素名.结构成员名 stu0.num=10001; =“章敬”; stu1.sex=女; stu1.age=22;,结构体类型变量成员的访问3,struct student stu1=10001,”章敬”,男,23, stu2=10002,”赵四”,女,22; 结构体指针变量; struct student *p=,结构体基本变量的动态初始化,struct date int year,month,day;d; scanf(“%d”,结构体数组变量的
6、动态初始化,struct student char num6,name8; int score; stu3; for(i=0;i3;i+) printf(“”ninput score of student %dn”,i+1); scanf(“%s”,stui.num,); scanf(“%d”, ,结构体指针变量的动态初始化,struct date int year,month,day;d,*p; P= -优先级高于 int day; int year; ; struct student int num;char name20; char sex;int age; struc
7、t date birthday; char addr30; student1,student2;,birthday,struct date int month; int day; int year; ; struct student int num;char name20; char sex;int age; struct date *p; char addr30; student1,student2;,结构体嵌套的引用,struct date int month,day,year; struct student int num;char name20; char sex;int age; s
8、truct date d1; char addr30; student1=1003,”张三”,m,25,1985,10,15,”广东珠海”; stu1.num =1003; S=“张三”; stu1.d1.year=1985; stu1.d1.month=10;stu1.d1.day=15;,main() struct date int year,month,day; struct student int num;char name20;char sex;int age; struct date d1; char addr30; stu1=1003,ZHANG SAN,m,25
9、,1985,10,15,GDZHUHAI; printf(xuehao-%dn,stu1.num); printf(name-%sn,); printf(sex-%cn,stu1.sex); printf(age-%dn,stu1.age); printf(birth-%d-%d-%dn,stu1.d1.year,stu1.d1.month,stu1.d1.day); printf(addr-%sn,stu1.addr); getch(); ,结构体的自引用(了解,不做要求),在结构体的定义中包含指向该结构自身的指针。 Struct node int num; struct
10、node *p; ,结构体类型作为函数参数,#include struct student long num; char name20,sex; int age; void prt(struct student stu) printf(%ldn%sn%cn%dn,stu.num,,stu.sex,stu.age); main() struct student stud; stud.num=200301001; strcpy(,wangtao); stud.sex=M; stud.age=21; prt(stud); getch(); ,练习,第281页 第4-
11、15题,18题。 第280页 第4-5题。 第287页 第24题,共用体,和结构体类型一样,只是关键字为union 不同的是: 各成员变量共同占用同一段内存空间。所占空间大小为占内存空间最大的成员变量长度。运行时,不同成员的存放是从其起始地址开始,到自己长度为止。 在任何同一时刻,union内存空间中只存放一个当前正在操作的成员,原来的成员会被后来的成员值覆盖。,第279页 中第1题。 第281页中低2-3题 第285页 中第1923题。,结构体的编程,Struct aChar name100,sex; 成员为字符和字符串的输入: gets(); scanf(“%ls,编程练
12、习1,职工数据包括:职工号、职工姓名、性别、年龄、工资、地址。为其定义一个结构体变量,对该变量,从键盘输入所需的具体数据,然后通过printf函数显示出来。,定义结构体类型及其变量,#define A 20 #define B 80 struct worker long number; char nameA,sex; int age;long money; char addressB; ; struct worker wor1;,动态初始化,printf(Please input the number, name, sex,age,money and address: n); scanf(%l
13、d,结构体变量的各成员数值的输出,printf(“%ld,%s,%c,”,wor1.number,,wor1.sex); printf(“%d,%ld,%s”,wor1.age,wor1.money,wor1.address);,编程练习2,有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。,结构体类型定义,#define A 20 #define B 80 #define C 10 struct student long number; char
14、nameB; int scores1,scores2,scores3,average; ; 结构体类型数组变量定义 struct student stuC;,结构体数组变量动态初始化,for(i=0;iC;i+) scanf(%ld, ,输出结构体数组值,for(i=0;iC;i+) Printf(“%dn”,i) print(“number:%ldn“,stui.number) puts(); prinf(“ncscores:%d,%d,%d“,stui.scores1,stui.scores2,stui.scores3); ,求平均值,for(i=0;iC;i+) stu
15、i.average=(stui.scores1+stui.scores2+stui.scores3)/3;,求最大值,max=0; for(j=1;jC;j+) if(stumax.averagestuj.average) max=j; for(k=0,i=1;kC;k+,i=k+1) /*k是下标值,从0开始.i是顺序号,从1开始*/ printf(nThe number %d average is %d,i,stuk.average); printf(n The max is student %d: n,max+1); printf(name scores1 scores2 scores3
16、 averagen); printf(%s ,); printf(%d %d %d %d, stumax.scores1,stumax.scores2, stumax.scores3,stumax.average);,编程练习3,输入20本书的名称、单价、作者、出版社,按书名进行排序和输出。,定义结构体类型,struct book char bookname40; float price; char author10; char press40; ;,定义结构体变量,并静态初始化,struct book bookarray4= computer fundamental,2
17、4.0,gaolin,higher education, adfr fundamental,24.0,gaolin,higher education, dfcomputer fundamental,24.0,gaolin,higher education, 23computer fundamental,24.0,gaolin,higher education;,定义结构体变量,并动态初始化,struct book bookarray4; for(i=0;i4;i+) gets(bookarrayi.bookname); scanf(%f, ,使用冒泡法排序,struct book temp; int i,j,n; n=4; for(i=0;i0) temp=bookarrayj-1; bookarrayj-1=bookarr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生礼学教育课件
- 2025年环保产业环保装备制造技术创新与市场潜力
- 2025年工业互联网平台数据清洗算法在工业互联网设备远程监控中的应用
- 口才说课课件图片背景图
- 企业定制计划管理办法
- 代理机构资质管理办法
- 保荐机构资格管理办法
- 人员聚集案件管理办法
- 会计档案出境管理办法
- 企业办公用房管理办法
- 美容院商业计划书(完整版)
- T/CMAM W-5-2022维吾尔医常见病诊疗指南骨科
- 2025年食品检验员考试试卷及答案
- 夜场小姐培训课件
- 产品质量问题追溯制度
- 在2025年国企党风廉政建设会议上的讲话
- 2025年海关招聘笔试题库及答案
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(二)学习工匠事迹 领略工匠风采【课件】
- 急性肾衰应急预案
- 《水利工程设计变更管理暂行办法》知识培训
- 水土保持方案投标文件技术部分
评论
0/150
提交评论