程序设计基础8-结构体共用体和枚举类型(2015春)_第1页
程序设计基础8-结构体共用体和枚举类型(2015春)_第2页
程序设计基础8-结构体共用体和枚举类型(2015春)_第3页
程序设计基础8-结构体共用体和枚举类型(2015春)_第4页
程序设计基础8-结构体共用体和枚举类型(2015春)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

结构体与共用体开始1本学期课程计划授课主要内容:8结构体与共用体

9文件

10链表

11递推与递归

12贪心法与动态规划课时安排:24+8,共32学时成绩构成:实验抽查40+机考30+在线考试30平时成绩:0分,出勤、讨论等,-5~+52结构体、共用体、枚举类型主要内容结构体定义和使用共用体定义和使用枚举类型的使用

3本章OJ练习题目48.1结构体类型结构体概念一组逻辑相关但类型不同的变量的集合,也称为记录。在程序里如何表示一个学生

5学号姓名性别出生日期程序设计基础英语高数体育1令狐冲男1996.10.1908372822林平之男1995.12.2789288783岳灵珊女1997.3.1897298664任盈盈女1996.8.2789587905……6……6数组的解决方案存在问题

学号姓名性别出生日期程序设计基础英语高数体育1令狐冲男1996.10.1908372822林平之男1995.12.2789288783岳灵珊女1997.3.1897298664任盈盈女1996.8.2789587905……6……71令狐冲男1996.10.1908372822林平之男1995.12.2789288783岳灵珊女1997.3.3897298664任莹莹女1996.8.278958790希望的分配图定义结构体类型8定义结构体变量先定义结构体类型,再定义变量在定义结构体类型的同时定义变量直接定义结构体变量,缺省结构体类型名9用typedef给已有数据类型定义一个别名用typedef并未定义新类型别名与原有类型名是同义词约定用大写字母表示10结构体变量初始化结构体和数组嵌套和初始化11结构体所占内存字节数12结构体数组定义和初始化13结构体成员的访问

成员选择运算符(圆点运算符)结构体变量名.成员名

对嵌套结构体成员采用级联方式访问14结构体数组元素的引用例:用结构体编程序统计3个候选人的得票情况,有10个人投票。1516结构体指针的定义和初始化17结构体数组指针的定义和初始化18指向结构体数组的指针应用8.2共用体类型共用体是将不同类型的数据项存放于同一段存储单元的一种构造数据类型。共用体类型与结构体有有本质上的不同:结构体的各成员有各自存储单元,一个结构体类型变量占用的存储单元长度是各成员所占存储单元长度之和。共用体类型变量的各成员共享一段存储单元,一个共用体类型变量占用的存储单元的长度是各成员所占用存储单元最长的长度。注意:共用体类型变量中所谓的共享不是把多个成员同时装入,而是该共用体类型变量能被赋予任一成员值,每赋予一个成员值同时覆盖原成员值。191.共用体类型的定义格式:union共用体名

{

数据类型成员名表1;数据类型成员名表2;……数据类型成员名表n;};例如:

unionundata{inta;floatb;charch;};说明:定义了一个名为undata的共用体类型,它含有3个成员,一个为int类型的成员a、一个为float类型的成员b、一个为char类型的成员ch。202.共用体类型变量的定义①在类型定义之后定义共用体变量:

unionundatau1,u2,u3;②在类型定义的同时定义共用体变量:unionundata{inta;floatb;charch;}u1,u2,u3;③在类型定义时直接定义变量:union{inta;floatb;charch;}u1,u2,u3;说明:u1、u2、u3变量占用的存储单元的长度是各成员所占用存储单元最长的长度,即float类型的所占用的长度。218.2.2共用体类型变量的引用共用体类型变量的成员引用格式:共用体类型变量名.成员名例如:u1.au1.bu1.ch注意1:对共用体类型的变量进行赋值时,只能对变量的某一个成员进行,不允许直接对用共用体变量名进行赋值、初始化等操作。注意2:对于一个共用体类型变量,在某一时刻只能赋给一个成员值,即一个共用体变量的值就是共用体变量的某一成员值。22例8.7:共用体类型的定义和使用。#include<stdio.h>unionundata{inta;floatb;charch;}u1;voidmain(){u1.a=6;printf("u1.a=%d\n",u1.a);u1.b=87.2;printf("u1.b=%7.2f\n",u1.b);u1.ch='W';printf("u1.ch=%c\n",u1.ch);}238.2.3共用体类型数据的特点1.同一个存储空间可以用来存放几种不同类型的共用体类型的成员,但共用体类型的成员不能同时在该存储空间存在,即每一瞬时只有一个成员有效。例如,例8.7中的u1.a、u1.b、u1.ch不能同时存在。2.共用体类型变量中有效的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。例如:u1.a=18;u1.b=77.5;u1.ch=’Y’;在完成以上3个赋值语句后,只有u1.ch是有效的,u1.a和u1.b已经无意义了。因此在引用共用体类型变量时应注意当前存放在共用体类型变量中的究竟是哪个成员。248.2.3共用体类型数据的特点3.共用体类型变量的地址和它的各成员的地址都是同一地址。例如,&u1、&u1.a、&u1.ch、&u1.b都代表同一地址值,但类型不一样。4.不能直接对共用体类型变量名赋值或引用共用体类型变量名来得到一个值,也不能在定义共用体变量时对它初始化。5.共用体类型变量不能作函数参数,也不能使函数返回值为共用体类型,但可以使用指向共用体类型变量的指针,使用时注意指针类型要一致。例如:int*p;p=&u1.a;//正确或者:p=(int*)&u1;//正确6.共用体类型数据的成员可以是结构体类型、共用体类型或其他类型。25例8.11:结构体和共用体的综合应用。设有一个教师与学生通用的记录,教师数据有姓名、系别、教研室三项;学生有姓名、性别、班级三项。编程输入人员数据,再以表格输出。#include<stdio.h>uniondp{intcla;charoffice[10];};structrecord{charname[10];charjob;dpdd;};main(){structrecordbody;printf("inputname,job:");scanf("%s%c",,&body.job);if(body.job=='s'){printf("intputclass:");scanf("%d",&body.dd.cla);}else{printf("inputoffice:");scanf("%s",body.dd.office);}printf("name\tjob\tclass/office\n");printf("%s\t%c\t",,body.job);if(body.job=='s')printf("%d\n",body.dd.cla);elseprintf("%s\n",body.dd.office);}268.3枚举类型8.3.1枚举类型的概念和定义在枚举类型的定义中列举出所有可能的取值,被定义为该枚举类型的变量只能从列出的值中取值。枚举类型定义格式:

enum枚举类型名{枚举值列表};例如:enumweekday{sun,mou,tue,wed,thu,fri,sat};注意1:枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。注意2:“枚举值列表”是该枚举类型变量的所有可用值,这些值也称为枚举值。278.3枚举类型注意3:枚举值是用户定义的标识符,这些标识符并不自动地代表任何含义。例如,不能因为写成sun,就自动代表“星期天”。枚举类型变量的定义:格式①先定义类型,后定义变量a、b、c:

enumweekdaya,b,c;格式②定义类型的同时定义变量a、b、c:

enumweekday{sun,mou,tue,wed,thu,fri,sat}a,b,c;格式③直接定义变量a、b、c:

enum{sun,mou,tue,wed,thu,fri,sat}a,b,c;288.3.2枚举类型变量的赋值和使用枚举类型在使用中有以下规定:1、枚举值是常量,不能再用赋值语句对它赋值。例如:对枚举类型weekday的枚举值再作以下赋值:

sun=5;//错误

sun=mon;//错误2、枚举值本身由系统定义了一个表示序号的数值,编译时默认按顺序使枚举值的序号为0、1、2、……。例如:在weekday类型中,sun的序号为0、mon序号为1、sat序号为6。

a=mon;//变量a的值为lprintf(“%d”,a);//输出1298.3.2枚举类型变量的赋值和使用3、枚举值的数值序号也可以在定义时由程序指定。例如:

enumweekday{sun=7,mou=1,tue,wed,thu,fri,sat};定义sun为7、mon为1、以后顺序加1至sat为6。4、只能把枚举值赋予枚举变量,不能把枚举值的序号直接赋予枚举变量。例如:weekdaya,b;a=sum;b=mon;//正确

a=0;b=1;//错误如一定要把枚举值的序号赋予枚举变量,必须用强制类型转例如:a=(enumweekday)2;//将序号为2的枚举值赋予枚举变量a,相当于a=tue;308.3.2枚举类型变量的赋值和使用5、枚举值不是字符常量也不是字符串常量,使用时不能加单引号、双引号。6.枚举值可以用于作判断比较。例如:

if(b==mon)……if(c>sun)……注意:枚举值的比较规则是按其在定义时的序号比较31【例8.8】枚举类型定义和使用。#include<stdio.h>enumcolor{red,yellow,green,blue,whilt,black}co1,co2,co3;voidmain(){co1=blue;co2=red;co3=black;if(co3>co1)printf("%d%d\n",co3,co1);elseprintf("%d%d\n",co3,co2);}328.4利用typedef自定义类型C语言允许用户使用自定义类型符typedef为已经存在的数据类型取“别名”,以“别名”代替已经存在的数据类型来定义变量。格式:typedef

原数据类型名新类型名;说明:原数据类型名是已经存在的类型名,新类型名是用户自定义标识符。例如:typedefintINTEGER;INTEGERa,b;与inta,b;等价338.4利用typedef自定义

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论