- 4
- 0
- 约8.69千字
- 约 38页
- 2021-11-12 发布于北京
- 举报
C语言大学实用教程第8章 结构体与共用体哈尔滨工业大学计算机科学与技术学院苏小红mailto:sxh@hit.edu.cnsxh@hit.edu.cn本章内容结构体(结构structure) 、共用体(联合union)类型的定义结构体变量、结构体数组向函数传递结构体变量、结构体数组用结构体实现动态数据结构链表的概念及操作原理 选学内容从基本数据类型到抽象数据类型二进制数在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念基本数据类型在高级语言中引入了基本数据类型:整型、实型、字符型等基本数据类型不能方便的解决所有问题,有些语言(如PL/1)中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法用户自己构造数据类型-复合数据类型表示复杂的数据对象,典型的代表就是“结构体”,数组、指针也可算作此类抽象数据类型(Abstract Data Type,简称ADT)在复合数据类型基础上增加了对数据的操作类——跨时代的进步思考一个问题在程序里表示一个人(姓名、年龄、性别、……),怎么表示?想表示多个人呢?如何用计算机程序实现下述表格的管理? 表8-1 某学校学生成绩管理表学号姓名性别入学时间计算机原理英 语数 学音 乐1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587905… …6… …数组的解决方法int studentId[30]; /* 最多可以管理30个学生, 每个学生的学号用数组的下标表示*/char studentName[30][10]; char studentSex[30][2]; int timeOfEnter[30]; /*入学时间用int表示*/int scoreComputer[30];/*计算机原理课的成绩*/int scoreEnglish[30]; /*英语课的成绩*/ int scoreMath[30]; /*数学课的成绩*/int scoreMusic[30]; /*音乐课的成绩*/数组的解决方法int studentId[30] = {1,2,3,4,5,6};char studentName[30][10]={{令狐冲},{林平之}, {岳灵珊},{任莹莹}};char studentSex[30][2]={{男},{男},{女},{女}};int timeOfEnter[30] = {1999,1999,1999,1999};int scoreComputer[30] = {90,78,89,78};int scoreEnglish[30] = {83,92,72,95};int scoreMath[30] = {72,88,98,87};int scoreMusic[30] = {82,78,66,90}; 令狐冲男199911999林平之男21999岳灵珊女31999任莹莹女4……………………90837282789288788972986678958790……………………数组的解决方法数据的内存管理方式 分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理1234林平之岳灵珊任莹莹令狐冲男女女男199919991999199978897890927295838898877278669082希望的内存分配图 结构体的解决方法struct STUDENT { intstudentID; /*每个学生的序号*/ char studentName[10];/*每个学生的姓名*/ char studentSex[4]; /*每个学生的性别*/ int timeOfEnter; /*每个学生的入学时间*/ int scoreComputer; /*每个学生的计算机原理成绩*/ int scoreEnglish; /*每个学生的英语成绩*/ int scoreMath; /*每个学生的数学成绩*/ int scoreMusic; /*每个学生的音乐成绩*/ };struct STUDENT是一个类型struct STUDENT students[4];students[0].studentIDstudents[0].scoreComputer它们都是变量,一般称为结构的成员变量用户自定义的数据类型结构体:把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下,也称复合数据类型这种类型的变量占用相邻的一段内存单元共用体:把情形互斥但又逻辑相关的多种不同类型的变量组织在一起这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用agenumnamesexscoreaddr10010LiFunM1887.5Beiji
原创力文档

文档评论(0)