结构体共用体和枚举类型演示文稿
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体共用体和枚举类型演示文稿
(优选)结构体共用体和枚举类型
第9章 结构体、共用体和枚举类型
9.1 结构体的定义及应用 9.2 位域* 9.3 共用体的定义及应用 9.4 枚举类型
9.1 结构体的定义及应用
• 设每个学生的数据包括:
–姓名:字符型数组
–年龄:无符号整型
–成绩:单精度浮点类型
如何存放10位学生的原始数据?
解:定义3个数组分别存放10位学生的姓名、年龄和成 绩,用数组下标区别不同的学生:
–char name[10][20]; //存放10位学生的姓名
–int age[10];
//
年龄
–float score[10]; //
成绩
用name[i]、age[i]和score[i]表示第i个学生数据。
• 不足:变量多、未直接反映同一学生数据间的联系。
}today,yesterday;
• 再如:
struct{
//定义一个无名结构类型
int a;
float b;
}x,y;
无名结构体类型不能在该类型定义之外定义其变量。
结构体类型变量的初始化
• 结构体变量的初始化:与数组的初始化方式类似,在 花括号中,按结构体成员说明的顺序依次列出其值。
• 例如: student s1={"Jenny",20,98}; Date today={2007,1,2}; struct Complex{ float real,image; }c1={2.0f,3.0f},c2;
9.1.3 结构体类型变量的使用
• 访问结构体变量成员的格式为: 结构体变量.成员名
其中“.”是成员访问运算符。例如: today.year
表示访问结构体变量today的成员year。 • 相同结构体类型的变量之间可直接赋值。例如:
struct weather{ double temp,wind;
• 改进:
①定义结构体类型,描述同一学生的多个数据:
struct student{//反映同一学生数据间的联系
char name[20]; //姓名
int age;
//年龄
float score; //成绩
};
②定义student类型的数组,存放10位学生的数据:
student s[10]; //变量少
cout<<s1;
//错误
cout<<s1.name<<s1.age<<s1.score;//正确
• 结构体类型变量做函数的形参时,调用函数的实参必 须是相同结构体类型的变量。参数的传递方式为值传 递,系统将实参的每个成员逐个拷贝给对应的形参成 员。结构体类型变量也可做函数的返回值。
• 例9.1 编写求两分数之和的函数,并用它求1/8+5/24。 #include<iostream.h> struct Fraction{ int num,den; //分别为分数的分子和分母 };
struct Singer{//定义结构体类型,描述青年歌手
char name[10]; //姓名
char no[8];
//编号
float singScore, //演唱得分
其中,结构体类型名为已定义的类型;多个变量之间 用逗号分隔;后一种格式与C兼容。 • 例如:
student s1,s2,s3[10]; 或
struct student s1,s2,s3[10];
student类型变量s1的内存分配图
• 按student类型的存储 模型为其变量s1分配内 存。
• student类型的存储模 型所需内存字节数:
sizeof(student)
• s1变量各成员在内存中 的顺序与其类型中成员 说明的顺序一致。
…
name
占20字节
age
占4字节
score
占4字节
结构体类型变量定义的其他形式
• 结构体类型变量也可在声明结构体类型的同时定义。
• 例如:
struct Date{
int year,month,day;
• 结构体可将不同类型的数据组织为一个整体。
9.1.1 结构体类型的定义
• 结构体类型需先定义后使用,其定义格式:
struct 结构体类型名{
类型1 成员1;
类型2 成员2;
…… };
说明
– 结构体类型名用标识符表示。
– 成员可以是基本类型或导出类型的变量,不 能指定存储类型为auto、register、extern,
}w1={7.5,3.2},w2=w1; 其中“w2=w1;”等同于:
w2.temp=w1.temp; w2.wind=w1.wind;
• 结构体类型变量不能直接输入/输出,其成员能否直 接输入/输出,取决于其成员的类型,若是基本类型 或字符数组,则可直接输入/输出。如:
cin>>s1;
//错误
cin>>s1.name>>s1.age>>s1.score; //正确
z=add(x,y);
//调用函数求分数之和
cout<<"x+y="<<z.num<<‘/’<<z.den<<endl;
}
• 例9.2 电视台举办青年歌手大奖赛,请输入每位选手
的姓名、编号及演唱得分、综合素质得分、新歌得分
(演唱新歌加0.3分),计算每人的总分,然后输出
每人的全部信息。
#include<iostream.h>
z.num=x.num*y.den+y.num*x.den;//求分子
z.den=x.den*y.den;
//求分母
int a=gcd(z.num,z.den);
z.num/=a; z.den/=a;
//约分化简
return z;
}
void main()
{ Fraction x={1,8},y={5,24},z;
int gcd(int m,int n)//求m和n的最大公约数 ห้องสมุดไป่ตู้ int t;
if(m<n){ t=m;m=n;n=t; } while(t=m%n){ m=n;n=t; } return n; }
Fraction add(Fraction x,Fraction y)//求分数和
{ Fraction z;
但可指定存储类型为static。
– 定义结构体类型用分号“;”表示结束。
– 结构体类型是一个存储模型,本身不占内存, 仅当定义其变量时,系统才按此存储模型为
其变量分配相应的内存。
9.1.2 结构体类型变量的定义
• 定义结构体类型变量的格式为: 结构体类型名 变量列表;
或 struct 结构体类型名 变量列表;
(优选)结构体共用体和枚举类型
第9章 结构体、共用体和枚举类型
9.1 结构体的定义及应用 9.2 位域* 9.3 共用体的定义及应用 9.4 枚举类型
9.1 结构体的定义及应用
• 设每个学生的数据包括:
–姓名:字符型数组
–年龄:无符号整型
–成绩:单精度浮点类型
如何存放10位学生的原始数据?
解:定义3个数组分别存放10位学生的姓名、年龄和成 绩,用数组下标区别不同的学生:
–char name[10][20]; //存放10位学生的姓名
–int age[10];
//
年龄
–float score[10]; //
成绩
用name[i]、age[i]和score[i]表示第i个学生数据。
• 不足:变量多、未直接反映同一学生数据间的联系。
}today,yesterday;
• 再如:
struct{
//定义一个无名结构类型
int a;
float b;
}x,y;
无名结构体类型不能在该类型定义之外定义其变量。
结构体类型变量的初始化
• 结构体变量的初始化:与数组的初始化方式类似,在 花括号中,按结构体成员说明的顺序依次列出其值。
• 例如: student s1={"Jenny",20,98}; Date today={2007,1,2}; struct Complex{ float real,image; }c1={2.0f,3.0f},c2;
9.1.3 结构体类型变量的使用
• 访问结构体变量成员的格式为: 结构体变量.成员名
其中“.”是成员访问运算符。例如: today.year
表示访问结构体变量today的成员year。 • 相同结构体类型的变量之间可直接赋值。例如:
struct weather{ double temp,wind;
• 改进:
①定义结构体类型,描述同一学生的多个数据:
struct student{//反映同一学生数据间的联系
char name[20]; //姓名
int age;
//年龄
float score; //成绩
};
②定义student类型的数组,存放10位学生的数据:
student s[10]; //变量少
cout<<s1;
//错误
cout<<s1.name<<s1.age<<s1.score;//正确
• 结构体类型变量做函数的形参时,调用函数的实参必 须是相同结构体类型的变量。参数的传递方式为值传 递,系统将实参的每个成员逐个拷贝给对应的形参成 员。结构体类型变量也可做函数的返回值。
• 例9.1 编写求两分数之和的函数,并用它求1/8+5/24。 #include<iostream.h> struct Fraction{ int num,den; //分别为分数的分子和分母 };
struct Singer{//定义结构体类型,描述青年歌手
char name[10]; //姓名
char no[8];
//编号
float singScore, //演唱得分
其中,结构体类型名为已定义的类型;多个变量之间 用逗号分隔;后一种格式与C兼容。 • 例如:
student s1,s2,s3[10]; 或
struct student s1,s2,s3[10];
student类型变量s1的内存分配图
• 按student类型的存储 模型为其变量s1分配内 存。
• student类型的存储模 型所需内存字节数:
sizeof(student)
• s1变量各成员在内存中 的顺序与其类型中成员 说明的顺序一致。
…
name
占20字节
age
占4字节
score
占4字节
结构体类型变量定义的其他形式
• 结构体类型变量也可在声明结构体类型的同时定义。
• 例如:
struct Date{
int year,month,day;
• 结构体可将不同类型的数据组织为一个整体。
9.1.1 结构体类型的定义
• 结构体类型需先定义后使用,其定义格式:
struct 结构体类型名{
类型1 成员1;
类型2 成员2;
…… };
说明
– 结构体类型名用标识符表示。
– 成员可以是基本类型或导出类型的变量,不 能指定存储类型为auto、register、extern,
}w1={7.5,3.2},w2=w1; 其中“w2=w1;”等同于:
w2.temp=w1.temp; w2.wind=w1.wind;
• 结构体类型变量不能直接输入/输出,其成员能否直 接输入/输出,取决于其成员的类型,若是基本类型 或字符数组,则可直接输入/输出。如:
cin>>s1;
//错误
cin>>s1.name>>s1.age>>s1.score; //正确
z=add(x,y);
//调用函数求分数之和
cout<<"x+y="<<z.num<<‘/’<<z.den<<endl;
}
• 例9.2 电视台举办青年歌手大奖赛,请输入每位选手
的姓名、编号及演唱得分、综合素质得分、新歌得分
(演唱新歌加0.3分),计算每人的总分,然后输出
每人的全部信息。
#include<iostream.h>
z.num=x.num*y.den+y.num*x.den;//求分子
z.den=x.den*y.den;
//求分母
int a=gcd(z.num,z.den);
z.num/=a; z.den/=a;
//约分化简
return z;
}
void main()
{ Fraction x={1,8},y={5,24},z;
int gcd(int m,int n)//求m和n的最大公约数 ห้องสมุดไป่ตู้ int t;
if(m<n){ t=m;m=n;n=t; } while(t=m%n){ m=n;n=t; } return n; }
Fraction add(Fraction x,Fraction y)//求分数和
{ Fraction z;
但可指定存储类型为static。
– 定义结构体类型用分号“;”表示结束。
– 结构体类型是一个存储模型,本身不占内存, 仅当定义其变量时,系统才按此存储模型为
其变量分配相应的内存。
9.1.2 结构体类型变量的定义
• 定义结构体类型变量的格式为: 结构体类型名 变量列表;
或 struct 结构体类型名 变量列表;