ImageVerifierCode 换一换
格式:PPT , 页数:98 ,大小:277KB ,
文档编号:7904146      下载积分:15 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-7904146.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(momomo)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

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

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

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

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

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


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