C语言程序设计构造数据类型_第1页
C语言程序设计构造数据类型_第2页
C语言程序设计构造数据类型_第3页
C语言程序设计构造数据类型_第4页
C语言程序设计构造数据类型_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-4-24C语言程序设计-第八章2基本类型基本类型 构造类型构造类型派生类型派生类型整型int结构体struct数组类型字符型char共用体(联合)型union指针类型实型float枚举型enum双精度型Double用户定义类型typedef 空值型void构造数据类型(导出构造数据类型(导出类型):类型):由基本数据由基本数据类型按一定规则组合类型按一定规则组合而成的。广义上包括而成的。广义上包括表中的构造类型和派表中的构造类型和派生类型。生类型。 同一类型数据的顺序排列 类型不同但相互关联 2022-4-24C语言程序设计-第八章37.1 结构体结构体7.2 共用体共用体7.3 枚

2、举类型枚举类型7.4 用用typedef定义类型定义类型第第7 7章章 构造数据类型构造数据类型2022-4-24C语言程序设计-第八章47.1结构体结构体7.1.1 结构体类型定义结构体类型定义7.1.2 结构体变量的使用结构体变量的使用7.1.3 结构体数组结构体数组2022-4-24C语言程序设计-第八章5struct 结构体类型名结构体类型名 类型名类型名 结构体成员名;结构体成员名; /*成员表成员表*/ ;7.1.1 结构体类型定义结构体类型定义例7.1描述通讯录的结构体类型。struct person char name20; int age; char sex; char ad

3、dress100; long zipcode; ;例7.2结构体类型的嵌套定义嵌套定义。struct birthday int year; int month; int day; struct person char name20; struct birthday date; char sex; char address100; long zipcode; 类型名成员变量名2022-4-24C语言程序设计-第八章67.1.2 结构体变量结构体变量q间接定义间接定义q直接定义直接定义q无名定义无名定义qtypedef定义定义 struct birthday int year; int month

4、; int day; ; struct person char name20; struct birthday date; char sex; char address100; long zipcode; ; struct person p; struct 结构体类型名结构体类型名 成员表;成员表; ; struct 结构体类型名结构体类型名 变量名表;变量名表;先定义类型,后单独定义变量。在类型定义之后立即定义变量。 struct 结构体类型名结构体类型名 成员表;成员表; 结构体变量名表结构体变量名表; struct birthday int year; int month; int da

5、y; ; struct person char name20; struct birthday date; char sex; char address100; long zipcode; p; 定义一个无名结构体类型,直接定义变量。struct 成员表;成员表;结构体变量名表结构体变量名表; struct birthday int year; int month; int day; ; struct char name20; struct birthday date; char sex; char address100; long zipcode; p; 例例7.3求结构体类型(或结构体变量

6、)的字节数。求结构体类型(或结构体变量)的字节数。#define NAMESIZE 20#define ADDRSIZE 100struct birthday int year; int month; int day;struct person char nameNAMESIZE; struct birthday date; char sex; char addressADDRSIZE; long zipcode;main() struct person p; printf(the p length: %dn,sizeof(p); printf(the struct person length

7、:%dn,sizeof(struct person);The p length: 131The struct person length: 131结构体变量的存储结构: 对结构体变量成员顺序顺序分配存储空间。2022-4-24C语言程序设计-第八章7结构体变量的使用结构体变量的使用 结构体一般不能作为一个整体参加数据处理,而参结构体一般不能作为一个整体参加数据处理,而参加各种运算和操作的是结构体的各个成员项数据。对成加各种运算和操作的是结构体的各个成员项数据。对成员的使用方式:员的使用方式: 结构体变量名结构体变量名.成员名成员名 注:相同结构体类型的变量可以相互赋值。注:相同结构体类型的变量

8、可以相互赋值。p.zipcode=130022; p.date.year=1980;struct person p1,p2; p1=p2;2022-4-24C语言程序设计-第八章8结构体变量的初始化结构体变量的初始化q 间接初始化间接初始化q 直接初始化直接初始化q 无名初始化无名初始化 例例7.4结构体变量的初始化。结构体变量的初始化。struct birthday int year; int month; int day; ;struct person char name20; struct birthday date; char sex; char address100; long zi

9、pcode; ;struct person p=LiPing,1994,12,25,m,zhong shan road,310000;main() printf(Name: %sn,); printf(birthday: %d,%d,%dn,p.date.year,p.date.month,p.date.day); printf(sex: %cn,p.sex); printf(address: %sn,p.address); printf(zipcode: %ldn,p.zipcode);name: LiPingbirthday: 1994,12,25sex: maddress:

10、zhong shan roadzipcode: 3100002022-4-24C语言程序设计-第八章97.1.3 结构体数组结构体数组 1. 结构体数组的定义 struct 结构体类型名结构体类型名 结构体数组名结构体数组名元素个数元素个数;struct student aatd10=“zhang ming”,18,m,“Lipiang”,20,f; struct student aatd=“zhang ming”,18,m,“Lipiang”,20,f; 2. 结构体数组的初始化struct 结构体名结构体名 数组名数组名元素个数元素个数=,;例例7.5对对N个学生进行年龄从小到大的排序。个

11、学生进行年龄从小到大的排序。#include stdio.h#define N 3#define NAMESIZE 20struct student char nameNAMESIZE; int age; char sex; ;struct student stdN;main() int i,j; struct student change; printf(Please input student datan); i=0; while(iN) printf(name: age: sex: ); scanf(%s,); scanf(%d,&stdi.age); scan

12、f(%c,&stdi.sex); i=i+1; for(i=0;iN-1;i+) for(j=i+1;jstdj.age) change=stdi; stdi=stdj; stdj=change; printf(The result after sortingn); for(i=0;iN;i+) printf(“name: %stage: %dtsex: %cn,,stdi.age,stdi.sex);输入:name: age: sex: aaa 21m name: age: sex: bbb 22f name: age: sex: ccc 25m输出:name:aa

13、a age:21 sex:m name:bbb age:22 sex:f name:ccc age:25 sex:m例例7.6结构体数组初始化。结构体数组初始化。struct s int num; char color; char type;main() static struct s car= 101,G,c, 210,Y,m, 105,R,l, 222,B,s, 308,P,b;int i;printf(number color typen);for(i=0;i5;i+) printf(%-9d%-6c%cn,cari.num,cari.color,cari.type);number co

14、lor type101 G c210 Y m105 R l222 B s308 P b2022-4-24C语言程序设计-第八章10union u char ch; int i; float f; ; 共用体共用体:其中所有成员均放在以同一地址开始的存储空间中,使用覆盖的方式共享存储单元。共用体所占的空间的大小取决于占存储空间最大的那个成员。7.2 共用体共用体1.共用体类型的定义共用体类型的定义union 共用体类型名共用体类型名 类型名类型名 成员名;成员名; ;ch/i/fi/fff2022-4-24C语言程序设计-第八章112.共用体变量的定义共用体变量的定义q间接定义间接定义q直接定义

15、直接定义q无名定义无名定义 union u char ch; int i; float f;;union u a,b; union共用体类型名共用体类型名 类型名类型名 成员名;成员名; ;union 共用体类型名共用体类型名 变量名表;变量名表; 分别定义类型和变量。分别定义类型和变量。 放在一起定义类型和变量。放在一起定义类型和变量。 struct 结构体类型名结构体类型名 成员表;成员表; 结构体变量名表结构体变量名表; union u char ch; int i; float f; a,b; 直接定义变量而无类型名。直接定义变量而无类型名。union 类型名类型名 成员名;成员名;

16、变量名表;变量名表; union char ch; int i; float f; a,b; 注:共用体变量不能在定义时赋初值。 2022-4-24C语言程序设计-第八章123.共用体成员的使用共用体成员的使用 共用体变量名共用体变量名.成员名成员名 注:注:不能对共用体变量进行整体操作,只能单独使不能对共用体变量进行整体操作,只能单独使用其成员。共用体变量不能作为函数参数或函数值,但用其成员。共用体变量不能作为函数参数或函数值,但可以使用指向共用体的指针变量。可以使用指向共用体的指针变量。a.ch 例7.8字和字节处理。struct w char low; char high; ;union

17、 u struct w byte; short word; uw;main() int result; uw.word=0 x1234; printf(word value: %04xn,uw.word); printf(high byte: %02xn,uw.byte.high); printf(low byte : %02xn,uw.byte.low); uw.byte.low=0 xff; printf(word value: %04xn,uw.word); result=uw.word+0 x2000; printf(the result: %04xn,result);word val

18、ue: 1234high bytes: 12low byte: 34word value: 12ffthe result: 22ff2022-4-24C语言程序设计-第八章134.共用体变量的存储结构共用体变量的存储结构 其所占空间的大小取决于占存储空间最大的那个成员,其所占空间的大小取决于占存储空间最大的那个成员,它使几个不同数据类型的数据共用同一个存储空间。它使几个不同数据类型的数据共用同一个存储空间。 union person char name20; int age; char sex; char address50; long zipcode; ;/ 20/ 2/1/50/4/ 50

19、2022-4-24C语言程序设计-第八章147.3 枚举类型枚举类型枚举枚举:将变量的值一一列举出来,变量的取值仅限于列举值的范围内。 1. 枚举类型的定义枚举类型的定义 enum 枚举类型名枚举类型名 枚举元素枚举元素1=整型常量整型常量1,枚举元素,枚举元素2=整型常量整型常量2,; 枚举元素枚举元素:又称枚举值枚举值、枚举常量枚举常量。enum weekday sun,mon,tue,wed,thu,fri,sat;2022-4-24C语言程序设计-第八章152.枚举变量的定义枚举变量的定义q间接定义间接定义q直接定义直接定义q无名定义无名定义 enum weekday sun,mon,

20、tue,wed,thu,fri,sat;enum weekday workday,holiday; enum枚举类型名枚举类型名 枚举元素枚举元素1=整型常量整型常量1,枚举元,枚举元素素2=整型常量整型常量2,;enum 枚举类型名枚举类型名 变量名表;变量名表;分别定义类型和变量。 放在一起定义类型和变量。 enum枚举类型名枚举类型名 枚举元素枚举元素1=整型常量整型常量1,枚举,枚举元素元素2=整型常量整型常量2, 变量名表;变量名表;直接定义变量而无类型名。enum 枚举元素枚举元素1=整型常量整型常量1,枚举元,枚举元素素2=整型常量整型常量2,变量名表;变量名表; enum we

21、ekday sun,mon,tue,wed,thu,fri,sat workday,holiday; enum sun,mon,tue,wed,thu,fri,sat workday,holiday;2022-4-24C语言程序设计-第八章163. 枚举数据的使用枚举数据的使用(1) 枚举值为常量,不能对之赋值。(2) 枚举值可以整型输出。(3) 枚举值可与整数n进行加减运算,以得到其前后第n个元素;(4) 枚举值可以按定义时的序号进行关系比较。(5) 只能给枚举变量赋枚举值,若赋序号要进行强制类型转换。(6) 枚举变量可做函数的参数和返回值。sun=4;不合法。printf(“%d”,tue

22、);workday=(enum weekday)2; 相当于 workday=tue;2022-4-24C语言程序设计-第八章17例例7.9枚举类型应用。枚举类型应用。#include stdio.henum key A,B,C,D,END=9select;enum key input() int i; printf(input digit number: ); scanf(%d,&i); return(enum key)i); ;main() enum key input(); while(1) select=input(); if(select=END) break; switch

23、(select) case A: printf(select is An); break; case B: printf(select is Bn); break; case C: printf(select is Cn); break; case D: printf(select is Dn); break; input digit number:0select is A2022-4-24C语言程序设计-第八章187.4 用用typedef定义类型定义类型1.一般形式一般形式 typedef 类型名类型名 标识符;标识符;注:(1) typedef只定义类型名,不能定义变量名,是类型名的别名

24、。 (2) 与#define相似,但有区别,新旧类型位置相反。typedef int INTEGER;2022-4-24C语言程序设计-第八章19struct tagDATE int month; int day; int year; birthday; typedef struct tagDATE int Month; int Day; int Year; DATE;DATE Birthday;2. 用用typedef说明类型的步骤说明类型的步骤1) 先定义变量的方法写出定义体。2) 把变量名换成新类型名。3) 在最前面加上typedef。4) 已定义完新类型名,可用此新类型名 去 定义变量

25、。int i,j;typedef int INTEGER; INTEGER i,j;char s80;typedef char STRING80; STRING s;2022-4-24C语言程序设计-第八章20小结小结1.1.结构体结构体 结构体数据类型必须先说明,这称做结构体类型的定结构体数据类型必须先说明,这称做结构体类型的定义。组成结构体的每个数据称为结构体的成员,结构体类义。组成结构体的每个数据称为结构体的成员,结构体类型的定义是宣布该结构体是由几个成员项组成,以及每个型的定义是宣布该结构体是由几个成员项组成,以及每个成员项是什么数据类型。成员项是什么数据类型。 程序中的结构体变量不能

26、作为一个整体参加运算,参程序中的结构体变量不能作为一个整体参加运算,参加运算的是结构体的各个成员项数据。加运算的是结构体的各个成员项数据。 结构体变量同样具有一定的存储性质,它可以为外部、结构体变量同样具有一定的存储性质,它可以为外部、自动、静态三种存储类型,但不能为寄存器类型。对结构自动、静态三种存储类型,但不能为寄存器类型。对结构体变量成员分配存储空间时,是按结构体类型说明的成员体变量成员分配存储空间时,是按结构体类型说明的成员顺序进行的。顺序进行的。 2022-4-24C语言程序设计-第八章21 外部类型和静态类型结构体变量可以初始化。外部类型和静态类型结构体变量可以初始化。 一个结构体

27、类型中可以嵌套结构体类型。结构体一个结构体类型中可以嵌套结构体类型。结构体类型也可以嵌套数组类型,数组中也可以嵌套结构类型也可以嵌套数组类型,数组中也可以嵌套结构体类型。体类型。 结构体变量可以向另一个结构体类型相同的结结构体变量可以向另一个结构体类型相同的结构体变量赋值。此外,结构体变量可以作为一个参构体变量赋值。此外,结构体变量可以作为一个参数以数据复制的方式传递给函数,也可以由函数返数以数据复制的方式传递给函数,也可以由函数返回。回。 2022-4-24C语言程序设计-第八章22 2. 2.共用体共用体 共用体中的所有成员共享存储单元。共用体所占空共用体中的所有成员共享存储单元。共用体所

28、占空间的大小取决于占存储空间最大的那个成员。它使不同间的大小取决于占存储空间最大的那个成员。它使不同数据类型的数据共用同一个存储空间。数据类型的数据共用同一个存储空间。 共用体类型的语法与结构体类型语法一致,共用体共用体类型的语法与结构体类型语法一致,共用体自身可以嵌套。共用体与结构体也可以相互嵌套,共用自身可以嵌套。共用体与结构体也可以相互嵌套,共用体可以作为结构体的成员,结构体也可作为共用体的成体可以作为结构体的成员,结构体也可作为共用体的成员。员。 共用体与结构体类似,一经定义后,就可以说明共共用体与结构体类似,一经定义后,就可以说明共用体类型变量。共用体成员的使用方式与结构体完全相用体

温馨提示

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

评论

0/150

提交评论