C语言讲义第07章-结构体与其他构造数据类型(原).ppt
《C语言讲义第07章-结构体与其他构造数据类型(原).ppt》由会员分享,可在线阅读,更多相关《C语言讲义第07章-结构体与其他构造数据类型(原).ppt(78页珍藏版)》请在三一办公上搜索。
1、第7章结构体与其他构造数据类型,C语言程序设计,主要内容,结构体 结构体数组的定义和引用 指向结构体的指针结构体与函数 复杂的结构体 链表 共用体 位域枚举类型 类型定义typedef 小结,7.1结构体,表 71学生信息表,7.1结构体,结构体类型的定义形式:struct 结构体类型名 数据类型 成员1;数据类型 成员2;数据类型 成员n;,7.1结构体,例如:表7-1对应的结构体类型定义可以是:struct stu_infochar no8;/*学号*/char name10;/*姓名*/char sex;/*性别*/int age;/*年龄*/char department20;/*院系
2、*/;,7.1结构体,结构体变量定义有以下三种形式:先定义结构体类型,再定义结构体类型变量 例如:在结构体类型定义完成后,再定义变量。struct stu_rec/*定义学生记录结构体类型*/char num8;/*学号*/char name10;/*学生姓名*/char sex;/*性别*/int score4;/*四科考试成绩*/;struct stu_rec student1,student2;/*定义结构体类型变量*/,7.1结构体,定义结构体类型的同时定义结构体类型变量例如:在定义结构体类型时定义变量。struct dateint year;int month;int day;myd
3、ate1,mydate2;,7.1结构体,直接定义结构体类型变量 例如:结构体类型定义时不指定类型名,而直接定义变量。struct char no8/*编号*/char name10;/*姓名*/char sex;/*性别*/float b_salary,f_salary,p_salary;/*基本工资、活工资、奖金*/person1,person2;/*定义该结构体类型变量*/,7.1结构体,结构体变量一旦进入其作用域,系统便根据结构体类型定义时成员排列的先后,自动为结构体变量的每一个成员分配相应的存储空间。结构体变量的各个成员均有自己的存储空间,结构体变量所占存储空间的大小为各成员所占空间
4、之和。例如:student1 所占空间大小为:8+10+1+4*2=27(字节)。mydate1所点空间大小为:2+2+2=6(字节)。person1所占空间大小为:8+10+1+3*4=31(字节)。,另外,还可以直接使用sizeof()关键字来计算结构体变量的大小。例如:printf(%d,%d n,sizeof(student1),sizeof(person1);该语句的输出结果为:27,31,7.1结构体,C语言中,对结构体变量的输入、输出、赋值和运算等操作一般都是通过结构体变量的成员引用来实现的。结构体变量的成员引用,可使用成员运算符“.”来引用。引用的形式为:.若定义的结构体类型及
5、变量如下:struct dateint day;int month;int year;today;则变量today各成员的引用形式为:today.day、today.month、today.year。,7.1结构体,结构体变量的初始化与一维基本类型数组的初始化方法相似。不同的是,对一维数组来说,是初始化数组元素(各元素类型相同),对结构体变量,则是初始化结构体成员(各成员类型可能不同)。,由于结构体类型变量可以汇集各类不同数据类型的成员,所以结构体类型变量的初始化必须在结构体类型变量定义时进行。例如:stu_info结构体类型定义如前所述,该类型变量的初始化形式为:struct stu_inf
6、o student=06050113,li ping,f,20,computer science;,7.1结构体,也可以使用标准的输入、输出函数完成对结构体类型变量成员的输入(赋值)、输出。由于结构体类型变量成员的数据类型通常是不一样的,用scanf同时输入不同类型的成员数据常常会出现意想不到的情况,解决的方法有以下两种:,7.1结构体,利用转换函数将结构体类型变量成员以字符串的形式输入,利用C的类型转换函数将其转换为所需类型。类型转换的函数是:atoi(char*str);将数字字符串转换为整型。atof(char*str);将数字字符串转换为双精度的实型。atol(char*str);将数
7、字字串转换长整型。使用上述函数,要包含头文件stdlib.h。,7.1结构体,例71类型转换函数在结构体变量数据输入中的应用示例。定义结构体类型及变量,输入一个学生的有关信息并输出。例71源程序,7.1结构体,利用简单变量 将结构体变量的成员的初始值用scanf()函数输入到简单变量中,再将其值赋给结构体成员变量。例72借助简单变量实现结构体变量的数据输入。例72源程序,7.2结构体数组的定义和引用,结构体数组的定义方法和基本型数组的定义方法相似,只需在定义数组时指明其数据类型为相应的结构体类型。结构体类型数组的定义形式为:struct 结构体名 数组名元素个数;例如:定义学生成绩结构体类型数
8、组。struct stu_scr/*定义学生成绩结构体类型*/char name10;/*学生姓名*/char sex;/*性别*/float score3;/*三科考试成绩*/;struct stu_scr student20;/*定义具有20个元素的结构体数组student*/,7.2结构体数组的定义和引用,由于结构体数组中的每一个元素相当于一个结构体变量,因此引用其数组元素的成员的一般形式为:结构体数组名下标.成员名 对于上述结构体数组student,其数组元素各成员的引用形式为:student0.name、student0.sex、student0.scorei;student1.na
9、me、student1.sex、student1.scorei;.student19.name、student19.sex、student19.scorei;,7.2结构体数组的定义和引用,可以对结构体数组进行初始化,初始化方法与二维基本型数组的初始化方式相似。初始化的格式为:Struct 结构体名 数组n元素初值1,元素初值2,.,元素初值n;例如:对二维基本型数组以及结构体数组的初始化。int a24=1,2,3,4,5,6,7,8;struct stu_scr myclass2=zhang san,f,89,90,99,li si,m,89,95,78;,7.2结构体数组的定义和引用,结
10、构体数组的输入与输出一般在循环结构中进行,一次循环可以输入或输出一条结构体记录。例73定义一个结构体数组用于存储和显示三个学生的基本信息。例73源程序程序运行结果如下:,no.name sex age depart06030217 zhang san m 19 Economy&Commerce06050105 li si m 18 engineering06010116 wang wu f 18 Computer science,7.3指向结构体的指针,指向结构体变量的指针变量的定义与指向基本类型的指针变量的定义一样。其一般定义形式为:Struct 结构体类型名*指针变量名 例如:定义指向结构
11、体变量的指针变量。struct stu_info*q;/*q为指针变量,指向结构体类型stu_info*/例如:在定义结构体类型时定义结构体指针变量。,7.3指向结构体的指针,struct stu_cj char no8;/*学号*/char name10;/*姓名*/float score4;/*3门课成绩及平均成绩*/stud,*p1,*p2;/*p1、p2为指针变量,指向结构体类型stu_cj*/系统为结构体变量分配存储空间后,结构体变量及成员都有自己的地址。例如:变量的地址:&stud 成员的地址:&stud.no、&stud.name、&stud.score0,7.3指向结构体的指针
12、,将一个结构体变量的起始地址赋给一个指针变量后,则指针变量就指向该结构体变量,可以通过该指针变量来引用结构体变量的成员,引用形式为:指针变量-成员;(*指针变量).成员;例如:指针变量p1,p2指向结构体变量x。p1=p2=例如:通过结构体指针p1和p2来引用结构体变量x成员。以下三种方式是等价的。x.no、x.name、x.score0p1-no、p1-name、p1-score0(*p2).no、(*p2).name、(*p2).score0,7.3指向结构体的指针,将结构体数组的起始地址赋予指针变量,则指针变量指向结构体数组,可以通过该指针变量访问数组元素。例74使用指向结构体数组的指针
13、来访问结构体数组例7.4源程序,7.4结构体与函数,结构体传递给函数的方式 向函数传递结构体变量的成员 向函数传递结构体变量 传递结构体变量的地址,7.4结构体与函数,结构体作为函数形参,函数的定义形式:传值方式:返回类型 函数名(struct 结构体名 形参名,)传引用方式:返回类型 函数名(struct 结构体名*形参名,)结构体作为函数实参,函数的调用形式:传值方式:函数名(结构体变量名,)传引用方式:函数名(结构体变量名,),7.4结构体与函数,例 75 用函数实现结构体类型数据的输入和输出。例 7.5源程序例 7.6 根据表7-2所示学生成绩表,定义相应的结构体类型,编程求解每门课的
14、平均成绩及每个学生的平均成绩。,7.4结构体与函数,表 72 学生成绩表,例 7.6源程序,7.5复杂的结构体,结构体成员可以是基本类型,也可以是其他构造类型的成员。结构体中还可以包含其他结构体。例如:结构体类型std_info中包含另一结构体类型date。struct date/*日期结构类型:由年、月、日三项组成*/int year;int month;int day;,7.5复杂的结构体,struct std_info/*学生信息结构类型:包括学号、姓名、性别和生日*/char no8;char name10;char sex;struct date birthday;,7.5复杂的结构
15、体,例如:结构体类型std_record中包含结构体类型std_info和score。struct score/*成绩结构类型:由学号和三门成绩共4项组成*/char no8;int score1;int score2;int score3;student std_record struct std_info stdxx;struct score cj;,7.5复杂的结构体,如果某成员本身又是一个结构类型,则只能通过逐级使用成员运算符引用结构体成员。对最低一级的成员进行引用格式为:结构变量.成员.子成员.最低级子成员,7.5复杂的结构体,例77多级结构体成员的引用。例77源程序,7.5复杂的结
16、构体,在结构体定义时,其成员定义为自身的结构体类型,这种方式称为结构体的自我引用。例如:结构体中包含指向自身的结构体指针。struct linkchar m;struct link*next;/*定义指向自身的结构体指针*/;struct link x,y,z;/*结构体变量的定义*/,7.6链表,链表结构 单链表结构如图所示。链表的基本操作有:创建、检索(查找)、插入、删除和修改等。,7.6链表,在C语言中,用结构体类型来描述链表结点结构。例如:struct link int data;/*数据域*/struct link*next;/*指针域*/;结构体类型中具有一个指向自身结构体类型的指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 讲义 07 结构 与其 构造 数据类型

链接地址:https://www.31ppt.com/p-6504322.html