《级C语言程序设计》第9章结构体与共用体.ppt

上传人:小飞机 文档编号:5024464 上传时间:2023-05-30 格式:PPT 页数:68 大小:300.99KB
返回 下载 相关 举报
《级C语言程序设计》第9章结构体与共用体.ppt_第1页
第1页 / 共68页
《级C语言程序设计》第9章结构体与共用体.ppt_第2页
第2页 / 共68页
《级C语言程序设计》第9章结构体与共用体.ppt_第3页
第3页 / 共68页
《级C语言程序设计》第9章结构体与共用体.ppt_第4页
第4页 / 共68页
《级C语言程序设计》第9章结构体与共用体.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《《级C语言程序设计》第9章结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《《级C语言程序设计》第9章结构体与共用体.ppt(68页珍藏版)》请在三一办公上搜索。

1、第9章 结构体与共用体,9.1 结构体,上表中某一学生的数据是由学生的学号、姓名、性别、年龄、家庭地址等数据项组成的,这些数据项是一组逻辑上相关的数据,如果将这些数据项分割开来孤立地考虑它们的属性,将导致操作的不便或逻辑错误。在C语言中,将这种由多个不同类型的数据项组合在一起形成的数据类型,称为结构体类型。,表9-1 学生表,9.1.1 结构体类型的定义,结构体类型定义的一般形式:struct 标识符 类型名1 成员名1;类型名2 成员名2;类型名n 成员名n;,9.1.1 结构体类型的定义,例1 对某一学生数据(由学生的学号、姓名、性别、年龄、家庭地址等数据项组成)的结构体类型定义如下:st

2、ruct student int num;char name20;char sex;int age;char addr30;,(5)结构体类型定义的嵌套。例2:若某一学生数据包括学号、姓名、性别、出生年月、家庭地址,其中出生年月包括出生的年、月、日三个数据,则对某一学生数据的结构体类型定义如下:,再定义student结构体:struct student int num;char name20;char sex;struct date birthday;char addr30;,先定义date结构体:struct dateint year;int month;int day;,9.1.1 结构体

3、类型的定义,9.1.2 结构体变量的定义,结构体变量的定义有三种处理方式:(1)先定义结构体类型,再定义结构体变量。例1:struct student int num;char name20;char sex;int age;char addr30;/*定义结构体类型struct student*/struct student a,b;/*定义a、b为结构体类型struct student的变量*/,9.1.2 结构体变量的定义,(2)在定义结构体类型的同时定义结构体变量。例2:struct student int num;char name20;char sex;int age;char a

4、ddr30;a,b;,9.1.2 结构体变量的定义,(3)直接定义结构类型变量。例3:struct int num;char name20;char sex;int age;char addr30;a,b;,9.1.3 结构体变量的引用,(1)引用结构体变量的成员。格式:结构体变量名成员名struct dateint year;int month;int day;,struct student int num;char name20;char sex;struct date birthday;char addr30;struct student a,b;a.name=Li Fang;b.bir

5、thday.day=12;,9.1.3 结构体变量的引用,对结构体变量中的成员都可以像同类型的普通变量一样进行各种运算。例3:a.num=060001+5;b.birthday.day+;(2)结构体变量作为一个整体引用.结构体变量不可以作为整体进行输入输出,但可以作为函数的参数或返回值而被整体引用,也可以将一个结构体变量作为一个整体赋给另一个具有相同类型的结构体变量。例1:struct student a,b;a=b;,(3)引用结构体变量的地址或成员的地址struct student a,b;scanf(%d,9.1.3 结构体变量的引用,9.1.4 结构体变量的初始化,结构体变量的初始化

6、形式有如下两种:(1)struct 标识符 类型名1 成员名1;类型名2 成员名2;类型名n 成员名n;变量名=数据表;,例1:struct student int num;char name20;char sex;int age;char addr30;a=060001,Li Fang,F,18,Wuhan;,(2)结构体类型名 变量名=数据表;例2:struct student int num;char name20;char sex;int age;char addr30;struct student a=060001,Li Fang,F,18,Wuhan;,9.1.3 结构体变量的引用

7、,9.2 结构体数组,9.2.1 结构体数组的定义结构体数组定义的一般形式:结构体类型名 数组名常量表达式;例1:struct student int num;char name20;char sex;int age;char addr30;/*定义结构体类型struct student*/struct student a5;/*定义a5结构体类型struct student的数组*/,9.2.2 结构体数组元素的引用,格式:结构体数组名元素下标.结构体成员名 例1:struct student int num;char name20;char sex;int age;char addr30;

8、a5;a0.num=060001;a1.name=Lin Hong;,一个结构体数组元素相当于一个结构体变量,其处理方法与结构体变量的处理方法相同,9.2.2 结构体数组元素的引用,例2:struct student int num;char name20;char sex;int age;char addr30;a5;scanf(%d,9.2.3 结构体数组的初始化,结构体数组也可以在定义的同时进行数组元素的初始化。例如:struct student int num;char name20;char sex;int age;char addr30;a5=060001,Li Fang,F,18

9、,Wuhan,060230,Lin Hong,F,16,Changsha;,;,9.2.4 应用举例,例9.1 输入如表9-1所示的学生情况登记表,按学号顺序整理输出该表。分析如下:1、定义学生类型及学生数组:2、输入学生信息3、输出学生信息(程序由学生和老师共同完成),struct student int num;char name20;char sex;int age;char addr30;a5;,9.3 结构体指针,结构体指针变量:如果用一个指针变量指向一个结构体变量,即存储该结构体变量所占据的内存单元的起始地址,则该指针变量称为结构体指针变量。结构体指针变量也可以用来指向结构体数组中

10、的元素。,9.3.1 结构体指针变量的定义,结构体指针变量的定义形式如下:结构体类型名*指针变量名;例如:struct student*p,a;p=,9.3.2 引用指针所指向的结构体变量的成员,通过指针变量引用结构体变量的成员有如下两种方式:(1)(*结构体指针).成员名例如:(*p).num(2)结构体指针-成员名例如:p-num,9.3.3 指向结构体数组的指针,对于已定义的结构体数组,若用一个变量来存放该结构体数组在内存中的首地址,则该变量为指向结构体数组的指针变量。例如:struct student*p,a5;p=a;例9.2 用指向结构体数组的指针处理例9.1(按学号顺序整理输出学

11、生情况登记表。),9.4 结构体与函数,1结构体变量作为函数的形参的三种形式:(1)以结构体变量的成员作为参数,传递结构体变量的成员的值。(2)以结构体变量作为参数,直接传递结构体变量的值。在ANSI C标准中允许用结构变量作为函数的参数进行整体传送,即直接将实参结构体变量的各个成员的值逐个传递给形参结构体变量的对应成员。注意,实参与形参必须是相同结构体类型的变量。(3)以结构体指针作为参数,传递结构体变量的地址。通过结构体变量的整体传递可以实现函数参数的传递,但这要将结构体变量的全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用

12、指针,即用指针变量作函数参数进行传送。这时由实参传递给函数形参的只是地址,从而减少了时间和空间的开销。,例9.3 利用函数完成结构体变量的输入输出。(阅读书中程序)2结构体类型作为函数的返回值类型其一般定义形式:结构体类型名 函数名(形参表)函数体 例(p168),9.4 结构体与函数,9.5 链表,C语言中,变量存储空间的分配分为静态分配和动态分配两种方式。(1)静态分配方式:先在程序的声明部分进行定义,然后在程序编译时分配适当的存储单元。这些存储单元一经分配,在它的生存期内是固定不变的。(2)动态分配方式:在程序执行期间,通过“申请”分配指定的存储空间来存储数据,当有闲置不用的存储空间时,

13、又可以随时将其释放。前面章节中处理的变量都是在程序的声明部分定义的变量,在程序编译时分配存储单元,是静态分配方式。本章下面要介绍的是通过动态分配方式,在程序执行期间,通过“申请”分配的动态的存储单元,以及动态分配的存储单元构成的“链表”结构。,9.5.1 链表的概念,例1:利用C语言在计算机中存储三个学生的计算机成绩,如果有定义int a3,则其内存单元分配情况如下:,9.5.1 链表的概念,例2:用链表存储方式来存储三个同学的计算机成绩。,可直观地表示如下:,9.5.2 动态分配函数,1malloc函数函数格式:void*malloc(unsigned int size)函数功能:在内存的动

14、态存储区中分配一个长度为size的存储单元。例1:int*p;long*lp;struct student*head;p=(int*)malloc(2);/*分配一个整型存储单元(占用2个字节),用p指向该存储单元*/lp=(long*)malloc(sizeof(long);/*分配一个长整型存储单元,用lp指向该存储单元,长整型存储单元所占字节数由函数sizeof(long)求得*/head=(struct student*)malloc(sizeof(struct student);/*分配一个struct student结构体类型的存储单元,用head 指向该存储单元*/上述函数siz

15、eof(类型名)求出指定类型的存储单元所占字节数,9.5.2 动态分配函数,2calloc函数函数格式:void calloc(unsigned int n,unsigned int size);函数功能:在内存的动态存储区域中分配n个长度为size的连续存储单元。形参n和size均为无符号整数,n是连续存储单元的个数,size是一个存储单元占用的字节数。函数的返回值为分配的连续存储单元的起始地址;如果分配不成功,则返回值为0。例2:int*p;p=(int*)calloc(3,sizeof(int);/*分配3个连续的存储单元,并将其起始地址赋给整型指针变量p*/,9.5.2 动态分配函数,

16、3free函数函数格式:void free(void*ptr);函数功能:释放由指针变量ptr指向的内存区域。其中,ptr是一个指针变量,指向最近一次调用函数malloc或calloc时所分配的存储空间的首地址。通过函数free将已分配的内存区域交还系统,使系统可以重新对其进行分配。例3:int*p;p=(int*)calloc(3,sizeof(int);free(p);,9.5.3 链表的基本操作,1链表节点的定义链表中的任一个节点都包括两个数据项,一个是节点自身的数据信息,称为节点的数据域,另一个是下一节点的地址值,称为节点的指针域。struct node datatype data;s

17、truct node*next;datatype是数据域的类型,可以是前面所介绍的任意C语言类型。显然,链表节点的指针域存放的地址类型与它自身的类型是相同的。,例1:存储三个同学的计算机成绩的链表存储方式如下:,上述链表中节点的定义如下:struct node int data;struct node*next;链表的头指针定义如下:struct node*head;,9.5.3 链表的基本操作,2链表的基本操作链表的基本操作主要有链表的建立、节点的访问、节点的插入、节点的删除等。(1)链表的建立。链表的建立是一个动态存储空间分配和形成链接关系的过程。用尾插法建立链表的过程如下:1)建立一个空

18、链表,即head=NULL。2)请分配新节点存储单元,对新节点的数据域和指针域赋值。由于新插入的节点总是尾节点,因此,它的指针域的值为空(即NULL)。3)将新节点链接到链表的尾部:4)重复步骤2)3),继续插入新节点直到结束。,例1:存储三个同学的计算机成绩的链表存储方式如下:,上述链表中节点的定义如下:struct node int data;struct node*next;链表的头指针定义如下:struct node*head;,9.5.3 链表的基本操作,例9.4 用链表存储学生的计算机成绩。程序段如下:,struct node*creat()struct node*head,*p,

19、*q;n=0;head=NULL;p=(struct node*)malloc(LEN);scanf(%d,#define NULL 0#define LEN sizeof(struct node)struct node int data;struct node*next;int n;,q,p,(2)链表节点的访问。链表节点的访问过程如下:1)取链表头指针head。2)用一个指针p指向链表的第一个节点,即p=head。3)访问p所指节点。4)移动指针p,使它指向下一节点,即p=p-next。5)重复步骤3)和4),直到指针p为空。,9.5.3 链表的基本操作,例9.5 输出例9.4建立的链表中

20、所有学生的计算机成绩。程序段如下:,#define NULL 0#define LEN sizeof(struct node)struct node int data;struct node*next;void print(struct node*head)struct node*p;p=head;while(p!=NULL)printf(%d,p-data);p=p-next;,p,p,p,(3)链表节点的插入。其操作过程主要有两个子过程:确定插入位置;插入新节点。插入条件的要求主要有以下几种情况:新节点插入在第i个节点之前(或后)。新节点插入在节点数据等于某一指定数据的节点之前(或后)。新

21、节点插入在一个节点数据有序的链表中,保证插入新节点后链表仍然有序。,下面以新节点插入在节点数据等于某一指定数据的节点之前的情况分例介绍节点插入操作的算法。操作过程如下:1)取链表头指针head。2)申请分配新节点存储单元,对新节点的数据域赋值。3)如果head等于NULL,即链表为空,不存在指定数据的节点,则新节点插入到链表中,成为链表中惟一的节点,即将新节点的地址赋给头指针head,赋新节点指针域的值为NULL。4)如果head不等于NULL,用一个指针p指向链表的第一个节点,即p=head,判断p所指节点是否为指定节点,如果不是,移动指针p,使它指向它的下一节点,重复判断过程,直到p所指节

22、点是指定节点或p所指节点的指针域的值为NULL。5)如果p所指节点是指定节点,将新节点插入在p所指节点之前,即p的前一节点的指针域的值为新节点的地址,新节点的指针域的值为p。6)如果p所指节点不是指定节点,但p所指节点的指针域的值为NULL,则链表中不存在指定数据的节点,新节点插入到链尾,即p所指节点之后,赋p所指节点的指针域的值为新节点的地址,新节点指针域的值为NULL。7)返回操作后链表的头指针。,例9.6 在例9.4建立的链表中某一计算机成绩值之前插入一个学生的计算机成绩。其过程示意图:,新结点,指向所搜结点的前驱结点,指向要找的结点,程序段如下:,if(x=p-data)if(p=he

23、ad)s-next=head;head=s;else s-next=p;q-next=s;else s-next=p-next;p-next=s;return(head);,struct node*insert(struct node*head,int x,int y)struct node*p,*q,*s;s=(struct node*)malloc(LEN);s-data=y;if(head=NULL)s-next=head;head=s;return(head);p=head;while(p-data!=x,(4)链表节点的删除。链表节点的删除操作同样包括两个子过程:确定删除节点的位置;

24、删除节点。下面介绍删除节点数据等于某一指定数据的节点的操作过程。1)取链表头指针head。2)如果head等于NULL,即链表为空,不存在指定数据的节点,删除操作失败,输出相关信息。3)如果head不等于NULL,用一个指针p指向链表的第一个节点,即p=head,判断p所指节点是否为指定节点,如果不是,移动指针p,使它指向它的下一节点,重复判断过程,直到p所指节点是指定节点或p所指节点的指针域的值为NULL。4)如果p所指节点是指定节点,删除该节点,即p所指节点指针域的值赋给其前一节点的指针域。5)如果p所指节点不是指定节点,但p所指节点的指针域的值为NULL,则链表中不存在指定数据的节点,删

25、除操作失败,输出相关信息。6)返回操作后链表的头指针。,9.5.3 链表的基本操作,例9.7 在例9.4建立的链表中删除某一指定计算机成绩的节点。,指向要删除结点,指向要删除结点前驱结点,9.5.3 链表的基本操作,程序段如下:#define NULL 0#define LEN sizeof(struct node)struct node int data;struct node*next;,struct node*del(struct node*head,int x)struct node*p,*q;if(head=NULL)printf(该链表是空表。);return(head);p=he

26、ad;while(p-data!=x,9.6.1 共用体类型的定义,其一般形式为:union 标识符 类型名1 成员名1;类型名2 成员名2;类型名n 成员名n;,说明:(1)union是关键字,是共用体类型的标志。(2)标识符是共用体名,是用户自己定义的标识符,与关键字union共同构成共用体类型名。(3)花括号“”中是组成该共用体类型的成员数据项,或称为共用体中的分量,由成员类型和成员名组成。(4)共用体成员的数据类型可以是简单类型、数组、指针或结构等。(5)共用体类型的长度是共用体成员中的最大长度。,9.6.1 共用体类型的定义,例如:如果有定义:union xy char ch;int

27、 a3;float b;);共用体类型union xy的存储单元中各成员占用空间情况如图:则共用体类型union xy的长度是6(占用内存的字节数)。,9.6.2 共用体变量的定义,共用体变量定义的一般形式:共用体类型名 变量名表;共用体变量的定义有如下三种处理方式:(1)先定义共用体类型,再定义共用体变量。例1:union xy char ch;int a3;float b;/*定义共用体类型union xy*/union xy x,y;/*定义x、y为共用体类型union xy的变量*/,9.6.2 共用体变量的定义,(2)在定义共用体类型的同时定义共用体变量。例2:union xy ch

28、ar ch;int a3;float b;x,y;(3)直接定义共用类型变量。例3:union char ch;int a3;float b;x,y;,9.6.3 共用体变量的引用,引用形式如下:共用体变量名.成员名例如:union xy char ch;int a3;float b;x,y;x.ch=m;y.a0=20;,说明:(1)对同一共用体的不同成员进行赋值后,共用体变量中存储的是最后一次成员的赋值。(2)不能直接使用共用体变量名进行输入输出。(3)可以直接使用共用体变量名对一个同类型的共用体变量赋值。(4)共用体变量名可以作为函数参数。(5)不能对共用体变量进行初始化。(6)可以定义

29、共用体类型的数组。(7)可以定义共用体类型的指针,也可以使用共用体类型的指针作函数参数。引用指针指向共用体的成员同样使用运算符“-”,9.7 枚举,所谓枚举,是将具有相同属性的一类数据值一一列举。枚举是一个已命名的一组常量的集合。例如:表示星期的(标识符常量)Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday就是一个枚举。枚举是C语言中的简单类型而非构造类型,它的值域是有穷的,可以一一列举出来,变量的取值只限于列举出来的值的范围。,9.7.1 枚举类型的定义,其形式为:enum 枚举名 标识符1=整型常数,标识符2=整型常数,标识符

30、n=整型常数,;,说明:(1)enum是关键字,是枚举类型的标志。(2)标识符是枚举名,是用户自己定义的标识符,与关键字enum共同构成枚举类型名。(3)花括号“”中的“标识符1,标识符2,标识符n”是所定义枚举类型的全部取值,通常将这些标识符称为“枚举元素”或“枚举常量”。这些标识符是用户定义的标识符,一般是所代表事物的名称。(4)枚举中每个标识符后的结束符是“,”,而不是“;”,最后一个标识符后可省略“,”。(5)如果枚举没有初始化,即省掉“=整型常数”时,则从第一个标识符开始,顺次赋给标识符整型常数0,1,2,。但当枚举中的某个标识符被赋值后(可以赋负数),其后的标识符按依次加1的规则确

31、定其值。,9.7.1 枚举类型的定义,例如:enum weekday Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,9.7.2 枚举变量的定义,枚举变量定义的一般形式:枚举类型名 变量名表;枚举变量的定义有如下三种处理方式:(1)先定义枚举类型,再定义枚举变量。例1:enum weekday Sunday,Monday,Tuesday,Wedneday,Thursday,Friday,Saturday;/*定义枚举类型enum weekday*/enum weekday x,y;/*定义xy为枚举类型enum weekday

32、的变量*/,9.7.2 枚举变量的定义,(2)在定义枚举类型的同时定义枚举变量。例2:enum weekday Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday x,y;,(3)直接定义枚举类型变量。例3:enum Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturdayx,y;,9.7.3 枚举变量的应用,(1)枚举变量取枚举说明结构中的某个标识符常量后,其值可认为是标识符对应的常数。例1:enum weekday Sunday=0,Monday,Tuesday,Wedne

33、day,Thursday,Friday,Saturday x,y;x=Friday;y=Tuesday;即x的值为5,y的值为2。,9.7.3 枚举变量的应用,(2)不能直接给一个枚举变量赋一个整数,但经过强制类型转换后可以实现赋值。例2:x=5;是不合法的。x=(enum weekday)5;是合法的(3)枚举变量的值不能直接输入输出,一般通过下面例3的方式实现。例3:enum weekday Sunday=0,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday x;,int n;scanf(%d,switch(x)case Sunday:pr

34、intf(Sunday);case Monday:printf(Monday);case Tuesday:printf(Tuesday);case Wednesday:printf(Wednesday);case Thursday:printf(Thursday);case Friday:printf(Friday);case Saturday:printf(Saturday);,枚举变量输入,枚举变量输出,9.7.3 枚举变量的应用,(4)枚举值可以进行比较。例4:enum weekday Sunday=0,Monday,Tuesday,Wednesday,Thursday,Friday,S

35、aturday x;if(x=Friday)printf(今天是周末!);if(x Sunday)printf(今天要工作!);,9.8 自定义类型,自定义类型是将一个数据类型定义一个新的名字。自定义类型的格式为:typedef 类型名 标识符;例如:typedef int IN;/*定义整型int的新类型名为IN*/IN x;/*定义IN类型(即int)的变量x*/typedef struct student char name8;int class;char subclass6;float math,phys,chem,engl,biol;ST;/*定义struct student的新类型

36、名为ST*/ST y;/*定义ST类型(即struct student)的变量y*/,9.10 典型试题详解,1设有如下说明语句:struct ex int x;float y;char z;example;则下面的叙述中不正确的是_。A)struct 是结构体类型的关键字B)example是结构体类型名C)x、y、z都是结构体成员名D)struct ex是结构体类型正确答案:B(知识点:结构体类型及结构体变量的定义)试题分析:example是结构体类型的变量名。,9.10 典型试题详解,2设有如下定义:struct ss char name10;int age;char sex;std3,*

37、p=std;下面各输入语句中错误的是_。A)scanf(%d,正确答案:B(知识点:结构体数组、指向结构体数组的指针、结构体变量的引用),9.10 典型试题详解,3设有如下定义:struct sk int a;float b;data;int*p;若要使p指向data中的a域,正确的赋值语句是_。A)p=C)p=&data.aD)*p=data.a正确答案:C(知识点:结构体成员地址的引用、指向结构体成员的指针),9.10 典型试题详解,4以下选项中不能正确把c1定义成结构体变量的是_。A)typedef struct B)struct color c1 int red;int red;int

38、 green;int green;int blue;COLOR int blue;COLOR c1;C)struct colorD)struct int red;int n;int green;int green;int blue;c1;int blue;c1;正确答案:B(知识点:结构体变量的定义、自定义变量),9.10 典型试题详解,5有以下程序:struct s int x,y;data2=10,100,20,200;main()struct s*p=data;printf(%dn,+(p-x);程序运行后的输出结果是_。正确答案:11(知识点:结构体数组、指向结构体数组的指针),9.1

39、0 典型试题详解,6假定建立了以下链表结构,指针p、q分别指向如下图所示的节点,则以下可以将q所指节点从链表中删除并释放该节点的语句组是_。,A)free(q);p-next=q-next;B)(*p).next=(*q).next;free(q);C)q=(*q).next;(*p).next=q;free(q);D)q=q-next;p-next=q;p=p-next;free(q);正确答案:B(知识点:链表的基本操作),9.10 典型试题详解,7有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b,则不能把节点b连接到节点a之后的语句是_。struct node

40、 char data;struct node*next;a,b,*p=,A)a.next=q;B)p.next=正确答案:B(知识点:链表的基本操作),9.10 典型试题详解,8以下程序的输出结果是_。main()union char i2;int k;r;r.i0=2;r.i1=0;printf(%dn,r.k);正确答案:2(知识点:共用体类型),9.10 典型试题详解,9有以下定义和语句,则sizeof(a)的值是_,而sizeof(a.share)的值是_。struct date int day;int month;int year;union int share1;float share2;share;a;正确答案:10 4(知识点:共用体类型、结构体类型、sizeof函数),9.10 典型试题详解,10若要说明一个类型名STP,使得定义语句STP s;等价于char*s;,以下选项中正确的是_。A)typedef STP char*sB)typedef*char STPC)typedef STP*charD)typedef char*STP正确答案:D(知识点:自定义类型)试题分析:要使得定义语句STP s;等价于char*s;,则STP等价于char*,使用自定义类型进行类型名处理为:typedef char*STP。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号