结构类型与联合类型.ppt

上传人:wuy****n92 文档编号:73984163 上传时间:2023-02-23 格式:PPT 页数:104 大小:2.71MB
返回 下载 相关 举报
结构类型与联合类型.ppt_第1页
第1页 / 共104页
结构类型与联合类型.ppt_第2页
第2页 / 共104页
点击查看更多>>
资源描述

《结构类型与联合类型.ppt》由会员分享,可在线阅读,更多相关《结构类型与联合类型.ppt(104页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计(第3版)中国铁道出版社China Railway Publishing House普通高等教育普通高等教育“十一五十一五”国家级规划教国家级规划教材材主主 教教 材:材:C C C C语言程序设计(第三版)语言程序设计(第三版)语言程序设计(第三版)语言程序设计(第三版)书书 号号:ISBN 978-7-113-09512-3 ISBN 978-7-113-09512-3 ISBN 978-7-113-09512-3 ISBN 978-7-113-09512-3 中国铁道出版社中国铁道出版社中国铁道出版社中国铁道出版社 2009 2009 2009 2009年年年年2 2 2

2、2月月月月 第第第第3 3 3 3版版版版配套教材:配套教材:C C C C语言程序设计实验教程语言程序设计实验教程语言程序设计实验教程语言程序设计实验教程书书 号号:ISBN 978-7-113-09513-0ISBN 978-7-113-09513-0ISBN 978-7-113-09513-0ISBN 978-7-113-09513-0 中国铁道出版社中国铁道出版社中国铁道出版社中国铁道出版社 2009 2009 2009 2009年年年年2 2 2 2月月月月 第第第第1 1 1 1版版版版作者电子邮箱:作者电子邮箱:作者电子邮箱:作者电子邮箱:LL 第第第第6 6章章章章 结构类型与

3、联合类型结构类型与联合类型结构类型与联合类型结构类型与联合类型6.1 结构类型与联合类型概述6.3 动态链表6.2 结构类型6.4 联合类型6.5 位域类型6.6 枚举类型结束放映结束放映结束放映结束放映6.1 结构类型与联合类型概述结构类型与联合类型概述结构数据结构数据结构数据结构数据结构能直观地表示客观世界中的许多事物,是由多个不同类型的成员组装而成的复杂数据形态。这些不同类型的成员信息可以表示为基本类型的数据,也可能仍然是复杂的数据,无法直接表示为基本类型的数据,需要通过不断的数据精化,直到可以用基本类型的数据来表达为止。结构类型的每个数据成员都需要不同的名称,为避免同结构类型的结构数据

4、的成员名称冲突,C语言要求表示成员数据项时需要给出结构数据名,结构名与成员数据项名称间以英文园点(.)分隔。例如:例如:学生类型的数据组成如下表所示用结构类型描述上述数据结构如下:用结构类型描述上述数据结构如下:用结构类型描述上述数据结构如下:用结构类型描述上述数据结构如下:typedef struct No no;Name name;Sex sex;Grade grade4;Student;4个成员数据项,分别使用了非基本的数据类型,定义类型如下:typedef char No5;typedef char Name10;typedef char Sex;typedef int Grade;结

5、构数据的内存分配结构数据的内存分配定义一个结构类型的变量,实际上是为结构变量中的每个成员数据项分配内存空间。结构类型的变量所需分配的内存空间大小是结构类型的所有成员变量所需分配空间大小之和,可以使用运算符sizeof(结构变量名)或sizeof(结构类型名)来计算结构类型变量所需分配的空间大小。结构数据的内存分配结构数据的内存分配例如:例如:学生类型的一个变量需要分配的内存大小可以通过sizeof(Student)来计算,sizeof也可以计算其它类型的内存大小,这样学生类型的变量也可以通过sizeof(No)+sizeof(Name)+sizeof(Sex)+sizeof(Grade)*4

6、来计算。联合类型联合类型联合类型联合类型联合类型的定义格式与结构类型相似,但其成员变量的内存分配方式不同。联合类型的变量分配时按最大的成员变量所需内存大小来分配,所有成员变量从同一个内存地址共享内存,因此,通过取址操作&得到的成员变量的地址均相同。下图可帮助读者理解不同成员共享内存的方法:例如例如例如例如:要进行学生情况调查,大学生的调查项目为专业,而中学生的调查项目为身高,其它项目均相同,这时可以使用联合方式来实现。调查表格式如下:C语言可利用联合类型表格式中的共项栏目:专业/身高项目,定义方法如下:typedef struct Name name;.Major_Height mh;Surv

7、ey;typedef char Major10;typedef int Height;typedef union Major major;Height height;Major_Height;结构类型的定义结构类型的定义结构类型的定义结构类型的定义定义结构数据需要先定义结构类型,结构类型分为命名和匿名两种。定义结构类型的格式定义结构类型的格式定义结构类型的格式定义结构类型的格式struct 结构类型名成员定义表 结构变量名表;6.2 结构类型结构类型说明:说明:说明:说明:每个成员变量的定义与一般的变量定义一样,不能后跟初始值并以分号结束,成员变量可以是基本类型也可以构造类型,所有成员变量根据

8、定义的先后顺序分配内存。结构变量名表给出了多个标识符,以逗号分隔,每个标识符说明了一个结构变量,命名的结构类型可以省略结构变量名表,表示先只定义类型以后再使用。使用结构类型定义结构变量的格式使用结构类型定义结构变量的格式使用结构类型定义结构变量的格式使用结构类型定义结构变量的格式struct 结构类型名 结构变量名表;说明:说明:说明:说明:结构类型名是已定义的命名结构类型的名称 例如:例如:例如:例如:struct student char no6;char name10;char sex;int grade4;a=02001,Tom,M,90,85,95,80;struct student

9、 b=02002,Jane,M,80,75,95,60;使用使用使用使用typedeftypedef命令可以命名一个结构类型,这命令可以命名一个结构类型,这命令可以命名一个结构类型,这命令可以命名一个结构类型,这种类型名不需要带上保留字种类型名不需要带上保留字种类型名不需要带上保留字种类型名不需要带上保留字structstruct就可以使用。就可以使用。就可以使用。就可以使用。格式如下:格式如下:格式如下:格式如下:typedef struct 成员定义表 结构类型名;说明:说明:说明:说明:与前面的结构类型定义方式不同,该命令只能定义结构类型不能同时定义结构变量,遵循先定义结构类型再定义结构

10、变量的顺序。例如:例如:例如:例如:typedef char No6;typedef char Name10;typedef char Sex;typedef int Grade;typedef struct No no;Name name;Sex sex;Grade grade4;Student;Student a=02001,Tom,M,90,85,95,80,b=02002,Jane,M,80,75,95,60;匿名结构类型匿名结构类型匿名结构类型匿名结构类型结构类型匿名可以建立结构类型,只是该结构类型建立后只能用一次。如果使用匿名的结构类型定义了变量,再次用同样的结构定义了另一个变量,

11、这时,两次定义会构建两种不同的结构类型,即使这两个变量结构上完全相同,但类型却仍是不一样的。例如:例如:例如:例如:struct char no6;char name10;a;struct char no6;char name10;b;结构类型的基本操作结构类型的基本操作结构类型的基本操作结构类型的基本操作1.1.使用结构变量中的成员使用结构变量中的成员使用结构变量中的成员使用结构变量中的成员结构变量中的成员变量的引用名格式:结构变量中的成员变量的引用名格式:结构变量中的成员变量的引用名格式:结构变量中的成员变量的引用名格式:结构变量名.成员变量名说明:说明:说明:说明:结构变量名是已定义的标

12、识符,其类型中必须包含该成员变量名。成员变量名依然可以是构造类型,由于成员运算符.优先级最高,使用时该引用名不用括号界定,直接像普通的变量名一样使用。该引用名可以使用结构变量内存空间中的一个数据域空间。例如:例如:例如:例如:Student a;int i;for(i=1;i=4;i+)printf(“%d”,a.gradei);【例【例【例【例6.16.1】编写程序完成结构变量的编写程序完成结构变量的输入输出(一)输入输出(一)#include#include typedef struct int typedef struct int month,day,year;Date;month,da

13、y,year;Date;typedef struct typedef struct char no6;char no6;char name10;char name10;Date birthday;Date birthday;Student;Student;Student stud;Student stud;/*/*全局变量全局变量*/*/void main()void main()char ch;char ch;do do printf(Function Menun);printf(Function Menun);printf(=n);printf(=n);printf(1.Input Dat

14、an);printf(1.Input Datan);printf(2.Output Datan);printf(2.Output Datan);printf(0.Exitn);printf(0.Exitn);ch=getch();ch=getch();switch(ch)switch(ch)case 1:readdata();break;case 1:readdata();break;/*/*输入数据到结构变量输入数据到结构变量输入数据到结构变量输入数据到结构变量stud*/stud*/case 2:writedata();break;case 2:writedata();break;/*/*

15、显示结构变量显示结构变量显示结构变量显示结构变量studstud中数据中数据中数据中数据*/*/while(ch!=0);while(ch!=0);【例【例【例【例6.16.1】编写程序完成结构变量的输入输出(二)编写程序完成结构变量的输入输出(二)void readdata()void readdata()int y,m,d;int y,m,d;printf(Please input student detail:n);printf(Please input student detail:n);printf(=);printf(=);printf(Student NO:);scanf(%s,

16、stud.no);printf(Student NO:);scanf(%s,stud.no);printf(Student Name:);scanf(%s,stud.name);printf(Student Name:);scanf(%s,stud.name);printf(Birthday(Year,Month,Day):);printf(Birthday(Year,Month,Day):);scanf(%d,%d,%d,&y,&m,&d);scanf(%d,%d,%d,&y,&m,&d);=y;=y;=m;=m;=d;=d;printf(OK!);printf(OK!);【例【例【例【例6

17、.16.1】编写程序完成结构变量的输入输出(三)编写程序完成结构变量的输入输出(三)void writedata()void writedata()int y,m,d;int y,m,d;printf(Student detail:n);printf(Student detail:n);printf(=);printf(=);printf(Student NO:%sn,stud.no);printf(Student NO:%sn,stud.no);printf(Student Name:%sn,stud.name);printf(Student Name:%sn,stud.name);y=;y

18、=;m=;m=;d=;d=;printf(Birthday:%d-%d-%dn,y,m,d);printf(Birthday:%d-%d-%dn,y,m,d);printf(=n);printf(=n);结构类型的基本操作结构类型的基本操作结构类型的基本操作结构类型的基本操作2.2.使用结构变量的整体使用结构变量的整体使用结构变量的整体使用结构变量的整体结构变量不仅可以提取成员变量使用,还可以作为一个整体来使用,作为整体使用的操作有:赋值、取址。结构变量的赋值结构变量的赋值结构变量的赋值结构变量的赋值仅限于两个结构变量之间进行。从内部机制来看,结构变量的赋值是按顺序复制结构变量的分配的内存空间

19、中的每个字节,全部字节的内容复制完成则两个结构变量复制完成,从外部直观来看,赋值是针对变量中的每个成员变量进行的,如果成员变量是基本类型则直接赋值,如果成员变量是构造类型则为分情况考虑:数组类型的成员变量会依次赋值每个数组元素;指针类型的成员变量只赋值变量中的指针值,不会赋值间接访问到的单元;结构类型的成员变量则进入结构中赋值成员变量的每个成员。结构类型的基本操作结构类型的基本操作结构类型的基本操作结构类型的基本操作 结构变量的取址结构变量的取址结构变量的取址结构变量的取址与普通变量的取址含义一样,取出该变量在内存中的开始地址作为结果,结构变量的地址称为结构指针,结构指针可以进行指针运算,也可

20、以间接访问结构单元,还可以间接访问结构单元中的成员变量。【例【例【例【例6.26.2】结构变量的整体操作(一)】结构变量的整体操作(一)】结构变量的整体操作(一)】结构变量的整体操作(一)#include#include struct student1 struct student1 char no6;char no6;char name10;char name10;int grade3;int grade3;struct student2 struct student2 char*no;char*no;char*name;char*name;struct struct int year;in

21、t year;int month;int month;int day;int day;birthday;birthday;【例【例【例【例6.26.2】结构变量的整体操作(二)】结构变量的整体操作(二)】结构变量的整体操作(二)】结构变量的整体操作(二)void main()void main()struct student1 a=02001,tom,70,80,60,b;struct student1 a=02001,tom,70,80,60,b;struct student2 c=02002,john,1988,7,12,d;struct student2 c=02002,john,198

22、8,7,12,d;printf(No:%snName:%sn,a.no,a.name);printf(No:%snName:%sn,a.no,a.name);printf(Grades:%d%d%dn,a.grade0,a.grade1,a.grade2);printf(Grades:%d%d%dn,a.grade0,a.grade1,a.grade2);b=a;b=a;printf(No:%snName:%sn,b.no,b.name);printf(No:%snName:%sn,b.no,b.name);printf(Grades:%d%d%dn,b.grade0,b.grade1,b.g

23、rade2);printf(Grades:%d%d%dn,b.grade0,b.grade1,b.grade2);printf(No:%snName:%sn,c.no,c.name);printf(No:%snName:%sn,c.no,c.name);printf(Birthday:%d,);printf(Birthday:%d,);printf(%d%);printf(%d%);d=c;d=c;printf(No:%snName:%sn,d.no,d.name);printf(No:%snName:%sn,d.no,d.name);printf(Birthday:%d,);printf(B

24、irthday:%d,);printf(%d%);printf(%d%);printf(%p,%pn,a.no,b.no);printf(%p,%pn,a.no,b.no);printf(%p,%pn,c.no,d.no);printf(%p,%pn,c.no,d.no);结构参数结构参数结构参数结构参数函数的参数传递涉及到形参和实参,形参是设计函数时提供的一种局部变量,在函数调用时自动生成,调用结束时自动释放,实参是主程序调用函数时提供给函数处理的原始数据值,可以是常数、变量或表达式而且必须与对应位置的形参类型相同。值传递方式函数直接使用形参变量,地址传递方式函数间接使用形参变量,即通过主程

25、序提供的地址实参找到所指向的内存单元来访问。例如,int型实参传递给形参的是实参表达式计算得到的int型值,函数直接使用该形参变量,不会使用到函数之外的内存空间;数组实参使用了数组名,数组名代表了数组第一元素的地址,作为实参传递给函数中的形参变量,函数间接使用形参变量找到数组空间并访问。【例6.3】结构数据的比较相等。(一)#include#include#include typedef struct int year;int month;int day;Birthday;typedef struct char*no;char*name;Birthday birthday;Student;【例

26、6.3】结构数据的比较相等。(二)int compareB(Birthday a,Birthday b)if(a.year=b.year&a.month=b.month&a.day=b.day)return 1;else return 0;int compareS(Student a,Student b)if(strcmp(a.no,b.no)=0)if(strcmp(a.name,b.name)=0)if(compareB(a.birthday,b.birthday)return 1;return 0;【例6.3】结构数据的比较相等。(三)void main()Student a=02001

27、,tom,1988,10,6,b;b.no=(char*)malloc(6);strcpy(b.no,02001);b.name=(char*)malloc(10);strcpy(b.name,tom);=1988;=10;=6;if(compareS(a,b)printf(compare a with b is truen);else printf(compare a with b is falsen);结构指针结构指针结构指针结构指针 结构指针是结构类型为基类型的指针类型,也就是存放结构类型数据的内存单元的开始地址。结构数据存放在内存时是按定义的先后顺序连续存放每个成员变量的数据,第一个定

28、义的成员变量的地址也就是结构指针。结构指针变量的定义结构指针变量的定义结构指针变量的定义结构指针变量的定义struct 结构类型名成员定义表*结构指针变量名=初始指针值;结构指针的说明:结构指针的说明:结构指针的说明:结构指针的说明:结构类型名是用户定义的标识符,如果结构类型名已经定义,则后面没有成员定义表部分。结构指针可以参加各种指针运算,也可以间接访问所指向的结构类型的内存单元。结构指针加/减一个整数n表示指针向下/向上调整到第n个结构单元,两个同类结构的指针相减表示两个地址之间包含的结构单元的个数。间接访问结构指针所指向的结构单元的整体仍然使用*号运算符,间接访问指针所指向的结构单元的成

29、员变量可以先使用*号运算符,再使用园点(.)运算符。【例6.4】结构指针的使用#include void main()struct student char*no;char*name;a,*p=&a,*q=NULL;q=p;(*q).no=02001;(*q).name=tom;printf(No:%snName:%sn,a.no,a.name);间接访问结构指针指向的结构单元中的成员变量格式比较繁琐,C语言提供了一种更为简单的引用机制。结构指针变量间接访问成员变量的格式结构指针变量间接访问成员变量的格式结构指针变量间接访问成员变量的格式结构指针变量间接访问成员变量的格式结构指针变量-成员变量

30、名说明:说明:说明:说明:结构指针变量的基类型必须包含成员变量名,两者中间使用减号(-)和大于号()分隔,两个符号间不能有空,称为箭头或间接成员运算符,与成员运算符(.)具有相同的最高优先级。其含义是引用结构指针变量所指向的结构变量中的成员变量。例如:例如:例如:例如:struct student char*no;char*name;a,*p=&a;p-no=02001;p-name=tom;【例【例【例【例6.56.5】结构指针的类型转换】结构指针的类型转换】结构指针的类型转换】结构指针的类型转换#include#include void main()void main()struct st

31、udent1 struct student1 char*no;char*no;char*name;char*name;a;a;struct student2 struct student2 char*no;char*no;char*name;char*name;*p=(struct student2*)&a;*p=(struct student2*)&a;p-no=02001;p-no=02001;p-name=tom;p-name=tom;printf(No:%snName:%sn,a.no,a.name);printf(No:%snName:%sn,a.no,a.name);结构指针参数结

32、构指针参数结构指针参数结构指针参数 结构指针也可以作为函数的参数类型。将主程序中的结构变量的地址作为实参传递到函数中的结构指针形参变量,函数执行时间接访问所指向的结构变量。由于形参变量只是结构指针类型,与结构类型参数相比可以节省不少建立形参变量的堆栈内存空间,但修改主程序的变量会带来副作用。【例【例6.66.6】用结构指针形参实现例】用结构指针形参实现例6.36.3(一)(一)#include#include#include#include#include#include typedef struct typedef struct int year;int year;int month;int

33、 month;int day;int day;Birthday;Birthday;typedef struct typedef struct char*no;char*no;char*name;char*name;Birthday birthday;Birthday birthday;Student;Student;【例【例6.66.6】用结构指针形参实现例】用结构指针形参实现例6.36.3(二)(二)int compareB(Birthday*p,Birthday*q)int compareB(Birthday*p,Birthday*q)if(p-year=q-year&p-month=q-

34、month&p-if(p-year=q-year&p-month=q-month&p-day=q-day)return 1;day=q-day)return 1;else return 0;else return 0;int compareS(Student*p,Student*q)int compareS(Student*p,Student*q)if(strcmp(p-no,q-no)=0)if(strcmp(p-no,q-no)=0)if(strcmp(p-name,q-name)=0)if(strcmp(p-name,q-name)=0)if(compareB(&p-birthday,&

35、q-birthday)if(compareB(&p-birthday,&q-birthday)return 1;return 1;return 0;return 0;【例【例6.66.6】用结构指针形参实现例】用结构指针形参实现例6.36.3(三)(三)void main()void main()Student a=02001,tom,1988,10,6,b;Student a=02001,tom,1988,10,6,b;b.no=(char*)malloc(6);strcpy(b.no,02001);b.no=(char*)malloc(6);strcpy(b.no,02001);b.nam

36、e=(char*)malloc(10);strcpy(b.name,tom);b.name=(char*)malloc(10);strcpy(b.name,tom);=1988;=1988;=10;=10;=6;=6;if(compareS(&a,&b)printf(compare a with b is truen);if(compareS(&a,&b)printf(compare a with b is truen);else printf(compare a with b is falsen);else printf(compare a with b is falsen);动态结构变量动

37、态结构变量动态结构变量动态结构变量 动态结构变量是采用动态分配命令分配的结构类型的内存空间结构指针变量可以指向该动态结构变量。要访问动态结构变量必须间接访问结构指针变量,可以使用间接访问运算(*)来访问动态结构变量的整体,也可以使用间接成员运算(-)来访问动态结构变量的成员变量。【例【例6.7】结构变量的动态空间的创建与复制】结构变量的动态空间的创建与复制#include#include#include struct student char*no;char*name;void copydata(struct student*src,struct student*dest)/*dest为二级指

38、针为二级指针*/struct student*temp=(struct student*)malloc(sizeof(struct student);/*1*/temp-no=(char*)malloc(strlen(src-no)+1);/*2*/temp-name=(char*)malloc(strlen(src-name)+1);strcpy(temp-no,src-no);/*3*/strcpy(temp-name,src-name);*dest=temp;/*4*/【例6.7】结构变量的动态空间的创建与复制(续)void main()struct student a=02001,he

39、nry,*p;copydata(&a,&p);printf(No:%snName:%sn,p-no,p-name);结构数组结构数组结构数组结构数组结构数组是以结构数据为成员的数组。结构数组的每个成员是同类型的结构数据,所有数据成员按编号大小分配在一块连续的内存空间,编号亦称下标以零开始,是访问指定数组成员的依据。一维结构数组变量的定义一维结构数组变量的定义一维结构数组变量的定义一维结构数组变量的定义struct 结构类型名成员定义表一维结构数组变量名数组大小=初始值;结构数组结构数组结构数组结构数组说明:说明:说明:说明:初始值是以花括号界定的一批结构数据值,按编号顺序为每个结构数组成员初始

40、化,若提供的结构数据值少于数组大小,则多出的数组元素使用默认值初始化:数值和字符型成员初始化为零,指针型成员初始化为NULL,字符串型成员初始化为空串,其它构造类型类似地使用默认值初始化。数组大小可以不写,只保留空的方括号,这时,后面的初始值中结构数据值的个数就是数组的大小。【例【例6.8】结构数组的初始化】结构数组的初始化#include struct student char no6;char name10;int grade3;void main()struct student a5=02001,tom,80,70,60,02002,john,70,90,80 ;int i,j;for(

41、i=0;i=4;i+)printf(No:%stName:%sn,ai.no,ai.name);printf(Grades:n);for(j=0;j=2;j+)printf(%dn,ai.gradej);结构数组的使用结构数组的使用结构数组的使用结构数组的使用下面通过一个班级学生管理的示例来介绍结构数组的使用方法。一个班级的学生是以学生为元素的数组,定义方法与例6.8相似,通常可以对班级学生完成一系列管理工作。【例6.9】编程排序班级学生#include typedef struct char no6;char name10;int grade3;Student;【例【例6.9】编程排序班级学

42、生(二)】编程排序班级学生(二)int compareS(Student a,Student b)int i,asum=0,bsum=0;for(i=0;i=2;i+)asum+=a.gradei;bsum+=b.gradei;return asum-bsum;void sort(Student s,int num)Student temp;int i,j;for(i=0;i=num-2;i+)for(j=i+1;j0)temp=si;si=sj;sj=temp;【例【例【例【例6.96.9】编程排序班级学生(三)】编程排序班级学生(三)】编程排序班级学生(三)】编程排序班级学生(三)void

43、 main()void main()Student a30=02001,tom,80,70,60,Student a30=02001,tom,80,70,60,02002,john,70,90,80,02002,john,70,90,80,02003,henry,60,65,80,02003,henry,60,65,80,02004,susan,60,65,80,02004,susan,60,65,80,02005,mike,90,65,90 02005,mike,90,65,90 ;int i,j,sum;int i,j,sum;sort(a,5);sort(a,5);for(i=0;i=4

44、;i+)for(i=0;i=4;i+)printf(No:%stName:%sn,ai.no,ai.name);printf(No:%stName:%sn,ai.no,ai.name);printf(Sum of Grades:);printf(Sum of Grades:);for(j=0,sum=0;j=2;j+)sum+=ai.gradej;for(j=0,sum=0;j=2;j+)sum+=ai.gradej;printf(%dn,sum);printf(%dn,sum);结构数组的使用结构数组的使用如果需要在班级中增加或减少学生,可以在上例中增如果需要在班级中增加或减少学生,可以在上

45、例中增加函数即可。加函数即可。【例【例6.106.10】编程增删班级学生(一)】编程增删班级学生(一)#include#include#include#include typedef struct typedef struct char no6;char no6;char name10;char name10;int grade3;int grade3;Student;Student;【例【例【例【例6.106.10】编程增删班级学生(二)】编程增删班级学生(二)】编程增删班级学生(二)】编程增删班级学生(二)int compareSN(Student a,Student b)int comp

46、areSN(Student a,Student b)if(strcmp(a.no,b.no)=0)return 1;if(strcmp(a.no,b.no)=0)return 1;else return 0;else return 0;int insertS(Student s,int*pnum)int insertS(Student s,int*pnum)int i;int i;Student x;Student x;if(*pnum=30)return 0;if(*pnum=30)return 0;printf(Student NO:);scanf(%s,x.no);printf(Stud

47、ent NO:);scanf(%s,x.no);printf(Student Name:);scanf(%s,x.name);printf(Student Name:);scanf(%s,x.name);printf(Student Grades:);printf(Student Grades:);scanf(%d%d%d,&x.grade0,&x.grade1,&x.grade2);scanf(%d%d%d,&x.grade0,&x.grade1,&x.grade2);for(i=0;i=*pnum-1;i+)for(i=0;i=*pnum-1;i+)if(compareSN(si,x)re

48、turn 0;if(compareSN(si,x)return 0;s*pnum=x;s*pnum=x;(*pnum)+;(*pnum)+;return 1;return 1;【例【例【例【例6.106.10】编程增删班级学生(三)】编程增删班级学生(三)】编程增删班级学生(三)】编程增删班级学生(三)int deleteS(Student s,int*pnum)int deleteS(Student s,int*pnum)int i;int i;Student x;Student x;if(*pnum=0)return 0;if(*pnum=0)return 0;printf(Student

49、 NO:);scanf(%s,x.no);printf(Student NO:);scanf(%s,x.no);for(i=0;i=*pnum-1;i+)for(i=0;i=*pnum-1;i+)if(compareSN(si,x)break;if(compareSN(si,x)break;if(i=*pnum)if(i=*pnum)return 0;return 0;for(;i=*pnum-2;i+)for(;i=*pnum-2;i+)si=si+1;si=si+1;(*pnum)-;(*pnum)-;return 1;return 1;void displayS(Student s,in

50、t num)void displayS(Student s,int num)int i,j;int i,j;for(i=0;i=num-1;i+)for(i=0;i=num-1;i+)printf(No:%stName:%sn,si.no,si.name);printf(No:%stName:%sn,si.no,si.name);printf(Grades:);printf(Grades:);for(j=0;j=2;j+)for(j=0;j=2;j+)printf(%d,si.gradej);printf(%d,si.gradej);printf(n);printf(n);【例【例【例【例6.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com