第八章 结构体与共用体-1(结构体变量、结构体数组及数组做函数参数)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-6-23 14
).
struct是结构体类型的关键字 A) struct是结构体类型的关键字
结构体数组
⒈ 结构体数组的定义 数组中的每一个元素都是结构体类型的数据, 数组中的每一个元素都是结构体类型的数据,则称这样 的数组为结构体数组. 的数组为结构体数组. ⒉ 定义结构体数组
2010-6-23
18
方法(2): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[ ]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
Mary
2010-6-23
F
birthday 10 23 1985
10
结构体变量的引用
引用结构体变量需遵守的规则: 引用结构体变量需遵守的规则: ⑴ 不能将一个结构体变量作为一个整体输入输出,只能对结 不能将一个结构体变量作为一个整体输入输出, 构体变量中的各个成员分别进行输入和输出. 构体变量中的各个成员分别进行输入和输出.引用结构体 变量中成员的方式: 变量中成员的方式: 结构体变量名 . 成员名 例如: 例如: printf("name: %s\nsex: %c\nbirthday:%d %d %d\n", a); 错! a.sex='m'; 正确! 正确! a.birthday.year=1988;
15
方法1
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[2]; name sex age score addr
num stu[0] num
8
4. 结构体类型的成员也可 以是一个结构体变量. 以是一个结构体变量. 例如: 例如: struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }; struct student student1; sex age birthday addr month day year
9
num
2010-6-23
name
结构体变量的初始化
struct date { int month; int day; int year; 回顾: 回顾:对整型变量的初始化 }; name: Mary int main(void) int a=3; { struct student sex: F { char name[20]; char sex; birthday:10 23 1985 struct date birthday; }a = {"Mary", 'F', 10, 23, 1985}; printf("name: %s\nsex: %c\nbirthday:%d %d %d\n", a.name, a.sex, a.birthday.month, a.birthday.day, a.birthday.year); return 0; }
对结构体变量的成员可以像普通变量一样进行各种运算. ⑶ 对结构体变量的成员可以像普通变量一样进行各种运算.
2010-6-23 12
例如: 例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age++; ++student2.age;
2010-6-23
7
⒉ 在声明类型的同时定义变量 一般形式: 一般形式: struct 结构体名 { 成员表列 }变量名表列; 变量名表列; 变量名表列 例如: 例如: struct birthday { int month; int day; int year; }tom; 2010-6-23
⒊ 直接定义结构体类型变量 一般形式: 一般形式: struct { 成员表列 }变量名表列; 变量名表列; 变量名表列 例如: 例如: struct { int month; int day; int year; }tom ,peter;
2010-6-23 20
4. 结构体数组应用举例
编写一程序P4-415.C实现以下功能 实现以下功能 编写一程序 设有10名歌手 编号为 设有 名歌手(编号为 名歌手 编号为1-10)参加歌 参加歌 咏比赛,另有6名评委打分 名评委打分, 咏比赛,另有 名评委打分,每位歌手 的得分从键盘输入:先提示" 的得分从键盘输入:先提示"Please input:",再依次输入第 个歌手的 位 个歌手的6位 ,再依次输入第1个歌手的 评委打分(10分制 分数为整型, 分制, 评委打分 分制,分数为整型,分数 之间使用空格分隔), 个歌手的 个歌手的6位 之间使用空格分隔 ,第2个歌手的 位 评委打分...以此类推 以此类推. 评委打分 以此类推.计算出每位歌手 的最终得分(扣除一个最高分和一个最 的最终得分 扣除一个最高分和一个最 低分后的平均分,最终得分保留2位小 低分后的平均分,最终得分保留 位小 数),最后按最终得分由高到低的顺序 , 输出每位歌手的编号及最终得分. 输出每位歌手的编号及最终得分. 注意:变量数据类型的选择应适当, 注意:变量数据类型的选择应适当, 在保证满足设计要求精度的情况下, 在保证满足设计要求精度的情况下,养 成不浪费内存空间和计算时间的好习惯. 成不浪费内存空间和计算时间的好习惯.
2010-6-23
变量定义方法的回顾: 变量定义方法的回顾:
int a; a=3; float b; b=3.5; char c; c='a';
6
num student1: 10010
name LiFun
sex M
age 18
score 87.5
addr Beijing
假设int型数据在内存中占 字节,float占 个字节,char占 假设int型数据在内存中占4字节,float占4个字节,char占1 型数据在内存中占4 个字节,结构体类型变量 变量student1占多少个字节 占多少个字节? 个字节,结构体类型变量student1占多少个字节?
2010-6-23 21
#include <stdio.h> #define N 10 struct person { int number; int score[6]; float finalScore; }; int main(void) { int i, j, sum, max, min; struct person tmp, singer[N]; printf("Please input:"); for (i = 0; i < N; i++) { singer[i].number = i + 1; for (j = 0; j < 6; j++) { scanf("%d", &singer[i].score[j]); } } 2010-6-23
2010-6-23
13
课堂练习: 课堂练习: 1.设有以下说明语句: 设有以下说明语句: struct ex { int x; float y; char z; } example; 则下面的叙述中不正确的是( 则下面的叙述中不正确的是( example是结构体类型名 B) example是结构体类型名 C) x, y, z都是结构体成员名 z都是结构体成员名 ex是结构体类型名 D) struct ex是结构体类型名
2010-6-23 11
⑵ 如果成员本身又属于一个结构体类型,则要用若干个成员 如果成员本身又属于一个结构体类型, 运算符,一级一级地找到最低一级的成员. 运算符,一级一级地找到最低一级的成员.只能对最低级 的成员进行赋值或存取以及运算. 的成员进行赋值或存取以及运算. 例如: 例如: a.birthday.year=1980 a.birthday.day=23 a.birthday.month=10
2010-6-23
5
定义结构体类型变量的方法
⒈ 先声明结构体类型再定义变量名
例如: 例如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1;
2010-6-23 19
方法(3): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
成员的声明: 成员的声明: 类型名
成员名; 成员名;
4
};
⒉ 结构体类型的声明
例如 2: : struct birthday { int month; int day; int year; }; 成员的声明: 成员的声明: 类型名 成员名; 成员名; }; ; struct 结构体名 { 成员表列
2010-6-23
17
⒊ 结构体数组的初始化 方法(1): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[2]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }}; num stu[0] 10010 num 2010-6-23 stu[1] 10011 name LiFun name Zhang sex M sex M age 18 age 20 score 87.5 score 55 addr Beijing addr Tianjin
第8章 结构体与共用体 ( 1)
内ห้องสมุดไป่ตู้提要
结构体类型与结构体变量 结构体数组 结构体数组做函数参数
2010-6-23
2
问题的提出
对数据类型的回顾: 对数据类型的回顾: int a; ; float b; char c;
以上三种类型是系统已经定义好的数据类型, 以上三种类型是系统已经定义好的数据类型,其特性不 能被用户改变. 能被用户改变. 问题: 问题: 可否用一种数据类型将一个学生"学号" 可否用一种数据类型将一个学生"学号","姓名", 姓名" 性别" 成绩" 家庭住址"等信息全部表示出来? "性别","成绩","家庭住址"等信息全部表示出来?
2010-6-23
name
sex
age
score
addr
16
stu[1]
方法2 ⑵ 方法 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
方法3 ⑶ 方法 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
2010-6-23 3
⒈ 结构体类型的引入
例如 1: : struct student { int num; char name[20]; char sex; int age; float score; char addr[30];
2010-6-23
⒉ 结构体类型的声明
struct 结构体名 { 成员表列 }; ;
).
struct是结构体类型的关键字 A) struct是结构体类型的关键字
结构体数组
⒈ 结构体数组的定义 数组中的每一个元素都是结构体类型的数据, 数组中的每一个元素都是结构体类型的数据,则称这样 的数组为结构体数组. 的数组为结构体数组. ⒉ 定义结构体数组
2010-6-23
18
方法(2): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[ ]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
Mary
2010-6-23
F
birthday 10 23 1985
10
结构体变量的引用
引用结构体变量需遵守的规则: 引用结构体变量需遵守的规则: ⑴ 不能将一个结构体变量作为一个整体输入输出,只能对结 不能将一个结构体变量作为一个整体输入输出, 构体变量中的各个成员分别进行输入和输出. 构体变量中的各个成员分别进行输入和输出.引用结构体 变量中成员的方式: 变量中成员的方式: 结构体变量名 . 成员名 例如: 例如: printf("name: %s\nsex: %c\nbirthday:%d %d %d\n", a); 错! a.sex='m'; 正确! 正确! a.birthday.year=1988;
15
方法1
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[2]; name sex age score addr
num stu[0] num
8
4. 结构体类型的成员也可 以是一个结构体变量. 以是一个结构体变量. 例如: 例如: struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }; struct student student1; sex age birthday addr month day year
9
num
2010-6-23
name
结构体变量的初始化
struct date { int month; int day; int year; 回顾: 回顾:对整型变量的初始化 }; name: Mary int main(void) int a=3; { struct student sex: F { char name[20]; char sex; birthday:10 23 1985 struct date birthday; }a = {"Mary", 'F', 10, 23, 1985}; printf("name: %s\nsex: %c\nbirthday:%d %d %d\n", a.name, a.sex, a.birthday.month, a.birthday.day, a.birthday.year); return 0; }
对结构体变量的成员可以像普通变量一样进行各种运算. ⑶ 对结构体变量的成员可以像普通变量一样进行各种运算.
2010-6-23 12
例如: 例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age++; ++student2.age;
2010-6-23
7
⒉ 在声明类型的同时定义变量 一般形式: 一般形式: struct 结构体名 { 成员表列 }变量名表列; 变量名表列; 变量名表列 例如: 例如: struct birthday { int month; int day; int year; }tom; 2010-6-23
⒊ 直接定义结构体类型变量 一般形式: 一般形式: struct { 成员表列 }变量名表列; 变量名表列; 变量名表列 例如: 例如: struct { int month; int day; int year; }tom ,peter;
2010-6-23 20
4. 结构体数组应用举例
编写一程序P4-415.C实现以下功能 实现以下功能 编写一程序 设有10名歌手 编号为 设有 名歌手(编号为 名歌手 编号为1-10)参加歌 参加歌 咏比赛,另有6名评委打分 名评委打分, 咏比赛,另有 名评委打分,每位歌手 的得分从键盘输入:先提示" 的得分从键盘输入:先提示"Please input:",再依次输入第 个歌手的 位 个歌手的6位 ,再依次输入第1个歌手的 评委打分(10分制 分数为整型, 分制, 评委打分 分制,分数为整型,分数 之间使用空格分隔), 个歌手的 个歌手的6位 之间使用空格分隔 ,第2个歌手的 位 评委打分...以此类推 以此类推. 评委打分 以此类推.计算出每位歌手 的最终得分(扣除一个最高分和一个最 的最终得分 扣除一个最高分和一个最 低分后的平均分,最终得分保留2位小 低分后的平均分,最终得分保留 位小 数),最后按最终得分由高到低的顺序 , 输出每位歌手的编号及最终得分. 输出每位歌手的编号及最终得分. 注意:变量数据类型的选择应适当, 注意:变量数据类型的选择应适当, 在保证满足设计要求精度的情况下, 在保证满足设计要求精度的情况下,养 成不浪费内存空间和计算时间的好习惯. 成不浪费内存空间和计算时间的好习惯.
2010-6-23
变量定义方法的回顾: 变量定义方法的回顾:
int a; a=3; float b; b=3.5; char c; c='a';
6
num student1: 10010
name LiFun
sex M
age 18
score 87.5
addr Beijing
假设int型数据在内存中占 字节,float占 个字节,char占 假设int型数据在内存中占4字节,float占4个字节,char占1 型数据在内存中占4 个字节,结构体类型变量 变量student1占多少个字节 占多少个字节? 个字节,结构体类型变量student1占多少个字节?
2010-6-23 21
#include <stdio.h> #define N 10 struct person { int number; int score[6]; float finalScore; }; int main(void) { int i, j, sum, max, min; struct person tmp, singer[N]; printf("Please input:"); for (i = 0; i < N; i++) { singer[i].number = i + 1; for (j = 0; j < 6; j++) { scanf("%d", &singer[i].score[j]); } } 2010-6-23
2010-6-23
13
课堂练习: 课堂练习: 1.设有以下说明语句: 设有以下说明语句: struct ex { int x; float y; char z; } example; 则下面的叙述中不正确的是( 则下面的叙述中不正确的是( example是结构体类型名 B) example是结构体类型名 C) x, y, z都是结构体成员名 z都是结构体成员名 ex是结构体类型名 D) struct ex是结构体类型名
2010-6-23 11
⑵ 如果成员本身又属于一个结构体类型,则要用若干个成员 如果成员本身又属于一个结构体类型, 运算符,一级一级地找到最低一级的成员. 运算符,一级一级地找到最低一级的成员.只能对最低级 的成员进行赋值或存取以及运算. 的成员进行赋值或存取以及运算. 例如: 例如: a.birthday.year=1980 a.birthday.day=23 a.birthday.month=10
2010-6-23
5
定义结构体类型变量的方法
⒈ 先声明结构体类型再定义变量名
例如: 例如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1;
2010-6-23 19
方法(3): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }};
成员的声明: 成员的声明: 类型名
成员名; 成员名;
4
};
⒉ 结构体类型的声明
例如 2: : struct birthday { int month; int day; int year; }; 成员的声明: 成员的声明: 类型名 成员名; 成员名; }; ; struct 结构体名 { 成员表列
2010-6-23
17
⒊ 结构体数组的初始化 方法(1): 方法 : struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[2]={{10101, "Li Lin", 'M',18,87.5, "Beijing Road" }, {10102, "Zhang Fun", 'M',19,99, "130 Shanghai Road" }}; num stu[0] 10010 num 2010-6-23 stu[1] 10011 name LiFun name Zhang sex M sex M age 18 age 20 score 87.5 score 55 addr Beijing addr Tianjin
第8章 结构体与共用体 ( 1)
内ห้องสมุดไป่ตู้提要
结构体类型与结构体变量 结构体数组 结构体数组做函数参数
2010-6-23
2
问题的提出
对数据类型的回顾: 对数据类型的回顾: int a; ; float b; char c;
以上三种类型是系统已经定义好的数据类型, 以上三种类型是系统已经定义好的数据类型,其特性不 能被用户改变. 能被用户改变. 问题: 问题: 可否用一种数据类型将一个学生"学号" 可否用一种数据类型将一个学生"学号","姓名", 姓名" 性别" 成绩" 家庭住址"等信息全部表示出来? "性别","成绩","家庭住址"等信息全部表示出来?
2010-6-23
name
sex
age
score
addr
16
stu[1]
方法2 ⑵ 方法 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
方法3 ⑶ 方法 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[2];
2010-6-23 3
⒈ 结构体类型的引入
例如 1: : struct student { int num; char name[20]; char sex; int age; float score; char addr[30];
2010-6-23
⒉ 结构体类型的声明
struct 结构体名 { 成员表列 }; ;