结构体类型与共用体类型课件.ppt
《结构体类型与共用体类型课件.ppt》由会员分享,可在线阅读,更多相关《结构体类型与共用体类型课件.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、结构体类型与共用体类型第1页,此课件共73页哦9.1 结构体类型结构体类型 9.1.1 结构体类型的定义结构体类型的定义 结构体类型定义用关键字struct标识,形式为:struct 标识符 成员表;第2页,此课件共73页哦 例如,定义结构体类型,描述下列数据。(1)学生情况,包含学生的学号、姓名、性别、年龄、C语言课程成绩:struct studentint no;/*学号*/char name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float cscore;/*C成绩*/;第3页,此课件共73页哦 如考虑30门课程成绩,加上总成绩与平均成绩,可作如下定义:
2、struct studentint no;/*学号*/char name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float score31;/*30门课程成绩*/float tcj,acj;/*总成绩,平均成绩*/;第4页,此课件共73页哦 (2)个人数据,包含姓名、性别、年龄、身高、体重、住址:struct personchar name8;/*姓名*/char sex;/*性别*/int age;/*年龄*/float height;/*身高*/float weight;/*体重*/char add40;/*住址*/;第5页,此课件共73页哦(3)平面上的
3、点:struct point2float x;/*横坐标*/float y;/*纵坐标*/;如考虑空间中的点,可作如下定义:struct point3float x;/*X坐标*/float y;/*Y坐标*/float z;/*Z坐标*/;第6页,此课件共73页哦(4)日期,包括年、月、日:struct dateint year;/*年*/month;/*月*/day;/*日*/;如考虑时间,可作如下定义:struct timeint hh;/*时*/int mm;/*分*/int ss;/*秒*/;第7页,此课件共73页哦(5)复数:struct complexfloat re;/*实部*
4、/float ie;/*虚部*/;第8页,此课件共73页哦(6)三角形:struct sjxfloat a,b,c;/*三边*/;第9页,此课件共73页哦9.1.2 结构体变量的定义结构体变量的定义 (1)先定义结构体类型,再定义结构体变量。形式为:struct 标识符 成员表;struct 标识符 变量表;例如,对以上定义的结构体类型,我们可以定义如下一些结构体变量:struct student zhang;/*张同学情况*/struct person p100;/*100个人的数据*/struct point2 p1,p2;/*平面上的两个点*/struct point3 po1,po2;
5、/*空间上的两个点*/第10页,此课件共73页哦 (2)定义结构体类型的同时定义结构体变量。形式为:struct 标识符 成员表 变量表;例如,对以上定义的结构体变量,我们可以在定义结构体类型的同时定义如下:struct student int no;char name8;char sex;int age;float cscore;zhang;/*张同学情况*/第11页,此课件共73页哦 struct personchar name8;char sex;int age;float height;float weight;char add40;p100;/*100个人的数据*/第12页,此课件共
6、73页哦 struct point2 float x;float y;p1,p2;/*平面上的两个点*/struct point3 float x;float y;float z;po1,po2;/*空间上的两个点*/第13页,此课件共73页哦 (3)直接定义结构体变量。形式为:struct 成员表 变量表;直接定义结构体变量,在关键字struct后无标识符,不出现结构体名,仅给出成员表及变量表。例如,对以上定义的结构体变量,我们可以直接定义如下:第14页,此课件共73页哦 struct int no;char name8;char sex;int age;float cscore;zhang
7、;/*张同学情况*/第15页,此课件共73页哦 structchar name8;char sex;int age;float height;float weight;char add40;p100;/*100个人的数据*/第16页,此课件共73页哦 structfloat x;float y;p1,p2;/*平面上的两个点*/struct float x;float y;float z;po1,po2;/*空间上的两个点*/第17页,此课件共73页哦 如果重命名了结构体类型,则可以用新类型名来定义结构体变量。例如:typedef structchar name8;char sex;int a
8、ge;float height;float weight;char add40;persont;/*将结构体类型命名为persont*/persont p100;/*100个人的数据*/第18页,此课件共73页哦9.1.3 结构体变量的引用结构体变量的引用 结构体的分量称为字段变量。字段变量通过结构体变量名、成员名(字段名)与点运算来描述。字段变量的形式为:结构体变量名.成员名 例如:(1)struct student类型变量zhang,其所有分量如下:zhang.no,zhang.name,zhang.sex,zhang.age,zhang.cscore (2)struct point2类型
9、变量p1,其所有分量如下:p1.x,p1.y (3)struct point2类型变量p2,其所有分量如下:p2.x,p2.y 第19页,此课件共73页哦9.1.4 结构体变量的初始化结构体变量的初始化 初始化格式:存储类别 struct 结构体名成员表 结构体变量=初始化数据表;初始化数据表是相应成员的初值表。第20页,此课件共73页哦例如:(1)extern struct student int no;char name8;int age;float cscore;zhang=9901,zhangsan,m,19,95;zhang.no初值9901,zhang.name初值zhangsan
10、,zhang.sex初值m,zhang.age初值19,zhang.cscore 初值95。第21页,此课件共73页哦(2)static struct point2float x;float y;p1=2.5,19.8;p1.x初值2.5,p1.y初值19.8。第22页,此课件共73页哦例例 9 1 求某同学上学期8门课程的总成绩与平均成绩。/*程序9-1,求某同学的总成绩与平均成绩*/main()struct st char xm8;float cj9;float tcj,acj;stu;第23页,此课件共73页哦int i;scanf(%s,stu.xm);/*输入*/for(i=1;i=
11、8;i+)scan(%f,&stu.cji);stu.tcj=0.0;/*求总成绩*/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 第24页,此课件共73页哦例例 9 2 求平面上两点之间的距离。/*程序9-2,求平面上两点之间的距离*/main()struct pointfloat x
12、;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);第25页,此课件共73页哦运行结果:请输入第一点的坐标:1,1请输入第二点的坐标:3,3两点之间的距离=2.828 第26页,此课件共73页哦例例 9 3 复数的加减运算。/*程序9-3,复数的加减运算*/main()st
13、ruct complexfloat re;float ie;x,y;/*输入变量*/struct complex s1,s2;/*输出变量*/printf(请输入第一个复数的实部,虚部:);scanf(%f,%f,&x.re,&x.ie);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=x.ie-y.ie;printf(所求复数的和=%8.3f+%8.3f i n,s1.re,s1.ie);printf(所求复数的差
14、=%8.3f+%8.3f i n,s2.re,s2.ie);第27页,此课件共73页哦运行结果:运行结果:请输入第一个复数的实部,虚部:3.2,4.3请输入第二个复数实部,虚部:2.1,3.1所求复数的和=5.3+7.5 i所求复数的差=1.1+1.2 i 第28页,此课件共73页哦9.1.5 结构体作函数参数结构体作函数参数 例例 9 4 将例9-2中求平面上两点之间的距离改用函数实现。struct pointfloat x;float y;float p1p2(p1,p2)/*求平面上两点之间距离的函数*/struct point p1,p2;float d;d=sqrt(p2.x-p1.
15、x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);return(d);第29页,此课件共73页哦例例 9 5 将例9-3中复数的加减运算改用函数实现。/*程序9-5,采用函数实现复数的加减运算*/struct complexfloat re;float ie;main()struct complex x,y;struct complex s1,s2;struct complex csum();/*调用函数申明*/struct complex csub();printf(请输入第一个复数的实部,虚部:);scanf(%f,%f,&x.re,&x.ie);printf(
16、请输入第二个复数实部,虚部:);scanf(%f,%f,&y.re,&y.ie);s1=csum(x,y);/*调用函数求和*/s2=csub(x,y);/*调用函数求差*/第30页,此课件共73页哦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)/*求两个复数和的函数*/struct complex xx,xy;struct complex t;t.re=xx.re+xy.re;t.ie=xx.ie+xy.ie;ret
17、urn(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);第31页,此课件共73页哦9.1.6 嵌套结构体嵌套结构体 例如,在描述个人数据时,假如除了年龄,还需描述出生日期。我们需在前面的定义中增加一日期结构体成员,形成嵌套结构体类型person。struct dateint year;month;day;struct personchar name8;char sex;int age;struc
18、t date birthday;/*增加的结构体成员*/float height;float weight;char add40;第32页,此课件共73页哦我们也可采用如下的嵌套结构体形式:struct personchar name8;char sex;int age;struct dateint year;month;day;birthday;/*增加的结构体成员*/float height;float weight;char add40;第33页,此课件共73页哦9.2 结构体数组结构体数组 结构体数组的定义与结构体变量的定义一样有以下三种形式:(1)Struct 标识符成员表;stru
19、ct 标识符 数组名常量;(2)struct 标识符成员表 数组名常量;(3)struct 成员表 数组名常量;第34页,此课件共73页哦 例如,100个同学的情况,我们可以定义结构体数组allst描述:struct studentint no;char name8;char sex;int age;float score31;float tcj,acj;allst100;第35页,此课件共73页哦 对结构体数组allst的操作要转化成对allsti进行操作,而allsti的操作要转化成对allsti.no、allsti.name、allsti.sex、allsti.age、allsti.sc
20、ore、allsti.tcj、allsti.acj进行操作。allsti.no、allsti.name、allsti.sex、allsti.age、allsti.score、allsti.tcj、allsti.acj相当于对应基类型的量。第36页,此课件共73页哦 例例 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;/*排序时用于交换
21、数据*/for(i=1;i 50;i+)/*输入50个同学的姓名、C成绩*/第37页,此课件共73页哦 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);第38页,此课件共73页哦 例例 9-7 假设有5个候选人,有20人参加投票,规定只能在5
22、个候选人中选一个,多选或选这5人以外者均为废票。试用结构体数组编写程序,统计出5位候选人各人所得票数。/*程序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+)第39页,此课件共73页哦 scanf(%s,tp);for(j=0;j5;j+)if(strcmp(tp,dpi.name)=0)dpj.count+;for(i=0;i5;i+)printf(%s的得票数=%dn,dp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 类型 共用 课件
限制150内