第七章结构体、共用体和枚举类型数据余
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{1978,8,23},{1980,4,8}};
Sunday, August 09,
26
2020
若初始化时提供的数据组的个数与数组 的元素个数相同,则元素个数可省略。
教材P255下例
Sunday, August 09,
27
2020
三、结构体数组的引用 遵从一般数组和结构体变量的规定。
1、引用某元素的一个成员 例如 接上例 birthday[3].year=birthday[0].year; birthday[3].month=birthday[1].month; birthday[3].day=birthday[2].day;
struct { char name[20]; char sex; int age; float score; }stud1,stud2;
struct { int hour; int minute; int second; }t1,t2,t3;
这时结构体类型变量必须一次定义完,因为
没有结构体名,不可能再单独定义。
Sunday, August 09, 2020
struct time
同
{
时
int hour;
定
int minute;
义
int second;
}t1[20],t2[40];
struct
直{
接
int month;
定
int day;
义
int year; }date[30];
25
二、结构体数组的初始化
即在定义数组时提供初值。
Sunday, August 09,
20
2020
二)、位段 1、位段及其定义
位段是一种特殊的结构体成员,这些成员允许以位 为单位进行定义和存储,可以作为独立的量参与操 作和运算。
教材P253例7.4、7.5、7.6
Sunday, August 09,
21
2020
2、位段的引用方法
引用方法与结构体成员的引用相同。例如
}
Sunday, August 09,
13
2020
2、结构体变量作为整体的引用
一般仅限于赋值。
main()
{ struct date {
显示:
The date of ten years later is 2017.4.30
int month,day,year;
} olddate={4,30,2007};
Sunday, August 09,
17
2020
1、按位与运算符& 参与运算的两个量按照对应的位进行与运算,且 0&0→0, 0&1→0, 1&0→0, 1&1→1
2、按位或运算符| 参与运算的两个量按照对应位进行或运算,且 0|0→0, 0|1→1, 1|0→1, 1|1→1
3、按位异或运算符^ 参与运算的两个量按照对应的位进行异或运算,且 0^0→0, 0^1→1, 1^0→1, 1^1→0
14
2020
四、结构体的输入输出
通常结构体变量作为整体使用时不用于输入输出。
main()
{ struct time {
虽然输入:14,35,55 可正确显示:14:35:55
int hour;
但不提倡使用.
int minute;
int second;
} t;
scanf(“%d,%d,%d”, &t.hour,&t.minute,&t.second);
Sunday, August 09,
8
2020
在定义结构体类型变量时,应注意以下几点:
(1)不要将结构体名与变量名混淆。 (2)结构体成员的类型可以是另一个已定义的结 构体类型,形成嵌套结构。 例如
Sunday, August 09,
9
2020
struct date { int month; int day; int year; };
3
2020
类型标 识符
struct time { int hour; int minute; int second; };
注意,此处成员不是变 量,程序中完全可以用 这些名字作为其它的变 量名来使用(但必须另 行定义)。
struct time { int hour,minute,second;};
printf(“%s is ”, stud2.name);
if(stud2.sex==’f’) printf(“female”);
else printf(“male”);
printf(“ whose age is %d and score is %6.2f\n”,stud2.age, stud2.score);
一、结构体变量作为函数参数
二、结构体类型函数
Sunday, August 09,
24
2020
一、结构体数组的定义
单独定义
struct student { char name[20]; char sex; int age; float score; };
struct student stud[50];
printf(“%d:%d:%d\n”,t);
}
Sunday, August 09,
15
2020
main()
{ struct student
可将printf函数中stud改为
{
stud.name, stud.sex, stud.age,
char name[20]; stud.score。 char sex;
Sunday, August 09,
4
2020
7.2 结构体类型变量
一、结构体类型变量的定义 结构体类型在一个函数内只能定义一次,如 果是全局的,则在整个源程序中只能定义一 次。而结构体类型变量则可以定义多个。 结构体类型变量的定义方式有三种:
Sunday, August 09,
5
2020
1、单独定义:即先定义结构体类型,然后单独定
struct date newdate;
newdate=olddate;
newdate.year+=10;
printf(“The date of ten years later is %d.%d.%d\n”,
newdate.year,newdate.month,newdate.day);
}
Sunday, August 09,
word.a, word.b 使用位段应注意以下几方面: 1、位段只能是int或unsigned int型 2、不能引用位段的地址(如&word.a) 3、若给位段赋的值超出其最大值,则仅截取其有效位
Sunday, August 09,
22
2020
一、结构体类型数据概述 1、结构体类型的引入
复
2、结构体类型的不确定性
Sunday, August 09,
18
2020
4、按位取反运算符~ 位运算符中唯一的单目运算符,即将数的每一位取 反(0→1,1→0)。
5、左移运算符<<
将一个数的各二进制位全部左移若干位。左移后右 边补入0,左边移出的位舍弃。
Sunday, August 09,
19
2020
6、右移运算符>> 将一个数的各二进制位全部右移若干位。右移后,右边 移出的位被舍弃,左边补入的位分两种情况: 对无符号数,左边补入0 对有符号数,若符号位为0(正数)则补入0;若符号位 为1(负数)则补入1。 每右移一位相当于除以2,由于上述规则,对于负数亦 成立。但仅适用于右边没有1被移出的情况。
int age;
float score;
} stud={“zhangsan”,’m’,20,95.5};
printf(“%s,%c,%d,%f\n”, stud);
}
输出时将产生错误。为什么?如何改正?
Sunday, August 09,
16
2020
五、位运算及位段
一)、位运算
位(bit):每一个0或1称为一个“位”(bit) 字节(byte):8位构成一个字节(byte) 内存地址:每一个字节均有一个编号
struct time { int hour; int minute; int second; }t1,t2,t3;
struct student stud3, stud4; struct time t;
Sunday, August 09,
7
百度文库
2020
3、直接定义:即在定义结构体类型时不指定结
构体名,只给出变量名。
10
2020
二、结构体变量的初始化
struct time t1={14,35,55},t2; struct student stud={“zhangsan”,’m’,11,25,1980,95.5};
Sunday, August 09,
11
2020
三、结构体变量的引用
1、结构体变量中成员的引用
结构体变量的成员可被作为普通的变量 使用,包括赋值、运算、I/O等操作。 成员的引用形式为:
Sunday, August 09,
28
2020
2、引用某一个元素 这时一般用于赋值,与结构体变量用法类似。 例如 接上例
struct date_of_birth d; d=birthday[0]; birthday[0]=birthday[2]; birthday[2]=d;
习
3、结构体类型的定义
二、结构体类型变量
1、结构体类型变量的定义
2、结构体变量的初始化 3、结构体变量的引用
4、结构体的输入输出
Sunday, August 09, 2020
重点
23
7.3 结构体数组
一、结构体数组的定义 二、结构体数组的初始化
三、结构体数组的引用
四、输入数据时容易出现的问题
7.4 结构体与函数
义结构体类型的变量。
struct student { char name[20]; char sex; int age; float score; };
struct time { int hour; int minute; int second; };
注意,结构体关键字
struct student stud1, stud2; struct time t1, t2, t3;
float score;
};
struct student stud1={“zhangsan”,’m’,20,95.5},stud2;
gets(stud2.name);
stud2.sex=’f’; stud2.age=stud1.age-2;
stud2.score=stud1.score; stud2.age++;
Sunday, August 09,
2
2020
三、结构体类型的定义
结构体类型的定义形式为
类型标 识符
struct 结构体名 { 结构体成员; };
struct student { char name[20]; char sex; int age; float score; };
Sunday, August 09,
struct date_of_birth 为数组birthday的前3个元素赋
{
了初值,其余元素未赋初值,
int year;
系统将数值型成员赋以0,对
int month;
字符型数据赋以’\0’。
int day;
};
struct date_of_birth birthday[50]={{1979,3,12},
若定义
struct student stud1;
则stud1的数据结构为
struct student { char name[20]; char sex; struct date birthday; float score; };
name
birthday
sex
score
month day year
Sunday, August 09,
结构体变量.成员名
Sunday, August 09,
12
2020
main() {
struct student
输入:lili 显示:
{
lili is female whose age is 19 and score is 95.50
char name[20];
char sex; int age;
scanf(“%s”,stud2.name);
struct和结构体名必须 作为一个整体使用。
Sunday, August 09,
6
2020
2、同时定义:即在定义结构体类型时,同时
给出变量名。
struct student { char name[20]; char sex; int age; float score; }stud1,stud2;
第七章 结构体、共用体和枚举类型数据
(教材P244)
7.1 结构体类型数据概述
一、结构体类型的引入 简单变量: 数组: 结构体类型:
Sunday, August 09,
1
2020
二、结构体类型的不确定性 结构体类型中包含的数据项因问题而异,是不确 定的。 结构体类型必须由用户自行定义。 结构体类型中的数据项称为结构体的成员(或称 为域)。