《新编C语言程序设计教程》课件第9章.ppt

上传人(卖家):momomo 文档编号:7904146 上传时间:2024-09-03 格式:PPT 页数:98 大小:277KB
下载 相关 举报
《新编C语言程序设计教程》课件第9章.ppt_第1页
第1页 / 共98页
《新编C语言程序设计教程》课件第9章.ppt_第2页
第2页 / 共98页
《新编C语言程序设计教程》课件第9章.ppt_第3页
第3页 / 共98页
《新编C语言程序设计教程》课件第9章.ppt_第4页
第4页 / 共98页
《新编C语言程序设计教程》课件第9章.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、第 9章 结构体类型与共用体类型 第第 9章章 结构体类型与共用体类型结构体类型与共用体类型 9.1 结构体类型结构体类型 9.2 结构体数组结构体数组 9.3 共用体类型共用体类型 9.4 枚举类型枚举类型 9.5 程序设计举例程序设计举例 第 9章 结构体类型与共用体类型 9.1 结构体类型结构体类型 9.1.1 结构体类型的定义结构体类型的定义 结构体类型定义用关键字struct标识,形式为:struct 标识符 成员表;第 9章 结构体类型与共用体类型 例如,定义结构体类型,描述下列数据。(1)学生情况,包含学生的学号、姓名、性别、年龄、C语言课程成绩:struct studentin

2、t no;/*学号*/char name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float cscore;/*C成绩*/;第 9章 结构体类型与共用体类型 如考虑30门课程成绩,加上总成绩与平均成绩,可作如下定义:struct studentint no;/*学号*/char name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float score31;/*30门课程成绩*/float tcj,acj;/*总成绩,平均成绩*/;第 9章 结构体类型与共用体类型 (2)个人数据,包含姓名、性别、年龄、身高、体重、住址:struct

3、 personchar name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float height;/*身高*/float weight;/*体重*/char add40;/*住址*/;第 9章 结构体类型与共用体类型(3)平面上的点:struct point2float x;/*横坐标*/float y;/*纵坐标*/;如考虑空间中的点,可作如下定义:struct point3float x;/*X坐标*/float y;/*Y坐标*/float z;/*Z坐标*/;第 9章 结构体类型与共用体类型(4)日期,包括年、月、日:struct dateint ye

4、ar;/*年*/month;/*月*/day;/*日*/;如考虑时间,可作如下定义:struct timeint hh;/*时*/int mm;/*分*/int ss;/*秒*/;第 9章 结构体类型与共用体类型(5)复数:struct complexfloat re;/*实部*/float ie;/*虚部*/;第 9章 结构体类型与共用体类型(6)三角形:struct sjx float a,b,c;/*三边*/;第 9章 结构体类型与共用体类型 9.1.2 结构体变量的定义结构体变量的定义定义结构体变量有三种方法。(1)先定义结构体类型,再定义结构体变量。形式为:struct 标识符成员表

5、;或定义为:struct 标识符 变量表;第 9章 结构体类型与共用体类型 例如,对以上定义的结构体类型,我们可以定义如下一些结构体变量:struct student zhang;/*张同学情况*/struct person p100;/*100个人的数据*/struct point2 p1,p2;/*平面上的两个点*/struct point3 po1,po2;/*空间上的两个点*/第 9章 结构体类型与共用体类型 (2)定义结构体类型的同时定义结构体变量。形式为:struct 标识符 成员表 变量表;例如,对以上定义的结构体变量,我们可以在定义结构体类型的同时定义如下:struct stu

6、dent int no;char name8;char sex;int age;float cscore;zhang;/*张同学情况*/第 9章 结构体类型与共用体类型 struct personchar name8;char sex;int age;float height;float weight;char add40;p100;/*100个人的数据*/第 9章 结构体类型与共用体类型 struct point2 float x;float y;p1,p2;/*平面上的两个点*/struct point3 float x;float y;float z;po1,po2;/*空间上的两个点*

7、/第 9章 结构体类型与共用体类型 struct dateint year;/*年*/int month;/*月*/int day;/*日*/date;/*某年某月某日*/第 9章 结构体类型与共用体类型 (3)直接定义结构体变量。形式为:struct 成员表 变量表;直接定义结构体变量,在关键字struct后无标识符,不出现结构体名,仅给出成员表及变量表。例如,对以上定义的结构体变量,我们可以直接定义如下:第 9章 结构体类型与共用体类型 struct int no;char name8;char sex;int age;float cscore;zhang;/*张同学情况*/第 9章 结构

8、体类型与共用体类型 structchar name8;char sex;int age;float height;float weight;char add40;p100;/*100个人的数据*/第 9章 结构体类型与共用体类型 structfloat x;float y;p1,p2;/*平面上的两个点*/struct float x;float y;float z;po1,po2;/*空间上的两个点*/第 9章 结构体类型与共用体类型 struct int year;/*年*/int month;/*月*/day;/*日*/date;/*某年某月某日*/第 9章 结构体类型与共用体类型 如果

9、重命名了结构体类型,则可以用新类型名来定义结构体变量。例如:typedef structchar name8;char sex;int age;float height;float weight;char add40;persont;/*将结构体类型命名为persont*/persont p100;/*100个人的数据*/第 9章 结构体类型与共用体类型 9.1.3 结构体变量的引用结构体变量的引用 结构体的分量称为字段变量。字段变量通过结构体变量名、成员名(字段名)与点运算来描述。字段变量的形式为:结构体变量名.成员名 例如:(1)struct student类型变量zhang,其所有分量如

10、下:zhang.no,zhang.name,zhang.sex,zhang.age,zhang.cscore (2)struct point2类型变量p1,其所有分量如下:p1.x,p1.y (3)struct point2类型变量p2,其所有分量如下:p2.x,p2.y 第 9章 结构体类型与共用体类型 说明:(1)字段变量相当于相应成员类型的变量,它存取相应类型数据,并进行相应类型数据的运算操作。例如,上面例子中的zhang.no相当于整型变量,zhang.name相当于字符数组型变量,zhang.sex相当于字符型变量,zhang.age、zhang.cscore 相当于整型变量,p1.

11、x、p1.y相当于实型变量。(2)对有的分量,其类型本身又是复杂类型,可进一步表示其相应分量。例如,zhang.name是一字符数组,其相应分量是zhang.name0、zhang.name7。(3)通过地址运算符可引用结构体变量的成员地址,也可以引用结构体变量的地址。结构体变量的地址主要用作函数的参数。(4)在新标准C语言中,赋值运算可以整体引用结构体变量,相同类型结构体变量之间可以进行整体赋值。第 9章 结构体类型与共用体类型 9.1.4 结构体变量的初始化结构体变量的初始化 初始化格式:存储类别 struct 结构体名成员表 结构体变量=初始化数据表;初始化数据表是相应成员的初值表。第

12、9章 结构体类型与共用体类型 例如:(1)extern struct student int no;char name8;int age;float cscore;zhang=9901,zhangsan,m,19,95;即zhang.no初值为9901,zhang.name初值为zhangsan,zhang.sex初值为m,zhang.age初值为19,zhang.cscore初值为95。第 9章 结构体类型与共用体类型(2)static struct point2float x;float y;p1=2.5,19.8;即p1.x初值为2.5,p1.y初值为19.8。第 9章 结构体类型与共用

13、体类型 例例9-1 求某同学上学期八门课程的总成绩与平均成绩。算法提示:(1)八门课程的成绩、总成绩与平均成绩都是某同学的,我们用结构体来描述。(2)整体操作可转化成对各分量进行。第 9章 结构体类型与共用体类型 程序如下:/*程序9-1,求某同学的总成绩与平均成绩*/main()struct st char xm8;float cj9;float tcj,acj;stu;/*定义结构体量stu*/int i;scanf(%s,stu.xm);/*输入*/第 9章 结构体类型与共用体类型 for(i=1;i=8;i+)scan(%f,&stu.cji);stu.tcj=0.0;/*求总成绩*/

14、for(i=1;i=8;i+)stu.tcj+=stu.cji;stu.acj=stu.tcji/8;/*求平均成绩*/printf(%s的总成绩=%6.2f,平均成绩=%6.2f,stu.tcj,stu.acj);/*输出*/输入数据:CHEN 80 86 79 98 88 72 96 66运行结果:CHEN的总成绩=577.00,平均成绩=72.13 第 9章 结构体类型与共用体类型 例例9-2 求平面上两点之间的距离。算法提示:(1)点用结构体描述。(2)整体操作转化成对各分量进行。第 9章 结构体类型与共用体类型/*程序9-2,求平面上两点之间的距离*/main()struct poi

15、ntfloat x;float y;p1,p2;float d;printf(请输入第一点的坐标:);scanf(%f,%f,&p1.x,&p1.y);printf(请输入第二点的坐标:);scanf(%f,%f,&p2.x,&p2.y);d=sqrt(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);printf(两点之间的距离=%8.3f,d);第 9章 结构体类型与共用体类型 运行结果:请输入第一点的坐标:1,1请输入第二点的坐标:3,3两点之间的距离=2.828 第 9章 结构体类型与共用体类型/*程序9-3,复数的加减运算*/main()s

16、truct complexfloat re;float ie;x,y;/*输入变量*/struct complex s1,s2;/*输出变量*/printf(请输入第一个复数的实部,虚部:);scanf(%f,%f,&x.re,&x.ie);例例9-3 复数的加减运算。算法提示:(1)复数用结构体描述。(2)整体操作转化成对各分量进行。第 9章 结构体类型与共用体类型 printf(请输入第二个复数实部,虚部:);scanf(%f,%f,&y.re,&y.ie);s1.re=x.re+y.re;/*求和*/s1.ie=x.ie+y.ie;s2.re=x.re-y.re;/*求差*/s2.ie=

17、x.ie-y.ie;printf(所求复数的和=%8.3f+%8.3f i n,s1.re,s1.ie);printf(所求复数的差=%8.3f+%8.3f i n,s2.re,s2.ie);第 9章 结构体类型与共用体类型 运行结果:运行结果:请输入第一个复数的实部,虚部:3.2,4.3请输入第二个复数实部,虚部:2.1,3.1所求复数的和=5.3+7.5 i所求复数的差=1.1+1.2 i 第 9章 结构体类型与共用体类型 9.1.5 结构体作函数参数结构体作函数参数 例例 9 4 将例9-2中求平面上两点之间的距离改用函数实现。struct pointfloat x;float y;fl

18、oat p1p2(p1,p2)/*求平面上两点之间距离的函数*/struct point p1,p2;float d;d=sqrt(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);return(d);第 9章 结构体类型与共用体类型 例例 9 5 将例9-3中复数的加减运算改用函数实现。/*程序9-5,采用函数实现复数的加减运算*/struct complexfloat re;float ie;main()struct complex x,y;struct complex s1,s2;struct complex csum();/*调用函数申明*/

19、struct complex csub();printf(请输入第一个复数的实部,虚部:);scanf(%f,%f,&x.re,&x.ie);printf(请输入第二个复数实部,虚部:);scanf(%f,%f,&y.re,&y.ie);s1=csum(x,y);/*调用函数求和*/s2=csub(x,y);/*调用函数求差*/第 9章 结构体类型与共用体类型 printf(所求复数的和=%8.3f+%8.3f i n,s1.re,s1.ie);printf(所求复数的差=%8.3f+%8.3f i n,s2.re,s2.ie);struct complex csum(xx,xy)/*求两个复

20、数和的函数*/struct complex xx,xy;struct complex t;t.re=xx.re+xy.re;t.ie=xx.ie+xy.ie;return(t);struct complex csub(xx,xy)/*求两个复数差的函数*/struct complex xx,xy;struct complex t;t.re=xx.re-xy.re;t.ie=xx.ie-+xy.ie;return(t);第 9章 结构体类型与共用体类型 9.1.6 嵌套结构体嵌套结构体 例如,在描述个人数据时,假如除了年龄,还需描述出生日期。我们需在前面的定义中增加一日期结构体成员,形成嵌套结构

21、体类型person。struct dateint year;month;day;struct personchar name8;char sex;int age;struct date birthday;/*增加的结构体成员*/float height;float weight;char add40;第 9章 结构体类型与共用体类型 我们也可采用如下的嵌套结构体形式:struct personchar name8;char sex;int age;struct dateint year;month;day;birthday;/*增加的结构体成员*/float height;float weig

22、ht;char add40;第 9章 结构体类型与共用体类型 对于嵌套结构体,其最终成员需用多级点运算完成描述,其它处理同前所述。例如:struct person zhou;出生年份为zhou.birthday.year,出生月份为zhou.birthday.month,出生日期为zhou.birthday.day。结构体还可以自己嵌套自己,成为递归结构体,这将在第10章10.5节中涉及。第 9章 结构体类型与共用体类型 9.2 结构体数组结构体数组 结构体数组的定义与结构体变量的定义一样有以下三种形式:(1)Struct 标识符 成员表;struct 标识符 数组名常量;(2)struct

23、标识符 成员表 数组名常量;(3)struct 成员表 数组名常量;第 9章 结构体类型与共用体类型 例如,100个同学的情况,我们可以定义结构体数组allst描述:struct studentint no;char name8;char sex;int age;float score31;float tcj,acj;allst100;第 9章 结构体类型与共用体类型 对结构体数组allst的操作要转化成对allsti进行操作,而allsti的操作要转化成对allsti.no、allsti.name、allsti.sex、allsti.age、allsti.score、allsti.tcj、a

24、llsti.acj进行操作。allsti.no、allsti.name、allsti.sex、allsti.age、allsti.score、allsti.tcj、allsti.acj相当于对应基类型的量。第 9章 结构体类型与共用体类型 例例 9 6 用结构体数组处理全班50个同学的C语言课程成绩。/*程序9-6,用结构体数组处理C语言成绩,排序输出*/define STT struct studentSTTchar xm8;float c;main()STT cs51;/*存放50个同学的姓名、C成绩*/int i;int flag;STT t;/*排序时用于交换数据*/for(i=1;i

25、 50;i+)/*输入50个同学的姓名、C成绩*/第 9章 结构体类型与共用体类型 scanf(%s%f,&csi.xm,&csi.c);do /*冒泡排序*/flag=1;for(i=1;i csi.c)t=csi;csi=csi+1;csi+1=t;flag=0;while(!flag);printf(排序后的C语言成绩如下:n);/*输出*/printf(姓名 分数 名次n);for(i=1;i 50;i+)printf(%8s%6.1f%6dn,csi.xm,csi.c,i);第 9章 结构体类型与共用体类型 例例 9-7 假设有5个候选人,有20人参加投票,规定只能在5个候选人中选一

26、个,多选或选这5人以外者均为废票。试用结构体数组编写程序,统计出5位候选人各人所得票数。算法提示:(1)用结构体描述一位候选人的情况,包括其姓名及所得票数两项。5个候选人的数据用一结构体数组描述,在定义时初始化,即刚开始时得票数均为0。(2)20人投票用循环处理。第 9章 结构体类型与共用体类型 程序如下:/*程序9-7,统计候选人得票数*/struct tttchar name12;int count;main()struct ttt dp5=Zhang,0,Li,0,Wang,0,Liu,0,Zhao,0;char tp10;int i,j;for(i=1;i=20;i+)第 9章 结构体

27、类型与共用体类型 scanf(%s,tp);for(j=0;j5;j+)if(strcmp(tp,dpi.name)=0)dpj.count+;for(i=0;i5;i+)printf(%s的得票数=%dn,dpi.name,dpi.count);输入数据:Zhang Li Wang Liu Zhao Zhao Li Li Zhang Li Zhang Li Liu Li Zhang Liu Li Li Zhang 运行结果:Zhang的得票数=5Li的得票数=8Wang的得票数=1Liu的得票数=3Zhao的得票数=2 第 9章 结构体类型与共用体类型 9.3 共用体类型共用体类型 9.3.

28、1 共用体类型定义共用体类型定义 共用体类型定义与结构体类型定义类似,只是改用关键字union标识。其形式为:union 标识符 成员表;第 9章 结构体类型与共用体类型 标识符给出共用体名,是共用体类型名的主体,定义的共用体类型由“union 标识符”标识。例如,定义共用体类型,要求包含一个整型成员、一个字符型成员和一个单精度型成员:union icfint i;char c;float f;第 9章 结构体类型与共用体类型 9.3.2 共用体变量的定义共用体变量的定义(1)先定义共用体类型,再定义共用体变量:union 共用体名 成员表;union 共用体名 变量表;(2)定义共用体类型的

29、同时定义共用体变量:union 共用体名 成员表 变量表;(3)直接定义共用体变量:union 成员表 变量表;第 9章 结构体类型与共用体类型 9.3.3 共用体变量的引用共用体变量的引用 共用体变量不能直接被使用,只能使用它的某个成员,通过共用体变量名与共用体成员名进行点运算得到。形式为:共用体变量名.共用体成员名 例如:union icf x;共用体类型变量x占有4个字节的空间,x.i表示其整型成员,x.c表示其字符型成员,x.f表示其单精度型成员。第 9章 结构体类型与共用体类型 说明:(1)共用体变量中可以包含若干成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只能引用一个成

30、员。共用体变量中起作用的成员值是最后一次存储的成员值。(2)共用体变量所有成员共用同一段内存单元,共用体变量和它的各个成员具有相同的地址。后来存放的共用体成员值将覆盖之前存放的共用体成员值,故只能使用最后一次存储的共用体成员值。第 9章 结构体类型与共用体类型 (3)不能对共用体变量进行初始化和赋值,也不能通过引用共用体变量名来得到某成员的值。(4)共用体变量不能作函数参数,函数的返回值也不能是共用体类型。(5)共用体类型和结构体类型可以相互嵌套,共用体中的成员可以为数组,甚至还可以定义为共用体数组。第 9章 结构体类型与共用体类型 例例 9-8 设有若干教师的数据,包含有教师编号、姓名、职称

31、,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。程序如下:/*程序9-8,输入/输出教师信息*/union cf char clname30;/*所讲课程*/int num;/*论文数目*/;struct teachersint no;/*编号*/char name12;/*姓名*/char zc;/*职称*/union cf x;/*可变字段,为所讲课程或论文数目*/第 9章 结构体类型与共用体类型 teach10;/*假设有10位教师*/main()int i;for(i=0;i10;i+)/*输入数据*/scanf(%d,%s,%c,&teachi.no,te

32、achi.name,&teachi.zc);if(teachi.zc=L)/*L表示讲师*/scanf(%s,&teachi.x.clname);else if(teachi.zc=P)/*P表示教授*/scanf(%d,&teachi.x.num);else printf(input data error!n);第 9章 结构体类型与共用体类型 printf(编号 姓名 职称 讲授课程或论文数n);/*输出数据*/for(i=0;i10;i+)printf(%12d%12s%6c,teachi.No,teachi.name,teachi.zc);if(teachi.zc=L)printf(%

33、12sn,teachi.x.clname);else if(teachi.zc=P)printf(%12dn,teachi.x.num);else printf(errorn);第 9章 结构体类型与共用体类型 9.4 枚举类型枚举类型 9.4.1 枚举类型的定义枚举类型的定义 枚举类型定义用关键字enum标识,形式为:enum 标识符 枚举数据表;标识符用来区分不同的枚举类型,定义的枚举类型用enum标识符”标识。第 9章 结构体类型与共用体类型 说明:说明:(1)枚举数据,也就是枚举常量,只能是标识符,不能重复定义。(2)枚举数据往往是一些有实际含义的标识符。不过,标识符的含义可完全由程序

34、员规定。(3)数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。枚举类型是有序类型。(4)程序员可在枚举数据时通过“=”号自己规定序号,后继序号以此递增。(5)枚举数据的存储占两个字节。第 9章 结构体类型与共用体类型 例如:(1)定义枚举类型status,包含复制与删除两种状态:enum statuscopy,delete;枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。第 9章 结构体类型与共用体类型 (2)定义枚举类型color,包含红、黄、蓝、白、黑五种颜色:enum color red,yellow,blue,white,bl

35、ack;枚举类型color有red、yellow、blue、white、black五个数据,序号为0、1、2、3、4,代表红、黄、蓝、白、黑五种颜色。第 9章 结构体类型与共用体类型 (3)定义枚举类型weekday,包含一周的七天:enum weekday sun,mon,tue,wed,thu,fri,sat;枚举类型weekday有sun、mon、tue、wed、thu、fri、sat七个数据,序号为0、1、2、3、4、5、6,代表一周中的星期天、星期一、星期二、星期三、星期四、星期五、星期六。第 9章 结构体类型与共用体类型(4)重新定义枚举类型status,规定第一个枚举数据的序号是

36、6。enum statuscopy=6,delete;则copy的序号为6,delete的序号为7。第 9章 结构体类型与共用体类型 9.4.2 枚举类型变量的定义枚举类型变量的定义(1)先定义枚举类型,再定义枚举类型变量:enum 标识符 枚举数据表;enum 标识符 变量表;(2)在定义枚举类型的同时定义枚举类型变量:enum 标识符 枚举数据表 变量表;(3)直接定义枚举类型变量:enum 枚举数据表 变量表;第 9章 结构体类型与共用体类型 例如,对枚举类型enum color,定义枚举变量c1、c2:enum color red,yellow,blue,white,black;enu

37、m color c1,c2;或enum color red,yellow,blue,white,black c1,c2;或enum red,yellow,blue,white,black c1,c2;枚举类型数据可以进行赋值运算。枚举类型是有序类型,枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较,只有同一种枚举类型的数据才能进行比较。第 9章 结构体类型与共用体类型 将枚举型数据按整型格式输出,可得到整数值(枚举变量值的序号)。使用强制类型转换,可将整数值(枚举值序号)转换成对应枚举值。例如:c1=(enum color)2;/*c1得到枚举值blue*/第 9章 结构

38、体类型与共用体类型 例例 99 某口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取出三个球,问得到三种不同颜色的球有多少种取法,并输出每种组合结果。算法提示:不用枚举类型,我们可用1代表红色、2代表黄色、3代表蓝色、4代表白色、5代表黑色,通过下面的三重循环完成处理。第 9章 结构体类型与共用体类型 for(n=0,i=1;i=5;i+)/*取第一个球*/for(j=1;j=5;j+)/*取第二个球*/if(j!=i)/*第二个与第一个不同色*/for(k=1;k=5;k+)/*取第三个球*/if(k!=i)&(k!=j)/*第三个与第一、二个不同色*/n+;/*统计有多少种取法*

39、/printf(%d,%d,%dn,i,j,k);/*输出一种取法*/第 9章 结构体类型与共用体类型 将颜色用数字表示,不如直接用red表示红色球、yellow表示黄色球、blue表示蓝色球、white表示白色球、black表示黑色球,这样非常直观。请注意程序中枚举类型数据的输出。程序如下:/*程序9-9,三种不同颜色球的取法*/main()enum color red,yellow,blue,white,black;enum color i,j,k,l;/*i是第一个球,j是第二个球,k是第三个球*/enum color l;/*取值i、j、k,方便输出*/int n,m;/*n种数,m为

40、临时变量*/for(n=0,i=red;i=black;i+)/*取第一个球*/for(j=red;j=black;;j+)/*取第二个球*/if(j!=i)/*第二个与第一个不同色*/for(k=red;k=black;k+)/*取第三个球*/if(k!=i)&(k!=j)/*第三个与第一、二个不同色*/第 9章 结构体类型与共用体类型 n+;/*统计有多少种取法*/printf(%4d:,n);for(m=1;m=3;m+)/*输出第n种取法*/switch(m)case 1:1=i;berak;case 2:1=j;berak;case 3:1=k;berak;switch(l)/*间接

41、输出*/case red:printf(%8s,red),break;case yellow:printf(%8s,yellow);break;第 9章 结构体类型与共用体类型 case blue:printf(%8s),blue);break;case white:printf(%8s,white);break;;case black:printf(%8s,black);break;printf(“n”);printf(总的取法有%d种n,n);第 9章 结构体类型与共用体类型 9.5 程序设计举例程序设计举例 例例9-10 编写程序,登录幼儿园200名小朋友的数据,按身高、年龄排序后输出。

42、小朋友的数据包括编号、姓名、性别、年龄、身高、体重、出生日期、入园日期。算法提示:(1)日期数据用结构体dst描述,幼儿园一名小朋友的数据(编号、姓名、性别、年龄、身高、体重、出生日期、入园日期)用嵌套结构体cst描述,幼儿园200名小朋友的数据用结构体数组all描述。(2)定义登录input()、身高排序sort1()、年龄排序sort2()、输出output()四个函数完成程序处理。第 9章 结构体类型与共用体类型 (3)排序采用选择排序方法,利用外部数组传递数据,排序结果存放于原数组。(4)依身高、年龄排序可以考虑用同一个函数完成,将排序依据用参数传递。第 9章 结构体类型与共用体类型

43、程序如下:/*程序9-10,幼儿园小朋友数据登录、排序*/#define M 200 struct dst/*定义日期结构体*/int year;int month;int day;struct cst /*定义描述小朋友数据的结构体*/int no;char name12;char sex;float age;float height;float weight;dst bdate;dst edate;struct cst allM;/*定义描述所有小朋友数据的外部结构体数组*/第 9章 结构体类型与共用体类型 main()void input();/*调用函数申明*/void sort1()

44、;void sort2();void output();input();/*调用登录函数*/sort1();/*调用依身高排序函数*/printf(幼儿园小朋友一览(依身高排序):n);output();/*调用输出函数*/printf(n);sort2();/*调用依年龄排序函数*/printf(幼儿园小朋友一览(依年龄排序):n);output();/*再次调用输出函数*/printf(n);第 9章 结构体类型与共用体类型 void input()/*登录函数*/int i;for(i=0;iM;i+)printf(依次输入第%d个小朋友的数据:n,i);scanf(%d%s%c%f%f

45、%f%d%d%d%d%d%d,&alli.no,alli.name,&alli.sex,&alli.age,&alli.height,&alli.weight,&alli.bdate.year,&alli.bdate.month,&alli.bdate.day,&alli.edate.year,&alli.edate.month,&alli.edate.day);第 9章 结构体类型与共用体类型 void sort1()/*依身高排序函数*/int i,j;int k;struct cst t;for(i=0;iM?1;i+)k=i;for(j=i+1;jallk.height)k=j;t=a

46、lli;alli=allk;allk=t;第 9章 结构体类型与共用体类型 void sort1()/*依年龄排序函数*/int i,j;int k;struct cst t;for(i=0;iM?1;i+)k=i;for(j=i+1;jallk.age)k=j;t=alli;alli=allk;allk=t;第 9章 结构体类型与共用体类型 void output()/*输出函数*/int i;printf(编号 姓名 性别 年龄 身高 体重 出生日期 入园日期 n)for(i=0;iM;i+)printf(%4d%10s%8d%8.1f%8.2f%8.2f%6d/%2d%/2d%6d/%2

47、d/%2d,alli.no,alli.name,alli.age,alli.sex,alli.height,alli.weight,alli.bdate.year,alli.bdate.month,alli.bdate.day,alli.edate.year,alli.edate.month,alli.edate.day);printf(n);第 9章 结构体类型与共用体类型 例9-11 编写程序,实现复数的乘法运算。算法提示:(1)复数用结构体描述。(2)复数的乘法运算用函数实现,函数的类型为结构体类型。程序如下:/*程序9-11,复数的乘法运算*/struct complex float

48、re;float ie;main()struct complex x,y;struct complex m;struct complex compm();/*调用函数申明*/第 9章 结构体类型与共用体类型 printf(请输入第一个复数的实部,虚部:);scanf(%f,%f,&x.re,&x.ie);printf(请输入第二个复数的实部,虚部:);scanf(%f,%f,&y.re,&y.ie);m=compm(x,y);/*调用函数求积*/printf(所求复数的积=%8.3f+%8.3f i n,m.re,m.ie);struct complex compm(xx,xy)/*求两个复数

49、积的函数*/struct complex xx,xy;struct complex t;t.re=xx.re*xy.re?xx.ie*xy.ie;t.ie=xx.re*xy.ie+xx.ie*xy.re;return(t);第 9章 结构体类型与共用体类型 例例9-12 某班有50个学生,期终考试考了8门课程。求每个学生的总成绩和平均成绩,并按总成绩排序输出。这是第8章的例8-17,我们在这里改用二维结构体数组实现,整个程序由5个函数组成。程序如下:/*程序9-12,成绩处理程序*/struct cjst char xm12;float cj9;cjs51;/*存放学生成绩的结构体数组*/fl

50、oat tacj513;/*存放总成绩、平均成绩的数组*/第 9章 结构体类型与共用体类型 main()void input();/*调用函数申明*/void count();void sort();void output();input();/*调用输入函数*/count();/*调用计算函数*/sort();/*调用排序函数*/output();/*调用输出函数*/第 9章 结构体类型与共用体类型 void input();/*输入函数*/int i,j;for(i=1;i=50;i+)printf(请输入第%d个学生姓名,8门课的成绩:n);scanf(%s,cjsi.xm);for(j

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

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《新编C语言程序设计教程》课件第9章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|