结构体与共用体程序设计甘玲

上传人:tia****nde 文档编号:67735080 上传时间:2019-01-08 格式:PPT 页数:136 大小:1.73MB
返回 下载 相关 举报
结构体与共用体程序设计甘玲_第1页
第1页 / 共136页
结构体与共用体程序设计甘玲_第2页
第2页 / 共136页
结构体与共用体程序设计甘玲_第3页
第3页 / 共136页
结构体与共用体程序设计甘玲_第4页
第4页 / 共136页
结构体与共用体程序设计甘玲_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《结构体与共用体程序设计甘玲》由会员分享,可在线阅读,更多相关《结构体与共用体程序设计甘玲(136页珍藏版)》请在金锄头文库上搜索。

1、第8章 结构体与共用体程序设计,C语言程序设计,2,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,本章内容,共用体,结构体类型与变量、结构体数组,自引用结构、动态内存分配、链表,结构体指针,位运算、位段,3,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,信息查询问题,数组是非常有用的一种数据结构,但它的所有元素的数据类型都必须相同。 但是,在现实生活中,将一组异型的数据看作一个整体也很重要。如: 对一个班的所有学生各课程按平均分排名。,假定输入某班30个学生信息(包括:学号、姓名、性别、5门课程成绩、平均分),要求按平均分由高到低输出该班

2、学生信息。我们该怎么做呢?,4,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,问题分析,例8-1 对一个班的学生成绩进行排名。 假定要求输入某班30个学生的信息(包括学号、姓名、性别、3门课成绩),求得平均成绩,要求按平均成绩由高到低输出该班学生信息。 【分析】 学生“学号”、“姓名”、“性别”使用字符型数据,几门课程的“成绩”使用整型数据,“平均分”使用实型数据,可以分别定义不同的变量来存放这几个类型的数据。如果要显示某个学生的信息,那么要找到该学生的信息就要从这几个变量中分别查找,并且还要同步移动数组元素位置,这给程序员带来了很多不便。,5,解析C程序设计(第2

3、版)第8章 结构体与共用体程序设计,2019/1/8,数组解决方式,int studentId30; /* 最多可以管理30个学生, 每个学生的学号用数组的下标表示*/ char studentName3010; int studentSex; int scoreMath30; /*数学课的成绩*/ int scoreEnglish30; /*英语课的成绩*/ int scoreComputer30;/*计算机原理课的成绩*/ int scoreC30; /*C语言课的成绩*/ int scoreTelecomm30; /*通信网的成绩*/ int aveage30; /*平均成绩*/,6,解

4、析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,数组解决方式,数据的内存管理方式,分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理,7,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,希望的内存分配,8,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,问题分析,在C语言中,允许用户自己构造一种新的数据类型,它的成员可以包括各种数据类型,这种数据结构就是结构体(structure),它相当于其他高级语言中的“记录”。结构体中的元素称为“成员”,在“记录”中称为“字段”,用来存储

5、所有“记录”的数据集合称为“数据库”。 结构体中的所有成员变量在内存中是连续存储的,结构体的内存空间大小为各成员内存空间大小之和。 本例声明一个结构体类型struct student,它包括:学号、姓名、性别、3门课成绩、平均成绩共5个成员。存放一个学生的信息定义一个结构体变量,要存放30个学生的信息就要定义一个结构体数组。,9,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,例8-1 实现代码,/* LI8_1.c */ #include /* 声明结构体类型 */ struct student char num5; /* 学号 */ char name10; /*

6、 姓名 */ char sex; /* 性别: 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;

7、/* 定义结构体数组 */ printf(“请输入该班学生人数n(n=30): “); scanf(“%d“, ,10,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,例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.nam

8、e, /* 求每个学生平均成绩 */ ,11,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,例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;

9、/* mc表示名次 */ printf(“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+); ,12,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,例8-1程序分析,本例程序定义了一个结构体类型student,并用它定义了包括3

10、0个元素的stu结构体数组和结构体变量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=

11、ap; ap=temp; 本程序涉及到结构体类型的声明、结构体变量和数组的定义、结构体成员的引用、结构体的赋值和输出等知识点。,13,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,结构体,结构体(structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名称下的用户自定义数据类型。 由于其成员的类型可以不同,因此,用户必须先声明结构体类型,再根据结构体类型定义结构体变量来存放相应数据。,14,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,结构体类型,结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-自定义数据

12、类型 结构体类型定义格式:,15,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,声明结构体类型,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构的组织形式,不分配内存,不能初始化,结构体类型定义的作用域,16,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,使用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 预编译时处理 编译时处理 简单字符置换 为已有类型命名,17,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,声明一个新的类型别名的方法,1、按定义变量方法先写出定义体 如 int

14、 i; 2、将变量名换成新类型名 如 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

15、club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub;,GROUP为结构体类型 PG为指向GROUP的指针类型, GROUP *pclub; struct club *pclub;,18,解析C程序设计(第2版)第8章 结构体与共用体程序设计,2019/1/8,结构体变量的定义,先定义结构体类型,再定义结构体变量 一般形式:,第一种形式,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号