C语言程序设计教程课件:7_c_stucture

上传人:s9****2 文档编号:569048100 上传时间:2024-07-27 格式:PPT 页数:45 大小:1.93MB
返回 下载 相关 举报
C语言程序设计教程课件:7_c_stucture_第1页
第1页 / 共45页
C语言程序设计教程课件:7_c_stucture_第2页
第2页 / 共45页
C语言程序设计教程课件:7_c_stucture_第3页
第3页 / 共45页
C语言程序设计教程课件:7_c_stucture_第4页
第4页 / 共45页
C语言程序设计教程课件:7_c_stucture_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《C语言程序设计教程课件:7_c_stucture》由会员分享,可在线阅读,更多相关《C语言程序设计教程课件:7_c_stucture(45页珍藏版)》请在金锄头文库上搜索。

1、程序设计基础(C语言) STRUCTURES STRUCTURES, , UNIONS AND UNIONS AND ENUMERATIONSENUMERATIONS( 结构, 联合与枚举类型 )共 74 页 第 2 2 页Chapter 10 Structures, Unions and EnumerationsChapter 10 Structures, Unions and EnumerationsChapter 10 Structures, Unions and EnumerationsChapter 10 Structures, Unions and Enumerations10-1

2、10-1 Structure Data TypeStructure Data Type10-210-2 Structures and ArraysStructures and Arrays10-310-3 Structures and PointersStructures and Pointers10-410-4 Structures and FunctionsStructures and Functions10-510-5 UnionsUnions10-610-6 EnumerationsEnumerations10-710-7 Using typedefUsing typedef10-81

3、0-8 Intro of ListsIntro of ListsContents共 74 页 第 3 3 页 结构的定义与使用结构的定义与使用 结构的基本应用结构的基本应用 结构与数组的关系结构与数组的关系 结构与指针的关系结构与指针的关系 结构与函数的关系结构与函数的关系 链表简单应用链表简单应用Key PointsChapter 10 Structures, Unions and EnumerationsChapter 10 Structures, Unions and EnumerationsChapter 10 Structures, Unions and EnumerationsCh

4、apter 10 Structures, Unions and Enumerations共 74 页 第 4 4 页lStructure: Why we need it?Structure: Why we need it?一个学生有学号一个学生有学号/ /姓名姓名/ /性别性别/ /年龄年龄/ /地址等属性:地址等属性: int num;int num;char name20;char name20; char sex; char sex;int age;int age; int char addr30; int char addr30; 如如果果将将这这些些属属性性分分别别定定义义在在互互相

5、相独独立立变变量量中中,则则难难以以反反映映出出属属性性间间的的内内在在联联系系同同一一个个学学生生的的属属性性。如如果果要要定定义义更更复复杂杂些些的的数数据据类类型,如型,如学生数组学生数组,问题就更突出了。,问题就更突出了。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 5 5 页lConcept of StructureConcept of Structure 结构是逻辑上相互联系的结构是逻辑上相互联系的一组分量的集合一组分量的集合。 结结构构中中的的分分量量可可以以是是不不同同类类型型的的数数据据,结结构中的分量称为构

6、中的分量称为结构的成员结构的成员。 在在使使用用结结构构之之前前,首首先先要要对对结结构构的的组组成成进进行描述,称为行描述,称为结构的定义结构的定义。 结结构构定定义义说说明明了了该该结结构构的的组组成成成成员员,以以及及每个成员的类型。每个成员的类型。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 6 6 页lGrammar on Definition of StructureGrammar on Definition of Structurestruct struct 结构类型名称结构类型名称 数据类型数据类型 成员名成员

7、名1; 1; 数据类型数据类型 成员名成员名2; 2; 数据类型数据类型 成员名成员名n n;;10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 7 7 页l NOTES structstruct 为关键字。为关键字。结结构构类类型型名名称称是是所所定定义义的的结结构构类类型型标标识识,由用户自己定义;由用户自己定义; 中的每一行是组成该中的每一行是组成该结构的成员结构的成员;每每个个成成员员的的数数据据类类型型既既可可以以是是简简单单的的数数据据类类型型 ( (intint、charchar、floatfloat、double.

8、)double.),也也可可以以是是复复杂杂的的构构造造数数据据类类型型( (数数组组类类型型或或结结构构类类型型) )。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 8 8 页l 结构定义实例结构定义实例为了描述日期可以定义如下结构:为了描述日期可以定义如下结构:struct datestruct date int year; int year; /* /* 年。整型作为结构中的成员年。整型作为结构中的成员 */ */ int month; int month;/* /* 月月 */ */ int day; int day;

9、/* /* 日日 */ */;10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 9 9 页l 结构定义实例结构定义实例为了处理地址簿,可以定义如下结构:为了处理地址簿,可以定义如下结构:struct addressstruct address char name30; char name30;/* /* 姓名。字符数组作为结构中的成员姓名。字符数组作为结构中的成员 */ */ char street40; char street40; /* /* 街道名称街道名称 */ */ char city20; char ci

10、ty20; /* /* 城市城市 */ */ char state2; char state2; /* /* 省市代码省市代码 */ */ unsigned long zip; unsigned long zip;/* /* 邮政编码。无符号长整型邮政编码。无符号长整型 */ */;10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 1010 页l结构变量的定义结构变量的定义 C C语语言言提提供供的的基基本本数数据据类类型型,例例如如 int/long/ int/long/ doubledouble等等,都都是是由由

11、系系统统事事先先定定义义好好的的,我我们们可可直直接接使用使用。 在使用变量之前,要先定义在使用变量之前,要先定义( (声明声明) )变量。变量。 结结构构是是一一种种构构造造型型数数据据类类型型,结结构构定定义义描描述述了了结结构的组成。构的组成。 要使用结构要使用结构必须先定义结构类型,再定义变量必须先定义结构类型,再定义变量。 定定义义结结构构是是定定义义了了一一种种由由成成员员组组成成的的复复合合类类型型,而而只只有有用用这这种种结结构构类类型型定定义义了了一一个个变变量量,才才会会产产生生具体的实体具体的实体( (变量变量) )。10-1 Structure Data Type10-

12、1 Structure Data Type共 74 页 第 1111 页l结构变量定义的一般形式结构变量定义的一般形式 struct struct 结构类型名称结构类型名称 结构变量名结构变量名;系系统统为为所所声声明明的的结结构构变变量量按按照照结结构构定定义义时时的的组组成成(成员分量),分配存储数据的实际内存单元。(成员分量),分配存储数据的实际内存单元。 :定义变量:定义变量todaytoday为为datedate型结构变量型结构变量 struct date today; struct date today; :定义多个:定义多个addressaddress型的结构变量型的结构变量 s

13、truct address wang, li, zhang; struct address wang, li, zhang;结构变量同样有存储类型,存储特性与一般变量结构变量同样有存储类型,存储特性与一般变量完全相同。完全相同。10-1 Structure Data Type10-1 Structure Data TypeExampleExample共 74 页 第 1212 页l结构变量占用内存情况结构变量占用内存情况 结结构构变变量量的的各各个个成成员员分分量量在在内内存存中中占占用用连连续续存存储储区区域域,所所占占用用内内存存大大小小为为结结构构中中每每个个成成员员分分量量占占用内存的

14、大小之和。用内存的大小之和。4字节字节4字节字节4字节字节today (struct date) 12个字节个字节yearmonthdaywang (struct address) 96个字节个字节30字节字节40字节字节20字节字节2字节字节4字节字节namestreetcitystatezipintcharunsigned long10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 1313 页4字节字节4字节字节4字节字节today (struct date) 12个字节个字节yearmonthdaywang (struct

15、address) 96个字节个字节30字节字节40字节字节20字节字节2字节字节4字节字节namestreetcitystatezipintcharunsigned long10-1 Structure Data Type10-1 Structure Data Typel求结构变量占用内存大小求结构变量占用内存大小sizeofsizeof运算运算 sizeof sizeof 是是单单目目运运算算,其其功功能能是是求求出出运运算算对对象象所所占的内存空间的字节数目。占的内存空间的字节数目。 使用的一般形式为:使用的一般形式为:sizeof ( sizeof ( 变量变量 或或 类型说明符类型说明

16、符 ) )共 74 页 第 1414 页共 74 页 第 1515 页l :sizeofsizeof运算的意义。运算的意义。 main ( )main ( ) char str20; char str20; struct date struct date/* /* 定义结构定义结构date */date */ int year, month, day; int year, month, day; today; today; /* /* 说明结构变量说明结构变量today */today */ struct address struct address/* /* 定义结构定义结构address

17、*/address */ char name30,street40,city20,state2; char name30,street40,city20,state2; unsigned long int zip; unsigned long int zip; wang; wang;/* /* 说明结构变量说明结构变量wang */wang */ . 10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 1616 页l sizeof sizeof运算的意义。运算的意义。printf(char: %dt, sizeof(p

18、rintf(char: %dt, sizeof(charchar););printf(int: %dt, sizeof(printf(int: %dt, sizeof(intint); ); printf(long: %dt, sizeof(printf(long: %dt, sizeof(longlong););printf(float: %dn, sizeof(printf(float: %dn, sizeof(floatfloat););printf(double: %dt, sizeof(printf(double: %dt, sizeof(doubledouble););printf

19、(str: %dt, sizeof(printf(str: %dt, sizeof(strstr);); printf(date: %dt, sizeof( printf(date: %dt, sizeof(struct datestruct date););printf(printf(“today: %dt, sizeof(today: %dt, sizeof(todaytoday););printf(wang: %dn, sizeof(printf(wang: %dn, sizeof(wangwang););10-1 Structure Data Type10-1 Structure Da

20、ta Type1 14 4 4 44 48 82020121212129696Example共 74 页 第 1717 页共 74 页 第 1818 页l关于结构类型的说明关于结构类型的说明类型与变量类型与变量是不同的概念。是不同的概念。n在定义结构变量时一般在定义结构变量时一般先定义一个结构先定义一个结构类型类型,然后,然后再说明变量再说明变量为该结构类型。为该结构类型。n只能只能对变量赋值、存取或运算对变量赋值、存取或运算,而不能,而不能对一个类型赋值、存取或运算。对一个类型赋值、存取或运算。n在编译时,对在编译时,对类型是不分配空间类型是不分配空间的,只的,只对说明的对说明的变量分配空间

21、变量分配空间。10-1 Structure Data Type10-1 Structure Data TypeNOTES共 74 页 第 1919 页l关于结构类型的说明关于结构类型的说明对对结构中的成员结构中的成员,可以单独使用,它的作,可以单独使用,它的作用与地位相当于用与地位相当于普通变量普通变量。成员也可以是结构成员也可以是结构。成员名可以与程序中的变量名相同成员名可以与程序中的变量名相同,二者,二者代表不同的对象。代表不同的对象。10-1 Structure Data Type10-1 Structure Data TypeNOTES共 74 页 第 2020 页 : struct

22、struct datedate int month; int month; int day; int day; int int yearyear; ; struct struct studentstudent int num; int num; char name20; char name20; char sex; char sex; int age; int age; struct date birthdaystruct date birthday; ; char addr30; char addr30; student1, student2; student1, student2;dmyb

23、irthdayagesexnamenumadd10-1 Structure Data Type10-1 Structure Data Type程序中程序中可以另定义一个变量可以另定义一个变量 yearyear,它和它和 struct struct date date 中的成员中的成员 year year 是两回事是两回事,互不干扰。,互不干扰。Example共 74 页 第 2121 页l引用结构变量中的引用结构变量中的成员分量成员分量访问结构中的成员是通过成员的名字,称为访问结构中的成员是通过成员的名字,称为“按按名引用名引用”。在程序里使用结构中成员的方法为:。在程序里使用结构中成员的方法

24、为:结构变量名结构变量名.成员名称成员名称 :将变量:将变量 today 赋值为:赋值为:2013/12/10,则要对其各个成员分别赋值:,则要对其各个成员分别赋值: today.year = 2013; today.month = 12; today.day = 10;指明结构成员的指明结构成员的符号符号“.”是运算符是运算符,含义是访,含义是访问结构中的成员。问结构中的成员。“.”操作的优先级最高。结合性为从左到右。操作的优先级最高。结合性为从左到右。10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 2222 页

25、 :用结构描述一个人的基本情况。用结构描述一个人的基本情况。 struct personstruct person /* /* 定义定义personperson结构类型结构类型 */ */ char name 30;char name 30; char sex; char sex; struct date birthday;/* struct date birthday;/* 结构的嵌套定义结构的嵌套定义 */ */ man;man; /* 1991/* 1991年年1010月月2 24 4日出生的日出生的zhangzhang同学同学 */*/strcpy(man.name, strcpy(m

26、an.name, ”zhangzhang”); ); /* /* 注意:不能写成注意:不能写成 man.name=zhang; */man.name=zhang; */man.sex = man.sex = M M; /* ; /* 为结构中的字符成员赋值为结构中的字符成员赋值 */ */man.birthday.year = 1980; man.birthday.year = 1980; man.birthday.month = 3;man.birthday.month = 3; man.birthday.day = 28; man.birthday.day = 28; /* /* 为嵌套定

27、义的结构中的成员赋值为嵌套定义的结构中的成员赋值 */ */10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 2323 页共 74 页 第 2424 页如如果果要要将将“zhzha angng”改改为为“zhzho ongng”,只只要要将将结结构构变变量量 man man 中中的的数数组组成成员员 name name 下下标标为为2 2的元素的元素a a改为改为o o即可。即可。 可以使用下列语句:可以使用下列语句: man.name2 = man.name2 = o o; ; 为结构变量中的数组成员的一个元素赋值

28、。为结构变量中的数组成员的一个元素赋值。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 2525 页l对结构变量的整体操作对结构变量的整体操作能够对结构进行整体操作的运算符只有:能够对结构进行整体操作的运算符只有:n 赋值赋值:= =n 取地址取地址:& & : struct date sunday, today;struct date sunday, today;sunday sunday = = today;today; /* /* 结构变量整体赋值结构变量整体赋值 */ */10-1 Structure Data Type

29、10-1 Structure Data TypeExample共 74 页 第 2626 页l结构类型的引用说明结构类型的引用说明在引用结构变量时,在引用结构变量时,不能将其作为一个整体不能将其作为一个整体直接访问所有成员直接访问所有成员。例如,已定义。例如,已定义 student1 student1 为结构变量并且已有值。为结构变量并且已有值。不能这样引用:不能这样引用: printf( printf(”%s,%c,%d,%d,%dn%s,%c,%d,%d,%dn”, student1), student1);如果成员本身又是一个结构类型,则要用嵌如果成员本身又是一个结构类型,则要用嵌套成员

30、运算符套成员运算符,一级一级地找到最低的一级,一级一级地找到最低的一级的成员。的成员。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 2727 页l结构类型的引用说明结构类型的引用说明在在访问结构变量的成员访问结构变量的成员时,只能时,只能在最低级的成员进在最低级的成员进行变量值的存取及运算行变量值的存取及运算。例如,对上面定义的结构变量例如,对上面定义的结构变量 student1student1,可以这可以这样访问各个成员:样访问各个成员:student1.namestudent1.namestudent1.sexstuden

31、t1.sexstudent1.birthday.monthstudent1.birthday.monthstudent1.birthday.daystudent1.birthday.daystudent1.birthday.yearstudent1.birthday.year10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 2828 页对对成员变量可以象普通变量一样成员变量可以象普通变量一样进行各种运算。进行各种运算。student2student2. .birthdaybirthday. .year year = = stude

32、nt1student1. .birthdaybirthday. .year;year;sum sum = = student1 student1. .birthdaybirthday. .month + 12;month + 12;student1student1. .age age +; ;+ + student1student1. .age;age;可以引用可以引用成员的地址成员的地址,也可引用,也可引用结构变量的地址结构变量的地址。例如:例如:scanf (scanf (”%d%d”, &student1.num);, &student1.num); printf(printf(”%p%

33、p”, , & &student1);student1);但但不能用以下语句整体读入结构变量不能用以下语句整体读入结构变量。例如:。例如: scanf(scanf(”%d,%s,%c,%d,%d,%d,%s%d,%s,%c,%d,%d,%d,%s”, , &student1&student1););10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 2929 页l :输入今天的日期,然后输出该日期。输入今天的日期,然后输出该日期。# #include include main ( )main ( ) struct date stru

34、ct date /* /* 在函数中定义结构类型在函数中定义结构类型date */date */ int year, month, day; int year, month, day; ; ; struct date today; struct date today; /* /* 说明结构变量说明结构变量today */today */ printf (Enter today date:); printf (Enter today date:); scanf(%d%d%d, scanf(%d%d%d,&today.year, &today.month, &today.day&today.yea

35、r, &today.month, &today.day);); printf(Today: %d.%d.%dn, printf(Today: %d.%d.%dn,today.year, today.month, today.daytoday.year, today.month, today.day); ); 10-1 Structure Data Type10-1 Structure Data TypeExample共 74 页 第 3030 页l对对结构变量进行初始化结构变量进行初始化在在说说明明变变量量的的同同时时,可可以以对对每每个个成成员员置置初初值值,称称为为结构的初始化。结构的初始

36、化。和和数数组组一一样样,只只有有当当结结构构体体变变量量为为全全局局变变量量或或静静态态变变量量时时,才才能能进进行行初初始始化化。不不能能对对自自动动变变量量进进行行初初始化。始化。结构初始化的一般形式结构初始化的一般形式: struct 结构类型名称结构类型名称 结构变量结构变量 = 初始化数据初始化数据; 中的初始化数据用逗号分隔。中的初始化数据用逗号分隔。初初始始化化数数据据的的个个数数与与结结构构成成员员的的个个数数应应相相同同,它它们们是按成员的是按成员的先后顺序一一对应先后顺序一一对应赋值的。赋值的。每每个个初初始始化化数数据据必必须须符符合合与与其其对对应应的的成成员员的的数

37、数据据类类型。型。10-1 Structure Data Type10-1 Structure Data Type共 74 页 第 3131 页l : struct date /* struct date /* 在函数的外部定义结构在函数的外部定义结构date */date */ int year, month, day; int year, month, day; ; ; struct person /* struct person /* 在函数外定义结构在函数外定义结构person */person */ char name 14, sex; char name 14, sex; stru

38、ct date birthday; struct date birthday; ; ; 对对datedate类型的变量,可以进行初始化:类型的变量,可以进行初始化:struct date today = 1992, 10, 1 ;struct date today = 1992, 10, 1 ; 又如对变量又如对变量manman的初始化可以用如下形式:的初始化可以用如下形式:struct person manstruct person man = zhao, M, 1980,3,28 ;= zhao, M, 1980,3,28 ;10-1 Structure Data Type10-1 Str

39、ucture Data TypeExample共 74 页 第 3232 页l :用结构描述个人基本情况,打印个人档案。用结构描述个人基本情况,打印个人档案。struct personstruct person xu = Xu lihui xu = Xu lihui, , M M, , 1962 1962, , 10 10, , 4 ; 4 ;main ( )main ( ) static struct person fang=Fang jin,M,1963,9,13 ;static struct person fang=Fang jin,M,1963,9,13 ; static struct

40、 person yuan= Yuan zhiping,M,1963,10,5; static struct person yuan= Yuan zhiping,M,1963,10,5;/* /* 说明内部静态结构变量说明内部静态结构变量fangfang、yuanyuan,并初始化结构变量并初始化结构变量 */ */ printf (name sex birthdayn); printf (name sex birthdayn); printf (-n); printf (-n); printf (%-14s %-4c%4d.%2d.%2dn, xu.name, xu.sex, printf (

41、%-14s %-4c%4d.%2d.%2dn, xu.name, xu.sex,xu.birthday.year, xu.birthday.month, xu.birthday.day);xu.birthday.year, xu.birthday.month, xu.birthday.day); printf (%-14s %-4c%4d.%2d.%2dn, fang.name,fang.sex, printf (%-14s %-4c%4d.%2d.%2dn, fang.name,fang.sex,fang.birthday.year,fang.birthday.month,fang.birt

42、hday.day);fang.birthday.year,fang.birthday.month,fang.birthday.day); printf (%-14s %-4c%4d.%2d.%2dn, yuan.name, printf (%-14s %-4c%4d.%2d.%2dn, yuan.name,yuan.sex,yuan.birthday.year, yuan.birthday.month,yuan.sex,yuan.birthday.year, yuan.birthday.month,yuan.birthday.day);yuan.birthday.day); 10-1 Stru

43、cture Data Type10-1 Structure Data TypeExample共 74 页 第 3333 页l结构与数组的关系结构与数组的关系在在结结构构中中使使用用数数组组类类型型作作为为结结构构的一个成员的一个成员;用用结结构构类类型型作作为为数数组组元元素素的的基基类类型型构成数组(结构数组)。构成数组(结构数组)。10-2 Structures and Arrays10-2 Structures and Arrays共 74 页 第 3434 页l结构数组结构数组结结构构数数组组是是一一个个数数组组,数数组组中中的的每每一一个个元元素都是结构类型。素都是结构类型。说说明明

44、结结构构数数组组的的方方法法:先先定定义义一一个个结结构构,再用结构类型说明一个数组变量再用结构类型说明一个数组变量。 :记录:记录100个人的基本情况。个人的基本情况。可可说说明明一一个个有有100个个元元素素的的数数组组。数数组组的的基类型为结构,在说明数组时可以写成:基类型为结构,在说明数组时可以写成:struct person man 100 ;man 就就是是有有100个个元元素素的的结结构构数数组组,数数组组的每个元素为的每个元素为 person 型。型。10-2 Structures and Arrays10-2 Structures and ArraysExample共 74

45、页 第 3535 页要要访访问问结结构构数数组组中中的的具具体体元元素素,必必须须遵遵守守数数组组使使用的规定,按下标进行访问;用的规定,按下标进行访问;要要访访问问结结构构数数组组中中某某个个具具体体元元素素下下的的成成员员,又又要要遵遵守守有有关关访访问问结结构构成成员员的的规规定定,使使用用“. .”访访问问运运算符和成员名。算符和成员名。 例如:要将数组例如:要将数组manman中的中的 3 3 号元素赋值为:号元素赋值为: Fangjin, Fangjin, M M, 1963, 9, 13, 1963, 9, 13, 就可以使用下列语句:就可以使用下列语句:strcpy ( man

46、3.name, Fangjin );strcpy ( man3.name, Fangjin );man3.sex = man3.sex = M M; ;man3.birthday.year = 1963;man3.birthday.year = 1963;man3.birthday.month = 9;man3.birthday.month = 9;man3.birthday.day = 13;man3.birthday.day = 13;10-2 Structures and Arrays10-2 Structures and Arrays共 74 页 第 3636 页为为了了将将“Fang

47、jinFangjin”改改为为“FangjunFangjun”,修修改改其其中中的的字母字母 ii: man3.name5 = man3.name5 = u u; ;/* /* 为数组中元素的数组成员中的一个字符赋值为数组中元素的数组成员中的一个字符赋值 */ */结构数组中每个结构数组中每个元素的起始下标从元素的起始下标从 0 0 开始开始数组名称数组名称表示该结构数组的存储首地址。表示该结构数组的存储首地址。结结构构数数组组存存放放在在连连续续的的内内存存区区域域中中,所所占占内内存存大大小小为结构类型的大小乘以数组元素的数量。为结构类型的大小乘以数组元素的数量。struct person

48、 man100: 37*100 = 3700struct person man100: 37*100 = 3700字节字节301222301222301222.name symdnsymdnsymdman0man1man9910-2 Structures and Arrays10-2 Structures and Arrays共 74 页 第 3737 页l :简单的密码加密程序。简单的密码加密程序。 最最简简单单的的加加密密过过程程是是先先定定义义一一张张字字母母加加密密对对照照表表。将将需需要要加加密密的的一一行行文文字字输输入入加加密密程程序序,程程序序根根据据加加密密表表中中的的对对应

49、应关关系系,可可以以很很简简单单地地将将输输入入的的文文字字加加密密输输出出,对对于于表表中中未未出出现现的的字字符则不加密。符则不加密。 输入输入 输出输出 输入输入 输出输出 输入输入 输出输出 输入输入 输出输出 a a d d b b w w c c k k d d ; e ei i i i a a k k b b ; c c w we e10-2 Structures and Arrays10-2 Structures and ArraysExample共 74 页 第 3838 页l建立加密对照表建立加密对照表struct tablestruct table /* /* 定义结构定

50、义结构 table */table */ char input;char input; /* /* 成员成员 input input 存输入的字符存输入的字符 */ */char output; /* char output; /* 成员成员 output output 存输出的字符存输出的字符 */ */;struct table translate = struct table translate = /* /* 外部结构数组外部结构数组translatetranslate并初始化并初始化 */ */ a a, ,d d, , b b, ,w w, , c c, ,k k, , d d,

51、,; ;, , e e, ,i i, , i i, ,a a, , k k, ,b b, , ; ;, ,c c, , w w, ,e e; /* /* 建立加密对照表建立加密对照表 */ */10-2 Structures and Arrays10-2 Structures and Arrays共 74 页 第 3939 页“struct table translate = .”有三个作用:有三个作用:说明了一个说明了一个外部的结构数外部的结构数组组translate;表示表示数组的大小数组的大小由后面给由后面给出的初始化数据决定;出的初始化数据决定;对结构数组对结构数组进行初始化进行初始化

52、。 在程序中给出了数组初在程序中给出了数组初始化数据,所以结构数组始化数据,所以结构数组translate有有9个元素。个元素。adbwckd;eiiakb;cwetranslate0translate1translate2translate3translate4translate5translate6translate7translate810-2 Structures and Arrays10-2 Structures and Arrays共 74 页 第 4040 页l :简单的密码加密程序。简单的密码加密程序。struct tablestruct table char input, o

53、utput; char input, output; ;struct table translate =struct table translate = a a, ,d d, , b b, ,w w, , c c, ,k k, , d d, ,; ;, , e e, ,i i, , i i, ,a a, , k k, ,b b, , ; ;, ,c c, , w w, ,e e ; ; main( )main( ) char ch;char ch;int str_long, i;int str_long, i;str_long = sizeof(translate)/sizeof(struct

54、 table);str_long = sizeof(translate)/sizeof(struct table);/* /* 计算元素个数计算元素个数 */ */while ( (ch=getchar( ) != n)while ( (ch=getchar( ) != n) for( i=0; translatei.input!=ch & istr_long; i+ ) for( i=0; translatei.input!=ch & istr_long; i+ ); if (istr_long) putchar (translatei.output); if (istr_long) put

55、char (translatei.output);/* /* 加密加密 */ */ else putchar (ch);else putchar (ch); /* /* 原样输出原样输出 */ */ 10-2 Structures and Arrays10-2 Structures and ArraysExample共 74 页 第 4141 页l :分析程序运行结果分析程序运行结果struct sstruct s int x; int *y;int x; int *y; /* y: /* y: 结构中的成员是指向整型的指针结构中的成员是指向整型的指针 */ */int data5 = 10,

56、20,30,40,50; /* int data5 = 10,20,30,40,50; /* 整型数组整型数组 */ */struct s array5=100,&data0, 200,&data1,struct s array5=100,&data0, 200,&data1,300,&data2, 400,&data3, 500,&data4 ;300,&data2, 400,&data3, 500,&data4 ;/* array: /* array: 结构数组,初始化结构数组,初始化 */ */ 数组数组arrayarray的每个元素有两个成员,初始化状态如下:的每个元素有两个成员,初始

57、化状态如下:1002003004005001020304050array0array1array2array3array4data0data1data2data3data410-2 Structures and Arrays10-2 Structures and ArraysExample共 74 页 第 4242 页l :分析程序运行结果。分析程序运行结果。 main ( ) main ( ) int i=0; /* int i=0; /* 说明变量说明变量i i并赋初值并赋初值 */ */struct s s_var;struct s s_var; /* s_var: /* s_var:

58、一般的结构变量一般的结构变量 */ */s_var = array0; /* s_var = array0; /* 整体赋给整体赋给s_var */s_var */printf (%dn, s_var.x );printf (%dn, s_var.x );printf (%dn, *s_var.y );printf (%dn, *s_var.y );printf (For array:n );printf (For array:n );printf (%dn, arrayi.x );printf (%dn, arrayi.x ); printf(%dn, * arrayi.y );printf

59、(%dn, * arrayi.y );printf (%dn, + arrayi.x );printf (%dn, + arrayi.x );printf(%dn, + * arrayi.y );printf(%dn, + * arrayi.y );printf (%dn, array +i .x );printf (%dn, array +i .x );printf(%dn, * + arrayi.y );printf(%dn, * + arrayi.y );printf (%dn,( * arrayi.y) + );printf (%dn,( * arrayi.y) + );printf(

60、%dn, * (arrayi.y +) );printf(%dn, * (arrayi.y +) );printf (%dn, * arrayi.y + );printf (%dn, * arrayi.y + );printf (%dn, * arrayi.y);printf (%dn, * arrayi.y); 10-2 Structures and Arrays10-2 Structures and ArraysExample共 74 页 第 4343 页l :分析程序运行结果分析程序运行结果各个各个printfprintf语句中对数组操作的含义如下(语句中对数组操作的含义如下(i i=0

61、=0):): s_var.xs_var.x 取取s_vars_var的成员的成员x x的值的值 * * s_var.ys_var.y 取取s_vars_var的成员指针的成员指针y y所指的内容所指的内容 arrayi.x arrayi.x 取取arrayiarrayi的的x x的值的值 * * arrayi.yarrayi.y 取取arrayiarrayi的指针的指针y y所指的内容所指的内容1002003004005001020304050array0array1array2array3array4data0data1data2data3data4s_var1001001010010-2

62、Structures and Arrays10-2 Structures and Arrays1001010010Example共 74 页 第 4444 页 + + arrayi.xarrayi.x + * + * arrayi.yarrayi.y array +i .x array +i .x * + * + arrayi.yarrayi.y1002003004005001020304050array0array1array2array3array4data0data1data2data3data41001011011i0 12003010-2 Structures and Arrays1

63、0-2 Structures and Arrays取取arrayiarrayi的的x x的值,的值,x x加加1 1后输出后输出 101 101取取arrayiarrayi的的y y所指的内容,所指的内容,y y 的内容的内容加加 1 1 后输出后输出 11 11i i先加先加1 1后取后取array1array1的成员的成员x x的值的值 200 200将将arrayiarrayi的指针的指针 y y 先加先加 1 1 后再取后再取y y 所指的内容输出所指的内容输出 30 30共 74 页 第 4545 页 (* (*arrayi.y)+arrayi.y)+ * (* (arrayi.y+

64、)arrayi.y+) * * arrayi.y +arrayi.y + * * arrayi.yarrayi.y1012003004005001120304050array0array1array2array3array4data0data1data2data3data4i0 13031405010-2 Structures and Arrays10-2 Structures and Arrays取取arrayiarrayi的指针的指针y y的内容,输出的内容,输出 30 30,y y的内容再加的内容再加 1 1取取 arrayi arrayi 的指针的指针 y y 的内容,输出的内容,输出 3131,指针,指针 y y 再加再加 1 1同同 *( *(arrayi.y+)arrayi.y+),根据运算符的,根据运算符的结合性,隐含了括号,输出结合性,隐含了括号,输出 40 40输出输出 50

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号