2018年[电脑基础知识]第8章 结构体与共用体程序设计甘玲-文档资料.ppt
《2018年[电脑基础知识]第8章 结构体与共用体程序设计甘玲-文档资料.ppt》由会员分享,可在线阅读,更多相关《2018年[电脑基础知识]第8章 结构体与共用体程序设计甘玲-文档资料.ppt(135页珍藏版)》请在三一文库上搜索。
1、1,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,本章内容,共用体,结构体类型与变量、结构体数组,自引用结构、动态内存分配、链表,结构体指针,位运算、位段,2,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,信息查询问题,数组是非常有用的一种数据结构,但它的所有元素的数据类型都必须相同。 但是,在现实生活中,将一组异型的数据看作一个整体也很重要。如: 对一个班的所有学生各课程按平均分排名。,假定输入某班30个学生信息(包括:学号、姓名、性别、5门课程成绩、平均分),要求按平均分由高到低输出该班学生信息。我们该怎么做呢?,3,解析C程序设
2、计(第2版)第8章 结构体与共用体程序设计,2019/1/19,问题分析,例8-1 对一个班的学生成绩进行排名。 假定要求输入某班30个学生的信息(包括学号、姓名、性别、3门课成绩),求得平均成绩,要求按平均成绩由高到低输出该班学生信息。 【分析】 学生“学号”、“姓名”、“性别”使用字符型数据,几门课程的“成绩”使用整型数据,“平均分”使用实型数据,可以分别定义不同的变量来存放这几个类型的数据。如果要显示某个学生的信息,那么要找到该学生的信息就要从这几个变量中分别查找,并且还要同步移动数组元素位置,这给程序员带来了很多不便。,4,解析C程序设计(第2版)第8章 结构体与共用体程序设计,201
3、9/1/19,数组解决方式,int studentId30; /* 最多可以管理30个学生, 每个学生的学号用数组的下标表示*/ char studentName3010; int studentSex; int scoreMath30; /*数学课的成绩*/ int scoreEnglish30; /*英语课的成绩*/ int scoreComputer30;/*计算机原理课的成绩*/ int scoreC30; /*C语言课的成绩*/ int scoreTelecomm30; /*通信网的成绩*/ int aveage30; /*平均成绩*/,5,解析C程序设计(第2版)第8章 结构体与共
4、用体程序设计,2019/1/19,数组解决方式,数据的内存管理方式,分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理,6,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,希望的内存分配,7,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,问题分析,在C语言中,允许用户自己构造一种新的数据类型,它的成员可以包括各种数据类型,这种数据结构就是结构体(structure),它相当于其他高级语言中的“记录”。结构体中的元素称为“成员”,在“记录”中称为“字段”,用来存储所有“记录”的数据集合称为“数据库
5、”。 结构体中的所有成员变量在内存中是连续存储的,结构体的内存空间大小为各成员内存空间大小之和。 本例声明一个结构体类型struct student,它包括:学号、姓名、性别、3门课成绩、平均成绩共5个成员。存放一个学生的信息定义一个结构体变量,要存放30个学生的信息就要定义一个结构体数组。,8,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-1 实现代码,/* LI8_1.c */ #include /* 声明结构体类型 */ struct student char num5; /* 学号 */ char name10; /* 姓名 */ char sex;
6、 /* 性别: M男,F女 */ int score3; /* 3门成绩 */ float average; /* 平均成绩 */ ; /* 自定义函数的声明 */ void enter(struct student a,int n); /* 输入学生信息 */ void sort(struct student a,int n); /* 按平均成绩由高到低排序 */ void print(struct student a,int n); /* 输出学生信息 */ /* 主函数 */ int main() int n; struct student stu30; /* 定义结构体数组 */ pr
7、intf(“请输入该班学生人数n(n=30): “); scanf(“%d“, ,9,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-1程序(续1),/* 输入函数 */ void enter(struct student a,int n) int i,j,sum=0; printf(“请输入 %d 个学生信息(学号,姓名,性别,3门课成绩): n“,n); for(i=0; in; i+) printf(“请输入第 %d 个学生的学号 姓名 性别: n“,i+1); scanf(“%s %s %c“,ai.num,ai.name, /* 求每个学生平均成绩
8、*/ ,10,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-1程序(续2),/* 选择法排序函数 */ void sort(struct student a,int n) int i,j,p; struct student temp; /* 定义结构体变量 */ for(i=0; iap.average) /* 引用结构体成员 */ p=j; if(p!=i) temp=ai; ai=ap; ap=temp; /* 输出函数 */ void print(struct student a,int n) int i,j,mc=1; /* mc表示名次 */ pr
9、intf(“n按平均成绩排名的名次表: n“); printf(“学号t姓名t性别tcj1tcj2tcj3t平均成绩t名次n“); for(i=0; in; i+) printf(“%st%st%ct“,ai.num,ai.name,ai.sex); for(j=0; j3; j+) printf(“%dt“,ai.scorej); printf(“%6.1ft%dn“,ai.average,mc+); ,11,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-1程序分析,本例程序定义了一个结构体类型student,并用它定义了包括30个元素的stu结构体数组和
10、结构体变量temp。 struct student char num5; /* 学号 */ char name10; /* 姓名 */ char sex; /* 性别: M男,F女 */ int score3; /* 3门成绩 */ float average; /* 平均成绩 */ ; struct student stu30; /* 定义结构体数组 */ struct student temp; /* 定义结构体变量 */ 在“结构体数组元素之间交换”时,不是对结构体数组元素各成员进行交换,而是对该结构体数组元素进行整体交换。交换语句为:temp=ai; ai=ap; ap=temp; 本
11、程序涉及到结构体类型的声明、结构体变量和数组的定义、结构体成员的引用、结构体的赋值和输出等知识点。,12,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体,结构体(structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名称下的用户自定义数据类型。 由于其成员的类型可以不同,因此,用户必须先声明结构体类型,再根据结构体类型定义结构体变量来存放相应数据。,13,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体类型,结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-自定义数据类型 结构体类型定义格式
12、:,14,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,声明结构体类型,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构的组织形式,不分配内存,不能初始化,结构体类型定义的作用域,15,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,使用typedef定义数据类型的别名,功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;,类型定义语句关键字,已有数据
13、类型名,用户定义的类型名,例 typedef int INTEGER;,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名,16,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,声明一个新的类型别名的方法,1、按定义变量方法先写出定义体 如 int i; 2、将变量
14、名换成新类型名 如 int INTEGER; 3、最前面加typedef 如 typedef int INTEGER; 4、用新类型名定义变量 如 INTEGER i,j;,类型定义可嵌套,例 定义结构体类型 struct date int month; int day; int year; d;,例 定义结构体类型 struct date int month; int day; int year; DATE;,例 定义结构体类型 typedef struct date int month; int day; int year; DATE;,例 typedef struct club char
15、 name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub;,GROUP为结构体类型 PG为指向GROUP的指针类型, GROUP *pclub; struct club *pclub;,17,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的定义,先定义结构体类型,再定义结构体变量 一般形式:,第一种形式,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct
16、 student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2;,18,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的定义,定义结构体类型的同时定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员
17、名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,第二种形式,19,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的定义,第三种形式,直接定义结构体变量 一般形式:,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num; char name20; char sex; int age; float score; cha
18、r addr30; stu1,stu2;,用无名结构体直接定义变量,只能使用一次,不能再用该结构体定义变量名表列以外的其他变量,20,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体说明,结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,21,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的引用,引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值
19、给另一个结构体变量 结构体嵌套时逐级引用,成员(分量)运算符 优先级: 1 结合性:从左向右,引用方式: 结构体变量名.成员名,22,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的初始化,形式一,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200
20、Beijing Road”;,23,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的初始化,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式二,24,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,结构体变量的初始化,struct 类型标识符 成
21、员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式三,25,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-2 输出3门课平均成绩,【分析】 学生的基本信息包括学号、姓名、性别、地址、3门课程成绩、平均成绩,假设这个学生的3门课程的成绩分别为数学90分、英语80分、C语言85分,3门课程成绩用整型数组表示,平均成绩用浮点数表示。,26
22、,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/19,例8-2程序,/* LI8_2.c */ /* 声明结构体类型struct scoretype */ #include struct scoretype int score3; /* 3门课成绩 */ float average; /* 平均成绩 */ ; /* 声明结构体类型struct student */ typedef struct scoretype SCORE; struct student char num5; /* 学号 */ char name10; /* 姓名 */ char sex; /* 性别
23、: M-男,F-女 */ char *addr; /* 地址 */ SCORE a; /* 成绩 */ ; typedef struct student STUDENT;,int main() int i,sum=0; STUDENT s=“101“,“zhangjuan“, F,“Beijing“,90,85,80,0.0; for(i=0; i3; i+) sum+=s.a.scorei; /* 求总成绩 */ /* 求平均成绩 */ s.a.average=sum/5.0; /* 输出学生信息 */ printf(“num=%s,name=%s, sex=%c,addr=%s, aver
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电脑基础知识 2018年电脑基础知识第8章 结构体与共用体程序设计甘玲-文档资料 2018 电脑 基础知识 结构 共用 程序设计 文档 资料
链接地址:https://www.31doc.com/p-1891519.html